Hier sind einige Fragen, die ich kürzlich Befragten gestellt habe, die angeben, Java-Parallelität zu kennen:
- Erläutern Sie die Gefahr der "Speichersichtbarkeit" - wie die JVM bestimmte Vorgänge für Variablen neu anordnen kann, die von einem Monitor ungeschützt und nicht deklariert sind
volatile
, sodass ein Thread möglicherweise die von einem anderen Thread vorgenommenen Änderungen nicht sieht. Normalerweise frage ich diesen Code, indem ich zeige, wo diese Gefahr vorliegt (z. B. dasNoVisibility
Beispiel in Listing 3.1 aus "Java Concurrency in Practice" von Goetz et al.) Und frage, was falsch ist. - Erklären Sie, wie
volatile
sich dies nicht nur auf die tatsächlich deklarierte Variable auswirktvolatile
, sondern auch auf alle Änderungen an Variablen, die von einem Thread vorgenommen wurden, bevor er dievolatile
Variable ändert . - Warum könnten Sie
volatile
anstelle von verwendensynchronized
? - Implementieren Sie eine Bedingungsvariable mit
wait()
undnotifyAll()
. Erklären Sie, warum Sie verwenden solltennotifyAll()
. Erklären Sie, warum die Bedingungsvariable mit einerwhile
Schleife getestet werden soll .
Meine Frage ist - sind diese angemessen oder zu fortgeschritten, um jemanden zu fragen, der sagt, er kenne die Java-Parallelität?
Und wenn wir schon dabei sind, sollte jemand, der in der Java-Parallelität arbeitet, überdurchschnittliche Kenntnisse über die Java-Garbage-Collection haben?
java
interview
concurrency
sparc_spread
quelle
quelle
notifyAll()
zu "Ich glaube nicht, dass ich die Arbeit des OS-Schedulersnotify()
Antworten:
Es hängt wirklich davon ab, ob Sie einen Kandidaten mit 2 Jahren Java-Erfahrung oder einen mit 7 Jahren Java-Erfahrung fragen. Für einen Architekten / technischen Leiter / Senior scheinen sie richtige Fragen zu sein, aber für einen Junior und vielleicht auch für einen Mittleren scheinen sie irgendwie schwierig zu sein.
Sie stellen auch Fragen zu Synchronisationsmechanismen auf niedriger Ebene, die
java.util.concurrent
in der heutigen Java-Entwicklung zum größten Teil durch solche ersetzt wurden. anstelle vonwait()/notify()
Schlössern werden bevorzugt. Sie sehen, dass Effective Java 2nd Edition ein Kapitel gelöscht hat, in dem der Wartemechanismus / Benachrichtigungsmechanismus ausführlich erläutert wurde, da er nicht als nützlich erachtet wurde. Außerdem kann der Container in den meisten Fällen Multithreading auf einer höheren Ebene ausführen. Die Methoden eines EJB sind zum Beispiel thread-sicher, ohne dass der Programmierer Bedenken hat (dies bedeutet nicht, dass Programmierer kein Multithreading kennen sollten).Ich sehe das Multithreading tatsächlich als Teil von Betriebssystemen und nicht als Teil einer Programmiersprache. Um festzustellen, ob eine Person Multithreading- und parallele Programmierfragen zu Mutexen, Semaphoren oder Zeitplänen wirklich versteht, sollten zunächst und schließlich Einzelheiten zur Implementierung in einer bestimmten Programmiersprache abgefragt werden.
quelle
lock
vs.wait/notify
- Ich wusste eslock
aus dem Goetz-Buch, wusste aber nicht, dass es jetzt dem alten vorgezogen wurde. Ich stimme @Martijn allerdings zu, dass jemand mit dieser Erfahrung die älteren Ansätze kennen sollte. Auf jeden Fall möchte ich die Frage nicht noch einmal stellen (zumal ich sie bereits als beantwortet markiert habe - von Ihnen :-)), aber ich denke, jemand mit 10 Jahren Erfahrung sollte in der Lage sein, diese Fragen zu beantworten, nein?lock
vswait/notify
werden Sperren bevorzugt, wenn Sie wirklich Funktionen auf niedriger Ebene benötigen, in den meisten Fällen jedoch eine Alternative auf höherer Ebene verfügbar ist. BlockingQueue ist besonders nützlich.Ich würde sagen, es handelt sich um relativ fortgeschrittene Fragen. Sie sind jedoch nicht "unfair" in dem Sinne, dass sie keine Trickfragen sind.
In der Tat ist "Fairness" kein wirklich relevantes Kriterium. Was Sie (als Interviewer) befürchten sollten, ist, ob die Fragen und Ihre Interpretation der Antworten die Auswahl der besten Kandidaten für die Position oder die Positionen sind, für die Sie ein Interview führen. (Oder anders ausgedrückt, lehnen Sie Kandidaten ab, die Sie wirklich mehr berücksichtigen sollten, weil sie diese Fragen nicht "richtig" beantworten?)
Auch das ist nicht wirklich die relevante Frage. Die Frage, die Sie sich stellen sollten, ist, ob Sie jemanden benötigen , der über gute Kenntnisse der Java-Garbage-Collection verfügt.
quelle