Introducción: por qué Java no perdona las chapuzas
\n\nEnviaste tu currículum, superaste el filtro de RRHH, y aquí está: la invitación a la entrevista técnica. Si estás leyendo este artículo en pythonlib.ru, significa que o estás migrando de Python a Java, o simplemente estás recopilando tu "base de conocimientos". En cualquier caso, estás en el camino correcto.
\n\nJava no es un lenguaje donde puedas "colarte" con carisma. El ecosistema empresarial exige una comprensión clara: desde JMM (Java Memory Model) hasta cómo funciona el Garbage Collector. La entrevista de Java no es un examen, es un diálogo. Pero un diálogo en el que pondrán a prueba tu resistencia.
\n\nEn este artículo he recopilado una lista de verificación real: qué estudiar, cómo responder y, lo más importante, cómo no hacer el ridículo en el live-coding. Sin rodeos, solo práctica.
\n\n1. Java Core: el fundamento que debes aprender de memoria
\n\nEmpecemos por la base. Sin Java Core simplemente no te escucharán. Aquí tienes la lista de temas que todo candidato debe conocer:
\n\n1.1. POO (Programación Orientada a Objetos)
\nDebes ser capaz de explicar polimorfismo, herencia, encapsulación y abstracción de forma sencilla. Y con ejemplos.
\n\nPregunta trampa: "¿Cuál es la diferencia entre una clase abstracta y una interfaz?"
\nRespuesta correcta: en Java 8+, las interfaces pueden tener métodos default, pero una clase abstracta puede contener estado (campos), mientras que una interfaz no.
\n\n// Ejemplo: clase abstracta\nabstract class Animal {\n protected String name;\n abstract void makeSound();\n}\n\n// Interfaz con método default\ninterface Movable {\n default void move() {\n System.out.println("Moving...");\n }\n}\n\n1.2. Colecciones (Java Collections Framework)
\nEsto es imprescindible. Conocer HashMap, ArrayList, HashSet, TreeMap no es suficiente. Necesitas entender:
\n- \n
- Cómo funciona HashMap (array + lista enlazada + árbol rojo-negro desde Java 8) \n
- La diferencia entre iteradores fail-fast y fail-safe \n
- Cuándo usar LinkedList en lugar de ArrayList (spoiler: casi nunca) \n
Consejo: En la entrevista, pueden pedirte que implementes tu propio HashMap. Practica con antelación.
\n\n1.3. Excepciones (Exceptions)
\nChecked vs Unchecked: un clásico. Recuerda: RuntimeException y sus subclases son unchecked; todo lo demás es checked. Y nunca, ¿me oyes?, nunca uses catch (Exception e) {} — es un antipatrón.
2. Multihilo: el tema donde fracasan el 80% de los candidatos
\n\nJava es uno de los pocos lenguajes donde el multihilo está integrado a nivel de lenguaje. En la entrevista, seguro te preguntarán sobre synchronized, volatile, AtomicInteger, Lock, Semaphore.
\n\n2.1. La palabra clave volatile
\nLa pregunta clave: "¿Garantiza volatile la atomicidad?" Respuesta: no. Solo garantiza la visibilidad de los cambios entre hilos.
\n\npublic class VolatileExample {\n private volatile boolean flag = true;\n\n public void stop() {\n flag = false; // Otro hilo verá este cambio inmediatamente\n }\n}\n\n2.2. Deadlock y cómo evitarlo
\nPueden pedirte que escribas código que provoque un deadlock, y luego que lo corrijas.
\n\n// Deadlock clásico\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\nSolución: siempre adquirir los bloqueos en el mismo orden, o usar tryLock() del paquete java.util.concurrent.locks.