Python tem um modo de falhar em entrevista bem particular: a linguagem é fácil o bastante para você ser produtivo sem nunca aprender o que ela faz por baixo, então as bancas montaram as perguntas justamente para achar essa lacuna. Espere ouvir por que uma busca em dicionário é rápida, o que um generator guarda na memória e o que a trava do interpretador realmente impede. Aqui estão as perguntas que não param de aparecer, o que cada uma investiga e como se constrói uma resposta forte.
Esses são os padrões da vaga em geral; se você quer a lista curta de uma entrevista específica, cole o anúncio real da vaga no Question Predictor gratuito e receba as vinte perguntas com maior chance de cair naquele processo.
O que as entrevistas para desenvolvedor Python realmente testam?
Se o seu entendimento vai além da sintaxe. Na prática isso significa cinco blocos: estruturas de dados e seus custos, avaliação preguiçosa (generators e iteradores), a história de concorrência incluindo a trava do interpretador, disciplina de tipagem e testes. Em volta de tudo isso está a qualidade do código, já que Python deixa você escrever algo que funciona e ainda assim é impossível de manter, e as bancas contratam contra esse risco.
A senioridade muda as perguntas menos do que você imagina; ela muda a profundidade das perguntas de acompanhamento. Um júnior é perguntado sobre o que é um generator; um sênior é perguntado como limitaria a memória com dez mil deles. Duas coisas mudaram recentemente: type hints agora são esperados em código profissional, e não tratados como enfeite, e a resposta decorada sobre a trava do interpretador está incompleta hoje.
Como é o processo de entrevista de Python?
Quatro a seis etapas, normalmente ao longo de duas semanas: uma triagem com recrutador, uma triagem de código, uma rodada prática mais longa, uma rodada de design ou code review e uma conversa comportamental. O domínio molda o processo, então times de web acrescentam perguntas de API e banco de dados, times de plataforma de dados acrescentam perguntas de pipeline e SQL, e times de machine learning acrescentam trabalho numérico por cima.
- Triagem com o recrutador (20 a 30 minutos). Stack, domínio, versões, faixa salarial. Tenha uma descrição de duas frases da coisa tecnicamente mais interessante que você já colocou no ar.
- Triagem de código (45 a 60 minutos). Um exercício em editor compartilhado, normalmente de parsing ou transformação, mais fundamentos rápidos sobre estruturas de dados e seus custos.
- Rodada prática (60 a 90 minutos). Estender uma base de código pequena, ou um desafio para casa seguido de uma discussão. Testes costumam ser avaliados, mesmo que o enunciado não diga isso.
- Rodada de design ou code review. Ou você desenha um serviço, ou revisa um módulo deliberadamente cheio de falhas e diz o que mudaria. O formato de review é popular porque é difícil de preparar.
- Gerente de contratação ou comportamental. Senso de dono, colaboração e se o nível que você diz ter se sustenta.
Se você já sabe com que empresa vai entrevistar, os bancos de perguntas por empresa dão uma leitura mais rápida do estilo da casa do que vasculhar fóruns.
Que perguntas sobre estruturas de dados em Python aparecem?
Espere justificar uma escolha entre list, dict, set e tuple, e declarar o custo da operação que você acabou de escrever. A banca está checando se você sabe que um teste de pertinência em uma list é linear e em um set é constante, o que está por trás de boa parte do Python lento por aí. Diga a complexidade em voz alta enquanto escolhe.
Como um dict é implementado e o que decorre disso? O que investiga: se a estrutura mais rápida da linguagem é uma caixa-preta para você. Cubra o hash da chave para achar um slot, endereçamento aberto para resolver colisões, redimensionamento quando a tabela enche e buscas em tempo constante em média que degradam com hashes ruins. Depois as consequências: as chaves precisam ser hasheáveis e devem ser imutáveis, e a ordem de inserção é garantida desde a 3.7.
Quando você escolhe um set em vez de uma list, e qual o custo? O que investiga: instinto para complexidade. Sets dão pertinência em tempo constante e deduplicação de graça, ao custo da ordenação e de exigir elementos hasheáveis. Converter uma list em set antes de um laço de testes de pertinência transforma um laço quadrático em linear.
O que os entrevistadores perguntam sobre generators e iteradores?
Perguntas sobre generators testam se você consegue trabalhar com dados que não cabem na memória. Espere explicar a diferença entre um iterável, um iterador e um generator, e depois reescrever algo eager como lazy. O sinal por baixo é se você pensa em memória, já que o estilo padrão de Python de montar listas funciona bem até o momento em que a entrada cresce.
Qual a diferença entre um iterável, um iterador e um generator? O que investiga: precisão sobre algo que a maioria usa todo dia sem nomear. Um iterável consegue produzir um iterador; um iterador guarda a posição e entrega o próximo item até levantar StopIteration; um generator é um iterador produzido por uma função com yield ou por uma generator expression.
Reescreva uma função que lê um arquivo de log de 50GB para uma list, de modo que ela não capote. O que investiga: avaliação preguiçosa na prática. Itere o objeto de arquivo linha a linha (já é lazy), entregue registros parseados com yield a partir de uma função geradora e mantenha só os agregados na memória.
Qual a diferença entre uma list comprehension e uma generator expression? O que investiga: se a distinção foi entendida ou a sintaxe apenas decorada. A comprehension monta a lista inteira na hora; a generator expression produz itens sob demanda e segura um de cada vez.
O que a pergunta sobre o GIL realmente testa?
Se você consegue escolher a ferramenta de concorrência certa para uma carga. A trava significa que só uma thread executa bytecode Python por vez em uma build padrão, então threads não te dão trabalho de CPU em paralelo, embora ainda ajudem quando as threads ficam esperando IO. A armadilha é o candidato que decorou que a trava deixa o Python lento e para por aí.
O que é a trava do interpretador e como ela afeta o seu código? O que investiga: exatidão. Seja específico: ela protege o estado do interpretador, é liberada durante IO e dentro de código de extensão que a solta (é por isso que bibliotecas numéricas usam múltiplos núcleos), e torna threads inúteis para paralelismo de CPU enquanto as mantém úteis para IO concorrente. Builds free-threaded já existem como opção, o que muda o tempo futuro da resposta sem mudar a maioria dos deploys de hoje.
Um job limitado por CPU leva 20 minutos. Como você o deixa mais rápido? O que investiga: se você consegue agir sobre a resposta anterior. Faça profiling primeiro para achar para onde o tempo realmente vai, depois considere um algoritmo melhor, depois vetorizar com uma biblioteca que libera a trava, depois múltiplos processos para usar vários núcleos, aceitando o custo deles em serialização e memória.
Threads, processos ou asyncio: como você escolhe? O que investiga: um modelo mental limpo. Asyncio para IO de altíssima concorrência, onde você controla o caminho da chamada e as bibliotecas são assíncronas. Threads para trabalho limitado por IO, onde as bibliotecas bloqueiam e o nível de concorrência é moderado. Processos para trabalho limitado por CPU.
Que perguntas sobre async aparecem em entrevistas de Python?
Rodadas de async testam se você entende escalonamento cooperativo. O event loop roda uma task até ela dar await, depois segue em frente, então qualquer coisa que bloqueia sem await para tudo. Espere perguntas sobre essa falha, sobre rodar muitas tasks ao mesmo tempo e sobre cancelamento e tratamento de erro, que é onde a maioria dos bugs reais de async mora.
O que acontece se você chamar uma função bloqueante dentro de uma corrotina? O que investiga: o conceito mais importante de async. O event loop fica travado durante todo aquele tempo, então todas as outras tasks esperam e o seu serviço de alta concorrência degrada para serial. Diga o conserto: use um cliente assíncrono ou empurre a chamada bloqueante para um executor de threads.
Como você roda cem requisições ao mesmo tempo e trata uma que falha? O que investiga: orquestração de tasks. Agrupar tasks com gather roda todas em paralelo, e por padrão a primeira exceção se propaga enquanto o resto continua sem await, a menos que você peça para as exceções serem retornadas. Prefira um task group para que as falhas cancelem as irmãs de forma previsível e nada fique órfão.
Como você limitaria a concorrência ao disparar dez mil requisições? O que investiga: se você já rodou isso em produção. Dez mil tasks de uma vez esgota sockets, inunda o alvo e produz uma rajada de timeouts que parecem um bug no seu próprio código. Use um semáforo ou um pool de workers consumindo de uma fila, coloque timeout em toda requisição e adicione retries com backoff.
Que perguntas sobre tipagem os entrevistadores de Python fazem?
Perguntas de tipagem testam disciplina, não curiosidades. As hints não são aplicadas em tempo de execução; elas são checadas por uma ferramenta separada no seu pipeline e lidas pelo seu editor e pelos seus colegas. As bancas querem ouvir que você roda um type checker na integração contínua e que tipa primeiro as fronteiras das funções.
O que os type hints realmente fazem em tempo de execução? O que investiga: se você conhece o limite. Essencialmente nada; eles ficam guardados como metadados e são ignorados pelo interpretador, e é por isso que uma função anotada para retornar um inteiro vai retornar uma string sem reclamar. O valor vem do checador estático e da legibilidade.
O que é um Protocol e quando você usaria um em vez de uma classe base? O que investiga: entendimento de tipagem estrutural. Um Protocol descreve o formato que algo precisa ter sem exigir herança, então ele tipa duck typing direito e funciona com classes que não são suas. Contraste com uma classe base abstrata, que obriga quem implementa a herdar.
Que perguntas sobre testes aparecem numa entrevista de Python?
Perguntas de teste muitas vezes decidem a nota do desafio para casa, então trate isso como assunto de primeira classe. As bancas querem testes rápidos e isolados, fixtures usadas para setup em vez de copiar e colar, casos parametrizados em vez de funções duplicadas e uma visão clara de quando um mock ajuda e quando ele está silenciosamente afirmando que o seu próprio mock funciona.
Como você estrutura uma suíte de testes com fixtures? O que investiga: se os seus testes são fáceis de manter. Use fixtures para setup e teardown no escopo apropriado, mantenha as compartilhadas em um arquivo conftest e parametrize casos que diferem só pela entrada.
Quando mockar é a escolha certa e quando é um mau cheiro? O que investiga: bom senso em testes. Mocke na fronteira que não é sua (uma API de terceiros, o relógio, um provedor de pagamento) e faça o patch onde o objeto é usado, não onde ele é definido, que é o erro mais comum.
Como você testa código que bate em um banco de dados? O que investiga: pragmatismo sobre integração. Prefira um banco de verdade em um contêiner descartável a um substituto em memória, porque trocar o motor significa que você nunca testa as queries que realmente vão para produção. Envolva cada teste em uma transação que dá rollback e mantenha a maior parte da suíte como testes unitários puros.
Que perguntas de internals e pegadinhas ainda são feitas?
Um punhado de clássicos aparece como calibragem: argumentos padrão mutáveis, decorators e como a memória é gerenciada. São rápidas, e a banca está mesmo checando se você já se queimou com elas, então grude uma consequência real em cada resposta em vez de recitar a regra de um tutorial.
Por que um argumento padrão mutável é perigoso? O que investiga: entendimento de quando os padrões são avaliados. O padrão é criado uma vez, quando a função é definida, não a cada chamada, então uma list como padrão é compartilhada entre todas as chamadas e vai acumulando.
Explique decorators e depois escreva um que dá retry em uma função. O que investiga: se funções de ordem superior são confortáveis para você. Um decorator é uma função que recebe uma função e devolve um wrapper. Preserve os metadados com functools.wraps e trate os argumentos de forma genérica. Para o retry, receba tentativas e backoff como parâmetros, capture só as exceções que valem retry e levante de novo depois da última tentativa.
Como o Python gerencia memória? O que investiga: consciência além de "existe um garbage collector". A contagem de referências libera objetos na hora em que a última referência some, e um coletor de ciclos cuida dos ciclos de referência que a contagem sozinha não resolve.
Que erros afundam candidatos de Python?
Raramente sintaxe. Candidatos perdem rodadas de Python produzindo código que funciona sem nunca dizer o que ele custa, pulando testes ou ficando calados enquanto pensam. As bancas estão comprando o seu raciocínio tanto quanto a sua função, então narre o trade-off e o caso de borda.
- Código que funciona sem custo declarado. Uma resposta correta sem menção a tempo ou memória passa a impressão de quem só trabalhou com entradas pequenas.
- Acertar pela metade a resposta sobre a trava do interpretador. "Python não faz concorrência" é errado, e a pergunta seguinte foi feita para separar a resposta decorada da resposta entendida.
- Pular os testes num desafio para casa. Se o enunciado é aberto, código sem teste costuma ser pontuado como incompleto, por mais elegante que seja.
- Ignorar tipos por completo. Fronteiras de função sem tipo em 2026 passam a impressão de quem nunca trabalhou numa base de código compartilhada.
Como você deve se preparar para uma entrevista de Python?
Escreva código num editor pelado, sem assistente, por algumas sessões, porque a triagem não vai ter um e a fluência cai rápido. Treine as quatro coisas que aparecem em quase todo processo: a complexidade das suas escolhas de estrutura de dados, converter código eager em lazy, escolher um modelo de concorrência e testar o que você escreveu. Depois prepare duas histórias, uma sobre um problema de performance e outra sobre uma discordância a respeito de qualidade de código.
Antes do processo em si, cole o anúncio real da vaga no Question Predictor gratuito e trabalhe as vinte perguntas que ele aponta para aquela vaga específica, já que um time de Django, um time de plataforma de dados e um time de machine learning fazem entrevistas bem diferentes sob o mesmo título de cargo.
Para as rodadas ao vivo, o GhostPilot é um copiloto de entrevista em tempo real: um painel lateral de extensão do Chrome e um app de desktop opcional para Windows que transcrevem a call, capturam a pergunta assim que ela cai e têm uma resposta estruturada pronta cerca de dois segundos depois. Ajuda mais nas perguntas com armadilha dentro, como a de concorrência. É um empurrão, não um roteiro, e o detalhe continua vindo do seu próprio trabalho. O plano gratuito te dá 10 minutos de entrevista ao vivo por semana, sem precisar de cartão.
FAQ de entrevista de Python
Quanto tempo devo me preparar para uma entrevista de desenvolvedor Python? Duas a três semanas se você escreve Python todo dia: uma semana em fundamentos e estruturas de dados, uma semana em concorrência, tipagem e testes, alguns dias nas histórias. Mais tempo se você nunca teve o seu código revisado, já que a rodada de review é onde isso aparece.
Entrevistas de Python ainda fazem perguntas de algoritmo? Empresas grandes costumam manter uma rodada de algoritmo, normalmente fácil ou média. Times menores migraram em boa parte para exercícios práticos e code review. De qualquer forma, saiba a complexidade das operações nativas em que você se apoia.
Preciso conhecer um framework específico? Se a descrição da vaga cita um, trate como tópico de primeira classe e espere perguntas sobre o ciclo de vida da requisição, o ORM e testes. Fora isso, fundamentos mais um framework que você consegue discutir a fundo já basta; uma lista rasa de cinco não impressiona ninguém.
Devo admitir quando não sei alguma coisa? Sim. "Não usei isso em produção, mas é assim que eu abordaria e é isso que eu checaria primeiro" ganha de uma resposta errada dita com confiança. Bancas de Python fazem perguntas de acompanhamento dois ou três níveis para baixo, então blefe desmorona rápido.