Pergunta de entrevista para Desenvolvedor Backend

Você roda seis instâncias de um serviço e precisa que um job noturno rode exatamente uma vez. Como você organiza isso?

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

Resposta rápida

Não confie em cada instância rodando um cron local. Use um lock de liderança, como uma linha ou chave adquirida com um lease e um tempo de vida, para que só quem o detém rode o job, ou delegue o agendamento a um cron no nível da plataforma que enfileira um job para um worker pegar. De qualquer forma, torne o job idempotente e observável, porque um lease pode expirar no meio da execução e causar sobreposição.

Por que os entrevistadores perguntam isso

É um problema pequeno de sistemas distribuídos com muitos modos de falha sutis. O entrevistador quer ver que você não suporia que agendadores em processo em instâncias idênticas disparam uma vez só, que sabe que locks precisam de expiração para sobreviver a uma queda, e que idempotência continua sendo a rede de segurança de verdade. Monitorar um job que parou de rodar em silêncio é o detalhe que a maioria dos candidatos deixa de fora.

Como estruturar sua resposta

  • Enuncie o problema: instâncias idênticas disparam cada uma o próprio timer.
  • Dê as duas abordagens viáveis, baseada em lock e agendada pela plataforma.
  • Cubra expiração de lease, sobreposição e recuperação de queda.
  • Adicione monitoramento para o job que nunca rodou.

Exemplo de resposta

Exemplo falado, em primeira pessoa

A versão ingênua roda seis vezes, e a versão em que uma instância especial é designada para de funcionar no dia em que essa instância fica com problema. Então eu ou uso um lock ou tiro o agendamento da aplicação por completo. Com lock, cada instância tenta adquirir um lease no horário agendado, tipicamente um insert ou um update condicional numa tabela de jobs com expiração, e só o vencedor roda, renovando o lease enquanto trabalha. A sutileza é que um lease pode expirar durante uma execução longa, e aí uma segunda instância começa, então o job ainda precisa ser seguro de rodar duas vezes. Minha preferência em qualquer escala é a segunda abordagem: agendamento no nível da plataforma que enfileira uma única mensagem, e workers comuns a consomem. Isso dá retries, visibilidade e histórico de graça, e o código da aplicação vira apenas um handler. De um jeito ou de outro, eu registro horários de início e fim e alerto quando um job não terminou dentro da janela esperada, porque um job que para de rodar em silêncio é a falha que as pessoas notam semanas depois.

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 o job demorar mais do que o intervalo entre execuções?
  • Como você tornaria idempotente um job de relatório noturno?
  • Como você lida com um job que precisa rodar uma vez por tenant em milhares de tenants?

Mais perguntas para Desenvolvedor Backend

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