Heim  >  Artikel  >  Java  >  Zusammenstellung häufiger Java-Interviewfragen

Zusammenstellung häufiger Java-Interviewfragen

(*-*)浩
(*-*)浩Original
2019-11-29 13:55:112719Durchsuche

Zusammenstellung häufiger Java-Interviewfragen

Was sind die Merkmale der Objektorientierung?

Die sogenannte Kapselung besteht darin, objektive Dinge einzukapseln abstrakte Objekte Klasse, und die Klasse kann zulassen, dass ihre eigenen Daten und Methoden nur von vertrauenswürdigen Klassen oder Objekten betrieben werden, und Informationen vor nicht vertrauenswürdigen Klassen verbergen. Die Kapselung ist eines der Merkmale der Objektorientierung und das Hauptmerkmal der Konzepte von Objekten und Klassen. (Empfohlene Studie: Allgemeine Java-Interviewfragen)

Vererbung bedeutet, dass eine Unterklasse die Attribute und Methoden der übergeordneten Klasse erhält. Wenn beispielsweise ein Hund eine Tierart ist, kann man auch sagen, dass er die Eigenschaften des Tieres erbt oder dass der Hund eine Unterklasse des Tieres ist.

Polymorphismus bedeutet, dass eine Methode nur einen Namen, aber viele Formen haben kann, d. h. im Programm können mehrere Methoden mit demselben Namen definiert werden, was durch „eine Schnittstelle, mehrere Methoden“ beschrieben wird ". Sie können Methodenparameter und Typreferenzen übergeben

Fünf Prinzipien: Single-Responsibility-Prinzip SRP Open-Closed-Prinzip OCP-Ersetzungsprinzip LSP-Abhängigkeitsprinzip DIP-Schnittstellentrennungsprinzip ISP

Mitglied Variablen und lokale Variablen Der Unterschied

* A: Verschiedene Positionen in der Klasse

* Mitgliedsvariablen: außerhalb der Methoden in der Klasse

* Lokale Variablen: In der Methodendefinition oder Methodendeklaration

* B: Verschiedene Speicherorte

* Mitgliedsvariablen: Im Heap-Speicher (Mitgliedsvariablen gehören zu Objekten , Objekte in den Heap-Speicher)

* Lokale Variablen: im Stapelspeicher (lokale Variablen gehören zu Methoden, Methoden werden in den Stapelspeicher verschoben)

* C: verschiedene Lebenszyklen

* Mitgliedsvariablen: existieren, wenn das Objekt erstellt wird, und verschwinden, wenn das Objekt verschwindet

* Lokale Variablen: existieren, wenn die Methode aufgerufen wird, und verschwinden, wenn die Methode aufgerufen wird

* D: Verschiedene Initialisierungswerte

* Mitgliedsvariablen: haben Standardinitialisierungswerte

* Lokale Variablen: keine Standardinitialisierungswerte, müssen definiert werden , zugewiesen und kann dann verwendet werden.

Der Unterschied zwischen statischen Variablen und Mitgliedsvariablen

* Statische Variablen werden auch Klassenvariablen genannt

* A: Verschiedene Zugehörigkeiten

* Statische Variablen gehören zu Klassen, daher werden sie auch Klassenvariablen genannt

* Mitgliedsvariablen gehören zu Objekten, daher werden sie auch Instanzvariablen genannt ( Objektvariablen)

* B: Verschiedene Speicherorte

* Statische Variablen werden im statischen Bereich des Methodenbereichs gespeichert

* Mitgliedsvariablen werden im Heap-Speicher gespeichert

* C: Speichererscheinungszeit ist unterschiedlich

* Statische Variablen werden geladen, wenn die Klasse geladen wird, und verschwinden, wenn die Klasse verschwindet

* Mitgliedsvariablen folgen den Exists des Objekts, wenn sie erstellt werden, und verschwinden, wenn das Objekt verschwindet

* D: Verschiedene Aufrufe

* Statische Variablen können aufgerufen werden über Klassennamen oder über Objekte

* Mitgliedsvariablen können nur über Objektnamen aufgerufen werden

Der Unterschied und die Anwendung von this und super

* A: Wofür stehen this und super

