Pular para o conteúdo
Hireaan

16 perguntas · Python sênior

Perguntas de entrevista para Desenvolvedor Python sênior

Perguntas para engenheiros Python experientes. Servem para encontrar quem entende como o Python executa de verdade, e não só como escrever uma list comprehension.

Python é fácil de escrever e difícil de escrever bem em escala, e é exatamente isso que uma entrevista sênior deve expor. Qualquer um responde o que é uma list comprehension. As perguntas interessantes tratam do que acontece quando o código cresce: como o GIL molda as escolhas de concorrência, por que trabalho pesado de CPU pede multiprocessing enquanto trabalho de I/O cabe em threads ou asyncio, e como um decorator ou um generator podem esclarecer ou quebrar em silêncio o código que depende deles.

Um bom candidato sênior já entendeu que o Python dá muita corda e sabe explicar quando escolheu não ser esperto. As perguntas abaixo estão agrupadas para você investigar o runtime, os recursos funcionais da linguagem, o trabalho real de desempenho e a disciplina que mantém um serviço Python sustentável enquanto cresce: testes, tipagem e um bom desenho de API, seja em Django, FastAPI ou Flask.

Para uma vaga sênior, combine uma pergunta de GIL ou concorrência com um cenário de profiling e uma pergunta de design ou API. Essa combinação separa quem já escalou Python em produção de quem só fez scripts e serviços pequenos. Procure quem mede antes de otimizar, sabe quando o asyncio ajuda e quando só complica, trata type hints e testes como parte da estrutura, e não como enfeite, e consegue contar uma vez em que fez de propósito uma escolha sem graça porque era a certa para o time.

Runtime, GIL e concorrência4 perguntas

  1. Explique o Global Interpreter Lock. Que problema ele resolve e quanto ele custa?

    O que observar: Que ele simplifica o gerenciamento de memória do CPython, impede que threads executem bytecode Python em paralelo e não atrapalha I/O. Saber que existe um modo experimental sem GIL a partir do Python 3.13 é um bônus.

  2. Quando você usaria multiprocessing, threading ou asyncio?

    O que observar: Multiprocessing para CPU, threads para I/O com bibliotecas bloqueantes e asyncio para muito I/O concorrente com bibliotecas assíncronas, com os custos de cada um.

  3. Como o asyncio consegue concorrência sem várias threads, e onde ele deixa de ajudar?

    O que observar: Um event loop com corrotinas que cedem o controle no await, e a armadilha de chamar código bloqueante ou pesado de CPU dentro dele.

  4. Você tem uma tarefa pesada de CPU que precisa ficar mais rápida. Quais são as suas opções em Python?

    O que observar: Medir primeiro, melhorar o algoritmo, vetorizar com NumPy, usar multiprocessing ou extensões em C, Cython ou Rust, nessa ordem de esforço.

Recursos da linguagem: decorators e generators4 perguntas

  1. Explique como um decorator funciona por baixo e dê um caso em que você escreveria um num código real.

    O que observar: Uma função que recebe e devolve outra função, o uso de functools.wraps e exemplos reais como retry, cache, log ou checagem de permissão.

  2. Qual é a diferença entre um generator e uma lista, e quando essa diferença importa para a memória?

    O que observar: Avaliação preguiçosa que produz um item por vez, útil para arquivos grandes e streams, e o detalhe de que um generator só pode ser percorrido uma vez.

  3. Como funcionam os context managers, e como você escreveria um sem o contextlib?

    O que observar: Os métodos __enter__ e __exit__, garantia de liberar recursos mesmo com exceção e o que significa __exit__ devolver True.

  4. Quanto *args e **kwargs custam em legibilidade, e quando eles são a escolha certa?

    O que observar: Que escondem a assinatura real e atrapalham a tipagem, e que fazem sentido em decorators, wrappers e repasse de argumentos.

