Introdução: por que o Java não perdoa improvisos
\n\nVocê enviou seu currículo, passou pela triagem de RH e, pronto — um convite para a entrevista técnica. Se você está lendo este artigo no pythonlib.ru, significa que está migrando do Python para o Java ou apenas montando sua "base de conhecimento". De qualquer forma — você está no caminho certo.
\n\nJava não é uma linguagem onde se pode "passar" na base do carisma. O ecossistema corporativo exige compreensão clara: desde JMM (Java Memory Model) até como funciona o Garbage Collector. A entrevista de Java não é um exame, é um diálogo. Mas um diálogo onde sua resistência será testada.
\n\nNeste artigo, reuni um checklist real: o que estudar, como responder e — o mais importante — como não passar vergonha no live-coding. Sem enrolação, apenas prática.
\n\n1. Java Core: a base que você precisa saber de cor
\n\nVamos começar pelo básico. Sem Java Core, ninguém vai te ouvir. Aqui está a lista de tópicos que todo candidato deve saber:
\n\n1.1. POO (Programação Orientada a Objetos)
\nVocê precisa saber explicar polimorfismo, herança, encapsulamento e abstração de forma simples. E com exemplos.
\n\nPergunta-armadilha: "Qual a diferença entre classe abstrata e interface?"
\nResposta correta: no Java 8+, interfaces ganharam métodos default, mas classes abstratas podem conter estado (atributos), enquanto interfaces não.
\n\n// Exemplo: classe abstrata\nabstract class Animal {\n protected String name;\n abstract void makeSound();\n}\n\n// Interface com método default\ninterface Movable {\n default void move() {\n System.out.println("Moving...");\n }\n}\n\n1.2. Coleções (Java Collections Framework)
\nIsso é obrigatório. Saber HashMap, ArrayList, HashSet, TreeMap não é suficiente. É preciso entender:
\n- \n
- Como o HashMap funciona (array + lista encadeada + árvore rubro-negra desde o Java 8) \n
- A diferença entre iteradores fail-fast e fail-safe \n
- Quando usar LinkedList em vez de ArrayList (spoiler: quase nunca) \n
Dica: Na entrevista, podem pedir para você implementar seu próprio HashMap. Pratique com antecedência.
\n\n1.3. Exceções (Exceptions)
\nChecked vs Unchecked — clássico. Lembre-se: RuntimeException e seus subtipos são unchecked; todo o resto é checked. E nunca, ouça bem, nunca use catch (Exception e) {} — isso é um antipadrão.
2. Concorrência: o tópico onde 80% dos candidatos falham
\n\nJava é uma das poucas linguagens onde a concorrência é nativa. Na entrevista, certamente perguntarão sobre synchronized, volatile, AtomicInteger, Lock, Semaphore.
\n\n2.1. A palavra-chave volatile
\nPergunta principal: "O volatile garante atomicidade?" Resposta: não. Ele garante apenas a visibilidade das alterações entre threads.
\n\npublic class VolatileExample {\n private volatile boolean flag = true;\n\n public void stop() {\n flag = false; // Outra thread verá essa mudança imediatamente\n }\n}\n\n2.2. Deadlock e como evitá-lo
\nPodem pedir para você escrever um código que cause deadlock e, em seguida, corrigi-lo.
\n\n// Deadlock clássico\npublic class DeadlockExample {\n private final Object lock1 = new Object();\n private final Object lock2 = new Object();\n\n public void method1() {\n synchronized (lock1) {\n synchronized (lock2) { /* ... */ }\n }\n }\n\n public void method2() {\n synchronized (lock2) {\n synchronized (lock1) { /* ... */ }\n }\n }\n}\n\nSolução: sempre adquirir os locks na mesma ordem ou usar tryLock() do pacote java.util.concurrent.locks.