Pregunta de entrevista para Desarrollador Java

Las peticiones a un endpoint se quedan colgadas para siempre mientras el resto del servicio va bien. ¿Cómo lo diagnosticas?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Toma un volcado de hilos con jstack o jcmd, idealmente dos separados por unos segundos, y mira los hilos atascados. La JVM detecta los ciclos de locks e imprime directamente una sección de deadlock a nivel de Java. Si no hay ciclo, probablemente los hilos están bloqueados esperando un recurso como un pool de conexiones o una lectura de socket sin timeout. Se arregla ordenando los locks de forma consistente, reduciendo la sección crítica, o añadiendo timeouts.

Por qué lo preguntan los entrevistadores

El entrevistador quiere saber si puedes depurar una JVM viva y no solo leer código. Tirar de un volcado de hilos de inmediato, y saber que la JVM te nombra el deadlock, es la señal de credibilidad. También indagan en la prevención: orden consistente de locks, tryLock con timeout, y nunca hacer una llamada remota sosteniendo un lock, que es como se crean de verdad la mayoría de los deadlocks reales.

Cómo estructurar tu respuesta

  • Toma varios volcados de hilos y compara qué está atascado.
  • Busca la sección de deadlock, y luego los estados blocked y waiting.
  • Distingue un ciclo de locks de una falta de recursos o de un timeout ausente.
  • Da las reglas de prevención que aplicas en el código.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Lo primero es un volcado de hilos, y tomo dos o tres separados por unos segundos para distinguir lo que está de verdad atascado de lo que solo está ocupado. La JVM hace buena parte del trabajo aquí: si dos hilos sostienen el monitor del otro, imprime una sección de deadlock a nivel de Java nombrando ambos hilos y ambos locks, y luego las trazas me dicen exactamente qué métodos mirar. Si no hay ciclo, el patrón suele ser distinto: docenas de hilos en estado waiting sobre el mismo pool de conexiones, lo que significa que algo está reteniendo conexiones y no un deadlock clásico, o hilos bloqueados en una lectura de socket sin timeout configurado, que se cuelga indefinidamente cuando el otro extremo deja de responder. Para prevenirlo tengo unas cuantas reglas. Los locks se adquieren en un orden consistente, y documento ese orden cuando hay dos. Mantengo la sección crítica lo más pequeña posible y nunca hago una llamada de red ni publico un mensaje sosteniendo un lock. Y donde el diseño lo permite uso tryLock con timeout, así la contención degrada a un error manejado en vez de a un cuelgue.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Cómo obtienes un volcado de hilos de un contenedor sin shell?
  • ¿Cuál es la diferencia entre blocked, waiting y timed waiting en un volcado?
  • ¿Cómo reproducirías un deadlock sospechado en un test?

Más preguntas para Desarrollador Java

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot