linguagem
Java
Entrevista de Java gosta de contratos e do runtime: por que sobrescrever `equals` sem `hashCode` quebra coleções baseadas em hash, o que o garbage collector faz e o que é uma pausa de GC, `checked` vs `unchecked exception`, e onde `final`, imutabilidade e `Optional` mudam o design.
Tópicos por senioridade
Desafios práticos
Cenários reais pra resolver em voz alta, como numa entrevista de verdade — não é múltipla escolha.
- Cenário: pausas de latência atribuídas ao garbage collector
Um serviço Java tem picos de latência (p99) que coincidem com atividade do garbage collector. Como você raciocina sobre a causa e o que ajusta?
Perguntas mais cobradas
ver todas →- Médio
Por que sobrescrever `equals` sem `hashCode` quebra o HashMap
HashMap acha o bucket por hashCode e só aí usa equals. equals sem hashCode → objetos iguais em buckets diferentes → não recupera, containsKey false.
- Médio
Checked vs unchecked exceptions
Checked: compilador força tratar/declarar (condição recuperável). Unchecked: erro de programação. Crítica: checked polui assinaturas e gera catch vazio.
- Difícil
Cenário: pausas de latência atribuídas ao garbage collector
Confirme com logs de GC qual geração/coletor. Causas: heap pequeno, churn de objetos, leak. Ajustes: heap maior, coletor de baixa pausa (G1/ZGC), menos alocação no hot path.
- Fácil
String imutável, o pool e `StringBuilder`
Imutável → chave de mapa segura, thread-safe, string pool. `s = s + x` num loop cria uma String nova copiando tudo a cada volta = O(N²). Use `StringBuilder` (append amortizado) ou `String.join`.
- Médio
`Optional`: para que serve e como NÃO usar
Sinaliza ausência esperada no RETORNO de um método, forçando tratar o vazio. Errado: como campo, como parâmetro, `Optional<List>`, e `.get()` sem checar (é o `!!` do Java).
- Médio
Streams do Java: preguiça e operações terminais
Intermediárias (filter/map/sorted) são preguiçosas e montam o pipeline; a terminal (collect/count/findFirst) dispara o processamento, elemento a elemento, com curto-circuito. Stream é de uso único; não mute estado externo no lambda.