¿Son estas preguntas de entrevista avanzada / injusta con respecto a la concurrencia de Java? [cerrado]

12

Aquí hay algunas preguntas que he hecho recientemente a los entrevistados que dicen que conocen la concurrencia de Java:

  1. Explique el peligro de la "visibilidad de la memoria": la forma en que la JVM puede reordenar ciertas operaciones en variables que no están protegidas por un monitor y no están declaradas como volatile , de modo que un hilo no puede ver los cambios realizados por otro hilo. Por lo general, le pregunto a este código mostrando dónde está presente este peligro (por ejemplo, el ejemplo NoVisibility en el Listado 3.1 de "Java Concurrency in Practice" de Goetz et al) y preguntando qué está mal.
  2. Explique cómo volatile afecta no solo a la variable real declarada volatile , sino también a cualquier cambio en las variables realizado por un hilo antes de que cambie la variable volatile .
  3. ¿Por qué podrías usar volatile en lugar de synchronized ?
  4. Implemente una variable de condición con wait() y notifyAll() . Explica por qué debes usar notifyAll() . Explique por qué la variable de condición se debe probar con un bucle while .

Mi pregunta es: ¿son éstas apropiadas o demasiado avanzadas para preguntar a alguien que dice que conocen la concurrencia de Java?

Y mientras estamos en ello, ¿cree que se debería esperar que alguien que trabaja en concurrencia de Java tenga un conocimiento superior a la media de la recolección de basura de Java?

    
pregunta sparc_spread 08.12.2012 - 00:37

2 respuestas

11

Realmente depende de si le está preguntando a un candidato con 2 años de experiencia en Java o uno con 7 años de experiencia en Java. Para un arquitecto / jefe técnico / senior, parecen ser preguntas adecuadas, pero para un junior y quizás un nivel medio también, parecen un poco difíciles.

También está preguntando acerca de los mecanismos de sincronización de bajo nivel que han sido reemplazados principalmente por java.util.concurrent en el desarrollo actual de Java; en lugar de wait()/notify() se prefieren los bloqueos . Puede ver que Effective Java 2nd edition ha eliminado un capítulo que explica en detalle el mecanismo de espera / notificación, ya que no se consideró útil. Además, el contenedor maneja multihilo en un nivel superior en la mayoría de los casos; Los métodos de un EJB son seguros para subprocesos, por ejemplo, sin ninguna preocupación por parte del programador (esto no significa que los programadores no deban saber multihilo).

Realmente veo que los subprocesos múltiples son como una subparte de los sistemas operativos en lugar de una subparte de un lenguaje de programación. Para ver si una persona realmente comprende los subprocesos múltiples y las preguntas de programación paralela sobre mutexes, semáforos o programación, se deben hacer primero y solo luego, detalles sobre la implementación en un lenguaje de programación particular.

    
respondido por el m3th0dman 08.12.2012 - 00:52
14
  

¿Son apropiados o demasiado avanzados para preguntar a alguien que dice que conocen la concurrencia de Java?

Yo diría que son preguntas relativamente avanzadas. Sin embargo, no son "injustos" en el sentido de que no son preguntas engañosas.

De hecho, la "imparcialidad" no es realmente un criterio relevante. Lo que usted (como entrevistador) debería preocuparse es si las preguntas y su interpretación de las respuestas es seleccionar a los mejores candidatos para el puesto o los puestos para los que está entrevistando. (O para decirlo de otra manera, ¿está rechazando a los candidatos a los que debería realmente prestar más atención debido a que no respondieron estas preguntas "correctamente"?)

  

Y mientras estamos en ello, ¿cree que se debería esperar que alguien que trabaja en concurrencia de Java tenga un conocimiento superior a la media de la recolección de basura de Java?

Una vez más, esa no es realmente la pregunta relevante. La pregunta que debe hacerse es si necesita a alguien que tenga un buen conocimiento de la recolección de basura de Java.

    
respondido por el Stephen C 08.12.2012 - 02:03

Lea otras preguntas en las etiquetas