Queste domande di intervista avanzate / ingiuste riguardanti la concorrenza Java? [chiuso]

12

Ecco alcune domande che ho recentemente chiesto agli intervistati che affermano di conoscere la concorrenza Java:

  1. Spiegare il rischio di "visibilità della memoria" - il modo in cui la JVM può riordinare determinate operazioni su variabili non protette da un monitor e non dichiarate volatile , in modo che un thread non possa vedere le modifiche apportate da un altro thread. Di solito chiedo questo mostrando il codice in cui è presente questo rischio (ad esempio l'esempio NoVisibility nel Listato 3.1 da "Concurrency in Practice Java" di Goetz et al) e chiedendo cosa c'è che non va.
  2. Spiega in che modo volatile influenza non solo la variabile effettiva dichiarata volatile , ma anche eventuali modifiche alle variabili apportate da un thread prima che cambi la variabile volatile .
  3. Perché potresti utilizzare volatile anziché synchronized ?
  4. Implementa una variabile di condizione con wait() e notifyAll() . Spiega perché dovresti usare notifyAll() . Spiega perché la variabile condizione deve essere testata con un ciclo while .

La mia domanda è: sono appropriati o troppo avanzati per chiedere a qualcuno che dice di conoscere la concorrenza Java?

E mentre ci siamo, pensi che qualcuno che lavora nella concorrenza Java dovrebbe avere una conoscenza superiore alla media della garbage collection di Java?

    
posta sparc_spread 08.12.2012 - 00:37
fonte

2 risposte

11

Dipende davvero se stai chiedendo a un candidato con 2 anni di esperienza in Java o con 7 anni di esperienza in Java. Per un architetto / responsabile tecnico / senior sembrano domande appropriate, ma per un junior e forse anche un medio livello, sembrano un po 'difficili.

Inoltre stai facendo una domanda sui meccanismi di sincronizzazione di basso livello che sono stati sostituiti per lo più da java.util.concurrent nello sviluppo di Java del giorno corrente; invece di wait()/notify() blocchi sono preferiti. Puoi vedere che La seconda edizione Java efficace ha abbandonato un capitolo che spiega in dettaglio il meccanismo wait / notify, perché non è stato considerato utile. Inoltre, il contenitore gestisce il multithreading ad un livello superiore nella maggior parte dei casi; i metodi di un EJB sono thread-safe, ad esempio senza alcuna preoccupazione da parte del programmatore (questo non significa che i programmatori non dovrebbero conoscere il multithreading).

In realtà vedo che il multithreading è una parte secondaria dei sistemi operativi piuttosto che una parte secondaria di un linguaggio di programmazione. Per capire se una persona comprende veramente le domande di programmazione parallela e multithread sui mutex, i semafori o la pianificazione dovrebbero essere posti prima e solo successivamente alla fine, dettagli sull'implementazione in un particolare linguaggio di programmazione.

    
risposta data 08.12.2012 - 00:52
fonte
14

Are these appropriate or too advanced to ask someone who says they know Java concurrency?

Direi che sono domande relativamente avanzate. Tuttavia non sono "ingiusti" nel senso che non sono domande a sorpresa.

In effetti, "imparzialità" non è davvero un criterio pertinente. Ciò di cui dovresti preoccuparti (come intervistatore) è se le domande e la tua interpretazione delle risposte stiano selezionando i migliori candidati per la posizione o le posizioni per le quali stai intervistando. (O per dirla in altro modo, stai rifiutando ai candidati che dovresti davvero dare più considerazione perché non rispondono a queste domande "correttamente"?)

And while we're at it, do you think that someone working in Java concurrency should be expected to have an above-average knowledge of Java garbage collection?

Ancora una volta, questa non è la domanda pertinente. La domanda che dovresti porci è se hai bisogno di qualcuno che abbia una buona conoscenza della garbage collection di Java.

    
risposta data 08.12.2012 - 02:03
fonte

Leggi altre domande sui tag