Saltar al contenido principal

10 preguntas de entrevista para desarrolladores de Java senior

high stack of bookshigh stack of books
Gaetano_Piazzolla.jpeg
autorIngeniero Líder de Software, EPAM Anywhere

En esta guía de preguntas de entrevista para desarrolladores senior de Java, el Entrevistador Técnico Java Certificado de EPAM Anywhere, Gaetano Piazzolla, comparte su opinión sobre las principales preguntas que se hacen, junto con respuestas de muestra y consejos que pueden ayudarte a prepararte para tu entrevista como desarrollador senior de Java.

1. ArrayList vs LinkedList

ArrayList y LinkedList son una de las estructuras más utilizadas en Java (desde Java 1.2) para tareas de desarrollo cotidianas. Como desarrollador senior de Java, debes ser capaz de profundizar en la comprensión de cómo funcionan estas estructuras y en qué se diferencian.

En primer lugar, debes saber que ambas implementan la interfaz List, una estructura abstracta diseñada para mantener el orden de los elementos insertados. La principal diferencia es que LinkedList además implementa la interfaz Deque, lo que permite a los desarrolladores usarla como una estructura estándar tipo FIFO (primero en entrar, primero en salir).

Los detalles internos de las dos colecciones difieren significativamente. Mientras que ArrayList se basa en un array de tamaño ajustable automáticamente, LinkedList utiliza punteros a los elementos siguientes y anteriores, construyendo una cadena de elementos para permitir el acceso a los datos. Esto significa que elegir la estructura correcta depende del caso de uso, ya que el rendimiento puede variar considerablemente en función de ello.

Una de las mejores preguntas de entrevista para desarrolladores senior de Java que he recibido en mis años como desarrollador de software fue implementar un ArrayList y un LinkedList desde cero, utilizando solo primitivas estándar de Java y sin utilizar las colecciones más avanzadas de Java. La mejor manera de prepararse para esta pregunta es descompilar el código JDK y ver qué hay dentro con tus propios ojos.

Puedes estar seguro de que JDK tiene la mejor implementación para el lenguaje Java. No te enfoques solo en qué estructura ya hecha es la mejor para una tarea específica. Los algoritmos y las estructuras de datos son la base de nuestro trabajo, así que prepárate para profundizar en esos conceptos.

2. REST vs SOAP

Desvelaré una de mis preguntas favoritas para hacer durante las entrevistas, especialmente con candidatos experimentados que probablemente hayan utilizado SOAP en proyectos heredados.

Es posible comparar estas dos tecnologías de servicios web desde diferentes perspectivas. Las diferencias teóricas, como "SOAP es un protocolo y REST no lo es", si bien ciertamente son interesantes, no tienen mucho valor cuando se trata de evaluar la experiencia real de un candidato. Algo que generalmente no se menciona durante las comparaciones y que puede ayudar a detectar si el candidato tiene experiencia real con ambas, es el uso de archivos WSDL (Web Service Definition Language).

Los archivos WSDL se utilizan normalmente para generar STUBs de comunicación en Java. ¿Existe alguna herramienta o tecnología que nos ayude a hacer lo mismo con puntos finales REST? La respuesta es sí, y se llama OpenAPI. Documentar los servicios web es una de las cosas más importantes que se deben hacer al proporcionar funcionalidad. ¡Asegúrate de saber cómo documentar tus APIs tanto con puntos finales Rest como SOAP!

encuentra tu trabajo ideal
Solo envíanos tu CV y nuestros reclutadores te contactarán con una opción a la medida
aplica ahora
icono de lupa

3. Merge vs rebase

Aún recuerdo los primeros años de programación como una pesadilla, cuando utilizábamos SVN en un equipo de 10 personas. El uso de Git mejoró las cosas, pero todos necesitábamos experiencia con él. Al principio, la falta de conocimiento hizo que pareciera peor.

Cuando no es posible fusionar dos ramas debido a conflictos, los desarrolladores tienen dos opciones: fusionar o hacer un rebase. Un rebase puede ser necesario cuando es importante mantener un historial Git limpio. Rebase significa mover la base de una rama por encima de la hoja de otra. En lugar de tener ramas que se cruzan varias veces, puedes tener un historial Git limpio, siempre y cuando todos sigan la regla de oro del rebase: nunca hagas un rebase en una rama pública.

Stashing es una herramienta poderosa para apartar el código que acabas de escribir, sin hacer un push a ninguna rama remota rastreada. Aunque es posible crear múltiples stashes al darles nombres diferentes, generalmente es mejor no tener más de un stash, ya que las cosas pueden volverse complicadas al restaurarlos. ¿Existe alguna diferencia entre crear una rama local de git y un stash de git? Encontrar una respuesta puede ser un excelente ejercicio para los candidatos.

4. Define la pirámide de pruebas y sus capas

La pirámide de pruebas es un concepto que nos permite verificar varios niveles del conocimiento de un candidato. Ser capaz de identificar todas las capas (pruebas unitarias, pruebas de integración, pruebas de interfaz de usuario) debería ser suficiente para un desarrollador junior, pero para candidatos más experimentados, es mejor asegurarse de que también hayan implementado algunas de ellas utilizando diferentes herramientas o tecnologías.

Junto a esta pirámide, generalmente es posible ubicar una segunda estructura más pequeña compuesta por pruebas de componentes, pruebas de carga o pruebas de rendimiento. No olvides mencionar también estas pruebas para obtener puntos adicionales en tu entrevista técnica.

