Pergunta de entrevista para Desenvolvedor Java

Como você rodaria três chamadas remotas independentes ao mesmo tempo e combinaria os resultados?

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

Resposta rápida

Ou você submete a um executor de virtual threads e faz join nos resultados, ou compõe com CompletableFuture usando supplyAsync num executor explícito e allOf para esperar. Coloque um timeout na operação combinada, trate a falha parcial de forma deliberada e cancele os irmãos quando um falhar. Structured concurrency com um task scope expressa exatamente esse formato e amarra o tempo de vida das subtarefas ao bloco, embora ainda seja uma API preview.

Por que os entrevistadores perguntam isso

Fan out e join é o formato de concorrência mais comum num serviço, e o entrevistador quer ver você tratando as partes sem glamour: em qual executor o trabalho roda, o que acontece quando uma chamada falha ou trava, e se as outras chamadas são canceladas. Saber que o pool assíncrono padrão é o common pool compartilhado, e por que fornecer o seu próprio executor importa, é o detalhe que separa uso real de uso de tutorial.

Como estruturar sua resposta

  • Escolha uma abordagem e diga onde as tarefas realmente rodam.
  • Combine os resultados e coloque um timeout geral.
  • Defina a política de falha parcial explicitamente.
  • Cite structured concurrency como o formato moderno mais claro.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Com virtual threads isso ficou simples: eu abro um executor que cria uma thread por tarefa, submeto as três chamadas e faço join em cada future. Ele lê como sequencial, mas as chamadas se sobrepõem, e cada uma tem o próprio timeout de cliente. Se estou numa base mais antiga eu uso CompletableFuture com supplyAsync, e sempre passo o meu próprio executor, porque o padrão é o common ForkJoinPool, que é dimensionado para trabalho de CPU e compartilhado por tudo no processo. Depois allOf para esperar, e um timeout no future combinado para que uma dependência travada não segure a requisição para sempre. A parte em que eu penso mais é a falha parcial: se a chamada de recomendações falha, eu falho a página inteira ou renderizo sem elas? Normalmente a resposta é degradar, então esse future ganha um handler exceptionally retornando uma lista vazia, enquanto as chamadas essenciais propagam. Structured concurrency expressa isso muito melhor, já que um scope faz join em todas as subtarefas e cancela o resto quando uma falha ou o prazo estoura, e eu uso onde uma API preview é aceitável.

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

  • Qual executor o supplyAsync usa se você não passar um?
  • Como você cancela as outras chamadas quando uma falha?
  • Qual é a diferença entre thenApply e thenCompose?

Mais perguntas para Desenvolvedor Java

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