50 Preguntas que debes responder antes de una entrevista de Java (Actualizado 2025) - Parte 1


Photo by The Jopwell Collection on Unsplash


Hace aproximadamente 6 años escribí un artículo, en el cual compilé una selección de las preguntas más comunes en las entrevistas técnicas de Java. Escribí dicho artículo en base a mi experiencia al buscar empleo como desarrollador de Java Senior.

Ahora estoy del otro lado de la mesa. Soy líder de un equipo de desarrollo de software. Aparte de liderar el desarrollo de software, tengo a mi cargo también la contratación de nuevos colegas para que trabajen conmigo, en mi equipo. De esta manera, tengo la experiencia de entrevistar y el privilegio de contratar a los programadores más expertos. De igual manera, las posibles preguntas de la entrevista técnica de Java son muy familiares para mí. 

En este artículo te comparto una lista de preguntas que te servirán como preparación para tu entrevista de Java. La lista ha sido actualizada para el 2025, para considerar los avances en las tecnologías (Java, SQL, docker, etc) en los últimos años. La lista cuenta también con todas las respuestas, así que la puedes utilizar como material completo para tu entrevista. Aprovéchala y muchos éxitos en tu búsqueda laboral.

 

CONOCIMIENTOS GENERALES SOBRE PROGRAMACIÓN

1.      ¿Qué es una clase? ¿Qué es un objeto? ¿Cuál es la diferencia entre ellos?

  • Clase: Una clase es una abstracción de objetos reales. Es un arquetipo, un modelo, un plano que sirve como base para construir diferentes objetos y contiene la definición de varios atributos, métodos o acciones que son comunes para cada objeto.
  • Objeto: Es una instancia específica de una clase. Tiene valores específicos para cada atributo.

2.      ¿Qué es el encapsulamiento?

El encapsulamiento significa que todos los valores de los atributos de un objeto específico están envueltos dentro del objeto y, por lo tanto, no son accesibles para objetos externos. El objetivo es asegurarse de que los datos "sensibles" estén ocultos a los usuarios. Esto se logra declarando los atributos como privados. Para permitir el acceso, se utiliza a través de métodos get/set.

Razones:

  • Mejor control de los atributos y métodos de la clase.
  • Las variables de clase pueden hacerse de solo lectura (si omites el método set) o de solo escritura (si omites el método get).
  • Flexible: el programador puede cambiar una parte del código sin afectar otras partes.
  • Mayor seguridad de los datos.

Fuente: W3schools

3.      ¿Qué es el polimorfismo?

El polimorfismo en programación es un principio fundamental de la programación orientada a objetos (OOP) que permite que una misma interfaz o método se comporte de diferentes maneras según el objeto que lo implemente o invoque.

El polimorfismo permite que un mismo método o función pueda tener diferentes comportamientos dependiendo del tipo de objeto que lo esté utilizando.

Tipos de polimorfismo

  • Polimorfismo en tiempo de compilación (sobrecarga): Ocurre cuando existen varios métodos con el mismo nombre pero diferente número o tipo de parámetros en la misma clase. Ejemplo en Java:
class Calculadora {
    int sumar(int a, int b) { return a + b; }
    double sumar(double a, double b) { return a + b; }
}

  • Polimorfismo en tiempo de ejecución (sobreescritura): Ocurre cuando una subclase redefine un método heredado de la clase padre para que tenga un comportamiento diferente. Ejemplo en Java:
class Animal {
    void hacerSonido() {
             System.out.println("Algún sonido...");
    }
}
 
class Perro extends Animal {
    void hacerSonido() {
        System.out.println("Guau guau");
    }
}
 
class Gato extends Animal {
    void hacerSonido() {
        System.out.println("Miau");
    }
}
 
public class Test {
    public static void main(String[] args) {
        Animal miAnimal = new Perro();
             miAnimal.hacerSonido(); // Imprime "Guau guau"
    }
}


PREGUNTAS SOBRE JAVA

4.      ¿Qué es una clase abstracta?

Una clase abstracta es una clase que no puede ser instanciada. Generalmente, sirve como un supermodelo para otras clases que heredan sus atributos y métodos. Proporciona una interfaz común que permite que las subclases se intercambien con todas las demás subclases.

5.      ¿Para qué se utiliza la palabra clave final?

La palabra clave final se utiliza para indicar que ciertos elementos no sufrirán más cambios. Puede aplicarse a una variable, un método o una clase. En cada caso, indica algo ligeramente diferente:

  • Variable final: El valor de la variable no cambiará; es decir, es una constante.
  • Método final: El método no puede ser sobrescrito por las subclases.
  • Clase final: La clase no puede ser heredada; es decir, no puede tener subclases.

