Heim  >  Artikel  >  Java  >  Zusammenfassung einiger klassischer Java-Interviewfragen

Zusammenfassung einiger klassischer Java-Interviewfragen

零下一度
零下一度Original
2017-06-25 10:54:401007Durchsuche

Interviews sind etwas, das jeder von uns durchmachen muss, die meisten davon mehr als einmal. Hier finden Sie eine Zusammenfassung der neuesten Interviewfragen aus dem Jahr 2016, damit jeder bei der Suche nach einem Interview mit halbem Aufwand das doppelte Ergebnis erzielen kann Arbeit.

1. Kann Switch einen String als Parameter verwenden?

a. Vor Java 7 konnte Switch nur Byte, Short, Char, Int oder die entsprechenden Kapselungsklassen und Enum-Typen unterstützen. In JAVA 7 wurde String-Unterstützung hinzugefügt.

2. Der Unterschied zwischen gleich und ==:

a.== besteht darin, zu bestimmen, ob zwei Variablen oder Instanzen auf denselben Speicherbereich verweisen zeigen auf. Sind die Werte des Speicherplatzes gleich?

3. Was sind die öffentlichen Methoden von Object?

a. Die Methode „equals“ prüft, ob zwei Objekte gleich sind.
b Die Methode „clone“ kopiert das Objekt.
c Die Methode „getClass“ gibt das zum aktuellen Objekt gehörige Objekt zurück. Die Methoden „notify“, „notifyall“ und „wait“ werden alle zum Thread-Synchronisieren eines bestimmten Objekts verwendet

4 Javas vier Referenztypen, stark, schwach und schwach, und die verwendeten Szenarien

a. Verwenden von Soft-Referenzen und schwachen Referenzen zur Lösung des OOM-Problems: Verwenden Sie eine HashMap, um die Zuordnungsbeziehung zwischen dem Pfad des Bildes und der dem entsprechenden Bildobjekt zugeordneten Soft-Referenz zu speichern. Wenn der Speicher nicht ausreicht, fordert die JVM automatisch den Speicherplatz zurück Durch diese zwischengespeicherten Bildobjekte belegt, vermeiden Sie so effektiv das Problem von OOM

b Implementieren Sie den Cache von Java-Objekten über die Methode zum Abrufen von Soft-Accessible-Objekten: Wenn wir beispielsweise eine Employee-Klasse erstellen, müssen wir diese abfragen Informationen eines Mitarbeiters jedes Mal. Selbst wenn die Abfrage erst vor wenigen Sekunden erfolgte, muss eine Instanz neu erstellt werden, was viel Zeit in Anspruch nimmt. Wir können Soft-Referenzen und HashMap kombinieren. Speichern Sie zunächst die Referenz: Referenzieren Sie eine Instanz des Employee-Objekts in Form einer Soft-Referenz und speichern Sie die Referenz in der HashMap. Der Schlüssel ist die ID des Mitarbeiters und der Wert ist die Soft-Referenz von Dieses Objekt hingegen dient dazu, die Referenz herauszunehmen und zu prüfen, ob eine Soft-Referenz auf die Employee-Instanz im Cache vorhanden ist. Wenn ja, holen Sie sie aus der Soft-Referenz. Wenn keine Soft-Referenz vorhanden ist oder die aus der Soft-Referenz erhaltene Instanz null ist, erstellen Sie eine Instanz neu und speichern Sie die Soft-Referenz in der neu erstellten Instanz
c Seien Sie Müllsammler-Recycling. Auch wenn der aktuelle Speicherplatz nicht ausreicht, wird die JVM ihn nicht zurückfordern, sondern einen OutOfMemoryError-Fehler auslösen, der dazu führt, dass das Programm abnormal beendet wird. Wenn Sie die Zuordnung zwischen einer starken Referenz und einem Objekt aufheben möchten, können Sie die Referenz explizit auf Null zuweisen, sodass die JVM das Objekt zum richtigen Zeitpunkt wiederverwendet
d Soft-Referenz: Bei Verwendung von Soft Beim Referenzieren, Wenn genügend Speicherplatz vorhanden ist, kann die Soft-Referenz weiterhin verwendet werden, ohne vom Garbage Collector recycelt zu werden. Nur wenn nicht genügend Speicher vorhanden ist, wird die Soft-Referenz vom Garbage Collector recycelt.
e. Schwache Referenz: Objekte mit schwachen Referenzen haben einen kürzeren Lebenszyklus. Denn wenn die JVM eine Garbage Collection durchführt, wird die schwache Referenz unabhängig davon, ob der aktuelle Speicherplatz ausreicht, recycelt, sobald ein schwaches Referenzobjekt gefunden wird. Da der Garbage Collector jedoch ein Thread mit niedriger Priorität ist, kann er schwache Referenzobjekte möglicherweise nicht schnell finden
f Referenz, dann ist es äquivalent zu Ohne Referenz kann es jederzeit vom Garbage Collector gesammelt werden.
g. Verwendungsszenarien:

Was ist der Unterschied zwischen Hashcode und gleich?

a und Es gibt zwei Arten von Mengen. Diese Methode ermöglicht keine wiederholte Implementierung. Wenn Sie 1000 Elemente verwenden und ein neues Element erstellen, ist dies nicht der Fall 1000 Mal gleich aufzurufen, um sie einzeln zu vergleichen. Der Vergleich, ob es sich um dasselbe Objekt handelt, verringert die Effizienz erheblich. Der Hashcode gibt tatsächlich die Speicheradresse des Objekts zurück, wenn sich an dieser Position kein Element befindet, wird das Element direkt darüber gespeichert. Wenn an dieser Position bereits ein Element vorhanden ist, wird zu diesem Zeitpunkt die Methode equal aufgerufen, um mit dem neuen zu vergleichen Wenn sie gleich sind, werden sie nicht an andere Adressen gespeichert

Der Unterschied zwischen String, StringBuffer und StringBuilder

a Der StringBuffer-Typ besteht eigentlich darin, dass String ein unveränderliches Objekt ist

b.StringBuffer und StringBuilder werden durch char[]-Arrays auf der untersten Ebene implementiert
c.StringBuffer ist Thread-sicher, während StringBuilder Thread-unsicher ist

7. Unterscheiden Sie die Bedeutung von Override und Overload.

a.Overload ist, wie der Name schon sagt, ein Neuladen. Es kann sein, dass die Funktion denselben Funktionsnamen haben kann Der Parametername, der Rückgabewert und der Typ können jedoch nicht identisch sein. Alternativ können sich die Parameter, der Typ und der Rückgabewert ändern, der Funktionsname bleibt jedoch unverändert.

b. Wenn die Unterklasse die übergeordnete Klasse erbt, kann sie eine Methode mit demselben Namen und denselben Parametern wie ihre übergeordnete Klasse definieren. Methoden von Unterklassen und übergeordneten Klassen entsprechen dem Überschreiben (Überschreiben).

8. Der Unterschied zwischen abstrakten Klassen und Schnittstellen

a. Eine Klasse kann nur eine einzelne Klasse erben, aber mehrere Schnittstellen implementieren.

b. während Abstraktionsklassen Eigentumsbeziehungen betonen
c. Alle Methoden in abstrakten Klassen müssen nicht abstrakt sein. Sie können einige grundlegende Methoden in abstrakten Klassen implementieren. Die Schnittstelle erfordert, dass alle Methoden abstrakt sein müssen

9. Prinzipien und Eigenschaften verschiedener Methoden zum Parsen von XML: DOM, SAX, PULL