* this: repräsentiert die Referenz des aktuellen Objekts, wer auch immer mich anruft, ich werde diese Person repräsentieren

* super: repräsentiert die Referenz der übergeordneten Klasse des aktuellen Objekts

* B: Der Unterschied zwischen this und super

* a: Aufruf von Mitgliedsvariablen

* Dies. Mitgliedsvariablen rufen Mitgliedsvariablen dieser Klasse oder der übergeordneten Klasse auf. * ​​Mitgliedsvariablen rufen die Mitgliedsvariablen der übergeordneten Klasse auf

* this(...) ruft die Konstruktormethode dieser Klasse auf

* super(...) ruft die Konstruktormethode der übergeordneten Klasse auf

* c: ruft die Mitgliedsmethode

* auf. Die Mitgliedsmethode ruft die Mitgliedsmethode dieser Klasse auf. Sie können auch die Methode der übergeordneten Klasse aufrufen

* Die Mitgliedsmethode ruft die Mitgliedsmethode von auf die übergeordnete Klasse

Welche Sortiermethoden gibt es? Bitte listen Sie die

Sortiermethoden auf: Einfügungssortierung (direkte Einfügungssortierung, Hill-Sortierung), Austauschsortierung (Blasensortierung, schnelle Sortierung), Auswahlsortierung (direkte Auswahlsortierung, Heap-Sortierung), Zusammenführungssortierung, Verteilungssortierung (Box-Sortierung, Radix-Sortierung) Pseudocode der Schnellsortierung. Der Unterschied zwischen

String, StringBuffer und StringBuilder.

Die Länge von String ist unveränderlich.

Die Länge von StringBuffer ist variabel, wenn Sie den Inhalt in der Zeichenfolge häufig bearbeiten, insbesondere wenn der Inhalt geändert wird , verwenden Sie StringBuffer am Ende, verwenden Sie die toString()-Methode von StringBuffer; Im Allgemeinen sollten Sie die StringBuilder-Klasse bevorzugen, da sie alle gleichen Vorgänge unterstützt, aber schneller ist, da sie keine Synchronisierung durchführt.


Der Unterschied zwischen Overload und Override. Kann eine überladene Methode die Art des Rückgabewerts ändern?

Antwort: Überschreiben von Methoden und Überladen. Überladung sind verschiedene Erscheinungsformen des Java-Polymorphismus.

Überschreiben ist eine Manifestation des Polymorphismus zwischen Elternklasse und Unterklasse, und Überladung ist eine Manifestation des Polymorphismus in einer Klasse. Wenn eine in einer Unterklasse definierte Methode denselben Namen und dieselben Parameter wie ihre übergeordnete Klasse hat, spricht man von einer überschreibenden Methode.

Wenn ein Objekt einer Unterklasse diese Methode verwendet, wird die Definition in der Unterklasse aufgerufen. Dafür scheint die Definition in der übergeordneten Klasse „abgeschirmt“ zu sein. Wenn in einer Klasse mehrere Methoden mit demselben Namen definiert sind und diese eine unterschiedliche Anzahl von Parametern oder unterschiedliche Parametertypen haben, spricht man von Methodenüberladung. Eine überladene Methode kann den Typ des Rückgabewerts ändern.

Was ist der Unterschied zwischen final und final?

Antwort: final: Modifikator (Schlüsselwort); wenn eine Klasse als final deklariert ist, bedeutet dies, dass sie nicht möglich ist Abgeleitete neue Unterklassen können nicht als übergeordnete Klassen vererbt werden, daher kann eine Klasse nicht sowohl abstrakt als auch endgültig deklariert werden. Durch die Deklaration von Variablen oder Methoden wird sichergestellt, dass sie während der Verwendung nicht geändert werden und können nur in nachfolgenden Referenzen gelesen und nicht geändert werden; als final deklarierte Methoden können ebenfalls nur verwendet und nicht überladen werden.

finally: Stellen Sie einen „finally“-Block bereit, um alle Bereinigungsvorgänge während der Ausnahmebehandlung durchzuführen. Wenn eine Ausnahme ausgelöst wird, wird die entsprechende „catch“-Klausel ausgeführt und die Steuerung wechselt dann in den „finally“-Block (falls vorhanden).

Mehrere häufige Betriebsstörungen.

java.lang.nullpointerException (Nullzeiger-Ausnahme)

java.lang.classnotfoundException (die angegebene Klasse existiert nicht)

java.lang.arithmeticException ( mathematische Operationsausnahme)

java.lang.arrayindexoutofboundsexception (Array-Index-Ausnahme außerhalb der Grenzen)

IOException (Eingabe- und Ausgabeausnahme)

Zwei häufige kleinere Probleme bei Array-Operationen sind Außerhalb der Grenzen und leerer Zeiger

* A: Falldemonstration

* a: ArrayIndexOutOfBoundsException: Array-Index außerhalb der Grenzen Ausnahme

* Grund: Sie haben auf a zugegriffen Nicht vorhandener Index.

* b: NullPointerException: Nullzeiger-Ausnahme

* Grund: Das Array zeigt nicht mehr auf den Heap-Speicher. Und Sie verwenden auch Array-Namen, um auf Elemente zuzugreifen.

  * int[] arr = {1,2,3};
  * arr = null;
  * System.out.println(arr[0]);

Wie geht die JAVA-Sprache mit Ausnahmen um? Was bedeuten die Schlüsselwörter „würfe“, „werfen“, „versuchen“, „fangen“ und „endlich“? Kann eine Ausnahme im Try-Block ausgelöst werden?

Antwort: Java behandelt Ausnahmen durch objektorientierte Methoden, klassifiziert verschiedene Ausnahmen und bietet eine gute Schnittstelle.

In Java ist jede Ausnahme ein Objekt, das eine Instanz der Throwable-Klasse oder anderer Unterklassen ist. Wenn in einer Methode eine Ausnahme auftritt, wird ein Ausnahmeobjekt ausgelöst. Das Objekt enthält Ausnahmeinformationen. Die Methode zum Aufrufen dieses Objekts kann die Ausnahme abfangen und behandeln.

Die Ausnahmebehandlung von Java wird durch 5 Schlüsselwörter implementiert: try, Catch, Throw, Throws und schließlich. Im Allgemeinen wird try zum Ausführen eines Programms verwendet. Wenn eine Ausnahme auftritt, kann sie zu diesem Zeitpunkt anhand ihres Typs oder schließlich anhand des zu behandelnden Standardhandlers ausgelöst werden.

Verwenden Sie try, um ein Programm anzugeben, das alle „Ausnahmen“ verhindert. Unmittelbar nach dem Try-Programm sollte eine Catch-Klausel eingefügt werden, um den Typ der „Ausnahme“ anzugeben, die Sie abfangen möchten.

Die throw-Anweisung wird verwendet, um explizit eine „Ausnahme“ auszulösen.

throws wird verwendet, um verschiedene „Ausnahmen“ anzugeben, die eine Mitgliedsfunktion auslösen kann.

Stellt schließlich sicher, dass ein Teil des Codes ausgeführt wird, egal welche „Ausnahme“ auftritt.

Sie können eine Try-Anweisung außerhalb eines Member-Funktionsaufrufs schreiben und eine weitere Try-Anweisung innerhalb der Member-Funktion schreiben, um anderen Code zu schützen. Immer wenn eine Try-Anweisung auftritt, wird der „Exception“-Frame auf dem Stapel platziert, bis alle Try-Anweisungen abgeschlossen sind.

Wenn die Try-Anweisung der nächsten Ebene eine bestimmte „Ausnahme“ nicht behandelt, wird der Stapel erweitert, bis er auf eine Try-Anweisung trifft, die diese „Ausnahme“ behandelt.

Wenn der Server die vom Benutzer übermittelten Formulardaten empfängt, ruft er dann die doGet()- oder doPost()-Methode des Servlets auf?

Antwort: Das ff9c23ada1bcecdd1a0fb5d5a0f18437-Element von HTML verfügt über ein Methodenattribut, das verwendet wird, um die Methode zum Senden des Formulars anzugeben. Sein Wert kann get oder post sein.