Desempenho e design4 perguntas

  1. Um serviço Python está lento. Me explique como você faz o profiling antes de mudar qualquer coisa.

    O que observar: Ferramentas como cProfile, py-spy ou APM, olhar banco e chamadas externas primeiro e otimizar só o gargalo que os números apontam.

  2. Descreva um padrão de projeto que você usou em Python e um que evitou de propósito por ser excesso de engenharia.

    O que observar: Senso de proporção: padrões aplicados a um problema real e a coragem de dispensar camadas de abstração desnecessárias.

  3. Quando você usaria cache, e que falhas de cache você já enfrentou em produção?

    O que observar: Invalidação, dados desatualizados, cache que só cresce e avalanche de requisições quando o cache expira, com histórias reais.

  4. Como você decide se um trecho crítico deve ir para NumPy, para C ou ficar como está?

    O que observar: Decisão baseada em medição, no ganho real e no custo de manutenção, e não na vontade de otimizar.

Testes, tipagem e design de API4 perguntas

  1. Como você estrutura os testes de um serviço com dependências externas? O que você mocka e o que não mocka?

    O que observar: Mockar nas bordas (APIs de terceiros), testar o banco de verdade quando possível e evitar mocks que só repetem a implementação.

  2. Como type hints e o mypy mudam a forma de escrever e revisar Python em escala?

    O que observar: Contratos explícitos, erros pegos antes de rodar, refatorações mais seguras e adoção gradual sem virar burocracia.

  3. Como você desenharia uma API REST ou RPC limpa e versionada em Python, e como lida com mudanças que quebram compatibilidade?

    O que observar: Contratos claros com validação (como Pydantic ou serializers), versionamento, depreciação comunicada e período de convivência entre versões.

  4. O PR de um júnior funciona, mas é difícil de ler e não tem testes. Como você conduz o review?

    O que observar: Feedback específico e didático, priorizando o que importa, e transformar o review em aprendizado em vez de reescrever o código.

Dicas para a entrevista de Desenvolvedor Python sênior

  • Ancore as perguntas de concorrência em cenários reais. A resposta sobre o GIL só importa quando ligada à escolha entre trabalho de CPU e de I/O.
  • Valorize quem mede antes de otimizar. Adivinhar o gargalo é hábito de júnior.
  • Veja se a pessoa trata type hints e testes como estrutura, e não como enfeite. Isso indica experiência em escala.
  • Fique de olho no excesso de engenharia. Um sênior que cita um padrão que evitou costuma ser mais forte do que quem lista dez favoritos.
  • Peça uma escolha sem graça que a pessoa fez de propósito. Pragmatismo é um traço sênior que perguntas de decoreba nunca revelam.

FAQ

Perguntas frequentes

Qual é a diferença entre uma entrevista Python sênior e uma júnior?

As perguntas sênior investigam o runtime e os trade-offs (o GIL, o profiling, quando não usar um padrão), e não sintaxe e estruturas de dados básicas.

Quantas perguntas devo fazer?

De seis a oito, de duas ou três seções, são suficientes para uma entrevista técnica de 45 a 60 minutos e deixam espaço para aprofundar um tema.

Devo perguntar sobre o GIL?

Sim, mas sempre ligado a uma decisão real de concorrência. Um sênior deve explicar como o GIL influencia a escolha entre multiprocessing, threads e asyncio.

Desafio para casa é melhor do que programação ao vivo para Python?

Uma pequena refatoração ou uma tarefa de profiling costuma revelar mais do que um problema no quadro branco, porque reflete o trabalho de manutenção que a vaga envolve.

Como fazer a triagem de candidatos Python antes da entrevista?

Filtre os candidatos com um teste de habilidades para que as entrevistas ao vivo fiquem com engenheiros comprovados. Na Hireaan, os testes são corrigidos pela IA e os candidatos aparecem ranqueados por aderência à vaga.

Abriu a vaga de Desenvolvedor Python sênior? Rode o processo na Hireaan.

A IA ranqueia os candidatos, você agenda as entrevistas, aplica testes de habilidades e envia a proposta, com um preço fixo para o time inteiro.

  • 14 dias grátis
  • Sem cartão de crédito
  • Cancele quando quiser
  • Conforme a LGPD