Heim >Java >javaLernprogramm >Teilen Sie eine Zusammenfassung der Interviewfragen in Java
1) Was ist Java Virtual Machine? Warum wird Java als „plattformunabhängige Programmiersprache“ bezeichnet?
Die Java Virtual Machine ist ein virtueller Maschinenprozess, der Java-Bytecode ausführen kann. Java-Quelldateien werden in Bytecode-Dateien kompiliert, die von der Java Virtual Machine ausgeführt werden können.
Java ist so konzipiert, dass Anwendungen auf jeder Plattform ausgeführt werden können, ohne dass Programmierer für jede Plattform separat neu schreiben oder neu kompilieren müssen. Die Java Virtual Machine macht dies möglich, weil sie die Befehlslänge und andere Eigenschaften der zugrunde liegenden Hardwareplattform kennt.
2) Was ist der Unterschied zwischen JDK und JRE?
Die Java Runtime Environment (JRE) ist die virtuelle Java-Maschine, die Java-Programme ausführt. Es enthält auch die zur Ausführung des Applets erforderlichen Browser-Plug-Ins. Das Java Development Kit (JDK) ist ein vollständiges Java-Softwareentwicklungskit, einschließlich JRE, Compiler und anderen Tools (wie JavaDoc, Java Debugger), mit dem Entwickler Java-Anwendungen entwickeln, kompilieren und ausführen können.
3) Was bedeutet das Schlüsselwort „statisch“? Ist es möglich, eine private oder statische Methode in Java zu überschreiben?
Das Schlüsselwort „static“ gibt an, dass auf eine Mitgliedsvariable oder Mitgliedsmethode ohne eine Instanzvariable der Klasse, zu der sie gehört, zugegriffen werden kann.
Statische Methoden in Java können nicht überschrieben werden, da Methodenüberschreibungen auf einer dynamischen Bindung zur Laufzeit basieren, während statische Methoden zur Kompilierzeit statisch gebunden werden. Statische Methoden beziehen sich nicht auf eine Instanz der Klasse und sind daher konzeptionell nicht anwendbar.
4) Ist es möglich, in einer statischen Umgebung auf nicht statische Variablen zuzugreifen?
Statische Variablen gehören zu Klassen in Java und ihre Werte sind in allen Instanzen gleich. Wenn eine Klasse von der Java Virtual Machine geladen wird, werden statische Variablen initialisiert. Wenn Ihr Code versucht, auf nicht statische Variablen zuzugreifen, ohne eine Instanz zu verwenden, meldet der Compiler einen Fehler, da diese Variablen noch nicht erstellt wurden und keiner Instanz zugeordnet sind.
5) Welche Datentypen werden von Java unterstützt? Was ist eine automatische Auspackbox?
Die acht grundlegenden Datentypen, die von der Java-Sprache unterstützt werden, sind: Byte, Short, Int, Long, Float, Double, Boolean, Char
Autoboxing ist der grundlegende Datentyp und die A-Konvertierung des Java-Compilers zwischen entsprechenden Objektverpackungstypen. Zum Beispiel: Konvertieren Sie int in Integer, double in Double usw. Andernfalls wird es automatisch entpackt.
6) Was bedeuten Methodenüberschreibung und Methodenüberladung in Java?
Methodenüberladung in Java tritt auf, wenn zwei oder mehr Methoden in derselben Klasse denselben Methodennamen, aber unterschiedliche Parameter haben. Im Gegensatz dazu bedeutet das Überschreiben von Methoden, dass die Unterklasse die Methode der übergeordneten Klasse neu definiert. Methodenüberschreibungen müssen denselben Methodennamen, dieselbe Parameterliste und denselben Rückgabetyp haben. Ein Overrider darf den Zugriff auf die Methoden, die er überschreibt, nicht einschränken.
7) Was ist ein Konstruktor in Java? Was ist Konstruktorüberladung? Was ist ein Kopierkonstruktor?
Wenn ein neues Objekt erstellt wird, wird der Konstruktor aufgerufen. Jede Klasse hat einen Konstruktor. Falls der Programmierer keinen Konstruktor für die Klasse bereitstellt, erstellt der Java-Compiler einen Standardkonstruktor für die Klasse.
Konstruktorüberladung und Methodenüberladung in Java sind sehr ähnlich. Für eine Klasse können mehrere Konstruktoren erstellt werden. Jeder Konstruktor muss über eine eigene eindeutige Parameterliste verfügen.
Java unterstützt keine Kopierkonstruktoren wie C++. Dieser Unterschied liegt darin, dass Java keinen Standardkopiekonstruktor erstellt, wenn Sie den Konstruktor nicht selbst schreiben.
8) Unterstützt Java Mehrfachvererbung?
Klassen in Java unterstützen keine Mehrfachvererbung, sondern nur Einzelvererbung (d. h. eine Klasse hat nur eine übergeordnete Klasse). Allerdings unterstützen Schnittstellen in Java die Mehrfachvererbung, d. h. eine Unterschnittstelle kann mehrere übergeordnete Schnittstellen haben. (Die Funktion einer Schnittstelle besteht darin, die Funktionen eines Objekts zu erweitern. Eine Unterschnittstelle erbt mehrere übergeordnete Schnittstellen, was darauf hinweist, dass die Unterschnittstelle mehrere Funktionen erweitert. Wenn eine Klasse die Schnittstelle implementiert, erweitert die Klasse die entsprechenden Funktionen.)
9) Was ist der Unterschied zwischen Schnittstelle und abstrakter Klasse?
Java bietet und unterstützt die Erstellung abstrakter Klassen und Schnittstellen. Ihre Implementierungen haben etwas gemeinsam, aber der Unterschied ist:
Alle Methoden in der Schnittstelle sind implizit abstrakt. Eine abstrakte Klasse kann sowohl abstrakte als auch nicht abstrakte Methoden enthalten.
Eine Klasse kann viele Schnittstellen implementieren, aber nur eine abstrakte Klasse erben.
Eine Klasse muss natürlich nicht alle von abstrakten Klassen und Schnittstellen deklarierten Methoden implementieren als abstrakt deklariert werden.
Abstrakte Klassen können Schnittstellen implementieren, ohne Implementierungen von Schnittstellenmethoden bereitzustellen.
In Java-Schnittstellen deklarierte Variablen sind standardmäßig endgültig. Abstrakte Klassen können nicht-finale Variablen enthalten.
Memberfunktionen in Java-Schnittstellen sind standardmäßig öffentlich. Mitgliedsfunktionen einer abstrakten Klasse können privat, geschützt oder öffentlich sein.
Schnittstellen sind absolut abstrakt und können nicht instanziiert werden. Eine abstrakte Klasse kann nicht instanziiert werden, sie kann jedoch aufgerufen werden, wenn sie eine Hauptmethode enthält.
10) Was sind Wertübergabe und Referenzübergabe?
Objekte werden als Wert übergeben, was bedeutet, dass eine Kopie des Objekts übergeben wird. Selbst wenn Sie die Objektkopie ändern, wird der Wert des Quellobjekts daher nicht beeinträchtigt.
Objekte werden als Referenz übergeben, was bedeutet, dass nicht das eigentliche Objekt, sondern eine Referenz auf das Objekt übergeben wird. Daher werden Änderungen, die extern am referenzierten Objekt vorgenommen werden, in allen Objekten widergespiegelt.
11) Was ist der Unterschied zwischen einem Prozess und einem Thread?
Ein Prozess ist eine ausgeführte Anwendung und ein Thread ist eine Ausführungssequenz innerhalb eines Prozesses. Ein Prozess kann mehrere Threads haben. Threads werden auch als Lightweight-Prozesse bezeichnet.
12) Wie viele verschiedene Möglichkeiten gibt es, einen Thread zu erstellen? Welches bevorzugen Sie? Warum?
Es gibt drei Möglichkeiten, Threads zu erstellen:
Thread-Klasse erben
Die Runnable-Schnittstelle implementieren
Anwendungen können das Executor-Framework verwenden, um Thread-Pools zu erstellen
Implementieren Sie die Runnable-Schnittstelle Die Methode ist effizienter, da hierfür keine Vererbung der Thread-Klasse erforderlich ist. Für den Fall, dass andere Objekte im Anwendungsdesign geerbt wurden, ist eine Mehrfachvererbung erforderlich (und Java unterstützt keine Mehrfachvererbung) und es können nur Schnittstellen implementiert werden. Gleichzeitig ist der Thread-Pool sehr effizient und einfach zu implementieren und zu verwenden.
13) Erklären Sie kurz die verschiedenen verfügbaren Thread-Status.
Neu, ausführbar, läuft, blockiert, tot
14) Was ist der Unterschied zwischen synchronisierten Methoden und synchronisierten Codeblöcken?
Unterschied:
Die Synchronisierungsmethode verwendet standardmäßig dieses oder das aktuelle Klassenobjekt als Sperre.
Der Synchronisierungscodeblock kann auswählen, was gesperrt werden soll, was detaillierter ist als die Synchronisierung Methode. Wir können wählen, nur den Teil des Codes zu synchronisieren, der Synchronisierungsprobleme verursacht, anstatt der gesamten Methode.
15) Wie erfolgt die Thread-Synchronisierung innerhalb des Monitors (Monitor)? Welchen Synchronisierungsgrad sollte das Programm erreichen?
Monitore und Sperren werden in der Java Virtual Machine zusammen verwendet. Der Monitor überwacht einen synchronisierten Codeblock, um sicherzustellen, dass jeweils nur ein Thread den synchronisierten Codeblock ausführt. Jeder Monitor ist einer Objektreferenz zugeordnet. Dem Thread ist es nicht gestattet, synchronisierten Code auszuführen, bevor er die Sperre erhält.
16) Was ist ein Deadlock?
Ein Deadlock tritt auf, wenn zwei oder mehr Prozesse darauf warten, dass andere Prozesse ihre Ausführung beenden, bevor sie fortfahren können. Das Ergebnis ist, dass alle Prozesse in einer unendlichen Wartezeit stecken bleiben.
17) Wie kann sichergestellt werden, dass N Threads auf N Ressourcen zugreifen können, ohne einen Deadlock zu verursachen?
Bei Verwendung von Multithreading besteht eine sehr einfache Möglichkeit, Deadlocks zu vermeiden, darin, die Reihenfolge anzugeben, in der Sperren erworben werden, und Threads zu zwingen, Sperren in der angegebenen Reihenfolge zu erwerben. Wenn daher alle Threads in derselben Reihenfolge sperren und Sperren freigeben, kommt es zu keinem Deadlock.
18) Was sind die grundlegenden Schnittstellen des Java-Collection-Class-Frameworks?
Die Sammlungsklassenschnittstelle gibt eine Reihe von Objekten an, die als Elemente bezeichnet werden. Jede konkrete Implementierungsklasse der Sammlungsklassenschnittstelle kann die Elemente auf ihre eigene Weise speichern und sortieren. Einige Sammlungsklassen erlauben doppelte Schlüssel, andere nicht.
Java-Sammlungsklassen bieten eine Reihe gut gestalteter Schnittstellen und Klassen, die Operationen an einer Reihe von Objekten unterstützen. Die grundlegendsten Schnittstellen in Java-Sammlungsklassen sind:
Sammlung: stellt eine Gruppe von Objekten dar, jedes Objekt ist sein untergeordnetes Element.
Set: Sammlung, die keine doppelten Elemente enthält.
Liste: Eine geordnete Sammlung, die wiederholte Elemente enthalten kann.
Zuordnen: Ein Objekt, das Schlüssel zu Werten zuordnen kann, kann nicht wiederholt werden.
19) Warum implementiert die Sammlungsklasse die Schnittstellen Cloneable und Serializable nicht?
Die Semantik und Bedeutung des Klonens oder der Serialisierung hängt von der spezifischen Implementierung ab. Daher liegt es an der spezifischen Implementierung der Sammlungsklasse, zu bestimmen, wie sie geklont oder serialisiert wird.
20) Was ist ein Iterator?
Die Iterator-Schnittstelle bietet viele Methoden zum Durchlaufen von Sammlungselementen. Jede Sammlungsklasse enthält Iterationsmethoden, die Iteratorinstanzen zurückgeben. Der Iterator kann während des Iterationsprozesses Elemente der zugrunde liegenden Sammlung löschen, er kann jedoch nicht durch direkten Aufruf von „remove(Object Obj)“ der Sammlung gelöscht werden. Er kann über die Methode „remove()“ des Iterators gelöscht werden.
Das obige ist der detaillierte Inhalt vonTeilen Sie eine Zusammenfassung der Interviewfragen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!