Fuente: Javatpoint

6.      ¿Qué es una clase inmutable? ¿Cómo se crean en Java?

Una clase inmutable es una clase cuyas instancias no pueden ser modificadas. Se inicializa en el momento de la construcción y no puede modificarse posteriormente durante la ejecución del programa.

Son eficientes y seguras, además de ser seguras para hilos (thread-safe). Son especialmente útiles en aplicaciones concurrentes.

Para crear un objeto inmutable en Java, es necesario seguir las siguientes reglas:

  • Declarar la clase como final (para evitar que sea extendida).
  • Haz todos los campos private y final.
  • No proporcionar métodos setters (modificadores).
  • Inicializar todos los campos en el constructor.
  • Si existen campos mutables, es necesario devolverlos con una copia defensiva.

La biblioteca de inmutables permite crear clases inmutables de manera sencilla.

Más información: Escuela Spring

7.  ¿Qué es una interfaz? ¿Puedes crear el cuerpo de un método en una interfaz?

Una interfaz es un tipo de referencia en Java. Es una colección de métodos abstractos. Contiene solo la declaración de los métodos, pero su cuerpo se implementa en otra parte. Otra clase implementa la interfaz, heredando así los métodos abstractos. La clase implementadora contiene la definición de los métodos.

Normalmente no es posible crear el cuerpo de un método en una interfaz. El cuerpo del método debe crearse en la clase implementadora. Sin embargo, esta funcionalidad se ha añadido en Java 8 a través de los llamados Métodos Predeterminados (Default Methods).

8.      ¿Qué son los métodos predeterminados?

Los métodos predeterminados son métodos cuya implementación está presente en las propias interfaces. Solo están disponibles a partir de Java 8. Por lo tanto, un implementador no necesita anular los métodos de una interfaz (pero puede hacerlo).

9.      ¿Qué es la sobreescritura de métodos (method overriding)?

La sobreescritura de métodos es posible gracias a la herencia. Cuando tenemos una superclase con el método A, cada subclase que hereda de ella puede tener diferentes implementaciones del método, según las necesidades de la clase. En palabras simples: la sobreescritura de métodos está presente cuando una subclase proporciona la implementación específica del método que ha sido declarado por su clase padre. La sobreescritura de métodos debe cumplir tres criterios:

  • El método debe tener el mismo nombre en la superclase y en las subclases.
  • El método debe tener los mismos parámetros que en la clase padre.
  • Debe haber una relación IS-A (herencia).

La sobreescritura es posible a través de la anotación: @Override

Fuente: Oracle

10. ¿Puedes sobrescribir (override) el constructor de una clase?

No, los constructores no pueden ser sobrescritos.

11. ¿Qué es un constructor predeterminado de una clase?

Un constructor predeterminado es un constructor sin parámetros formales y sin cláusula throws, generado automáticamente por el compilador si no se ha especificado otro constructor.

Fuente: Oracle

12. ¿Puedes sobrescribir (override) métodos estáticos?

No. Cuando creamos un método estático en una subclase con el mismo nombre y parámetros que en la superclase, el método estático en la superclase queda oculto.

Fuente: Oracle

13. ¿Qué significa la sobrecarga de métodos (method overloading)?

La sobrecarga de métodos ocurre cuando tenemos múltiples métodos con el mismo nombre, pero diferentes parámetros. La sobrecarga puede ocurrir cambiando el número de argumentos o el tipo de datos.

Fuente: Javatpoint

14. ¿En qué consiste el patrón de diseño Singleton?

Singleton es un patrón de diseño que asegura que solo existe una única instancia de un objeto. Lo logra declarando un objeto estático de sí mismo dentro de la clase y haciendo que el constructor sea privado. Por lo tanto, la única forma de acceder a él es a través del objeto estático.

El patrón Singleton también pertenece a los patrones creacionales y se basa en la declaración de que la clase contiene una instancia estática de sí misma. Esta instancia puede accederse a través de un método estático llamado getInstance(). El constructor de esta clase debe ser privado. Por lo tanto, esta clase no puede ser instanciada, asegurando que solo exista un único objeto de esta clase en todo momento.

Fuente: Tutorialspoint

15. ¿Es posible utilizar Singleton de manera segura en entornos multihilo?

La implementación básica del patrón de diseño Singleton no es apropiada para entornos multihilo. No obstante, existen implementaciones de Singleton seguras en entornos multihilo. Éstas son:

ü  Bill Pugh Singleton: Conocido también como Holder Singleton. Utiliza una clase anidada, la cual es a su vez estática y privada. La clase anidada es la que inicializa el singleton.

ü  Enum Singleton: Implementación de Singleton que utiliza un enum, en lugar de una clase normal para su implementación. Al tratarse de un enum, no es posible que existan dos instancias haciendo esta implementación segura para entornos multihilo.

Fuentes: Baeldung, Tutorialspoint

16. ¿Qué es el patrón Factory?

El patrón Factory es un patrón de diseño en el cual, en lugar de usar el operador habitual new para crear objetos, creamos una clase especializada que maneja la creación de múltiples objetos. Para crear un nuevo objeto, utilizamos una clase Factory que se encarga de establecer los atributos y valores apropiados.

Fuente: Tutorialspoint

17. ¿Qué es el patrón Builder?

El patrón Builder es un patrón de diseño creacional que permite la construcción paso a paso de objetos complejos. Separa la construcción de un objeto de su representación, lo que permite que el mismo proceso de construcción cree diferentes representaciones. Sus características clave incluyen:

  • Construcción paso a paso: Los objetos se construyen de manera incremental, lo que permite un mayor control sobre el proceso de construcción.
  • Separación de responsabilidades: El patrón separa la lógica de construcción de la representación del objeto, haciendo que el código sea más limpio y fácil de mantener.
  • Encadenamiento de métodos: A menudo utiliza el encadenamiento de métodos (method chaining) para establecer diversos atributos del objeto que se está construyendo.

Este patrón es particularmente útil cuando un objeto requiere muchos parámetros o cuando el proceso de construcción es complejo.

18. ¿Es posible la herencia múltiple en Java?

Java no permite heredar de más de una clase para evitar problemas asociados con la herencia múltiple de estado. Sin embargo, Java permite la herencia múltiple de tipo, lo que significa que una clase puede implementar más de una interfaz. ​

Fuente: Oracle

19. ¿Qué es la composición en Java?

La composición define una relación de agregación en el sentido de que la clase "A" tiene una clase "B". Por ejemplo, la clase "Carro" tiene una clase "Rueda". En este sentido, uno de los atributos de una clase es otra clase.​

20. ¿Qué es una clase interna en Java?

Una clase interna, también llamada clase anidada, es una clase cuya declaración forma parte de la declaración de otra clase. Generalmente, hay dos tipos de clases anidadas: estáticas y no estáticas. Los beneficios de las clases anidadas incluyen: permiten el uso de modificadores de acceso dentro de la clase, haciendo posible crear clases privadas. Además, las clases internas tienen acceso a las variables privadas de la clase externa.

Fuente: Tutorialspoint

21. ¿Qué es una clase local en Java?

Una clase local es una clase definida dentro de un bloque. Por ejemplo, puedes definir una clase local en el cuerpo de un método, en un bucle "for" o en una cláusula "if".​

Fuente: Oracle

22. ¿Qué es una clase anónima? ¿Cuándo podemos usarla?

Una clase anónima es una clase local sin nombre. Es decir, una clase que se define en un bloque (como un "for", un método, un "if") y no tiene nombre. Las usamos solo si necesitamos utilizar una clase local solo una vez. Se recomienda usar clases anónimas cuando hay necesidad de declarar campos o métodos adicionales.

Fuente: Oracle-1Oracle-2

23. ¿Qué es la inyección de dependencias?

La inyección de dependencias es una técnica en la que se proporcionan a un objeto las dependencias que necesita en lugar de que él mismo las cree. Esto es especialmente útil para las pruebas, ya que permite simular o sustituir las dependencias. Las dependencias pueden inyectarse mediante diferentes métodos, como la inyección por constructor o por métodos setter. Además, existen frameworks especializados en inyección de dependencias, como Spring, que facilitan este proceso.

24. ¿Qué son los streams en Java?

Streams son una nueva abstracción introducida en Java 8 que permite el procesamiento funcional de colecciones de datos (como listas o arreglos) de forma declarativa y eficiente. Además, facilita el procesamiento paralelo de colleciones de datos y hace el código más legible y mantenible.

Entre las operaciones más comunes de los streams encontramos:

  • filter(Predicate<T>): filtra elementos.
  • map(Function<T, R>): transforma cada elemento.
  • sorted(): ordena los elementos.
  • limit(n): toma solo los primeros n elementos.
  • collect(Collectors.toList()): recolecta el resultado en una lista.
  • reduce(): combina los elementos en un único resultado.

25. ¿Qué son las funciones lambda en Java?

Característica de Java 8 que permite escribir funciones anónimas, es decir funciones sin un nombre específico.

Se definen con las sintaxis:

 

(argumentos) -> expresión

(argumentos) -> {

cuerpo de la función…

Return valor;

}

O más concretamente:

(x, y) -> x + y

 

Fuente: Escuela Spring



Sintonízate la próxima semana para la parte II de la preparación para la entrevista de Java.

Comments