Heim >Java >javaLernprogramm >15 Fragen und Antworten zum fortgeschrittenen Java-Multithreading-Interview

15 Fragen und Antworten zum fortgeschrittenen Java-Multithreading-Interview

高洛峰
高洛峰Original
2017-01-16 16:09:161714Durchsuche

Fragen zum Java-Threading-Interview

Fragen zu Multithreading und Parallelität sind ein wesentlicher Bestandteil jedes Java-Interviews. Wenn Sie eine Informationsposition im Front-Office bei einer Aktieninvestmentbank anstreben, sollten Sie sich auf viele Fragen zum Thema Multithreading einstellen. Multithreading und Parallelität sind ein sehr beliebtes Thema im Investmentbanking, insbesondere im Zusammenhang mit der Entwicklung des elektronischen Handels. Sie stellen Interviewern viele verwirrende Java-Threading-Fragen. Der Interviewer möchte lediglich sicherstellen, dass er über ausreichende Kenntnisse über Java-Threads und Parallelität verfügt, da viele Kandidaten nur an der Oberfläche kratzen. Elektronische Handelssysteme mit hohem Volumen und geringer Latenz für den Direct-to-Market-Handel sind von Natur aus gleichzeitig. Im Folgenden finden Sie Fragen zum Java-Threading, die ich gerne zu unterschiedlichen Zeiten und an unterschiedlichen Orten stelle. Ich gebe keine Antworten, aber wann immer möglich gebe ich Ihnen Hinweise, und manchmal reichen diese Hinweise aus, um die Frage zu beantworten. Es gibt immer mehr Fragen zu Parallelitätstools und gleichzeitigen Sammlungen, die auf das Java 5 Concurrency Package verweisen. Unter diesen Problemen sind ThreadLocal, Blocking Queue, Counting Semaphore und ConcurrentHashMap beliebter.


15 Fragen und Antworten zum Java-Multithreading

1) Jetzt gibt es drei Threads T1, T2 und T3. Wie stellen Sie sicher, dass T2 nach der Ausführung von T1 ausgeführt wird? , und T3 wird nach Ausführung ausgeführt, nachdem T2 ausgeführt wurde?

Diese Thread-Frage wird normalerweise in der ersten Runde oder Phase des Telefoninterviews gestellt, um zu testen, ob Sie mit der „Join“-Methode vertraut sind. Dieses Multithreading-Problem ist relativ einfach und kann mithilfe der Join-Methode implementiert werden.

2) Was sind die Vorteile der Lock-Schnittstelle gegenüber synchronisierten Blöcken in Java? Sie müssen einen effizienten Cache implementieren, der es mehreren Benutzern ermöglicht, zu lesen, aber nur einem Benutzer zu schreiben, wodurch seine Integrität gewahrt bleibt.

Der größte Vorteil der Sperrschnittstelle bei der Multithread- und gleichzeitigen Programmierung besteht darin, dass sie separate Sperren zum Lesen und Schreiben bereitstellen, wodurch Sie leistungsstarke Datenstrukturen wie ConcurrentHashMap und bedingtes Blockieren schreiben können. Interviewfragen im Java-Thread basieren zunehmend auf den Antworten des Interviewers. Ich empfehle dringend, sich vor einem Multithread-Interview über Locks zu informieren, da es derzeit häufig zum Erstellen von clientseitigen Caches und Transaktionsverbindungsräumen für elektronische Handelsterminals verwendet wird.

3) Was ist der Unterschied zwischen Warte- und Schlafmethoden in Java?

Java-Thread-Interviewfragen, die normalerweise in Telefoninterviews gestellt werden. Der größte Unterschied besteht darin, dass beim Warten die Sperre beim Warten aufgehoben wird, während beim Schlafen die Sperre immer beibehalten wird. Wait wird normalerweise für die Interaktion zwischen Threads verwendet, und Sleep wird normalerweise zum Anhalten der Ausführung verwendet.

4) Blockierungswarteschlange in Java implementieren.

Dies ist eine relativ schwierige Multithread-Interviewfrage, mit der viele Ziele erreicht werden können. Erstens kann es testen, ob der Kandidat tatsächlich Programme mit Java-Threads schreiben kann; zweitens kann es das Verständnis des Kandidaten für Parallelitätsszenarien testen, und Sie können auf dieser Grundlage viele Fragen stellen. Wenn er die Methoden wait() und notify() verwendet, um die Blockierungswarteschlange zu implementieren, können Sie ihn bitten, sie erneut mit den neuesten Parallelitätsklassen in Java 5 zu schreiben.

5) Schreiben Sie Code in Java, um das Producer-Consumer-Problem zu lösen.

Sie ist der obigen Frage sehr ähnlich, aber diese Frage ist klassischer. Manchmal werden in Interviews die folgenden Fragen gestellt. Wie löst man das Producer-Consumer-Problem in Java? Natürlich gibt es viele Lösungen, die ich mit einer Blockierungswarteschlange implementiert habe. Manchmal fragen sie sogar, wie man das Problem der Essphilosophen umsetzen kann.

6) Programmieren Sie ein Programm in Java, das einen Deadlock verursacht.

Dies ist meine Lieblingsfrage im Java-Thread-Interview, denn obwohl das Deadlock-Problem beim Schreiben gleichzeitiger Multithread-Programme sehr häufig auftritt, können viele Kandidaten keinen Deadlock-freien Code (Deadlock-freien Code?) schreiben. Sie hatten Schwierigkeiten. Sagen Sie ihnen einfach, dass Sie über N Ressourcen und N Threads verfügen und alle Ressourcen benötigen, um einen Vorgang abzuschließen. Der Einfachheit halber kann n hier durch 2 ersetzt werden. Größere Daten lassen das Problem komplizierter erscheinen. Weitere Informationen zu Deadlocks finden Sie unter Vermeidung von Deadlocks in Java.

7) Was sind atomare Operationen? Was sind atomare Operationen in Java?

Eine sehr einfache Java-Thread-Interviewfrage. Die nächste Frage ist, dass Sie eine atomare Operation synchronisieren müssen.

8) Welche Schlüsselrolle spielt Volatile in Java? Wie benutzt man es? Wie unterscheidet es sich von synchronisierten Methoden in Java?

Seit Java 5 und dem Java-Speichermodell werden Threading-Probleme, die auf dem Schlüsselwort volatile basieren, immer beliebter. Sie sollten darauf vorbereitet sein, Fragen dazu zu beantworten, wie flüchtige Variablen Sichtbarkeit, Reihenfolge und Konsistenz in einer gleichzeitigen Umgebung gewährleisten.

9) Was ist eine Rennbedingung? Wie erkennt und löst man Konkurrenz?

Dies ist eine Frage, die in den fortgeschrittenen Phasen von Multi-Thread-Interviews auftaucht. Die meisten Interviewer werden Sie nach einem Wettbewerbsproblem fragen, mit dem Sie kürzlich konfrontiert waren, und wie Sie es gelöst haben. Manchmal schreiben sie einfachen Code und ermöglichen es Ihnen, Race Conditions im Code zu erkennen. Sie können sich auf meinen vorherigen Artikel zu den Java-Rennbedingungen beziehen. Meiner Meinung nach ist dies eine der besten Java-Thread-Interviewfragen. Sie kann die Erfahrung des Kandidaten beim Lösen von Race-Bedingungen oder beim Schreiben von Code, der frei von Daten-Race oder anderen Race-Bedingungen ist, genau ermitteln (dieser Satz ist frei von Data-Race-Bedingungen). nicht übersetzen). Das beste Buch zu diesem Thema ist „Parallelitätspraktiken in Java“.

10) Wie werden Sie Thread-Dump verwenden? Wie würden Sie einen Thread-Dump analysieren?

Unter UNIX können Sie kill -3 verwenden, dann druckt Thread Dump das Protokoll, unter Windows können Sie „STRG+Pause“ verwenden. Sehr einfache und professionelle Thread-Interviewfrage, aber knifflig, wenn er Sie fragt, wie man sie analysiert.

11) Warum wird die run()-Methode ausgeführt, wenn wir die start()-Methode aufrufen? Warum können wir die run()-Methode nicht direkt aufrufen?

Dies ist eine weitere sehr klassische Java-Multithreading-Interviewfrage. Dies war auch meine Verwirrung, als ich anfing, Thread-Programme zu schreiben. Heutzutage wird diese Frage normalerweise in Telefoninterviews oder in der ersten Runde von Java-Interviews für Anfänger bis Fortgeschrittene gestellt. Die Antwort auf diese Frage sollte lauten: Wenn Sie die start()-Methode aufrufen, erstellen Sie einen neuen Thread und führen den Code in der run()-Methode aus. Wenn Sie die run()-Methode jedoch direkt aufrufen, wird kein neuer Thread erstellt und der Code des aufrufenden Threads wird nicht ausgeführt. Weitere Informationen finden Sie in meinem vorherigen Artikel „Der Unterschied zwischen Start- und Ausführungsmethoden“.

12) Wie weckt man einen blockierten Thread in Java?

Dies ist eine schwierige Frage zu Threads und Blockierung, für die es viele Lösungen gibt. Ich glaube nicht, dass es eine Möglichkeit gibt, den Thread abzubrechen, wenn er auf einen E/A-Block stößt. Wenn ein Thread durch den Aufruf von wait(), Sleep() oder Join() blockiert wird, können Sie den Thread unterbrechen und durch Auslösen einer InterruptedException aufwecken. Mein vorheriger Artikel „Umgang mit Blockierungsmethoden in Java“ enthält viele Informationen zum Umgang mit Thread-Blockierungen.

13) Was ist der Unterschied zwischen CycliBarriar und CountdownLatch in Java?

Diese Thread-Frage wird hauptsächlich verwendet, um zu testen, ob Sie mit dem Concurrent-Paket in JDK5 vertraut sind. Der Unterschied zwischen den beiden besteht darin, dass CyclicBarrier überwundene Barrieren wiederverwenden kann, während CountdownLatch nicht wiederverwendet werden kann.

14) Was ist ein unveränderliches Objekt und wie hilft es beim Schreiben gleichzeitiger Anwendungen?

Eine weitere klassische Multi-Threading-Interviewfrage, die nicht direkt mit Threads zusammenhängt, aber indirekt sehr hilft. Diese Java-Interviewfrage kann sehr knifflig werden, wenn er Sie auffordert, ein unveränderliches Objekt zu schreiben, oder fragt, warum String unveränderlich ist.

15) Was sind die häufigsten Probleme, auf die Sie in Multithread-Umgebungen stoßen? Wie hast du es gelöst?

Speicherschnittstelle, Race Conditions, Deadlock, Livelock und Starvation treten häufig in Multithread- und gleichzeitigen Programmen auf. Die Probleme sind endlos, und wenn Sie etwas falsch machen, wird es schwierig, es zu finden und zu debuggen. Hierbei handelt es sich hauptsächlich um interviewbasierte und nicht um praktische, anwendungsbasierte Java-Threading-Fragen.

Ein paar zusätzliche Fragen:

1) Was ist der Unterschied zwischen grünen Threads und lokalen Threads in Java?

2) Was ist der Unterschied zwischen Threads und Prozessen?

3) Was ist Kontextwechsel beim Multithreading?

4) Was ist der Unterschied zwischen Deadlock und Livelock und der Unterschied zwischen Deadlock und Pie?

5) Welcher Thread-Planungsalgorithmus wird in Java verwendet?

6) Was ist Thread-Planung in Java?

7) Wie gehen Sie mit nicht abfangbaren Ausnahmen in Threads um?

8) Was ist eine Thread-Gruppe und warum wird sie in Java nicht empfohlen?

9) Warum ist es besser, das Executor-Framework zu verwenden, als die Anwendung zum Erstellen und Verwalten von Threads zu verwenden?

10) Was ist der Unterschied zwischen Executor und Executors in Java?

11) Wie finde ich heraus, welcher Thread unter Windows und Linux die meiste CPU-Zeit verbraucht?

Weitere 15 Fragen und Antworten zu fortgeschrittenen Java-Multithreading-Interviews finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn