Wenn Sie sich schon einmal auf ein Vorstellungsgespräch für eine Stelle als Java-Programmierer vorbereitet haben oder eine Zertifizierungsprüfung bestanden haben (nicht unbedingt zum Programmieren), dann ist Ihnen wahrscheinlich schon aufgefallen, dass die dort gestellten Fragen sehr spezifisch sind. Viele von ihnen zwingen Sie zum Nachdenken über das Design der Sprache. Einige sind dazu gedacht, die Tiefe Ihres Wissens zu erforschen. Es gibt Fragen, die eher wie Rätsel als alles andere aussehen, während andere sich auf Nuancen der Sprache beziehen, die ohne Übung nur sehr schwer zu erkennen sind. In diesem Artikel stellt Entwickler Sarans Sing einige solcher Fragen zu Java vor. Natürlich mit Antworten. 1. Was passiert, wenn ich eine Return-Anweisung oder System.exit() in einen Try/Catch-Block einfüge? Dies ist eine sehr beliebte und subtile Java-Frage. Der Trick besteht darin, dass viele Programmierer glauben, dass der
finally
Block immer ausgeführt wird. Indem man eine return
Aussage in einen try/catch
Block einfügt oder System.exit()
aus einem try/catch
Block heraus aufruft, wirft die Frage Zweifel an dieser Überzeugung auf. Die Antwort auf diese knifflige Frage lautet: Der finally
Block wird ausgeführt, wenn eine return
Anweisung in einem Block platziert wird try/catch
, aber nicht, wenn System.exit()
sie aus einem try/catch
Block heraus aufgerufen wird. 2. Unterstützt Java Mehrfachvererbung? Das ist eine sehr knifflige Frage. Interviewer fragen oft: „Wenn C++ die direkte Mehrfachvererbung unterstützt, warum kann Java das dann nicht?“ Die Antwortist etwas komplizierter als es scheint, da Java die Vererbung mehrerer Typen unterstützt. Schließlich kann eine Java-Schnittstelle andere Schnittstellen erweitern. Allerdings unterstützt Java keine Mehrfachvererbung von Implementierungen. 3. Wenn eine Methode in einer übergeordneten Klasse NullPointerException
s auslöst, kann sie dann von einer Methode überschrieben werden, die RuntimeException
s auslöst? Dies ist eine weitere knifflige Frage im Zusammenhang mit Überladung und Überschreibung. Antwort: Eine überschriebene Methode kann sicher NullPointerException
die übergeordnete Klasse von auslösen – RuntimeException, aber Sie können das Gleiche nicht mit einem aktivierten Ausnahmetyp wie tun Exception
. 4. Wie stellen Sie sicher, dass N
Threads N
ohne Deadlock auf Ressourcen zugreifen können? Wenn das Schreiben von Multithread-Code nicht Ihre Stärke ist, könnten Sie wirklich über diese Frage stolpern. Es kann sogar für einen erfahrenen Programmierer schwierig sein, der noch nie auf Deadlocks und Rennbedingungen gestoßen ist. Der ganze Trick liegt hier in der Reihenfolge: Sie können Deadlocks verhindern, indem Sie Ressourcen in der umgekehrten Reihenfolge freigeben, in der sie erworben wurden. 5. Was ist der Unterschied zwischen den Klassen StringBuffer
und StringBuilder
in Java? Dies ist eine klassische Java-Sprachfrage, die einige Entwickler als knifflig empfinden und andere als sehr einfach. Die StringBuilder
Klasse erschien in JDK 1.5. Der einzige Unterschied zwischen diesen Klassen besteht darin, dass StringBuffer
die Methoden von , wie length()
, capacity()
und append()
, synchronisiert sind, während die entsprechenden Methoden inStringBuilder
sind nicht. Dieser grundlegende Unterschied bedeutet, dass die Zeichenfolgenverkettung mit schneller ist StringBuilder
als mit StringBuffer
. Tatsächlich wird die Verwendung StringBuffer
nicht empfohlen, da die Zeichenfolgenverkettung in 99 % der Fälle im selben Thread erfolgt. 6. Was ist das Ergebnis der Auswertung des Ausdrucks 1,0/0,0? Wird es eine Ausnahme oder einen Kompilierungsfehler erzeugen? Dies ist eine weitere knifflige Frage zur Klasse. Java-Entwickler sind sich der Existenz eines primitiven doppelten Datentyps und einer Klasse bewusst, aber wenn sie Gleitkommaoperationen durchführen, schenken sie , , und den Regeln, die die damit verbundenen arithmetischen Berechnungen regeln, nicht genügend Aufmerksamkeit. Die Antwort auf diese Frage ist einfach: anDouble
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
wird nicht geworfen; Der Ausdruck ergibt Double.POSITIVE_INFINITY
. 7. Was passiert, wenn Sie versuchen, einen Schlüssel in eine Datei einzufügen, HashMap
die diesen Schlüssel bereits enthält? Diese knifflige Frage ist Teil einer anderen häufig gestellten Frage: Wie funktioniert das HashMap
in Java? HashMap
ist eine beliebte Quelle für verwirrende und knifflige Fragen zu Java. Hier ist die Antwort: Wenn Sie versuchen, einen Schlüssel erneut in ein einzufügen HashMap
, wird der alte Schlüssel ersetzt, da die HashMap
Klasse keine doppelten Schlüssel zulässt. Und derselbe Schlüssel erhält den gleichen Hash-Code, was bedeutet, dass er an derselben Stelle im Hash-Bucket landet. Basierend auf Quora- Materialien
GO TO FULL VERSION