Unser benutzerdefiniertes Servlet überschreibt im Allgemeinen eine oder beide der Methoden doGet() oder doPost(). Wenn es sich um eine GET-Anfrage handelt, wird die Methode doGet() aufgerufen ()-Methode aufgerufen wird, warum passiert das dann?

Unser benutzerdefiniertes Servlet erbt normalerweise von HttpServlet, HttpServlet erbt von GenericServlet und überschreibt die service()-Methode, die in der Servlet-Schnittstelle definiert ist.

Die von HttpServlet neu geschriebene service()-Methode ruft zuerst die vom Benutzer angeforderte Methode ab und ruft dann doGet(), doPost(), doPut(), doDelete() und andere Methoden entsprechend der Anforderungsmethode auf . Wenn Sie das Servlet anpassen Wenn diese Methoden in überschrieben werden, werden offensichtlich die überschriebenen (angepassten) Methoden aufgerufen, was offensichtlich eine Anwendung des Vorlagenmethodenmusters ist (wenn Sie es nicht verstehen, lesen Sie bitte Kapitel 37 von). das Buch „Java und Muster“).

Natürlich kann die service()-Methode auch direkt in einem benutzerdefinierten Servlet umgeschrieben werden, sodass sie unabhängig von der Art der Anforderung mit Ihrem eigenen Code verarbeitet werden kann, was besser für Szenarien geeignet ist, in denen die Anforderungsmethode verwendet wird wird nicht unterschieden.

Was ist der Unterschied zwischen abstrakter Klasse und Schnittstelle?

Schnittstelle ist eine Variante einer abstrakten Klasse, und alle Methoden in der Schnittstelle sind abstrakt. Eine abstrakte Klasse ist eine Klasse, die die Existenz einer Methode deklariert, ohne sie zu implementieren.

Schnittstellen können mehrfach vererbt werden, abstrakte Klassen können jedoch keine Methoden definieren, diese aber nicht implementieren, während abstrakte Klassen einige Methoden implementieren können.

Der grundlegende Datentyp in der Schnittstelle ist statisch, das abstrakte Bild jedoch nicht.

Speicherleck und Speicherüberlauf?

Speicherleck: Dies bedeutet, dass die Anwendung, nachdem sie Speicher beantragt hat, den beantragten Speicherplatz nicht freigeben kann. Der Schaden eines Speicherlecks kann ignoriert werden, wenn es jedoch zugelassen wird, dass es entsteht Dies führt zu einem Speicherüberlauf.

Zum Beispiel: Nach dem Lesen der Datei muss der Stream rechtzeitig geschlossen und die Datenbankverbindung freigegeben werden.

Speicherüberlauf: Dies bedeutet, dass, wenn die Anwendung Speicher beantragt, kein endgültiger Speicherplatz zur Verfügung steht.

Zum Beispiel: Für den Datenimport großer Mengen in das Projekt verwenden wir die segmentierte Stapelübermittlung.

Was ist Thread-Synchronisierung?

1. Der Zweck der Thread-Synchronisierung besteht darin, Ressourcen vor Beschädigungen zu schützen, wenn mehrere Threads eine Ressource abfragen.

2. Die Thread-Synchronisationsmethode wird durch Sperren implementiert. Diese Sperre ist einem bestimmten Objekt zugeordnet. Sie können nicht mehr auf das Objekt zugreifen Zugriff auf andere nicht synchronisierte Methoden des Objekts.

3. Bei statischen Synchronisationsmethoden gilt die Sperre für diese Klasse und das Sperrobjekt ist das Klassenobjekt dieser Klasse. Die Sperren statischer und nicht statischer Methoden stören sich nicht gegenseitig. Wenn ein Thread eine Sperre erhält und auf eine synchronisierte Methode für ein anderes Objekt in einer synchronisierten Methode zugreift, erhält er die beiden Objektsperren.

4. Für die Synchronisierung ist es wichtig, immer zu wissen, auf welches Objekt synchronisiert werden soll.

5. Beim Schreiben threadsicherer Klassen müssen Sie immer darauf achten, die Logik und Sicherheit mehrerer Threads, die um den Zugriff auf Ressourcen konkurrieren, richtig einzuschätzen, „atomare“ Operationen zu analysieren und sicherzustellen, dass andere Threads dies tun Wird bei atomaren Operationen verwendet. Der Thread kann nicht auf die konkurrierende Ressource zugreifen.

