20230910Zusammenfassung des Java-Interviews

1.Wie Threadlocalmap und Hashmap Hash-Konflikte lösen

Hash-Konflikt bezieht sich auf mehrere Objekte, die denselben Hash-Slot beanspruchen.
Hashmap verwendet die Zipper-Methode. Derselbe Slot verwaltet eine verknüpfte Liste oder einen rot-schwarzen Baum.
Threadlocalmap verwendet die offene Adressmethode und erkennt (linear, quadratisch, doppelt)
. Die Zipper-Methode eignet sich zur Lösung. Es treten häufig Hash-Konflikte auf (die Datenmenge ist unvorhersehbar).
Da der Schlüssel von threadlocalmap threadlocal ist, ist die Wahrscheinlichkeit einer Hash-Kollision sehr gering.

2. Die nach außen offenen Schnittstellen und Funktionen des Bean-Lebenszyklus

Lebenszyklus: Vorbereitung vor der Erstellung -> Instanz erstellen -> Abhängigkeitsinjektion -> Container-Cache -> Instanz zerstören
InitialisierungBean: Nachdem das Bean-Attribut festgelegt wurde, führen Sie die benutzerdefinierte Initialisierungslogik aus.
EinwegBean: Führen Sie beim Zerstören der Bean die benutzerdefinierte Bereinigungslogik aus#
@PostConstruct: Wird aufgerufen, wenn die Bean initialisiert wird.
@PreDestroy: Wird aufgerufen, bevor die Bean zerstört wird.
BeanPostProcessor: Ändern Sie den Bean-Attributwert, umschließen Sie das Bean-Objekt.
InstantiationAwareBeanPostProcessor: Steuern Sie die Erstellung der Bean, verarbeiten Sie die Attribute während der Attributinjektion.
BeanFactoryPostProcessor: Nach dem Laden der Bean-Definition, in der Bean-Instanz Ändern Sie die beanFactory-Konfiguration vor der Transformation

3. So ändern Sie die Bean nach der Initialisierung

1. Lassen Sie Ihre Bean-Klasse die InitializingBean-Schnittstelle implementieren und die Methode afterPropertiesSet überschreiben.
2. @PostConstruct
3. Implementieren Sie die BeanPostProcessor-Schnittstelle, die zwei Methoden enthält: postProcessBeforeInitialization und postProcessAfterInitialization
. 4. Wenn Ihre Bean durch Implementierung der FactoryBean-Schnittstelle erstellt wird, können Sie dies tun Geben Sie eine geänderte Bean-Instanz in der getObject-Methode von FactoryBean zurück.
5. Implementieren Sie die BeanFactoryPostProcessor-Schnittstelle, und Sie können die Bean-Konfiguration ändern, bevor die Bean instanziiert wird, nachdem der Container die Bean-Definition geladen hat.

4. So erben Sie Anmerkungen

1. Die Metaannotation @inherited kann für Klassen weitergegeben werden.
2. Basierend auf der Klassen-/Schnittstellenvererbung werden Unterklassen für Eigenschaften und Methoden ohne Annotationen neu geschrieben

5.@Primär

Wenn es mehrere Implementierungsklassen einer Schnittstelle gibt, weiß Spring nicht, welches
@Primary eingefügt werden soll: Dem annotierten Objekt für die Injektion wird Priorität eingeräumt. Es gibt nur eine und
@Qualifier wird direkt eingefügt: Der Name wird nach der Deklaration verwendet.

6. Grundsätze deklarativer Transaktionen

1. Spring startet, registriert automatisch Transaktionen, erstellt Postprozessoren für dynamische Proxy-Beans und verwaltet transaktionsbezogene Beans. 2.
Suchen Sie beim Erstellen einer Bean die @transational-Annotationsmethode über den Bean-Post-Manager und speichern Sie sie im Cache
. 3. Dynamischen Proxy erstellen, einen dynamischen Proxy für annotierte Proxys erstellen.
4. Wenn Sie eine Methode oder Klasse mit einer @transational-Annotation aufrufen, geben Sie den TransactionInterceptor ein, lösen Sie die Proxy-Logik aus, starten Sie die Transaktion und verarbeiten Sie verschachtelte bzw. einzelne Transaktionen. Wenn eine Ausnahme ausgelöst wird, erfolgt ein Rollback. Wenn keine Ausnahme gefunden wird, wird ein Commit ausgeführt.

7. Ausbreitungsmechanismus deklarativer Transaktionen

Stellen Sie sicher, dass eine Transaktion zwischen mehreren Aufrufmethoden gesteuert werden kann.
7
Erforderlich: Standardebene, wenn die Transaktion vorhanden ist, beitreten, andernfalls eine neue erstellen.
erforderlich_new: Eine neue erstellen, wenn vorhanden, die aktuelle anhalten.
Unterstützt: Wenn es existiert, beitreten. Wenn es nicht existiert, dann ist es keine Transaktion.
Obligatorisch: Wenn es existiert, beitreten. Wenn es nicht existiert, eine Ausnahme auslösen.
not_supports: Als Nicht-Transaktion ausführen. Wenn eine Transaktion existiert , suspendieren.
Niemals: Als Nicht-Transaktion ausführen. Wenn vorhanden, wird eine Ausnahme ausgelöst.
Verschachtelt: Wenn eine Transaktion vorhanden ist, erstellen Sie eine Transaktion als aktuelle verschachtelte Transaktion. Erstellen Sie eine neue, wenn keine vorhanden ist

8. Situationen, in denen deklarative Transaktionen fehlschlagen

@transactional wird auf die Weitergabe der nicht-öffentlichen Methode
@transactional angewendet und verwendet den
rollbackFor-Einstellungsfehler von nicht-transaktionalem @transactional
. Wenn A B aufruft, A B nicht deklariert und B es deklariert, ist es ungültig (nur wenn es aufgerufen wird). von jemand anderem als der aktuellen Klasse) )
Die Ausnahme wird von Catch abgefangen.
Beispielsweise unterstützt die Myisam-Engine keine Transaktionen.

9.Lösungen für verteilte Transaktionen

Mehrere Systeme arbeiten bei einem Vorgang zusammen, und eine Transaktion umfasst den Prozess, bei dem mehrere Systeme über das Netzwerk zusammenarbeiten.
cap: konsistent, verfügbar, Partitionstoleranz

1.2pc: In der Vorbereitungsphase benachrichtigt der Koordinator die Vorbereitung für die Übermittlung und gibt eine Rückmeldung über die Ausführungsergebnisse, übermittelt jedoch nicht die Transaktion. In der Festschreibungsphase kann die Benachrichtigung übermittelt werden und die Ergebnisse der Transaktionsübermittlung werden rückgemeldet Wenn dies fehlschlägt, wird es ausgerollt (was den Overhead des Koordinators erhöht). 2. Transaktionskompensation tcc: Versuch ist
abgeschlossen. Überprüfen und reservieren Sie Ressourcen, bevor Sie die Transaktion einreichen. Bestätigen bestätigt, dass das Ausführungsunternehmen die Versuchsressourcen offiziell ausführen wird. Abbrechen bricht die Freigabe ab der Try-Ressourcen durch das Unternehmen 3.
Nachrichtentransaktion: 2 Stück basierend auf Middleware, lokale Transaktionen und Nachrichtenversand werden in einer Transaktion platziert. Stellen Sie sicher, dass lokale Vorgänge und Nachrichtenversand gleichzeitig erfolgreich sind, asynchrone Koordination ist nicht förderlich für eine hohe Parallelität

10. Gängige Optimierungsmethoden von MySQL (Speicher, Abfrage, Index)

Index: Primärschlüsselabfrage gibt die Tabelle nicht zurück. Vermeiden Sie <> und
! , achten Sie auf die Spalten. Betrieb, fügen Sie entsprechend redundante Felder hinzu.
Datenbankstruktur: Verwenden Sie char18 anstelle von varchar18, einfache Datenstruktur, verwenden Sie weniger Text, entsprechende Tabellen und Datenbanken.
Prinzip der gemeinsamen Indexübereinstimmung ganz links
. Vollständige Abfrage: Protokoll, Erläuterung der Fehlerbehebung und Positionierung

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40986490/article/details/132790449
conseillé
Classement