dezembro 21, 2025
12 min de leitura

Perguntas para Entrevista de Desenvolvedor Backend Júnior (Python): Guia Completo

interview
career-advice
job-search
entry-level
Perguntas para Entrevista de Desenvolvedor Backend Júnior (Python): Guia Completo
Milad Bonakdar

Milad Bonakdar

Autor

Domine o desenvolvimento backend em Python com perguntas essenciais para entrevistas, abrangendo fundamentos de Python, Django/Flask, bancos de dados, APIs e muito mais. Preparação perfeita para entrevistas de desenvolvedor backend júnior.


Introdução

Este guia abrangente contém 30 perguntas essenciais para entrevistas, cobrindo desenvolvimento backend em Python. Estas perguntas são projetadas para ajudar desenvolvedores backend júnior a se prepararem para entrevistas, abordando conceitos-chave em Python, frameworks web (Django/Flask), bancos de dados e arquitetura backend geral. Cada pergunta inclui uma resposta detalhada, avaliação de raridade e classificação de dificuldade.

Se você está apenas começando sua carreira ou procurando mudar para o desenvolvimento backend, este guia o ajudará a construir confiança e dominar os fundamentos.


Fundamentos de Python (10 Perguntas)

1. Qual é a diferença entre list e tuple em Python?

Resposta:

  • list (lista): Mutável (pode ser alterada), definida com colchetes [], mais lenta que tuples.
  • tuple (tupla): Imutável (não pode ser alterada), definida com parênteses (), mais rápida que listas, pode ser usada como chaves de dicionário.

Exemplo:

# Lista
minha_lista = [1, 2, 3]
minha_lista[0] = 10  # Permitido

# Tupla
minha_tupla = (1, 2, 3)
# minha_tupla[0] = 10  # TypeError: 'tuple' object does not support item assignment

Raridade: Comum Dificuldade: Fácil


2. Explique a diferença entre is e ==

Resposta:

  • ==: Verifica a igualdade de valor (os objetos têm o mesmo valor?).
  • is: Verifica a igualdade de referência (as variáveis apontam para o mesmo objeto exato na memória?).

Exemplo:

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True (valores são os mesmos)
print(a is b)  # False (objetos diferentes na memória)

c = a
print(a is c)  # True (mesmo objeto)

Raridade: Comum Dificuldade: Fácil


3. O que são decorators em Python e como eles funcionam?

Resposta: Um decorator é um padrão de design em Python que permite ao usuário adicionar novas funcionalidades a um objeto existente sem modificar sua estrutura. Decorators são geralmente chamados antes da definição de uma função que você deseja decorar.

Exemplo:

def meu_decorator(func):
    def wrapper():
        print("Algo está acontecendo antes da função ser chamada.")
        func()
        print("Algo está acontecendo depois da função ser chamada.")
    return wrapper

@meu_decorator
def diga_ola():
    print("Olá!")

diga_ola()
# Saída:
# Algo está acontecendo antes da função ser chamada.
# Olá!
# Algo está acontecendo depois da função ser chamada.

Raridade: Comum Dificuldade: Média


4. Qual é a diferença entre args e kwargs?

Resposta:

  • *args: Permite passar um número variável de argumentos não nomeados para uma função. Ele os coleta em uma tupla.
  • **kwargs: Permite passar um número variável de argumentos nomeados para uma função. Ele os coleta em um dicionário.

Exemplo:

def funcao_exemplo(*args, **kwargs):
    print("args:", args)
    print("kwargs:", kwargs)

funcao_exemplo(1, 2, 3, nome="Alice", idade=30)
# Saída:
# args: (1, 2, 3)
# kwargs: {'nome': 'Alice', 'idade': 30}

Raridade: Comum Dificuldade: Fácil


5. Explique list comprehensions

Resposta: List comprehensions fornecem uma maneira concisa de criar listas. Aplicações comuns são para criar novas listas onde cada elemento é o resultado de algumas operações aplicadas a cada membro de outra sequência ou iterável, ou para criar uma subsequência desses elementos que satisfazem uma determinada condição.

Exemplo:

# Maneira tradicional
quadrados = []
for x in range(10):
    quadrados.append(x**2)

# List comprehension
quadrados = [x**2 for x in range(10)]

Raridade: Comum Dificuldade: Fácil


6. O que são generators e a palavra-chave yield?

Resposta: Generators são uma maneira simples de criar iteradores. São funções que retornam um objeto (iterador) sobre o qual podemos iterar (um valor por vez). A palavra-chave yield é usada como return, exceto que a função retornará um generator.

Exemplo:

def gerador_simples():
    yield 1
    yield 2
    yield 3

for valor in gerador_simples():
    print(valor)
# Saída: 1, 2, 3

Benefícios: Eficiência de memória (avaliação preguiçosa).

Raridade: Média Dificuldade: Média


7. Como funciona o gerenciamento de memória em Python?

Resposta: Python usa um espaço de heap privado para gerenciar a memória. Todos os objetos e estruturas de dados Python estão localizados em um heap privado. O programador não tem acesso a este heap privado. O interpretador cuida deste heap privado do Python. Python também possui um coletor de lixo integrado, que recicla toda a memória não utilizada para que ela possa ser disponibilizada ao espaço do heap.

Raridade: Média Dificuldade: Média


8. O que é o Global Interpreter Lock (GIL)?

Resposta: O Global Interpreter Lock (GIL) é um mutex que protege o acesso a objetos Python, impedindo que várias threads executem bytecodes Python ao mesmo tempo. Este bloqueio é necessário principalmente porque o gerenciamento de memória do CPython não é thread-safe.

Impacto: Limita programas Python multi-threaded a serem executados em um único núcleo de CPU, o que pode ser um gargalo para tarefas vinculadas à CPU.

Raridade: Média Dificuldade: Difícil


9. Explique a diferença entre deep copy e shallow copy

Resposta:

  • Shallow Copy (Cópia Superficial): Cria um novo objeto que armazena a referência dos elementos originais. Portanto, uma cópia superficial não cria uma cópia de objetos aninhados, em vez disso, apenas copia a referência de objetos aninhados.
  • Deep Copy (Cópia Profunda): Cria um novo objeto e adiciona recursivamente as cópias de objetos aninhados presentes nos elementos originais.

Exemplo:

import copy

original = [[1, 2, 3], [4, 5, 6]]
superficial = copy.copy(original)
profunda = copy.deepcopy(original)

original[0][0] = 'X'
print(superficial[0][0]) # 'X' (afetado)
print(profunda[0][0])    # 1 (não afetado)

Raridade: Média Dificuldade: Média


10. Quais são os tipos de dados integrados do Python?

Resposta:

  • Numérico: int, float, complex
  • Sequência: list, tuple, range
  • Texto: str
  • Mapeamento: dict
  • Conjunto: set, frozenset
  • Booleano: bool
  • Binário: bytes, bytearray, memoryview

Raridade: Comum Dificuldade: Fácil


Frameworks Web (Django/Flask) (10 Perguntas)

11. Compare Django e Flask

Resposta:

  • Django: Framework "com tudo incluído". Inclui ORM, autenticação, painel de administração, etc. Bom para aplicações grandes e complexas. Segue o padrão MVT (Model-View-Template).
  • Flask: Micro-framework. Minimalista, flexível. Você escolhe as ferramentas que deseja (ORM, autenticação, etc.). Bom para aplicativos menores, microsserviços ou quando você precisa de controle refinado.

Raridade: Comum Dificuldade: Fácil


12. O que é o padrão MVC (e MVT no Django)?

Resposta:

  • MVC (Model-View-Controller): Padrão arquitetural que separa um aplicativo em três componentes lógicos principais: o modelo (dados), a visualização (interface do usuário) e o controlador (processa entradas).
  • MVT (Model-View-Template): Variação do Django.
    • Model: Estrutura de dados (banco de dados).
    • View: Lógica de negócios (semelhante ao Controller no MVC).
    • Template: Camada de apresentação (semelhante à View no MVC).

Raridade: Comum Dificuldade: Média


13. Explique o Django ORM

Resposta: O Django ORM (Object-Relational Mapping) permite que você interaja com seu banco de dados, como SQLite, PostgreSQL e MySQL, usando código Python em vez de SQL. Você define seus modelos de dados como classes Python e o Django lida com a criação de tabelas de banco de dados e consultas.

Exemplo:

# Modelo
class Pessoa(models.Model):
    primeiro_nome = models.CharField(max_length=30)
    ultimo_nome = models.CharField(max_length=30)

# Consulta
Pessoa.objects.filter(primeiro_nome="John")

Raridade: Comum Dificuldade: Média


14. O que é uma migration no Django?

Resposta: Migrations são a maneira do Django de propagar as alterações que você faz em seus modelos (adicionar um campo, excluir um modelo, etc.) em seu esquema de banco de dados. Eles são projetados para serem quase automáticos, mas você precisará saber quando fazer migrations, quando executá-las e os problemas comuns que podem surgir.

Comandos:

  • makemigrations: Cria novas migrations com base nas alterações do modelo.
  • migrate: Aplica migrations ao banco de dados.

Raridade: Comum Dificuldade: Fácil


15. Como o Flask lida com o roteamento?

Resposta: O Flask usa o decorator @app.route() para vincular uma função a um URL.

Exemplo:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def ola_mundo():
    return 'Olá, Mundo!'

@app.route('/usuario/<nome_de_usuario>')
def mostrar_perfil_de_usuario(nome_de_usuario):
    return f'Usuário {nome_de_usuario}'

Raridade: Comum Dificuldade: Fácil


16. O que são Flask Blueprints?

Resposta: Blueprints são uma maneira de organizar seu aplicativo Flask em módulos. Eles permitem que você agrupe rotas, templates e arquivos estáticos relacionados. Isso é essencial para escalar aplicações Flask.

Raridade: Média Dificuldade: Média


17. Explique o conceito de Middleware no Django

Resposta: Middleware é um framework de hooks no processamento de requisição/resposta do Django. É um sistema de "plugin" leve e de baixo nível para alterar globalmente a entrada ou saída do Django. Cada componente de middleware é responsável por fazer alguma função específica.

Exemplos: AuthenticationMiddleware, SessionMiddleware, CsrfViewMiddleware.

Raridade: Média Dificuldade: Média


18. Como você lida com sessões no Flask?

Resposta: O Flask usa um cookie assinado para armazenar o conteúdo da sessão. O usuário pode ver o conteúdo do cookie, mas não pode modificá-lo, a menos que saiba a chave secreta usada para assinar.

Exemplo:

from flask import session

@app.route('/login', methods=['POST'])
def login():
    session['nome_de_usuario'] = request.form['nome_de_usuario']
    return redirect(url_for('index'))

Raridade: Média Dificuldade: Média


19. Qual é o propósito de settings.py no Django?

Resposta: settings.py é o arquivo de configuração principal para um projeto Django. Ele contém toda a configuração do projeto, incluindo configurações de banco de dados, aplicativos instalados, middleware, configurações de template, caminhos de arquivos estáticos e chaves de segurança.

Raridade: Comum Dificuldade: Fácil


20. Como você previne ataques CSRF no Django?

Resposta: O Django possui proteção integrada contra Cross Site Request Forgery (CSRF). Ele usa um token CSRF que é gerado para cada sessão de usuário. Este token deve ser incluído em cada requisição POST (geralmente como um campo de formulário oculto). O servidor verifica o token antes de processar a requisição.

Raridade: Média Dificuldade: Média


Banco de Dados & Backend Geral (10 Perguntas)

21. SQL vs NoSQL

Resposta:

  • SQL (Relacional): Dados estruturados, esquema predefinido, tabelas, linhas, colunas. Bom para consultas e transações complexas (ACID). Exemplos: PostgreSQL, MySQL.
  • NoSQL (Não Relacional): Dados não estruturados ou semiestruturados, esquema dinâmico, documentos, pares chave-valor. Bom para escalabilidade, prototipagem rápida e grandes conjuntos de dados. Exemplos: MongoDB, Redis.

Raridade: Comum Dificuldade: Fácil


22. O que é uma API?

Resposta: API significa Application Programming Interface (Interface de Programação de Aplicações). É um conjunto de regras e protocolos que permite que diferentes aplicações de software se comuniquem entre si. No desenvolvimento backend, normalmente construímos APIs RESTful ou APIs GraphQL para permitir que frontends (web, mobile) interajam com os dados e a lógica do backend.

Raridade: Comum Dificuldade: Fácil


23. Explique os princípios da API RESTful

Resposta:

  • Client-Server: Separação de preocupações.
  • Stateless: Nenhum contexto do cliente armazenado no servidor entre as requisições.
  • Cacheable: As respostas devem se definir como cacheáveis ou não.
  • Uniform Interface: Maneira padronizada de se comunicar (métodos HTTP: GET, POST, PUT, DELETE).
  • Layered System: O cliente não pode normalmente dizer se está conectado diretamente ao servidor final ou a um intermediário ao longo do caminho.

Raridade: Comum Dificuldade: Média


24. O que são códigos de status HTTP? Dê exemplos.

Resposta: Códigos de resposta padrão fornecidos por servidores web na internet.

  • 2xx Sucesso: 200 OK, 201 Created.
  • 3xx Redirecionamento: 301 Moved Permanently, 304 Not Modified.
  • 4xx Erro do Cliente: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found.
  • 5xx Erro do Servidor: 500 Internal Server Error, 502 Bad Gateway.

Raridade: Comum Dificuldade: Fácil


25. O que é indexação de banco de dados?

Resposta: Indexação é uma técnica de estrutura de dados usada para localizar e acessar rapidamente os dados em um banco de dados. Os índices são criados usando algumas colunas do banco de dados. Melhora a velocidade das operações de recuperação de dados em uma tabela de banco de dados ao custo de gravações e espaço de armazenamento adicionais para manter a estrutura de dados do índice.

Raridade: Média Dificuldade: Média


26. Explique o conceito de propriedades ACID em bancos de dados

Resposta:

  • Atomicity (Atomicidade): Todas as operações em uma transação são bem-sucedidas ou todas as operações são revertidas.
  • Consistency (Consistência): O banco de dados muda adequadamente os estados após uma transação confirmada com sucesso.
  • Isolation (Isolamento): Permite que as transações operem independentemente e transparentes umas às outras.
  • Durability (Durabilidade): Garante que o resultado ou efeito de uma transação confirmada persista em caso de falha do sistema.

Raridade: Média Dificuldade: Média


27. O que é Docker e por que ele é usado?

Resposta: Docker é uma plataforma para desenvolver, enviar e executar aplicações em containers. Containers são unidades leves, portáteis e auto-suficientes que incluem tudo o que é necessário para executar uma aplicação (código, runtime, ferramentas de sistema, bibliotecas). Ele resolve o problema de "funciona na minha máquina" e garante a consistência em diferentes ambientes (desenvolvimento, staging, produção).

Raridade: Comum Dificuldade: Média


28. O que é Teste Unitário?

Resposta: Teste unitário é um método de teste de software onde unidades ou componentes individuais de um software são testados. O objetivo é validar se cada unidade do código de software funciona como esperado. Em Python, o framework unittest ou pytest é comumente usado.

Raridade: Comum Dificuldade: Fácil


29. O que é Git e por que é importante?

Resposta: Git é um sistema de controle de versão distribuído. Ele rastreia as mudanças no código-fonte durante o desenvolvimento de software. Permite que vários desenvolvedores trabalhem no mesmo projeto simultaneamente, gerenciem diferentes versões do código (branches) e revertam para estados anteriores, se necessário.

Raridade: Comum Dificuldade: Fácil


30. Como você protege uma API backend?

Resposta:

  • Authentication (Autenticação): Verificar quem é o usuário (JWT, OAuth).
  • Authorization (Autorização): Verificar o que o usuário tem permissão para fazer (Funções/Permissões).
  • HTTPS: Criptografar dados em trânsito.
  • Input Validation (Validação de Entrada): Limpar todas as entradas para prevenir SQL injection e XSS.
  • Rate Limiting (Limitação de Taxa): Prevenir abuso/DDoS.
  • CORS: Restringir quais domínios podem acessar sua API.

Raridade: Média Dificuldade: Média

Newsletter subscription

Dicas de carreira semanais que realmente funcionam

Receba as últimas ideias diretamente na sua caixa de entrada

Destaque-se para Recrutadores e Conquiste o Emprego dos Seus Sonhos

Junte-se a milhares que transformaram suas carreiras com currículos impulsionados por IA que passam no ATS e impressionam gerentes de contratação.

Comece a criar agora

Compartilhar esta publicação

Faça Seus 6 Segundos Contarem

Os recrutadores escaneiam currículos por uma média de apenas 6 a 7 segundos. Nossos modelos comprovados são projetados para capturar atenção instantaneamente e mantê-los lendo.