Bonus: Preguntas sobre habilidades blandas
En este artículo hemos recopilado preguntas populares sobre Java y sus respuestas. Úsalas como ayuda para prepararte para las entrevistas. También les preguntamos a algunos expertos cómo prepararse para una entrevista para un puesto de desarrollador de Java.
Preguntas generales sobre Java
#1. ¿Cuál es el papel de Java en el desarrollo actual?
Hoy en día, Java es uno de los lenguajes de programación más populares. Se utiliza para desarrollar aplicaciones para sistemas corporativos, aplicaciones móviles y servicios web. Java también se utiliza activamente en el desarrollo científico. Por ejemplo, MATLAB, que se considera el lenguaje más popular para cálculos técnicos, está estrechamente integrado con Java.
#2. ¿Qué características tiene Java?
Java es independiente del sistema operativo en el que se ejecutará la aplicación. Esta es la principal idea del lenguaje: «Escribe una vez, ejecuta en cualquier lugar«. Esta característica se logra mediante el uso de bytecode y la máquina virtual JVM (Java Virtual Machine). El lenguaje también admite la programación orientada a objetos (POO), lo que facilita la escritura de código y su reutilización.
#3. ¿Qué tipos de aplicaciones se pueden crear con Java?
Con Java se pueden crear varios tipos de aplicaciones:
- Aplicaciones web: Con JSP/Servlets o frameworks modernos como Spring.
- Aplicaciones móviles: Principalmente para Android con Android SDK.
- Aplicaciones corporativas: Con la plataforma JEE (Java Enterprise Edition).
- Aplicaciones de escritorio: Con las bibliotecas Swing o JavaFX.
- Soluciones Big Data: Basadas en tecnologías como Apache Hadoop.
#4. ¿Cuál es la última versión de Java?
Java 23. Salió en septiembre de 2024. (actualiza esta información según la leas)
#5. ¿Cómo logra Java la independencia de la plataforma?
Java logra la independencia de la plataforma o del sistema operativo gracias a JVM (Java Virtual Machine) y al soporte de la programación orientada a objetos (POO). JVM es como una computadora universal para la cual el programador escribe código en Java.
Cuando un desarrollador compila código en Java, este se convierte en bytecode, un formato intermedio que se puede reproducir en cualquier sistema con JVM instalada. JVM interpreta el bytecode en código de máquina que corresponde a un sistema operativo específico.
#6. ¿Qué conceptos o principios de POO hay en Java?
Los conceptos principales incluyen:
- Encapsulación: Ocultar el estado interno del objeto y proporcionar acceso a él solo a través de métodos.
- Herencia: Mecanismo que permite crear una nueva clase basada en una existente.
- Polimorfismo: Capacidad de un solo interfaz para representar diferentes tipos.
- Abstracción: Destacar las características comunes de los objetos y ocultar los detalles de su implementación.
#7. ¿Cuáles son las ventajas y desventajas de la POO en comparación con la programación procedural/funcional?
Ventajas de la POO:
- Modularidad: Facilidad para gestionar proyectos grandes.
- Reutilización: Posibilidad de usar el mismo código en diferentes partes del programa.
- Soporte de abstracción: Proporciona un alto nivel de abstracción a través de clases y objetos.
Desventajas de la POO:
- Complejidad: Para los principiantes es más difícil dominar los conceptos de POO en comparación con el enfoque procedural.
- Rendimiento: Puede ser más bajo en comparación con otros métodos.
#8. ¿Qué es un constructor en Java?
Un constructor es un método que se llama al crear un nuevo objeto de una clase. Los constructores se utilizan para inicializar objetos.
#9. ¿Qué es una clase en Java?
Una clase es una plantilla para crear un objeto futuro. Una clase define la esencia de un objeto: su tipo, capacidades y comportamiento.
#10. ¿Qué clases no heredan de Object?
En Java, todas las clases heredan directa o indirectamente de la clase Object
, por lo que no hay una excepción estricta. Sin embargo, las clases internas, como los tipos primitivos (int, char, etc.), no son subtipos de Object.
#11. ¿Qué son las variables locales?
Las variables locales se encuentran dentro de métodos o bloques de código y existen solo durante la ejecución de estos métodos o bloques. No son accesibles fuera de su contexto de ejecución.
#12. ¿Cuáles son los especificadores de acceso para las clases Java?
En Java existen los siguientes especificadores (modificadores) de acceso:
- public: Accesible desde cualquier otra clase.
- protected: Accesible desde cualquier clase en el mismo paquete y subclases.
- default (package-private): Accesible solo dentro del mismo paquete.
- private: Accesible solo dentro de la misma clase.
#13. ¿Cuál es la diferencia entre una clase interna y una subclase?
Una clase interna (Inner Class) es una clase definida dentro de otra clase. Tiene acceso a los miembros de la clase externa, incluidos los campos privados.
Ejemplo:
public class ClaseExterna {
private int campoExterno;
class ClaseInterna {
void accederExterno() {
System.out.println(campoExterno);
}
}
}
public class ClaseExterna {
private int campoExterno = 5;
class ClaseInterna {
void accederExterno() {
System.out.println(campoExterno);
}
}
public static void main(String[] args) {
ClaseExterna externa = new ClaseExterna();
ClaseExterna.ClaseInterna interna = externa.new ClaseInterna();
interna.accederExterno(); // Imprime 5
}
}
Una subclase (Subclass) es una clase que hereda de otra clase (clase padre). La subclase hereda todos los miembros de la clase padre, pero no tiene acceso directo a los campos privados del padre.
Ejemplo:
public class ParentClass {
private int parentField;
}
public class ChildClass extends ParentClass {
void accessParent() {
// No tiene acceso directo a parentField
}
}
#14. ¿Qué patrones GoF se utilizan en Java?
Hay muchos patrones. En el libro de ingeniería de software «Design Patterns: Elements of Reusable Object-Oriented Software» de Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides, hay al menos 25 tipos. Estos son algunos de los que se utilizan en el desarrollo en Java:
- Singleton: Garantiza la creación de una única instancia de una clase.
- Factory Method: Proporciona una interfaz para crear objetos, pero permite que las subclases cambien el tipo de objetos que se crean.
- Observer: Permite a los objetos suscribirse y recibir notificaciones sobre el cambio de estado de otro objeto.
- Decorator: Agrega dinámicamente nuevos comportamientos a los objetos.
#15. ¿Cuál es la diferencia entre la agregación y la composición?
Agregación: Representa una relación «tiene un», donde un objeto puede existir independientemente del contenedor.
class Engine {}
class Car {
private Engine engine; // Agregación
}
Composición: Una forma más estricta de agregación, donde el ciclo de vida del componente depende del contenedor.
class Room {}
class House {
private Room room; // Composición
public House() {
this.room = new Room();
}
}
#16. ¿Cómo funciona la recolección de basura en Java?
La recolección de basura (Garbage Collection) en Java gestiona automáticamente la memoria y elimina los objetos que ya no utiliza la aplicación. Los algoritmos principales de GC incluyen:
- Marcado y barrido (Mark and Sweep).
- Copiado (Copying).
- Compactación (Compacting).
- Recolectores generacionales (Generational Collectors).
GC ayuda a evitar fugas de memoria y a optimizar el uso de recursos.
#17. ¿Qué es un applet de Java y cómo funciona?
Los applets de Java son pequeñas aplicaciones escritas en Java que se cargan y ejecutan en el contexto de un navegador web que admita applets o en un visor de applets especial. Tienen acceso a funciones gráficas y pueden interactuar con el usuario a través de una interfaz gráfica.
#18. ¿Cuál es la diferencia entre un applet de Java y una aplicación de Java?
Un applet de Java es una pequeña aplicación que se ejecuta en un navegador web o en un visor de applets.
Una aplicación de Java es una aplicación completa que se ejecuta en un servidor o en un dispositivo de usuario fuera del navegador.
Las principales diferencias entre un applet y una aplicación son:
- Entorno de ejecución. Los applets se ejecutan dentro de un navegador web o de un visor de applets; las aplicaciones se ejecutan directamente en JVM.
- Seguridad. Los applets funcionan en un entorno de pruebas con acceso limitado a los recursos del sistema; las aplicaciones tienen acceso completo al sistema.
- Métodos del ciclo de vida. Los applets tienen métodos específicos del ciclo de vida (init(), start(), stop(), destroy()), mientras que las aplicaciones no.
#19. ¿Cómo se carga un applet?
La carga de un applet incluye varias etapas:
- Carga de la página HTML con la etiqueta .
- Carga del archivo .class.
- Inicialización del applet a través de los métodos init(), start().
#20. ¿Qué ciclo de vida tiene un applet de Java, cómo se realiza la inicialización, el inicio, la detención y la limpieza de un applet de Java?
El ciclo de vida de un applet incluye las siguientes etapas:
init()
: Inicialización del applet, el applet realiza la configuración inicial. En este estado se cargan todos los recursos necesarios.start()
: Inicio o reinicio del applet después de detenerse, se llama inmediatamente después de init() o cada vez que el usuario regresa a la página con el applet. El applet comienza a funcionar o la reanuda después de haber sido suspendida.stop()
: Detención del applet cuando el usuario se desplaza a otra página o cierra el navegador. El applet suspende su funcionamiento, generalmente cuando el usuario abandona la página.destroy()
: Liberación de recursos antes de finalizar el applet, se ejecuta antes de que el navegador descargue el applet de la memoria. El applet libera todos los recursos antes de finalizar.
Preguntas sobre habilidades blandas
#21. ¿Qué crees que es mejor: llegar tarde pero hacerlo todo perfecto, o hacerlo a tiempo pero simplemente bien?
Esta pregunta está dirigida a evaluar tu prioridad entre la calidad y los plazos de entrega de las tareas. La respuesta ideal mostrará un equilibrio entre estos aspectos:
«Idealmente, trato de lograr un equilibrio entre la calidad del trabajo y el cumplimiento de los plazos de entrega de las tareas, porque ambos aspectos son importantes para el éxito de un proyecto».
#22. ¿Con qué frecuencia lees sitios web, blogs o libros del sector?
Esta pregunta ayuda al departamento de RR. HH. a comprender hasta qué punto estás involucrado en el tema y te apasiona. Piensa de antemano en la respuesta a la pregunta y reúne ejemplos de blogs y libros:
«Leo regularmente recursos como DZone, Stack Overflow y blogs de desarrolladores conocidos como Martin Fowler para mantener mis conocimientos y habilidades actualizados».
#23. ¿Por qué quieres trabajar con nosotros?
Esta pregunta está dirigida a comprobar tu motivación e interés por la empresa. Piensa qué es lo que te ha atraído: el ámbito de trabajo de la empresa, los proyectos que ha realizado o la vida corporativa que transmiten en el blog. En la respuesta a la pregunta es mejor no hablar de que quieres trabajar en la empresa por el alto salario o porque nadie más te ha llamado todavía:
«He estado siguiendo el blog de su empresa en las redes sociales durante mucho tiempo. Me atraen los proyectos que están llevando a cabo. El proyecto para {…} me impresionó mucho: siempre he querido trabajar en el ámbito social para ayudar a la gente. También sé que en su empresa trabaja {…}, el principal desarrollador de Java. Fui oyente en la conferencia en la que intervino y de inmediato comprendí que quería que fuera mi mentor».
#24. ¿Qué te ha atraído de nuestra vacante?
La respuesta a esta pregunta es más específica que la anterior. Aquí es importante demostrar que has estudiado atentamente la vacante y que serás útil al equipo:
«Su vacante ofrece tareas interesantes para mí, ya he trabajado con aplicaciones móviles, pero no en el ámbito de la medicina. También han indicado que el puesto ofrece la posibilidad de crecer profesionalmente. ¡Tengo ambiciones y esto me interesa!»
#25. Describe una situación en la que tuviste que adaptarte rápidamente a los cambios.
Esta pregunta revela tu flexibilidad y tu capacidad de adaptación. Habla de un proyecto o situación de tu vida laboral en la que hayas demostrado esto:
«Una vez, nuestro proyecto se reorientó bruscamente a una nueva plataforma una semana antes del lanzamiento. Pasamos a nuevas herramientas de desarrollo en poco tiempo gracias al trabajo en equipo».
#26. Habla sobre cómo has lidiado con conflictos dentro del equipo.
Esta pregunta se hace para evaluar tus habilidades para resolver conflictos. Demuestra calma y sensatez, da ejemplos:
«Los conflictos son inevitables en cualquier equipo. Cuando surgió un conflicto sobre los métodos de prueba de nuestro software, propuse celebrar una reunión para discutir abiertamente todos los aspectos del problema y encontrar una solución común».
La preparación para una entrevista es una tarea seria que requiere conocimientos del lenguaje de programación en el que planeas trabajar. Pero es igual de importante mostrar tus habilidades blandas, entre las que se encuentran el entusiasmo, el deseo y la capacidad de aprender. Anota las preguntas que no has podido responder y mejóralas. ¡Nunca se sabe demasiado!
Cómo prepararse para una entrevista para un puesto de desarrollador Java: consejos de expertos
El plan de preparación tanto para un desarrollador junior como para uno senior es bastante similar. Los temas que se preguntan en la entrevista a menudo se superponen.
La única diferencia es que a los desarrolladores junior se les hacen más preguntas sobre el propio lenguaje Java, mientras que de los desarrolladores senior se esperan conocimientos más profundos de los frameworks y tecnologías populares, así como la capacidad de diseñar la arquitectura de una aplicación teniendo en cuenta los requisitos no funcionales y la resistencia a fallos.
Se pueden destacar los temas principales que un desarrollador Java debe conocer:
- Java Core (conceptos y API básicas, características de las versiones principales de la 8 a la 21, JMM, Concurrency)
- Especificaciones principales de Java EE (Servlets, JPA, JTA)
- Spring, Hibernate
- Docker, opcionalmente K8S
- Maven/Gradle, Git
- Trabajo con bases de datos relacionales y/o NoSQL populares
- Implementación de API (REST, gRPC)
- Trabajo con sistemas de intercambio de mensajes (Kafka y/o AMQP)
- Conceptos básicos de DevOps y construcción de pipelines CI/CD
- Conceptos básicos de pruebas de software. JUnit, Mockito, BDD
- Patrones de diseño, comprensión de estructuras de datos y algoritmos básicos
- Conocimiento de metodologías de desarrollo de software
La lista de temas es bastante extensa y puede variar de una vacante a otra, pero un buen desarrollador debe conocerlas todas en mayor o menor medida. Si hablamos de consejos para la preparación de las entrevistas, recomendaría los siguientes enfoques:
- Abre 100-150 vacantes de desarrollador Java y escribe todas las palabras clave y tecnologías que encuentres. Puede parecer que hay muchas, pero en realidad se reducirán a unas 20, ya que más o menos todas las empresas utilizan el mismo stack. A continuación, simplemente estudia la documentación/artículos desconocidos para ti, para que en la entrevista puedas mostrar al menos tu comprensión de para qué sirve.
- Busca en español e inglés colecciones como «Top 100 preguntas en entrevistas sobre…«, luego simplemente sustituye una tecnología por otra. Si puedes responder de inmediato a la mayoría de estas preguntas, considera que has asimilado bien el tema.
- Existen plataformas para buscar mentores, donde especialistas experimentados, a menudo de forma gratuita, pueden realizar una simulación de entrevista. No debes desdeñar esta posibilidad.
Por último, debes esforzarte y acudir a entrevistas. No es necesario estudiar durante semanas toda la documentación posible sobre todas las herramientas y tecnologías. La entrevista es algo muy subjetivo y nunca se sabe qué te van a preguntar.
Recuerda que si no tienes la respuesta a alguna pregunta, no es motivo de pánico. Para el entrevistador no solo es importante obtener la respuesta correcta, sino también entender tu capacidad de aprendizaje y tu lógica de pensamiento. Por lo tanto, si no tienes una respuesta preparada, intenta razonar en voz alta y es posible que puedas llegar a la respuesta correcta por ti mismo. Y lo más importante: sé tú mismo. No tiene sentido indicar en tu currículum tecnologías que no dominas: esto se hará evidente durante la entrevista y es poco probable que te beneficie. Sé tú mismo y quizás seas el que están buscando. ¡Mucha suerte en las entrevistas!