a.DOM: Speicherverbrauch: Lesen Sie zuerst alle XML-Dokumente in den Speicher und verwenden Sie dann die DOM-API Baumstruktur und Daten abrufen. Dies ist sehr einfach zu schreiben, verbraucht jedoch viel Speicher. Wenn die Datenmenge zu groß ist und das Telefon nicht leistungsfähig genug ist, kann es zu einem Absturz des Telefons kommen.
b.SAX: hohe Analyseeffizienz, geringer Speicherverbrauch, ereignisgesteuert: Einfacher ausgedrückt: Es scannt das Dokument nacheinander wird gescannt ( Die Ereignisverarbeitungsfunktion wird benachrichtigt, wenn das Dokument beginnt und endet, das Element beginnt und endet, das Dokument endet usw., und die Ereignisverarbeitungsfunktion ergreift entsprechende Aktionen und setzt dann den gleichen Scan bis zum Ende des Dokuments fort .
c.SAX: Ähnlich wie SAX können wir auch die Methode next() aufrufen, um das nächste Parsing-Ereignis abzurufen (d. h. Startdokument, Enddokument, Start-Tag, End-Tag). Bei einem bestimmten Element können Sie die getAttributte()-Methode von XmlPullParser aufrufen, um den Wert des Attributs abzurufen, oder Sie können dessen nextText() aufrufen, um den Wert dieses Knotens abzurufen.

10. Der Unterschied zwischen wait() und sleep()

sleep kommt von der Thread-Klasse und wait kommt von der Object-Klasse
Während des Aufrufs von sleep() Methode gibt der Thread die Objektsperre nicht frei. Der Thread, der die Wartemethode aufruft, gibt die Objektsperre frei
Sleep gibt keine Systemressourcen auf, nachdem Sleep Systemressourcen aufgibt und andere Threads die CPU belegen können
sleep(Millisekunden) muss eine Ruhezeit angeben , und es wird automatisch aktiviert, wenn die Zeit abgelaufen ist

11 Der Unterschied zwischen Heap und Stack in JAVA, lassen Sie uns über den Speichermechanismus von Java sprechen

a Referenzen werden auf dem Stapel zugewiesen
b. Heap-Speicher wird zum Speichern von Objekten und Arrays verwendet, die durch neue Klassenvariablen erstellt wurden (Variablen, die durch statische Variablen geändert wurden). Der Heap und die Speicheradresse im Heap werden im Stapel gespeichert
d. Wenn Sie das Java-Schlüsselwort new verwenden, weist das System den Variablen im Heap kontinuierlichen Speicherplatz zu, der in eine lange Länge konvertiert wird Durch einen Hash-Algorithmus, der auf verstreuten Heap-Speicheradressen basiert, wird eine Zahlenfolge verwendet, um den „physischen Ort“ dieser Variablen im Heap und den Lebenszyklus der Instanzvariablen darzustellen. Wenn der Verweis auf die Instanzvariable verloren geht, geht er verloren Wird vom GC (Garbage Collector) in die wiederverwertbare „Liste“ aufgenommen, gibt den Speicher im Heap jedoch nicht sofort frei
E. Lokale Variablen: Deklariert in einer Methode oder einem bestimmten Codesegment (z. B. einer for-Schleife). Sobald die lokale Variable den Gültigkeitsbereich verlässt, wird sie sofort freigegeben

12 Implementierungsprinzip des JAVA-Polymorphismus

a. Polymorphismus bedeutet, dass dieselbe Nachricht je nach Sendeverhalten mehrere verschiedene Methoden verwenden kann. (Das Senden einer Nachricht ist ein Funktionsaufruf)

b. Das Implementierungsprinzip ist die dynamische Bindung der vom Programm aufgerufenen Methode. Durch die Verfolgung des Quellcodes kann die JVM die entsprechende Methode finden Parameter.

13. JAVA-Garbage-Collection-Mechanismus

a. Markieren Sie das Objektdiagramm und zeichnen Sie erreichbare Objekte auf, um nicht erreichbare Objekte zu löschen generierte Fragmentierung

b. Markierungskomprimierungs-Recyclingmethode: Die Anfangsphase ist die gleiche wie bei der ersten Methode, mit nur einem weiteren Schritt, bei dem alle überlebenden Objekte an einem Ende des Speichers komprimiert werden, sodass die Speicherfragmente synthetisiert werden können ein großer Teil des wiederverwendbaren Speichers, wodurch die Speichernutzung verbessert wird Löscht alle Objekte im verwendeten Raum. Diese Methode eignet sich für kurzlebige Objekte. Das kontinuierliche Kopieren langlebiger Objekte führt zu einer verringerten Effizienz.
d. Generationsrecycling: Teilen Sie den Speicherraum in zwei oder mehr Bereiche auf, z. B. die junge Generation und die alte Generation. Das Merkmal der jungen Generation ist, dass Objekte schnell recycelt werden, sodass die Nutzungseffizienz in der jungen Generation steigt ist relativ hoch. Wenn ein Objekt nach mehreren Recyclingvorgängen noch überlebt, wird das Objekt in den als alte Generation bezeichneten Speicherbereich gestellt, und die alte Generation übernimmt den Markierungskomprimierungsalgorithmus
Referenzzählung (die einfachste und älteste Methode): bezieht sich auf die Ressource Der Prozess des Speicherns der Anzahl der Referenzen (kann ein Objekt, Speicher oder Speicherplatz usw. sein) und deren Freigabe, wenn die Anzahl der Referenzen Null wird
f Objektreferenzdurchquerung (die Methode, die derzeit von den meisten JVMs verwendet wird). ) : Die Durchquerung von Objektreferenzen beginnt mit einer Reihe von Objekten und bestimmt rekursiv erreichbare Objekte entlang jedes Links im gesamten Objektdiagramm. Wenn ein Objekt von einem (mindestens einem) dieser Stammobjekte aus nicht erreichbar ist, wird es als Müll gesammelt.
g Was ist ein Garbage Collector: Gibt Speicher für Objekte frei, die keine Referenzen mehr enthalten ob ein Objekt abgeholt werden muss?
i. Mehrere Garbage-Collection-Mechanismen

14. Wie viele Arten von Sammlungen gibt es in Java und was sind die Unterschiede?

a.HashTable ist älter und wird basierend auf der Dictionary-Klasse implementiert, während HashTable basierend auf der Map-Schnittstelle implementiert wird
b.HashTable ist threadsicher, während HashMap threadunsicher ist
c.HashMap kann make Sie verwenden einen Nullwert als Schlüssel oder Wert eines Tabelleneintrags. Der Unterschied zwischen ArrayList, LinkedList und Vector: Die unterste Ebene von ArrayList und Vector verwendet Arrays zum Speichern von Daten Sicherheit), daher ist die Leistung schlechter als bei ArrayList, LinkedList verwendet eine doppelt verknüpfte Liste zur Speicherung und der Direktzugriff ist langsamer.
e Die zugrunde liegende Quellcode-Implementierung von HashMap: Wenn wir Elemente in HashMap einfügen, berechnen wir zuerst die Hash-Wert basierend auf dem HashCode des Schlüssels. Es lohnt sich, die Position (d. h. den Index) dieses Elements im Array zu ermitteln. Wenn an dieser Position im Array andere Elemente gespeichert sind, werden die Elemente an dieser Position gespeichert die Form einer verknüpften Liste, und die neu hinzugefügten werden an der Spitze der Kette platziert. Die zuerst hinzugefügte wird am Ende der Kette platziert. Wenn an dieser Position im Array kein Element vorhanden ist, wird das Element direkt an dieser Position im Array platziert.
f.Fail-Fast-Mechanismus: Wenn andere Threads die Karte ändern, während sie den Iterator verwenden, wird eine ConcurrentModificationException ausgelöst. Dies ist der sogenannte Fail-Fast-Mechanismus. Dieser Mechanismus wird im Quellcode über das modCount-Feld implementiert. Wie der Name schon sagt, wird dieser Wert durch die Anzahl der Änderungen am HashMap-Inhalt erhöht Iterator-Initialisierungsprozess. Stellen Sie während des Iterationsprozesses fest, ob modCount und erwartetModCount gleich sind. Wenn sie nicht gleich sind, bedeutet dies, dass andere Threads Map geändert haben.
g Der Unterschied zwischen HashMap und HashTable.

Achtung Studierende, die Java lernen! ! !

Das obige ist der detaillierte Inhalt vonZusammenfassung einiger klassischer 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