Preguntas de la entrevista del hilo Java
Las preguntas sobre subprocesos múltiples y concurrencia son una parte esencial de cualquier entrevista sobre Java. Si desea obtener un puesto de información de front-office en cualquier banco de inversión en acciones, debe estar preparado con muchas preguntas sobre subprocesos múltiples. Los subprocesos múltiples y la concurrencia son un tema muy popular en la banca de inversión, especialmente en lo que se refiere al desarrollo del comercio electrónico. Hacen a los entrevistadores muchas preguntas confusas sobre subprocesos de Java. El entrevistador solo quiere asegurarse de que tenga suficiente conocimiento sobre los subprocesos de Java y la concurrencia, porque muchos candidatos solo tocan la superficie. Los sistemas de comercio electrónico de alto volumen y baja latencia para el comercio directo al mercado son inherentemente concurrentes. Las siguientes son preguntas sobre subprocesos de Java que me gusta hacer en diferentes momentos y en diferentes lugares. No doy respuestas, pero siempre que es posible te doy pistas y, a veces, esas pistas son suficientes para responder la pregunta. Hay un número cada vez mayor de preguntas sobre herramientas de concurrencia y colecciones concurrentes que hacen referencia al paquete de concurrencia de Java 5. Entre esos problemas, ThreadLocal, Blocking Queue, Counting Semaphore y ConcurrentHashMap son los más populares.
15 preguntas y respuestas de entrevistas multiproceso de Java
1) Ahora hay tres subprocesos T1, T2 y T3. ¿Cómo se asegura de que T2 se ejecute después de ejecutar T1 y de que T3 se ejecute después de ejecutar T2?
Esta pregunta del hilo generalmente se hace durante la primera ronda o en la etapa de entrevista telefónica para comprobar si está familiarizado con el método de "unirse". Este problema de subprocesos múltiples es relativamente simple y se puede implementar mediante el método de unión.
2) ¿Cuáles son las ventajas de la interfaz Lock sobre el bloque sincronizado en Java? Necesita implementar un caché eficiente que permita que varios usuarios lean, pero que solo permita que un usuario escriba, manteniendo así su integridad. ¿Cómo implementaría esto?
La mayor ventaja de la interfaz de bloqueo en la programación concurrente y de subprocesos múltiples es que proporcionan bloqueos separados para lectura y escritura, lo que le permite escribir estructuras de datos de alto rendimiento como ConcurrentHashMap y bloqueo condicional. Las preguntas de la entrevista del hilo Java se basan cada vez más en las respuestas del entrevistador. Recomiendo encarecidamente leer sobre Locks antes de realizar una entrevista de subprocesos múltiples, ya que actualmente se usa mucho en el almacenamiento en caché del lado del cliente y en el espacio de conexión comercial para construir terminales de comercio electrónico.
3) ¿Cuál es la diferencia entre los métodos de espera y suspensión en Java?
Preguntas de entrevista de subprocesos de Java que generalmente se formulan en entrevistas telefónicas. La mayor diferencia es que esperar libera el bloqueo mientras espera, mientras que dormir siempre mantiene el bloqueo. La espera se usa generalmente para la interacción entre subprocesos y la suspensión generalmente se usa para pausar la ejecución.
4) Utilice Java para implementar la cola de bloqueo.
Esta es una pregunta de entrevista de múltiples subprocesos relativamente difícil que sirve para muchos propósitos. En primer lugar, puede probar si el candidato realmente puede escribir programas utilizando subprocesos Java; en segundo lugar, puede probar la comprensión del candidato sobre los escenarios de concurrencia y puede hacer muchas preguntas basadas en esto. Si usa los métodos wait() y notify() para implementar una cola de bloqueo, puede pedirle que la escriba nuevamente usando las últimas clases de concurrencia en Java 5.
5) Escribir código en Java para resolver el problema productor-consumidor.
Es muy similar a la pregunta anterior, pero esta pregunta es más clásica. A veces, las entrevistas plantearán la siguiente pregunta. ¿Cómo resolver el problema productor-consumidor en Java? Por supuesto, hay muchas soluciones. He compartido un método que utiliza colas de bloqueo. A veces incluso preguntan cómo implementar el problema de los filósofos del comedor.
6) Si programa un programa en Java que provocará un punto muerto, ¿cómo lo solucionará?
Esta es mi pregunta favorita de la entrevista sobre subprocesos de Java porque, aunque los problemas de interbloqueo son muy comunes al escribir programas concurrentes de subprocesos múltiples, muchos candidatos no pueden escribir código sin interbloqueo (¿código sin interbloqueo?) y tienen dificultades. Simplemente dígales que tiene N recursos y N subprocesos, y que necesita todos los recursos para completar una operación. Para simplificar, aquí n se puede reemplazar por 2. Datos más grandes harán que el problema parezca más complicado. Obtenga más información sobre los interbloqueos evitando interbloqueos en Java.
7) ¿Qué es la operación atómica? ¿Qué son las operaciones atómicas en Java?
Pregunta de entrevista de hilo Java muy simple. La siguiente pregunta es que necesita sincronizar una operación atómica.
8) ¿Cuál es el papel clave de los volátiles en Java? ¿Cómo usarlo? ¿En qué se diferencia de los métodos sincronizados en Java?
Desde que Java 5 y el modelo de memoria de Java cambiaron, los problemas de subprocesos basados en la palabra clave volátil se han vuelto cada vez más populares. Debe estar preparado para responder preguntas sobre cómo las variables volátiles garantizan la visibilidad, el orden y la coherencia en un entorno concurrente.
9) ¿Qué es una condición de carrera? ¿Cómo se identifica y resuelve la competencia?
Esta es una pregunta que surge en las etapas avanzadas de las entrevistas multiproceso. La mayoría de los entrevistadores le preguntarán sobre una condición competitiva que encontró recientemente y cómo la resolvió. A veces escribirán código simple y te permitirán detectar condiciones de carrera en el código. Puede consultar mi artículo anterior sobre las condiciones de carrera de Java. En mi opinión, esta es una de las mejores preguntas de entrevista de hilo de Java, puede detectar con precisión la experiencia del candidato en la resolución de condiciones de carrera o en la escritura de código libre de carrera de datos o cualquier otra condición de carrera (esta oración que está libre de carrera de datos no traducir). El mejor libro sobre este tema es "Prácticas de concurrencia en Java".
10) ¿Cómo utilizarás el volcado de subprocesos? ¿Cómo analizarías un volcado de subprocesos?
En UNIX puedes usar kill -3 y el volcado de subprocesos imprimirá el registro, en Windows puedes usar "CTRL+Break". Pregunta de entrevista de hilo muy simple y profesional, pero complicada si te pregunta cómo analizarla.
11) ¿Por qué se ejecuta el método run() cuando llamamos al método start()? ¿Por qué no podemos llamar al método run() directamente?
Esta es otra pregunta muy clásica de la entrevista sobre subprocesos múltiples de Java. Esta fue también mi confusión cuando comencé a escribir programas de subprocesos. Hoy en día, esta pregunta suele hacerse en entrevistas telefónicas o en la primera ronda de entrevistas de Java de nivel principiante a intermedio. La respuesta a esta pregunta debería ser esta: cuando llame al método start(), creará un nuevo hilo y ejecutará el código en el método run(). Pero si llama al método run() directamente, no creará un nuevo hilo y no ejecutará el código del hilo que llama. Lea mi artículo anterior "La diferencia entre los métodos de inicio y ejecución" para obtener más información.
12) ¿Cómo se activa un hilo bloqueado en Java?
Esta es una pregunta difícil sobre subprocesos y bloqueos, y tiene muchas soluciones. No creo que haya una manera de cancelar el hilo si encuentra un bloque IO. Si un hilo se bloquea llamando a wait(), sleep() o join(), puedes interrumpir el hilo y reactivarlo lanzando InterruptedException. Mi artículo anterior "Cómo lidiar con los métodos de bloqueo en Java" tiene mucha información sobre cómo lidiar con el bloqueo de subprocesos.
13) ¿Cuál es la diferencia entre CycliBarriar y CountdownLatch en Java?
Esta pregunta del hilo se utiliza principalmente para comprobar si está familiarizado con el paquete concurrente en JDK5. La diferencia entre los dos es que CyclicBarrier puede reutilizar barreras que se han superado, mientras que CountdownLatch no se puede reutilizar.
14) ¿Qué es un objeto inmutable y cómo ayuda a escribir aplicaciones concurrentes?
Otra pregunta clásica de la entrevista sobre subprocesos múltiples. No está directamente relacionada con los subprocesos, pero ayuda mucho indirectamente. Esta pregunta de la entrevista de Java puede volverse muy complicada si le pide que escriba un objeto inmutable o le pregunta por qué String es inmutable.
15) ¿Cuáles son los problemas comunes que encuentra en entornos multiproceso? ¿Cómo lo solucionaste?
Los que se encuentran comúnmente en programas concurrentes y de subprocesos múltiples son la interfaz de memoria, las condiciones de carrera, el punto muerto, el bloqueo en vivo y el hambre. Los problemas son infinitos y si se equivoca, será difícil encontrarlos y depurarlos. Se trata principalmente de preguntas sobre subprocesos Java basadas en entrevistas y no en aplicaciones prácticas.
Algunas preguntas adicionales:
1) ¿Cuál es la diferencia entre subprocesos verdes y subprocesos locales en Java?
2) ¿Cuál es la diferencia entre hilo y proceso?
3) ¿Qué es el cambio de contexto en subprocesos múltiples?
4) ¿Cuál es la diferencia entre punto muerto y punto muerto, y la diferencia entre punto muerto y pastel?
5) ¿Cuál es el algoritmo de programación de subprocesos utilizado en Java?
6) ¿Qué es la programación de subprocesos en Java?
7) ¿Cómo se manejan las excepciones no detectables en los subprocesos?
8) ¿Qué es un grupo de subprocesos y por qué no se recomienda en Java?
9) ¿Por qué es mejor utilizar el marco Executor que utilizar la aplicación para crear y gestionar subprocesos?
10) ¿Cuál es la diferencia entre Ejecutor y Ejecutores en Java?
11) ¿Cómo saber qué subproceso utiliza más tiempo de CPU en Windows y Linux?