Pergunta de entrevista para Desenvolvedor Python

Como você construiria um endpoint que precisa de dados de três serviços upstream lentos?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Chame os três concorrentemente em vez de em sequência. Num framework async, dispare os três com asyncio.gather ou um task group para a latência total ser a da chamada mais lenta, não a soma. Dê timeout a cada chamada, decida quais respostas são opcionais para poder degradar em vez de falhar, e faça cache do que for estável. Se o cliente tolerar, devolva um id de job.

Por que os entrevistadores perguntam isso

Essa é uma pergunta de design de sistemas vestida de Python. O entrevistador quer instintos de concorrência, mas mais do que isso quer pensamento de falha: timeouts em toda chamada de rede, degradação parcial, e o que o usuário vê quando uma dependência está fora. Candidatos que respondem só gather e param aí nunca rodaram nada que dependa de serviços fora do controle deles.

Como estruturar sua resposta

  • Transforme chamadas sequenciais em concorrentes.
  • Ponha timeout em toda chamada de saída.
  • Decida o que é opcional e degrade com elegância.
  • Adicione cache ou mova o trabalho para um job em background.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Em sequência aquelas três latências somam, então o primeiro movimento é rodar juntas. Com httpx e um handler async eu junto as três corrotinas num gather, ou uso um task group para uma falha cancelar as irmãs de forma limpa, e aí o endpoint custa aproximadamente o upstream mais lento em vez da soma. Toda chamada ganha um timeout explícito, porque o padrão na maioria dos clientes é efetivamente infinito e um socket travado vai esgotar o pool de workers. Depois eu decido o que é essencial. Se dois dos três são enfeite, eu coleto exceções em vez de levantar e renderizo a página sem eles em vez de devolver um quinhentos, e emito uma métrica para a gente saber que aconteceu. Qualquer coisa estável ganha cache, já que mesmo sessenta segundos de cache tiram a maior parte da carga. Se o cliente tolerar, o formato melhor é aceitar o request, enfileirar o trabalho e devolver um id de job para consultar, o que tira a latência dos upstreams do caminho do request por completo.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • O que acontece se um upstream travar além do seu timeout?
  • Como você propaga cancelamento por essas tasks?
  • Onde você colocaria um circuit breaker?

Mais perguntas para Desenvolvedor Python

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot