Heim  >  Artikel  >  Java  >  Grundlegende Fragen zu Java-Hochfrequenzinterviews——(8)

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(8)

王林
王林nach vorne
2020-09-11 15:59:041809Durchsuche

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(8)

91, was ist ORM?

(Weitere Empfehlungen für verwandte Interviewfragen: Java-Interviewfragen und -antworten)

Object-Relational Mapping (kurz ORM) ist eine Methode zur Lösung der Diskrepanz zwischen dem objektorientierten Modell des Programms und dem relationalen Modell des Datenbank. Einfach ausgedrückt speichert ORM Objekte im Programm automatisch in einer relationalen Datenbank oder in einer relationalen Datenbank, indem es Metadaten verwendet, die die Zuordnung zwischen Objekten und Datenbanken beschreiben (XML oder Anmerkungen können in Java verwendet werden). in einer relationalen Datenbanktabelle in Java-Objekte konvertiert im Wesentlichen Daten von einer Form in eine andere.

92. Ist SessionFactory im Ruhezustand threadsicher? Ist die Sitzung threadsicher (können zwei Threads dieselbe Sitzung gemeinsam nutzen)?

SessionFactory entspricht einem Datenspeicherkonzept von Hibernate. Es ist threadsicher und kann von mehreren Threads gleichzeitig aufgerufen werden. SessionFactory wird im Allgemeinen nur beim Start erstellt. Für Anwendungen ist es am besten, SessionFactory im Singleton-Modus zu kapseln, um den Zugriff zu erleichtern.


Session ist ein leichtes, nicht threadsicheres Objekt (Sitzung kann nicht zwischen Threads geteilt werden), das eine Arbeitseinheit darstellt, die mit der Datenbank interagiert. Die Sitzung wird von SessionFactory erstellt und nach Abschluss der Aufgabe geschlossen. Die Sitzung ist die Hauptschnittstelle, die vom Persistenzschichtdienst bereitgestellt wird.

Session verzögert den Erhalt der Datenbankverbindung (d. h. sie wird nur bei Bedarf abgerufen). Um zu vermeiden, dass zu viele Sitzungen erstellt werden, können Sie ThreadLocal verwenden, um die Sitzung an den aktuellen Thread zu binden, sodass derselbe Thread immer dieselbe Sitzung erhält. Die getCurrentSession()-Methode von SessionFactory in Hibernate 3 kann dies tun.

93. Was sind die Methoden save(), update(), merge(), lock(), saveOrUpdate() und persist() von Session? Was ist der Unterschied?

   Hibernate-Objekte haben drei Zustände: vorübergehend, dauerhaft und getrennt.例 Die Instanz des Instant-Status kann durch Aufrufen von Save (), Persist () oder SaveorUpdate () geändert werden. save() und persist() lösen SQL INSERT-Anweisungen aus, und update() oder merge() lösen UPDATE-Anweisungen aus.


Der Unterschied zwischen save() und update() besteht darin, dass das eine ein transientes Objekt in einen dauerhaften Zustand versetzt und das andere ein freies Objekt in einen dauerhaften Zustand. Die Methode merge() kann die Funktionen der Methoden save() und update() vervollständigen. Ihre Absicht besteht darin, den neuen Status mit dem vorhandenen persistenten Objekt zusammenzuführen oder ein neues persistentes Objekt zu erstellen. (Für die Persist()-Methode laut offizieller Dokumentation:

1. Persist()-Methode zum Beibehalten einer Instanz einer Instanz, sie garantiert jedoch nicht, dass der Bezeichner sofort in die persistente Instanz eingefügt wird. Das Ausfüllen kann verschoben werden zur Flush-Zeit;

2. Die persist()-Methode stellt sicher, dass sie keine INSERT-Anweisung auslöst, wenn ein langer Sitzungsprozess gekapselt werden muss ;

3. Die Methode save() garantiert nicht Punkt 2. Sie gibt den Bezeichner zurück, sodass die INSERT-Anweisung sofort ausgeführt wird, egal ob innerhalb oder außerhalb der Transaktion. Was den Unterschied zwischen der Methode lock() und der Methode update() betrifft, so verwandelt die Methode update() ein Objekt in einen getrennten Zustand, der in einen dauerhaften Zustand geändert wurde das hat sich nicht in einen dauerhaften Zustand geändert.

94 erklärt den Prozess des Ladens von Entitätsobjekten nach Sitzung.
  1. Bevor die Datenbankabfragefunktion aufgerufen wird, durchsucht die Sitzung zunächst den Entitätstyp und den Primärschlüssel im Cache der ersten Ebene. Wenn die Cache-Suche der ersten Ebene erfolgreich ist, wird direkt zurückgegeben
2. Wenn der Cache der ersten Ebene nicht erreicht, sucht die Sitzung im aktuellen NonExists-Datensatz (entspricht einer Abfrage-Blacklist. Wenn wiederholt ungültige Abfragen auftreten, kann eine schnelle Beurteilung vorgenommen werden, um die Leistung zu verbessern). Abfragebedingung existiert in NonExists, null wird zurückgegeben;
                                                                                                               Kann direkt zurückgegeben werden, wenn die Abfrage des Second-Level-Cache den Second-Level-Cache nicht abfragt und null zurückgibt Erstellen Sie gemäß der Zuordnungskonfiguration und der SQL-Anweisung das entsprechende Entitätsobjekt. 6. Integrieren Sie das Objekt in die Verwaltung der Sitzung (Level 1-Cache). 7. Wenn ein entsprechender Interceptor vorhanden ist, führen Sie die onLoad-Methode aus Interceptor;
8. Wenn es aktiviert und auf die Verwendung des Second-Level-Cache eingestellt ist, wird das Datenobjekt in den Second-Level-Cache aufgenommen. 9. Das Datenobjekt zurückgeben.

95, was ist der Unterschied zwischen der Verwendung von # und $ zum Schreiben von Platzhaltern in MyBatis?数据#Als Zeichenfolge werden die übergebenen Daten automatisch zu den übergebenen Daten hinzugefügt

$ zeigt die übertragenen Daten direkt an, um sie in SQL zu generieren.

Hinweis: Die Verwendung des Platzhalters $ kann zu SQL-Injection-Angriffen führen, wenn # verwendet werden kann. Sie sollten beim Schreiben der Order-by-Klausel $ verwenden.


96, Erklären Sie die Rolle des Namespace in MyBatis.

In großen Projekten kann es eine große Anzahl von SQL-Anweisungen geben. Derzeit ist es nicht einfach, jeder SQL-Anweisung eine eindeutige Identifikation (ID) zu geben. Um dieses Problem zu lösen, können Sie in MyBatis für jede Zuordnungsdatei einen eindeutigen Namensraum erstellen, sodass jede in dieser Zuordnungsdatei definierte SQL-Anweisung zu einer in diesem Namensraum definierten ID wird. Solange wir sicherstellen können, dass diese ID in jedem Namespace eindeutig ist, treten keine Konflikte mehr auf, selbst wenn die Anweisungs-IDs in verschiedenen Zuordnungsdateien gleich sind.

(Video-Tutorial-Empfehlung:

Java-Kurs

)


97 Was bedeutet dynamisches SQL in MyBatis?

            Für einige komplexe Abfragen können wir mehrere Abfragebedingungen angeben, aber diese Bedingungen können vorhanden sein oder auch nicht. Wenn wir das Persistenzschicht-Framework nicht verwenden, müssen wir die SQL-Anweisungen möglicherweise selbst zusammenstellen, aber MyBatis stellt die dynamische SQL-Funktion bereit Lösen Sie dieses Problem. Diese Frage. Die Hauptelemente, die zur Implementierung von dynamischem SQL in MyBatis verwendet werden, sind:

- if – select / when / else – trim – where – set – foreach Anwendungsbeispiel:


98, was sind die Mängel der JDBC-Programmierung und wie löst MyBatis diese Probleme?

1. JDBC: Häufiges Erstellen und Freigeben von Datenbankverknüpfungen führt zu einer Verschwendung von Systemressourcen und beeinträchtigt die Systemleistung. Dieses Problem kann durch die Verwendung eines Datenbankverbindungspools gelöst werden.


MyBatis: Konfigurieren Sie den Datenverbindungspool in SqlMapConfig.xml und verwenden Sie den Verbindungspool zum Verwalten von Datenbankverbindungen.

2. JDBC: SQL-Anweisungen werden in den Code geschrieben, was die Wartung des Codes erschwert. Die tatsächliche Anwendung von SQL kann sich stark ändern, und SQL-Änderungen erfordern Änderungen am Java-Code.

MyBatis: Konfigurieren Sie die SQL-Anweisung in der Datei XXXXmapper.xml und trennen Sie sie vom Java-Code.
3. JDBC: Es ist mühsam, Parameter an die SQL-Anweisung zu übergeben, da die Where-Bedingung der SQL-Anweisung nicht unbedingt sicher ist, sie kann mehr oder weniger sein und die Platzhalter müssen den Parametern eins zu eins entsprechen .

MyBatis: Mybatis ordnet Java-Objekte automatisch SQL-Anweisungen zu.
    4. JDBC: Es ist mühsam, die Ergebnismenge zu analysieren. SQL-Änderungen führen zu Änderungen im Parsing-Code und müssen vor dem Parsen durchlaufen werden. Es wäre bequemer, die Datenbankdatensätze in Pojo-Objekte zu analysieren.

MyBatis: Mybatis ordnet SQL-Ausführungsergebnisse automatisch Java-Objekten zu.

99, Was sind die Unterschiede zwischen MyBatis und Hibernate?

1. Mybatis unterscheidet sich von Hibernate. Es handelt sich nicht vollständig um ein ORM-Framework, da MyBatis von Programmierern verlangt, SQL-Anweisungen selbst zu schreiben. Mybatis kann die SQL-Anweisungen jedoch flexibel für die Ausführung über XML oder Anmerkungen konfigurieren und Java-Objekte kombinieren Durch die Zuordnung wird das endgültig ausgeführte SQL generiert, und schließlich wird das Ergebnis der SQL-Ausführung zugeordnet, um ein Java-Objekt zu generieren.
2. Mybatis hat eine niedrige Lernschwelle und ist leicht zu erlernen. Es ist sehr flexibel und eignet sich sehr gut für die Softwareentwicklung, die keine hohen Anforderungen an relationale Daten stellt Da sich die Anforderungen dieser Art von Software häufig ändern, müssen die Ergebnisse schnell ausgegeben werden, sobald sich die Anforderungen ändern. Die Voraussetzung für Flexibilität ist jedoch, dass Mybatis nicht datenbankunabhängig sein kann. Wenn Sie Software implementieren müssen, die mehrere Datenbanken unterstützt, müssen Sie mehrere Sätze von SQL-Zuordnungsdateien anpassen, was eine hohe Arbeitsbelastung darstellt. ​ ​ ​ 3. Hibernate verfügt über starke Objekt-/Relational-Mapping-Funktionen und eine gute Datenbankunabhängigkeit. Bei Software mit hohen Anforderungen an relationale Modelle (z. B. kundenspezifische Software mit festen Anforderungen) können Sie viel sparen, wenn Sie Hibernate zur Entwicklung verwenden des Codes und verbessern die Effizienz. Der Nachteil von Hibernate besteht jedoch darin, dass die Schwelle zum Lernen hoch und die Schwelle zur Beherrschung noch höher ist. Darüber hinaus ist es erforderlich, die O/R-Zuordnung zu entwerfen, die Leistung und das Objektmodell abzuwägen und Hibernate gut zu verwenden starke Erfahrung und Fähigkeit. 的 Kurz gesagt: Solange die Anforderungen des Benutzers in einer Umgebung mit begrenzten Ressourcen erfüllt werden können, ist eine Softwarearchitektur mit guter Wartung und guter Skalierbarkeit eine gute Architektur, sodass das Framework nur für Frameworks geeignet ist.

(Sie können es hier auch mit Ihrem eigenen Verständnis kombinieren, seien Sie nicht überfordert)

100, kurz über den First-Level-Cache und den Second-Level-Cache von MyBatis sprechen?

                                                                                                                               Ruft Mybatis zunächst den Cache auf, um die Ergebnismenge abzufragen. Ist keine Ergebnismenge vorhanden, ruft sie die Ergebnismenge aus dem Cache ab und gibt sie zurück, ohne zur Datenbank zu gehen . Der interne Speichercache von Mybatis verwendet eine HashMap und der Schlüssel ist die Anweisung hashCode+sqlId+Sql. value ist das Java-Objekt, das durch Mapping aus der Abfrage generiert wird. Der Cache der zweiten Ebene ist der Abfrage-Cache. Sein Bereich ist der Namespace eines Mappers, d. h. das Abfragen von SQL im selben Namespace kann Daten aus dem Cache abrufen. Der Cache der zweiten Ebene kann SqlSession umfassen.


Empfohlene verwandte Tutorials:

Java-Einführungs-Tutorial

Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews——(8). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen