1. Frage: Wenn A- und B -Objekte kreisförmig verwiesen werden, können sie dann GC sein?
ANTWORT: Ja, virtuelle Maschinen verwenden heute im Grunde genommen im Grunde die Barrierefreiheitsanalyse -Algorithmen, um festzustellen, ob das Objekt überlebt, anstatt sich einfach auf das Zählen des Objekts zu beziehen. Der Algorithmus zur Zugänglichkeitsanalyse verwendet eine Reihe von "GC -Roots" -Objekten (Objekte, auf die im statischen Attribut -Referenzobjekte statischer Attribut -Objekte verwiesen wird) als Ausgangspunkt. Die Pfade, nach denen diese Knoten nach unten suchen, werden als Referenzketten bezeichnet. Wenn ein Objekt keine Referenzkettenverbindung zu GC -Wurzeln hat, ist das Objekt nachgewiesen, dass das Objekt nicht verfügbar ist.
2. Wie wird der Speicherüberlauf in Java verursacht?
OutofMemoryError:
(1) Das Persal Space -Programm verwendet eine große Anzahl von Gläser oder Klassen, wodurch die java -virtuelle Maschine den Unterrichtsraum nicht unzureichend lädt.
Lösung: Passen Sie die Parameter XX an: Permsize und XX: MaxpermSize, reduzieren Sie JAR -Pakete und reduzieren Sie die doppelte Belastung von Klassen.
(2) Java Heap Space Java Virtual Machine erstellt zu viele Objekte.
Lösung: Passen Sie die Parameter XMS an (anfängliche Haufengröße) XMX (maximale Haufengröße), prüfen Sie, ob tote Schleifen oder unnötige doppelte Objekte
(3) Der JVM kann nicht zu viel Speicherplatz erstellen, und das Erstellen von Threads im JVM muss auch Threads im Betriebssystem erstellen.
Lösung: Größen Sie die Größe der Größe in JVM.
3. String S = "123"; Wie viele Objekte werden in dieser Aussage generiert?
Wenn es im String -Pool kein "123" gibt, wird ein Objekt erzeugt und in den konstanten Pool platziert. Wenn es "123" gibt, werden 0 Objekte erzeugt.
Wenn String s = new String("123") , wenn es keinen im konstanten Pool gibt, erstellen Sie eine im konstanten Pool und erstellen Sie dann einen im Heap -Speicher.
4. Was ist der Unterschied zwischen Fehler, Ausnahme und RunTimeException?
Fehler und Ausnahme sind beide Unterklassen von Throwable, und RunTimeException ist eine Ausnahmeunterklasse.
Der Fehler wird verwendet, um anzuzeigen, dass eine vernünftige Anwendung nicht versuchen sollte, Fehler zu erfassen.
Die Ausnahme weist auf die Bedingungen hin, die eine angemessene Anwendung erfassen muss. Es ist in überprüfte Ausnahmen und nicht überprüfte Ausnahmen unterteilt.
RunTimeException ist eine Ausnahme, die nicht überprüft wird, keinen Versuch erfordert, auf die Methode zu fangen oder zu deklarieren. Die Hauptunterklassen: NullPointer, arithmatisch, ArrayIndexoutofBounds, ClassCast.
5. Was ist der Unterschied zwischen Leser und InputStream?
Sie sind alle abstrakte Klassen, der Leser wird verwendet, um Zeichenströme (Zeichen oder Zeichenfolge) zu lesen, und InputStream wird zum Lesen von Byte -Streams (Byte -Arrays) verwendet.
6. Welche Rolle spielt HashCode?
HashCode wird hauptsächlich für schnelle Suchanfragen verwendet, z. Wenn zwei Objekte gleich sind, muss der HashCode gleich sein, während die HashCode -Objekte mit demselben HashCode möglicherweise nicht gleich sind, was gleichbedeutend ist, sie in die gleiche Box zu setzen.
7. Was ist der Unterschied zwischen Hashmap und Hashtable?
Gewindesicherheit, Nullwertschlüssel, Effizienz, HashMap (Iterator Iterator Iterator Iterator), Hashtable (Enumerator Iterator) und HashMap -Elementposition werden sich im Laufe der Zeit ändern
8. Kann ein Objekt in HashMap als Schlüssel verwendet werden? Gibt es Anforderungen an benutzerdefinierte Objekte als Schlüssel?
Ja, aber das Schlüsselobjekt muss ein unveränderliches Objekt sein. Andernfalls wird nach dem Einfügen in die Karte das Ändern des Schlüsselwerts dazu führen, dass der aktuelle Schlüsselwert mit dem Hash -Wert nicht übereinstimmt, dh nicht mit dem Array -Index übereinstimmt und nicht gefunden wird.
9. Soll ich Run () oder start () verwenden, um einen Thread zu starten?
Wie löst ich das Problem der Synchronisation und Parallelität beim Multithreading? Was ist ein Daemon -Thread? Was ist ein Daemon -Thread? Was ist eine Methode, um einen Daemon -Thread (die Bedeutung von Thread.SetDeamon ()) zu implementieren. Wie kann man einen Thread anhalten? Erklären Sie, was Fadensicherheit ist? Geben Sie ein Beispiel für Thread unsicher. Erklären Sie die Rolle synchronisierter Schlüsselwörter. Wenn ein Thread eine synchronisierte Methode eines Objekts eingibt, können andere Threads andere Methoden dieses Objekts eingeben?
(1) Start
(2) Erben Sie die Thread -Klasse, implementieren Sie die Runnable -Schnittstelle und verwenden Sie ExectuorService, Future und Callable, um den Thread zu implementieren, der den Wert zurückgibt.
(3) Synchronisationsmethode, Synchronisationscode Block, Sperre
(4) Damon -Threads bieten Dienstleistungen für den Betrieb anderer Threads wie GC und Thread an. setDeamon (true).
(5) Thread.Stop () wird nicht empfohlen (Ressourcen werden nicht korrekt freigegeben), und Interrupts werden verwendet, um Threads zu stoppen.
(6) Wenn mehrere Threads auf ein Objekt zugreifen, wenn die Planung und Wechselausführung dieser Threads in der Laufzeitumgebung nicht erforderlich ist, ist keine zusätzliche Synchronisation erforderlich, oder es werden andere Koordinationsvorgänge im Anrufer durchgeführt, und das richtige Ergebnis kann durch das Aufrufen dieses Objekts erhalten werden, dann ist das Objekt Thread-sicher.
(7) Tickets werden wiederholt verkauft.
(8) Synchronisieren von Schlüsselwörtern. Bei der Änderung statischer Methoden wird die Klasse als Sperrobjekt verwendet, und nur ein Thread kann auf diese Art von statischen Methoden der Synchronisation zugreifen. Bei der Änderung gewöhnlicher Methoden wird das Objekt als Sperrobjekt verwendet, und nur ein Thread kann auf diese Art von Synchronisationsmethoden zugreifen. Sie können auch den Codeblock für Sperre -Objekt -Synchronisierungscode anpassen.
(9) Die synchronisierte Methode kann nicht eingegeben und nicht synchronisiert werden.
10. Welche neuen Merkmale von JDK8 haben die entsprechenden Merkmale mit Beispielen gelernt und beschrieben?
(1) Lambda -Expression: funktionelle Programmierung, Methodenreferenz
(2) Stream -API
(3) Standardmethode der Schnittstelle
(4) Verbesserung der Datums- und Uhrzeit -API und Hinzufügen der DateTimeFormatter -Methode
11. Was sind die Prinzipien zur Optimierung von SQL?
Einzelheiten finden Sie in meiner Datenbankklassifizierung ein Blog
12. Was ist der Unterschied zwischen Serlvet und CGI im Lebenszyklus von Servlet?
Lebenszyklus: Klassenbelastung, Instanziierung (Konstruktion von Objekten), Initialisierung (Init), Service (Service) und Zerstörer.
CGI: Common Gateway -Schnittstelle, Common Gateway -Schnittstelle, geschrieben in der Perl -Sprache, erstellt für jede Anforderung ein CGI -Objekt.
Servlet: Es sind einmal eine Instanziierung und Initialisierung erforderlich und Multi-Threading.
13. Was sind die Vorteile von StringBuffer? Warum schnell?
Da StringBuffer keine wiederholte Erstellung von String -Objekten erfordert, ist dies jedoch nicht der Fall.
Zum Beispiel wird String S = "A" + "B" + "C" -Operations Compiler optimieren und werden String S = "ABC"
Der String S = S1 + S2 + S3 -Compiler wird ebenfalls optimiert und wird zu einem StringBuilder -Anhaftungsvorgang. Wenn es jedoch nicht zu einer Zeit + Operation gespleißt wird, wird das String -Objekt und das StringBuilder -Objekt wiederholt erzeugt, was sehr niedrig ist.
14. Verstehst du den Verschlüsselungs- und Entschlüsselungsalgorithmus?
Abstrakte Algorithmen: MD5 (128-Bit), SHA1 (160-Bit), ist ein irreversibler Prozess. Unabhängig davon, wie groß die Daten sind, werden Daten derselben Länge nach dem Digest -Algorithmus generiert. Es kann nur durch Wörterbücher geknackt werden.
Symmetrische Verschlüsselungsalgorithmen: DES, AES, der gleiche geheime Schlüssel wird beim Verschlingen und Entschlüsseln verwendet.
Asymmetrischer Verschlüsselungsalgorithmus: RSA, verwenden Sie verschiedene geheime Schlüssel beim Verschlingen und Entschlüsseln und verwenden Sie RSA2, wenn Sie eine Verbindung zu Alipay herstellen.
15. hohe Parallelität und hohe Last lösen?
(1) Der statische Seitenverbrauch ist minimal, HTML ist so weit wie möglich statisch, und das CMMS des Informationsveröffentlichungssystems wird verwendet, um automatisch statische Seiten für Informationseintrags- und Cache -dynamische Daten zu generieren, die am vorderen Ende nicht oft geändert werden.
(2) CDN verteilen Ressourcen wie CSS/JS auf verschiedenen Servern.
(3) Lastausgleich (Nginx).
(4) Cache -Daten, die nicht oft geändert werden (Redis, Memcache).
(5) Der Imageserver ist vom Anwendungsserver getrennt.
(6) Cluster.
16. Ganzzahl interner Cache?
In der Ganzzahlklasse befindet sich ein statisches Ganzzahl -Array, in dem einige ganzzahlige Objekte gespeichert sind, die initialisiert wurden. Der allgemeine Wert ist (-128 ~ 127). Wenn Sie == Vergleich verwenden, wird manchmal Falsch zurückgegeben, da der Wert nicht im Cache liegt. Sie sollten also gleichzeitig mit dem Vergleich verwendet werden.
17. Was ist das Prinzip der ArrayList?
(1) ArrayList ist Thread-Insecure. Wenn Sie Thread-Safe wünschen, verwenden Sie die CopyonWritelist.
(2) Die untere Schicht ist das Objekt [] -Array, und es gibt eine ElementData -Referenz, die auf das Array im Inneren zeigt. Am Anfang weist es standardmäßig auf ein zwischengespeichertes leeres Array (vorübergehend) hin. Wenn Sie erweitern möchten, wird ein neues Array mit einer Größe von 1,5-fach (x + (x >> 1)) neu neu und dann wird das alte Element durch das System durch das System kopiert.ArrayCopy native Methode.
(3) Die Algorithmuskomplexität der zufälligen Les- und Schreibmethode (GET, SET) ist o (1).
(4) Es gibt zwei Arten von Additionsoperationen. Die Algorithmuskomplexität von Add (Index, Wert) ist o (n), da sie durch das Kopieren von Elementen bewegt werden muss; Während die Algorithmuskomplexität des add (Wert-) Vorgangs o (1) ist (wenn keine Ausdehnung auftritt).
(5) Die zeitliche Komplexität des Löschvorgangs beträgt O (n), da sie, unabhängig davon, ob sie nach Index oder Objekt gelöscht wird, durch das Kopieren der Bewegungsoperation implementiert werden muss. Nach dem Löschen ändert sich die Arraygröße nicht und die Länge wird durch das Größenattribut beibehalten. Beim Löschen von Objekten können Sie keine neuen Objekte verwenden. Sie müssen sie durch Verweise auf Objekte in ArrayList löschen.
18. Was ist das Prinzip der LinkedList?
(1) Die zugrunde liegende Ebene ist eine bidirektionale verknüpfte Liste, die einen ersten Zeiger und einen letzten Zeiger beibehält.
(2) Die zeitliche Komplexität von zufälligen Lesen und Schreiben (GET, SET) ist o (n).
(3) die zeitliche Komplexität des Einfügungsvorgangs (Objekt) ist o (1); Die zeitliche Komplexität von Add (Index, Objekt) ist o (n).
(4) die zeitliche Komplexität des Löschvorgangs entfernen (Objekt) ist o (1); Die zeitliche Komplexität des Entfernens (Index) ist o (n).
19. Dinge zu beachten, wenn Threadpools verwendet werden?
(1) Deadlocks verhindern. Alle Threads im Thread -Pool warten darauf, dass Ereignisse A auftritt, und keine kostenlosen Threads, um A.
(2) Verhindern unzureichende Systemressourcen. Die Anzahl der Threads zu steuern.
(3) Verhindern Sie gleichzeitige Fehler.
(4) Verhindern der Gewinde. Ein Thread endet ungewöhnlich, da RunTimeException oder Fehler nicht normal gefangen werden, und der Thread -Pool verliert einen Faden.
(5) Überlastung der Aufgaben vermeiden.
20. Was ist der Unterschied zwischen @Autowire und @Resource im Frühling?
@Autowire wird standardmäßig standardmäßig zusammengestellt. Standardmäßig erfordert es, dass das Abhängigkeitsobjekt existieren muss. Wenn Null erlaubt ist, kann es auf false eingestellt werden. Wenn wir mit Namen zusammengebaut werden möchten, können wir es in Verbindung mit der @Qualifier -Annotation verwenden.
@Resource wird standardmäßig namentlich zusammengestellt. Wenn ein Bohnen, der mit dem Namen übereinstimmt, nicht gefunden werden kann, wird er entsprechend dem Typ zusammengestellt. Es kann über das Namensattribut festgelegt werden. Wenn das Namensattribut nicht angegeben ist, wird der Name des Feldes, wenn die Annotation auf dem Feld kommentiert wird, standardmäßig als Bean -Name für das Abhängigkeitsobjekt festgelegt. Wenn die Annotation auf der Setter -Methode des Attributs gekennzeichnet ist, wird der Attributname standardmäßig als Bean -Name zur Suche nach dem Abhängigkeitsobjekt angenommen.
21. Thread State Transfer Diagramm.
22. Methoden der Objektklasse?
(1) gleich: Bestimmen Sie, ob es gleich ist.
(2) Hashcode: Finden Sie den Hash -Wert. Wenn die Hash -Werte der beiden Objekte gleich sind, ist es möglicherweise nicht gleich; Wenn gleich, müssen die Hash -Werte der beiden Objekte gleich sein.
(3) ToString: Erhalten Sie die Saitenexpressionsform des Objekts, die im Allgemeinen umgeschrieben wird.
(4) GetClass: Reflexionsmethode, um die Klasse zu erhalten, zu der das Objekt gehört.
(5) Warten Sie: Es kann nur in synchronisierten Codesegmenten verwendet werden. Wenn der Zeitparameter nicht enthalten ist, wird der ausführende Thread das Schloss verlassen und in den Wartezustand (Wait Pool) gelangen.
(6) Benachrichtigen: Es kann nur in synchronisierten Codesegmenten verwendet werden, einen Thread aus dem wartenden Pool herausnehmen und in den Sperrflaggpool legen.
,
23. Das zugrunde liegende Prinzip der Java -Serialisierung?
Umwandeln Sie Objektinformationen in Bytecode -Informationen.
(1) Speichern Sie die Beschreibung der Serialisierung. (2) Informationen zur Beschreibung der aktuellen Klasse. (3) Beschreibung der aktuellen Klassenattribute. (4) Superklasse Beschreibung (5) Attribut Beschreibung der Superklasse (6) Superklasse -Attributwert Wert Beschreibung (7) Subklass -Attributwert Wert Beschreibung