Heim >Java >JavaInterview Fragen >Grundlegende Java-Interviewfragen (4)

Grundlegende Java-Interviewfragen (4)

(*-*)浩
(*-*)浩Original
2019-12-04 15:04:052667Durchsuche

Grundlegende Java-Interviewfragen (4)

Was nützt a.hashCode()? Was hat es mit a.equals(b) zu tun?

Die Methode hashCode() entspricht dem Hashwert des Ganzzahltyps des Objekts. Es wird häufig in Hash-basierten Sammlungsklassen wie Hashtable, HashMap, LinkedHashMap usw. verwendet. Sie ist besonders eng mit der Methode equal() verwandt. Gemäß der Java-Spezifikation müssen zwei Objekte, die mit der Methode equal() gleich sind, denselben Hash-Code haben.

Der Unterschied zwischen Byte-Stream und Zeichen-Stream (Empfohlenes Lernen: Java-Interviewfragen)

Um ein Stück Binärdaten einzeln auszugeben an ein bestimmtes Gerät senden oder Binärdaten einzeln von einem Gerät lesen, unabhängig vom Eingabe- und Ausgabegerät müssen wir eine einheitliche Methode verwenden, um diese Vorgänge abzuschließen.

Diese abstrakte Beschreibungsmethode heißt IO-Stream. Die entsprechenden abstrakten Klassen repräsentieren unterschiedliche Eingabe- und Ausgabegeräte.

Alles in einem Computer existiert letztendlich in binärer Byteform. Rufen Sie für häufig verwendete chinesische Zeichen zunächst die entsprechenden Bytes ab und schreiben Sie diese dann in den Ausgabestream.

Beim Lesen werden als Erstes Bytes gelesen. Wenn wir sie jedoch als Zeichen anzeigen möchten, müssen wir die Bytes in Zeichen konvertieren. Da solche Anforderungen weit verbreitet sind, stellt Java speziell eine Zeichenstrom-Wrapper-Klasse bereit.

Das zugrunde liegende Gerät akzeptiert immer nur Byte-Daten. Um eine Zeichenfolge auf das zugrunde liegende Gerät zu schreiben, müssen Sie die Zeichenfolge manchmal vor dem Schreiben in Bytes konvertieren. Der Zeichenstrom ist ein Wrapper für den Bytestrom. Er wandelt die Zeichenfolgen intern in Bytes um und schreibt sie dann auf das zugrunde liegende Gerät. Dadurch erhalten wir einige Informationen zum Schreiben oder Lesen von Zeichenfolgen IO-Gerät.

Achten Sie beim Konvertieren von Zeichen in Bytes auf Codierungsprobleme, da beim Konvertieren einer Zeichenfolge in ein Byte-Array diese tatsächlich in eine bestimmte codierte Byteform des Zeichens umgewandelt wird und beim Lesen das Gegenteil der Fall ist.

Was ist Java-Serialisierung und wie implementiert man Java-Serialisierung? Oder erläutern Sie bitte die Rolle der serialisierbaren Schnittstelle.

Manchmal übertragen wir ein Java-Objekt in einen Byte-Stream oder stellen ein Java-Objekt aus einem Byte-Stream wieder her. Beispielsweise müssen wir das Java-Objekt auf der Festplatte speichern oder auf andere Computer übertragen Im Netzwerk können wir in diesem Prozess unseren eigenen Code schreiben, um ein Java-Objekt in einen Bytestream in einem bestimmten Format umzuwandeln und ihn dann zu übertragen.

Jre selbst bietet diese Unterstützung. Wir können dazu die writeObject-Methode aufrufen. Wenn wir möchten, dass Java dies für uns erledigt, muss das zu übertragende Objekt die serialisierbare Schnittstelle implementieren Beim Kompilieren von Javac wird eine spezielle Verarbeitung durchgeführt, damit die kompilierte Klasse mit der writeObject-Methode betrieben werden kann. Dies wird als Serialisierung bezeichnet.

Die Klasse, die serialisiert werden muss, muss die Serializable-Schnittstelle implementieren. Bei dieser Schnittstelle handelt es sich um eine Mini-Schnittstelle, in der keine Methoden implementiert werden müssen. Serializable dient lediglich dazu, zu markieren, dass das Objekt serialisiert werden kann.

Wenn beispielsweise in der Webentwicklung das Objekt in der Sitzung gespeichert wird und Tomcat beim Neustart das Sitzungsobjekt auf der Festplatte serialisieren muss, muss dieses Objekt die Serializable-Schnittstelle implementieren. Wenn ein Objekt über ein verteiltes System über das Netzwerk übertragen werden soll, muss das übertragene Objekt die Serializable-Schnittstelle implementieren.

Beschreiben Sie den prinzipiellen Mechanismus des JVM-Ladens von Klassendateien?

Das Laden von Klassen in JVM wird durch ClassLoader und seine Unterklassen implementiert Komponenten. Es ist dafür verantwortlich, Klassen zur Laufzeit aus Klassendateien zu finden und zu laden.

Was ist der Unterschied zwischen Heap und Stack?

Java-Speicher ist in zwei Kategorien unterteilt, eine ist Stapelspeicher und die andere ist Heap-Speicher. Stapelspeicher bedeutet, dass, wenn das Programm eine Methode betritt, dieser Methode ein privater Speicherplatz zugewiesen wird, um lokale Variablen innerhalb dieser Methode zu speichern. Wenn diese Methode endet, werden auch die dieser Methode zugewiesenen Stapel freigegeben entsprechend.

Der Heap ist ein Speicher, der eine andere Funktion als der Stapel hat. Er wird im Allgemeinen zum Speichern von Daten verwendet, die sich nicht im aktuellen Methodenstapel befinden.

Zum Beispiel werden mit new erstellte Objekte auf dem Heap platziert, sodass sie nicht verschwinden, wenn die Methode endet. Nachdem die lokalen Variablen in der Methode mit final geändert wurden, werden sie im Heap statt im Stapel abgelegt.

Was ist GC?

Gabage Collection bedeutet, dass Programmierer anfällig für Probleme sind Recycling kann zu Instabilität oder sogar zum Absturz des Programms oder Systems führen.

Die von Java bereitgestellte GC-Funktion kann automatisch erkennen, ob das Objekt den Bereich überschreitet, um den Zweck der automatischen Rückgewinnung von Speicher zu erreichen. Die Java-Sprache bietet keine explizite Operationsmethode zum Freigeben von zugewiesenem Speicher.

Vorteile und Prinzipien der Müllabfuhr. Und betrachten Sie zwei Recyclingmechanismen.

Ein bemerkenswertes Merkmal der Java-Sprache ist die Einführung eines Garbage-Collection-Mechanismus, der das problematischste Speicherverwaltungsproblem für C++-Programmierer löst. Dadurch müssen Java-Programmierer beim Schreiben von Programmen nicht mehr an die Speicherverwaltung denken. Aufgrund des Garbage-Collection-Mechanismus haben Objekte in Java nicht mehr das Konzept eines „Bereichs“. Nur Verweise auf Objekte haben einen „Bereich“.

Garbage Collection kann Speicherlecks wirksam verhindern und den verfügbaren Speicher effektiv nutzen.

Der Garbage Collector wird normalerweise als separater Low-Level-Thread ausgeführt. Er löscht und recycelt Objekte im Speicherheap, die unter unvorhersehbaren Umständen abgestorben sind oder längere Zeit nicht verwendet wurden Rufen Sie den Garbage Collector auf, um ein Objekt oder alle Objekte zu sammeln.

Der Recyclingmechanismus umfasst Generations-Copy-Garbage-Collection, markierte Garbage-Collection und inkrementelle Garbage-Collection.

Was ist das Grundprinzip des Garbage Collectors? Kann der Garbage Collector den Speicher sofort zurückgewinnen? Gibt es eine Möglichkeit, die virtuelle Maschine aktiv zu benachrichtigen, um die Speicherbereinigung durchzuführen?

Wenn der Programmierer bei GC ein Objekt erstellt, beginnt GC mit der Überwachung der Adresse, Größe und Verwendung des Objekts. Normalerweise verwendet GC einen gerichteten Graphen, um alle Objekte im Heap aufzuzeichnen und zu verwalten.

Auf diese Weise wird ermittelt, welche Objekte „erreichbar“ und welche Objekte „nicht erreichbar“ sind. Wenn der GC feststellt, dass einige Objekte „nicht erreichbar“ sind, ist der GC für die Rückgewinnung dieser Speicherplätze verantwortlich.

Programmierer können System.gc() manuell ausführen, um den GC zur Ausführung zu benachrichtigen, aber die Java-Sprachspezifikation garantiert nicht, dass der GC ausgeführt wird.

Was ist in Java der Unterschied zwischen throw und throws?

throw wird verwendet, um ein Instanziierungsobjekt der Klasse java.lang.Throwable zu werfen, also Sie kann passieren Das Schlüsselwort throw löst eine Ausnahme aus, z. B.:

throw new IllegalArgumentException(“XXXXXXXXX″)

und die Rolle von throws besteht darin, dass die Methode die entsprechende Ausnahme auslöst, damit der Aufrufer sie verarbeiten kann. In Java muss jede nicht behandelte geprüfte Ausnahme zwangsweise in der throws-Klausel deklariert werden.

Gibt es einen Speicherverlust in Java? Bitte beschreiben Sie ihn kurz.

Erklären Sie zunächst, was ein Memory Leak ist: Der sogenannte Memory Leak bedeutet, dass ein Objekt oder eine Variable, die nicht mehr vom Programm verwendet wird, im Speicher belegt wurde. In Java gibt es einen Garbage-Collection-Mechanismus, der sicherstellen kann, dass das Objekt vom Garbage Collector automatisch aus dem Speicher gelöscht wird, wenn auf das Objekt nicht mehr verwiesen wird.

Da Java einen gerichteten Graphen für die Garbage-Collection-Verwaltung verwendet, kann es das Problem von Referenzzyklen beseitigen, wenn beispielsweise zwei Objekte aufeinander verweisen, solange sie nicht vom Root-Prozess aus erreichbar sind , der GC kann sie auch recyceln.

Speicherlecks in Java: Speicherlecks treten wahrscheinlich auf, wenn langlebige Objekte Verweise auf kurzlebige Objekte enthalten, obwohl die langlebigen Objekte nicht mehr benötigt werden Der Verweis darauf und die Verhinderung der Wiederverwertung ist das Szenario, in dem es in Java zu Speicherlecks kommt.

Laienhaft ausgedrückt: Der Programmierer erstellt möglicherweise ein Objekt und verwendet es nie wieder, aber das Objekt ist immer referenziert. Das heißt, das Objekt ist nutzlos, kann aber nicht vom Garbage Collector recycelt werden kann in Java auftreten.

Im Cache-System laden wir beispielsweise ein Objekt und legen es in den Cache (z. B. in ein globales Kartenobjekt) und verwenden es dann nie wieder. Dieses Objekt wird immer vom Cache referenziert , wird aber nicht mehr verwendet.

Das obige ist der detaillierte Inhalt vonGrundlegende Java-Interviewfragen (4). 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