5. ¿Cómo ordenar un HashSet de enteros?

Esta es una pregunta complicada, ya que por defecto, un Set es una estructura no ordenada. Así que la respuesta es simplemente no, a menos que utilicemos una estructura de datos adicional.

A partir de esta pregunta, es posible:

  1. Investigar el conocimiento del candidato sobre las colecciones de Java. TreeSet, LinkedHashSet y List son solo algunas de las posibles soluciones.
  2. Profundizar en las verificaciones internas del HashSet. ¿Por qué crees que los Sets son no ordenados? ¿Por qué se llama HashSet?

6. Describe una jerarquía de excepciones

La jerarquía de excepciones es un conocimiento esencial cuando se trata de utilizar frameworks como Spring o Spring Boot. La gran mayoría de las bibliotecas de Java definen y documentan con la mayor precisión posible una jerarquía de excepciones para los diversos casos de uso resueltos.

Esta abstracción es útil de varias maneras: en primer lugar, es posible capturar excepciones en varios niveles de la jerarquía, y en segundo lugar, es posible extender aún más la familia de excepciones con casos de uso peculiares y ad hoc.

Una pregunta relacionada adicional que se puede hacer se refiere al concepto de "barreras de falla", que animo a todo desarrollador senior de Java a comprender si aún no está familiarizado con la construcción.

7. Cómo identificar problemas de rendimiento en una aplicación?

Por lo general, los problemas de rendimiento son reportados por probadores o usuarios algún tiempo después de que una función ha sido enviada a producción. Identificar la causa raíz del problema puede ser difícil, por lo que esta es una buena pregunta de entrevista para candidatos experimentados.

El primer paso para identificar y resolver un problema de rendimiento es medir el rendimiento real del comportamiento. Solo entonces tiene sentido una optimización, de lo contrario, la mejora no se puede medir.

La identificación de la parte precisa de la lógica del negocio a optimizar puede realizarse manualmente insertando registros que midan el tiempo, o mediante el uso de herramientas de perfilado que desacoplen automáticamente las diversas partes del flujo midiendo el tiempo de ejecución.

Cuando se hace esta pregunta en una entrevista para desarrolladores senior de Java, los candidatos experimentados también pueden describir uno de los problemas de rendimiento más difíciles a los que se han enfrentado, o problemas triviales que se pueden evitar fácilmente adoptando una serie de buenas prácticas y manteniendo un ojo en el rendimiento durante todo el ciclo de desarrollo.

8. Cómo manejar datos enormes en la caché de Redis?

La primera reacción del candidato ante esta pregunta debería ser: "¿Tiene sentido tener datos enormes en Redis?" Una caché distribuida se construye principalmente para mejorar el rendimiento de una aplicación distribuida de microservicios. Junto con el límite físico de la RAM disponible para el host de Redis, existe un límite de software en un solo elemento de 512MB. Para almacenar una carga de datos enorme, deberíamos dividirlo en fragmentos y recuperar resultados, por ejemplo, utilizando el comando HGETALL. La compresión antes de almacenar los datos también podría ser una opción.

En general, Redis no fue diseñado para lograr esto. Recuperar grandes fragmentos de datos se ha señalado como una de las peores prácticas. Una solución mucho mejor podría ser almacenar el objeto de datos en una base de datos NoSQL estándar.

El objetivo de esta pregunta de entrevista es verificar la experiencia previa de los candidatos desarrolladores senior de Java, centrándose en cómo proponen nuevas soluciones en lugar de ceñirse al plan establecido.

9. Define AOP y su mayor problema

La programación orientada a aspectos (AOP) es una poderosa característica implementada en el framework Spring. Permite a los desarrolladores definir capas transversales a la lógica de negocios de una aplicación. Sus casos de uso más comunes son el registro de eventos, la autorización y la caché.

El mayor problema más común que el candidato debe tener en cuenta es la posible reducción de rendimiento al usar AOP, ya que utiliza reflexión internamente y la reflexión en Java no es gratuita (una llamada directa a los métodos es mucho más rápida). Esto puede hacer que la lógica de negocios sea un poco difícil de entender para alguien que está familiarizado con otro estilo de programación.

10. ¿Cuáles son las limitaciones de GET?

El método GET en HTTP debería utilizarse únicamente para recuperar recursos de un servidor web, sin alterar el estado de la aplicación de ninguna manera. Una excepción a esto es cuando se utiliza el almacenamiento en caché. En este caso, se puede tolerar una ligera modificación del estado de la aplicación.

Las limitaciones del método GET generalmente se refieren al hecho de que teóricamente no puede tener un cuerpo de solicitud, por lo que cada parámetro debe incluirse en la URL, y la URL tiene una longitud limitada (~2K caracteres). En la práctica, es posible enviar un cuerpo con el método GET, aunque esto no es una buena práctica y se debe evitar.

Con una disponibilidad de 2K caracteres, podemos estar seguros de tener toda la información necesaria para recuperar un recurso de un servidor web.

Cómo prepararse para su entrevista de desarrollador senior de Java

Para prepararte para tu enfrentamiento, navega a través de nuestra biblioteca de preguntas de entrevistas técnicas y echa un vistazo a los consejos y trucos compartidos por los entrevistadores técnicos de EPAM Anywhere.

Gaetano_Piazzolla.jpeg
autorIngeniero Líder de Software, EPAM Anywhere