Voici quelques questions que j'ai récemment posées aux personnes interrogées qui disent connaître la concurrence Java:
- Expliquez le danger de la «visibilité de la mémoire» - la façon dont la machine virtuelle Java peut réorganiser certaines opérations sur des variables qui ne sont pas protégées par un moniteur et non déclarées
volatile
, de sorte qu'un thread peut ne pas voir les modifications apportées par un autre thread. Habituellement, je demande à celui-ci en montrant le code où ce danger est présent (parNoVisibility
exemple l' exemple dans le Listing 3.1 de "Java Concurrency in Practice" par Goetz et al) et en demandant ce qui ne va pas. - Expliquez comment
volatile
affecte non seulement la variable réelle déclaréevolatile
, mais également toutes les modifications apportées aux variables par un thread avant qu'il ne modifie lavolatile
variable. - Pourquoi pourriez-vous utiliser à la
volatile
place desynchronized
? - Implémentez une variable de condition avec
wait()
etnotifyAll()
. Expliquez pourquoi vous devriez utilisernotifyAll()
. Expliquez pourquoi la variable de condition doit être testée avec unewhile
boucle.
Ma question est - est-ce approprié ou trop avancé pour demander à quelqu'un qui dit qu'il connaît la concurrence Java?
Et pendant que nous y sommes, pensez-vous qu'une personne travaillant dans la concurrence Java devrait avoir une connaissance supérieure à la moyenne de la collecte des ordures Java?
java
interview
concurrency
sparc_spread
la source
la source
notifyAll()
de "Je ne crois pas au travail du planificateur du système d'exploitation, donc j'utilisenotify()
"Réponses:
Cela dépend vraiment si vous demandez un candidat avec 2 ans d'expérience Java ou un avec 7 ans d'expérience Java. Pour un architecte / responsable technique / senior, elles semblent des questions appropriées, mais pour un junior et peut-être aussi un niveau intermédiaire, elles semblent plutôt difficiles.
Vous posez également des questions sur les mécanismes de synchronisation de bas niveau qui ont été remplacés principalement par le
java.util.concurrent
développement Java actuel; au lieu deswait()/notify()
verrous sont préférés. Vous pouvez voir que Effective Java 2nd edition a supprimé un chapitre qui explique le mécanisme d'attente / notification en détail, car il n'a pas été jugé utile. En outre, le conteneur gère le multithreading à un niveau supérieur dans la plupart des cas; les méthodes d'un EJB sont thread-safe par exemple sans aucune préoccupation du programmeur (cela ne signifie pas que les programmeurs ne devraient pas savoir le multithreading).En fait, je vois que le multithreading est une sous-partie des systèmes d'exploitation plutôt qu'une sous-partie d'un langage de programmation. Afin de voir si une personne comprend vraiment les questions de programmation multithreading et parallèle sur les mutex, les sémaphores ou la programmation, il convient de se poser d'abord et seulement ensuite, des détails sur l'implémentation dans un langage de programmation particulier.
la source
lock
contrewait/notify
- je savais à proposlock
du livre de Goetz mais je ne savais pas que c'était maintenant préféré à l'ancienne. Je suis d'accord avec @Martijn, cependant, une personne ayant ce niveau d'expérience devrait être au courant des anciennes approches. Quoi qu'il en soit, je ne veux pas poser la question à nouveau (surtout que je l'ai déjà marqué comme ayant été répondu - par vous :-)) mais je pense que quelqu'un avec 10 ans d'expérience devrait être en mesure de répondre à ces questions, non?lock
vswait/notify
, les verrous sont préférés lorsque vous avez vraiment besoin de fonctionnalités de bas niveau, mais dans la plupart des cas, une alternative de niveau supérieur est disponible; BlockingQueue est particulièrement utile.Je dirais que ce sont des questions relativement avancées. Cependant, ils ne sont pas "injustes" dans le sens où ce ne sont pas des questions pièges.
En effet, "l'équité" n'est pas vraiment un critère pertinent. Ce que vous (en tant qu'enquêteur) devriez vous inquiéter, c'est de savoir si les questions et votre interprétation des réponses sélectionnent les meilleurs candidats pour le ou les postes pour lesquels vous interrogez. (Ou pour le dire autrement, rejetez-vous des candidats que vous devriez vraiment accorder plus d'attention car ils ne répondent pas «correctement» à ces questions?)
Encore une fois, ce n'est pas vraiment la question pertinente. La question que vous devriez vous poser est de savoir si vous avez besoin de quelqu'un qui a une bonne connaissance de la collecte des ordures Java.
la source