22 perguntas · Java sênior
Perguntas de entrevista para Desenvolvedor Java sênior
Perguntas para engenheiros Java experientes sobre concorrência, JVM, memória, Spring e arquitetura. Servem para separar quem leu sobre Java de quem já o manteve rodando em produção.
Contratar um desenvolvedor Java sênior tem menos a ver com conferir se a pessoa conhece a sintaxe e mais com saber se ela entende o que acontece por baixo: como a JVM gerencia a memória, como as threads disputam recursos de verdade e como as decisões de design se comportam sob carga. Com cinco anos ou mais de estrada, um bom candidato explica não só o que uma ferramenta faz, mas quando ela morde.
As perguntas abaixo estão organizadas por tema, para você aprofundar onde mais importa na sua stack, que no Brasil quase sempre inclui Spring Boot e JPA. Elas foram pensadas para entrevistas de verdade: abertas o bastante para puxar uma conversa e específicas o bastante para que quem só decorou definições fique sem argumento rápido.
Combine algumas perguntas de linguagem com um cenário de concorrência e uma discussão de arquitetura e você terá uma leitura confiável da senioridade em menos de uma hora. Em cada resposta, procure quem pensa em trade-offs em voz alta, cita incidentes reais que depurou e consegue dizer “depende” e, em seguida, explicar do quê.
Linguagem e JVM7 perguntas
Me explique o que acontece na memória quando um objeto Java é criado e, depois, quando ele fica elegível para o garbage collector.
O que observar: Alocação no heap, referências na stack e a ideia de alcançabilidade: o objeto vira lixo quando nenhuma raiz (GC roots) chega mais até ele.
Qual é a diferença entre stack e heap, e onde ficam variáveis locais, objetos e campos static?
O que observar: Variáveis locais e referências na stack de cada thread, objetos no heap compartilhado e campos static ligados à classe, não às instâncias. Precisão sem pedantismo.
Como funcionam os coletores de lixo geracionais, e quando você ajustaria a geração jovem ou a antiga?
O que observar: Que a maioria dos objetos morre cedo, a diferença entre coletas menores e completas e que ajuste se faz a partir de logs e métricas de GC, não no chute. Citar G1 ou ZGC é um bônus.
Qual é a diferença entre == e .equals(), e por que é preciso sobrescrever hashCode() quando se sobrescreve equals()?
O que observar: O contrato entre os dois: objetos iguais precisam ter o mesmo hash, senão HashMap e HashSet passam a se comportar de forma errada.
Quando você escolheria um ArrayList em vez de um LinkedList, e qual é o impacto real no desempenho?
O que observar: Que o ArrayList vence quase sempre, por localidade de memória e acesso por índice, e que a vantagem teórica do LinkedList raramente aparece na prática.
Explique exceções checadas e não checadas e a sua filosofia sobre quando usar cada uma.
O que observar: Uma posição fundamentada, por exemplo checadas para falhas recuperáveis que o chamador deve tratar, e consciência de como elas atrapalham lambdas e streams.
O que a palavra-chave volatile garante, e o que ela não garante?
O que observar: Visibilidade e ordenação entre threads, mas não atomicidade: um count++ num campo volatile continua sujeito a condição de corrida.
Concorrência e multithreading6 perguntas
Descreva uma condição de corrida que você mesmo depurou e como resolveu.
O que observar: Um caso real, com sintoma, causa e correção. Quem só tem teoria costuma recorrer ao exemplo de livro da conta bancária.
Quando você usaria um ConcurrentHashMap em vez de um HashMap sincronizado, e como ele consegue mais throughput?
O que observar: Que ele evita um lock global, com travas finas e leituras sem bloqueio, e o uso de operações atômicas como computeIfAbsent e merge.
Qual é a diferença entre synchronized, ReentrantLock e as classes Atomic? Quando cada um se encaixa?
O que observar: O synchronized pela simplicidade, o ReentrantLock quando precisa de tryLock, timeout ou fairness, e as classes Atomic para contadores e trocas simples sem lock.
Que problema o ExecutorService resolve em comparação com criar threads manualmente?
O que observar: Reaproveitamento e limite de threads, fila de tarefas, Futures e encerramento ordenado. Mencionar as virtual threads do Java 21 e quando elas mudam a conta é um bônus.
Como você diagnosticaria um deadlock num serviço rodando em produção?
O que observar: Ferramentas concretas, como thread dump com jstack ou jcmd, ler quais locks cada thread segura e espera, e a correção pela ordem consistente de aquisição.
O que é o Java Memory Model e por que ele importa para a visibilidade entre threads?
O que observar: A relação happens-before e o motivo de uma thread poder não enxergar a escrita de outra quando não há sincronização.
Frameworks e ecossistema4 perguntas
Como a injeção de dependência do Spring funciona por baixo, e qual é a diferença entre os escopos singleton e prototype?
O que observar: O contexto da aplicação criando e ligando os beans, o papel dos proxies e o cuidado de não guardar estado mutável em beans singleton.
Explique o problema de N+1 consultas no JPA/Hibernate e como você o detecta e corrige.
O que observar: Olhar o SQL gerado (logs, contagem de consultas) e corrigir com fetch join, entity graph ou batch fetching, sabendo o custo de cada opção.
Quando você usaria programação reativa (WebFlux) em vez da stack tradicional de servlets, e qual é o custo?
O que observar: Que o modelo reativo ajuda com muito I/O concorrente, mas cobra em complexidade, depuração e compatibilidade com bibliotecas bloqueantes.
Como você organiza uma aplicação Spring Boot para que ela continue testável à medida que cresce?
O que observar: Módulos com dependências claras, injeção por construtor, regra de negócio fora dos controllers e testes de integração com fatias do contexto ou Testcontainers.
Arquitetura e julgamento5 perguntas
Desenhe um rate limiter para uma API. Explique as estruturas de dados e os modos de falha.
O que observar: Um algoritmo como token bucket ou janela deslizante, onde guardar o estado (memória ou Redis) e o que acontece quando esse estado fica indisponível.
Como você deixaria mais rápido um serviço Java lento? O que mede primeiro?
O que observar: Medir antes de mexer: latência por endpoint, profiler (JFR, async-profiler), consultas ao banco e pausas de GC. Só depois otimizar o gargalo real.
Me conte sobre uma vez em que você discordou de uma decisão de arquitetura. O que você fez?
O que observar: Argumentos com dados, respeito à decisão final e foco no resultado do time, sem tom de vítima.
Como você decide o que cobrir com teste unitário e o que cobrir com teste de integração num serviço Java?
O que observar: Regra de negócio isolada em testes unitários e integração para banco, filas e contratos, com atenção ao custo e à velocidade da suíte.
Um desenvolvedor júnior abre um PR com um bug sutil de thread safety. Como você conduz o code review?
O que observar: Explicar o problema com didática, sugerir a correção e transformar o caso em aprendizado, sem humilhar nem reescrever o código por conta própria.
Dicas para a entrevista de Desenvolvedor Java sênior
- Prefira perguntas de cenário (“me conte sobre uma vez em que…”) a perguntas de decoreba. O sinal de senioridade vem da experiência vivida, não de definições.
- Deixe a pessoa pensar em voz alta na pergunta do rate limiter. O raciocínio importa mais do que a resposta “certa”.
- Se o candidato disser “depende”, valorize e pergunte do que depende.
- Aprofunde um tema em vez de passar por dez de raspão. A profundidade revela a senioridade mais rápido.
- Desconfie de quem culpa os times anteriores por tudo. Seniores de verdade assumem a sua parte nas falhas.
FAQ
Perguntas frequentes
Quantas perguntas fazer para um candidato Java sênior numa entrevista?
De seis a oito são suficientes para uma entrevista técnica de 45 a 60 minutos. Aprofundar poucas perguntas com bons acompanhamentos dá uma leitura muito melhor do que correr por vinte superficiais.
O que diferencia uma resposta sênior de uma resposta de nível pleno?
O pleno explica como um recurso funciona. O sênior explica quando ele quebra, quais trade-offs pesou e quais incidentes reais depurou em produção.
Devo incluir um exercício de programação ao vivo?
Um exercício curto e realista, ou um desafio para casa revisado junto com a pessoa, revela mais do que quebra-cabeças de algoritmo. Combine com as perguntas de discussão para avaliar julgamento, e não só digitação.
Estas perguntas servem para quem tem três anos de experiência?
As seções de linguagem e de concorrência funcionam bem a partir de três anos, ou seja, para vagas de nível pleno. As perguntas de arquitetura foram calibradas para cinco anos ou mais e para posições sênior ou de liderança técnica.
Como fazer a triagem de candidatos Java antes da entrevista?
Use um teste de habilidades curto ou perguntas de triagem na candidatura para filtrar quem tem experiência real com concorrência e frameworks antes de gastar tempo de entrevista. Na Hireaan, você monta essas perguntas no formulário da vaga, aplica testes corrigidos pela IA e vê os candidatos ranqueados por aderência.
Mais bancos de perguntas de entrevista
- JavaScriptPerguntas para Desenvolvedor JavaScriptSaiba mais
- Node.jsPerguntas para Desenvolvedor Node.jsSaiba mais
- PHP / LaravelPerguntas para Desenvolvedor PHP / LaravelSaiba mais
- Python júniorPerguntas para Desenvolvedor Python júniorSaiba mais
- Python sêniorPerguntas para Desenvolvedor Python sêniorSaiba mais
- QAPerguntas para Analista de QA e automação de testesSaiba mais
Abriu a vaga de Desenvolvedor Java 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