6. Wenn mehrere Threads auf eine Objektsperre warten, wird der Thread blockiert, der die Sperre nicht erhalten hat.

7. Deadlock wird dadurch verursacht, dass Threads darauf warten, dass sie sich gegenseitig blockieren, und die Wahrscheinlichkeit, dass dies in der Praxis geschieht, ist sehr gering. Wenn Sie wirklich aufgefordert werden, ein Deadlock-Programm zu schreiben, funktioniert es möglicherweise nicht, haha. Sobald jedoch ein Deadlock im Programm auftritt, stirbt das Programm ab.

Verständnis von Multithreading?

Das Gleiche, was verschiedene Leute tun, ist Multithreading.

Beim Kochen in der Cafeteria kocht eine Person nacheinander. Das Öffnen von N Fenstern und das gleichzeitige Spielen von N Personen ist Multithreading von Threads, der Grundstatus von Threads und die Beziehung zwischen Zuständen. Beziehung:

Thread bezieht sich auf eine Ausführungseinheit, die während der Programmausführung Programmcode ausführen kann. Jedes Programm verfügt über mindestens einen Thread, der das Programm selbst ist . Threads in Java haben vier Zustände: ausgeführt, bereit, angehalten und beendet.

Welche Sammlungen gibt es?

Listenfunktionen: Elemente werden geordnet, Elemente können wiederholt werden Kartenfunktionen: Elemente werden in Schlüssel-Wert-Paaren gespeichert, keine Reihenfolge

Festgelegt Features: Elemente Es gibt keine Reihenfolge für die Platzierung und Elemente können nicht wiederholt werden (Hinweis: Obwohl es keine Reihenfolge für die Platzierung von Elementen gibt, wird die Position des Elements in der Menge durch den HashCode des Elements bestimmt, und seine Position ist tatsächlich behoben)

Die List-Schnittstelle verfügt über drei Implementierungsklassen: LinkedList, ArrayList, Vector

LinkedList: Die zugrunde liegende Implementierung basiert auf einer verknüpften Liste. Der Speicher der verknüpften Liste ist verstreut eigene Speicheradresse und speichert auch die Adresse des nächsten Elements. Verknüpfte Listen lassen sich schnell hinzufügen und löschen, aber langsam durchsuchen

Der Unterschied zwischen ArrayList und Vector: ArrayList ist nicht Thread-sicher und hat eine hohe Effizienz; Vector basiert auf Thread-Sicherheit und hat eine geringe Effizienz

Die Set-Schnittstelle hat zwei Implementierungsklassen: HashSet (die unterste Ebene wird durch HashMap implementiert), LinkedHashSet

SortedSet-Schnittstelle hat eine Implementierungsklasse: TreeSet (die unterste Ebene wird durch einen ausgeglichenen Binärbaum implementiert)

Abfrageschnittstelle hat eine Implementierungsklasse: LinkList

Die Map-Schnittstelle hat drei Implementierungsklassen: HashMap, HashTable, LinkeHashMap

HashMap ist nicht threadsicher, effizient und unterstützt null; HashTable ist threadsicher, ineffizient und unterstützt null nicht

SortedMap hat eine Implementierungsklasse: TreeMap

Tatsächlich ist das Wichtigste, dass die Liste zum Verarbeiten von Sequenzen verwendet wird. while set wird zum Verarbeiten von Sätzen verwendet. Map ist eine Basisklasse, die Schlüssel-Wert-Paare

zum Lesen und Schreiben von Dateien speichert:

Die File Reader-Klasse und die FileWriter-Klasse erben von der Reader-Klasse bzw. der Writer-Klasse. Die FileReader-Klasse wird zum Lesen von Dateien und die File Writer-Klasse zum Schreiben von Daten in Dateien verwendet. Bevor Sie diese beiden Typen verwenden, müssen Sie ihre Konstruktionsmethoden aufrufen, um die entsprechenden Objekte zu erstellen, und dann das entsprechende read () oder write aufrufen ()-Methode.

Das obige ist der detaillierte Inhalt vonZusammenstellung häufiger Java-Interviewfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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