Heim > Java > JavaInterview Fragen > Hauptteil

Zusammenfassung der neuesten SSH-Framework-Interviewfragen im Jahr 2023

Freigeben: 2022-12-15 20:24:13
nach vorne
3412 Leute haben es durchsucht

Zusammenfassung der neuesten SSH-Framework-Interviewfragen im Jahr 2023

Wie funktioniert Hibernate und warum sollten wir Hibernate verwenden?

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

Arbeitsprinzip:

1. Lesen und analysieren Sie die Konfigurationsdatei

2. Lesen und analysieren Sie die Zuordnungsinformationen, erstellen Sie SessionFactory

3 . Sitzung öffnen

4. Transaktionstransaktion erstellen

5. Persistenzvorgang

6. Transaktion senden

7. Sitzung schließen

8. SessionFactory schließen

Warum Hibernate (d. h. seine Vorteile):

1. Der Code für den JDBC-Zugriff auf die Datenbank ist gekapselt, was den mühsamen und sich wiederholenden Code der Datenzugriffsschicht erheblich vereinfacht.

2. Hibernate ist ein Mainstream-Persistenz-Framework, das auf JDBC und einer hervorragenden ORM-Implementierung basiert. Es vereinfacht die Codierungsarbeit der DAO-Schicht erheblich.

3. Der Ruhezustand verwendet einen Java-Reflexionsmechanismus anstelle eines Bytecode-Verbesserungsprogramms, um Transparenz zu erreichen.

4. Die Flexibilität der Hibernate-Zuordnung ist ausgezeichnet. Es unterstützt verschiedene relationale Datenbanken und verschiedene komplexe Beziehungen von Eins-zu-Eins bis Viele-zu-Viele. N2, der Unterschied zwischen den Get- und Load-Methoden im Ruhezustand

Hibernate besteht darin, dass die Datenmethode in der Datenbank vorhanden sein muss. Sie können den Agenten mit Sicherheit verwenden, um das Laden zu verzögern echte Daten, andernfalls wird Null zurückgegeben.

Detaillierte Einführung:

1. Bei der Get-Methode überprüft der Ruhezustand zunächst, ob die der ID entsprechenden Daten vorhanden sind, und sucht dann im Cache der zweiten Ebene Fragen Sie die Datenbank ab. Wenn sie nicht in der Datenbank vorhanden ist, wird null zurückgegeben.

2. Wenn die Lademethode das Entitätsobjekt lädt, wird es gemäß dem Lazy-Attribut auf Klassenebene in der Zuordnungsdatei konfiguriert (Standard ist true).

Wird von Fall zu Fall besprochen:

(1) Wenn dies zutrifft, suchen Sie zunächst im Sitzungscache, ob das der ID entsprechende Objekt vorhanden ist. Wenn es nicht vorhanden ist, verwenden Sie Lazy Loading, um zurückzukehren das Proxy-Klassenobjekt der Entität (die Proxy-Klasse Es ist eine Unterklasse der Entitätsklasse und wird von CGLIB dynamisch generiert). Wenn das Objekt tatsächlich verwendet wird (außer zum Abrufen der OID), werden der Cache der zweiten Ebene und die Datenbank abgefragt. Wenn keine passenden Datensätze gefunden werden, wird eine ObjectNotFoundException ausgelöst.

                                                                                                                            (2) Wenn es falsch ist, ist die Suchreihenfolge dieselbe wie bei der Get-Methode, mit der Ausnahme, dass am Ende eine ObjectNotFoundException ausgelöst wird, wenn kein Datensatz gefunden wird, der die Bedingungen erfüllt.

3. Wie funktioniert Hibernate Lazy Load?

Hibernate3 bietet die Lazy-Loading-Funktion von Eigenschaften. Wenn Hibernate die Daten abfragt, sind die Daten nicht im Speicher vorhanden. Stattdessen ist das Objekt im Speicher vorhanden, wenn das Programm die Daten tatsächlich verarbeitet. Dadurch wird der Speicheraufwand des Servers gespart und die Serverleistung verbessert .

4. Wie erkennt man die Beziehung zwischen Klassen in Hibernate? Die Beziehung zwischen Klassen spiegelt sich hauptsächlich in der Beziehung zwischen Tabellen und Tabellen wider. Sie werden alle in das Programm eingefügt zusammen, und sie arbeiten über Viele-zu-Eins, Eins-zu-Viele und Viele-zu-Viele in der Konfigurationsdatei.


5. Was ist der Unterschied zwischen update() und saveOrUpdate() im Ruhezustand?

saveOrUpdate():

1. Wenn das Objekt in dieser Sitzung bereits persistiert ist, tun Sie nichts

2. Wenn ein anderes mit dieser Sitzung verknüpftes Objekt denselben Persistenzbezeichner (Identifier) ​​hat, werfen Sie eine Ausnahme aus

3. Wenn Das Objekt verfügt nicht über ein persistentes Identifikator-Attribut (Identifier). Rufen Sie save() darauf auf )

5. Wenn das Objekt Versionsinformationen enthält (über oder ) und der Wert des Versionsattributs angibt, dass es sich um ein neu instanziiertes Objekt handelt, rufen Sie save() auf. Ansonsten update() dieses Objekt.

update():

dient zum direkten Aktualisieren eines freien Entitätsobjekts.

6. Lassen Sie uns über den Caching-Mechanismus von Hibernate sprechen.

1. Cache der ersten Ebene: Der interne Cache existiert im Ruhezustand und ist ein Cache auf Anwendungstransaktionsebene.

2. Cache der zweiten Ebene: Cache auf Anwendungsebene, verteilter Cache.

Nutzungsszenarien: Daten werden nicht von Dritten geändert, die Datengröße liegt in einem akzeptablen Bereich, die Häufigkeit der Datenaktualisierung ist gering, dieselben Daten werden häufig vom System verwendet, unkritische Daten

3. Führen Sie einen Drittanbieter-Cache ein (z. B. ehcache usw.).

7. Wie optimiert man den Ruhezustand?

1. Verwenden Sie eine bidirektionale Eins-zu-Viele-Assoziation anstelle einer Eins-zu-Viele-Assoziation

3 Stattdessen „Many-to-One“

4. Konfigurieren Sie den Objekt-Cache, verwenden Sie keinen Sammlungscache

5. Verwenden Sie „Bag“ für „One-to-Many“-Sammlungen und „Set“ für „Many-to-Many“-Sammlungen

6 Geerbte Klassen

7. Es sollte weniger Tabellenfelder geben und keine Angst vor zu vielen Tabellenzuordnungen haben

8, sprechen wir über das verzögerte Laden im Ruhezustand und openSessionInView

Das verzögerte Laden sollte innerhalb der Sitzung erfolgen Bereich und geladen, wenn verwendet;

opensessioninview schreibt einen Filter in die Webebene, um die Sitzung zu öffnen und zu schließen. Dies bedeutet, dass die Sitzung während einer Anfrage immer geöffnet ist, wodurch die Prämisse des verzögerten Ladens in der Sitzung sichergestellt wird.

(Videoempfehlung:

Java-Kurs

) 9, erläutern Sie kurz den Workflow von struts2


1 Der Client-Browser gibt eine HTTP-Anfrage aus.

2. Gemäß der web.xml-Konfiguration wird die Anfrage von FilterDispatcher empfangen.

3. Suchen Sie gemäß der Konfiguration von struts.xml die Action-Klasse und -Methode, die aufgerufen werden müssen, und fügen Sie den Wert über IoC in Aciton ein.

4. Die Aktion ruft die Geschäftslogikkomponente auf, um die Geschäftslogik zu verarbeiten.

5. Nachdem die Aktion ausgeführt wurde, wird das entsprechende Rückgabeergebnis gemäß der Konfiguration in struts.xml gefunden und zur entsprechenden Seite gesprungen.

6. HTTP-Antwort an den Client-Browser zurücksenden.

10. Lassen Sie uns über das Entwurfsmuster von Struts sprechen

MVC-Muster


1. ActionServlet wird geladen und initialisiert, wenn die Webanwendung gestartet wird.

2. Wenn der Benutzer das Formular absendet, wird ein konfiguriertes ActionForm-Objekt erstellt und Die entsprechenden Daten des Formulars werden ausgefüllt;

3. ActionServlet ermittelt anhand der in der Struts-config.xml-Datei konfigurierten Einstellungen, ob nach der Überprüfung Validate() von ActionForm aufgerufen und ausgewählt wird An welche Aktion die Anfrage gesendet werden soll, erstellt ActionServlet zunächst dieses Objekt und ruft dann die Methode „execute()“ von Action auf.

4. Execute() ruft Daten vom ActionForm-Objekt ab und vervollständigt die Geschäftslogik , gibt ein ActionForward-Objekt zurück und ActionServlet leitet die Kundenanfrage dann an die durch das ActionForward-Objekt angegebene JSP-Komponente weiter.

5. Die durch das ActionForward-Objekt angegebene JSP generiert eine dynamische Webseite und gibt sie an den Kunden zurück.

11, Vor- und Nachteile von Struts

Vorteile:


1. Implementiert das MVC-Modell mit einer klaren Struktur, sodass sich Entwickler nur auf die Implementierung der Geschäftslogik konzentrieren können.

2. Es stehen zahlreiche Tags zur Verfügung Die Tag-Bibliothek von Struts (Taglib) kann bei flexibler Verwendung die Entwicklungseffizienz erheblich verbessern. Was inländische JSP-Entwickler betrifft, entwickeln sie zusätzlich zu den üblichen Tags, die mit JSP geliefert werden, selten ihre eigenen Tags. Vielleicht ist Struts ein guter Ausgangspunkt.

3. Seitennavigation wird in Zukunft eine Entwicklungsrichtung sein. Dadurch wird der Kontext des Systems klarer. Über eine Konfigurationsdatei können Sie die Verbindung zwischen verschiedenen Teilen des gesamten Systems erfassen, was für die spätere Wartung von großem Nutzen ist. Dieser Vorteil wird noch deutlicher, wenn eine andere Gruppe von Entwicklern das Projekt übernimmt.

4. Bereitstellung eines Ausnahmebehandlungsmechanismus

5. Verwaltung des Datenbankverbindungspools

6. Unterstützung von I18N

Nachteile:

1. Wenn Sie zur Anzeigeebene wechseln, müssen Sie jedes Mal vorwärts konfigurieren Anzeigeschicht, ich glaube, dass die meisten davon direkt an JSP übertragen werden, und wenn es um die Umleitung geht, muss die Weiterleitung konfiguriert werden. Wenn es zehn Anzeigeschicht-JSPs gibt, müssen Struts zehnmal konfiguriert werden, und dies ist nicht der Fall Manchmal müssen Verzeichnis- und Dateiänderungen erneut geändert werden. Beachten Sie, dass bei jeder Änderung der Konfiguration das gesamte Projekt neu bereitgestellt werden muss und ein Server wie Tomcate neu gestartet werden muss und häufigen Änderungen ist ein solcher Vorgang einfach und unvorstellbar. Das ist es jetzt. Dutzende oder Hunderte von Menschen nutzen unser System gleichzeitig online. Sie können sich vorstellen, wie besorgt ich bin.

2. Struts Action muss threadsicher sein, sodass nur eine Instanz alle Anfragen bearbeiten kann. Daher müssen alle von Aktionen verwendeten Ressourcen einheitlich synchronisiert werden, was zu Thread-Sicherheitsproblemen führt.

3. Das Testen ist unpraktisch. Jede Aktion von Struts ist mit der Webschicht gekoppelt, sodass das Testen vom Webcontainer abhängt und auch Unit-Tests schwierig zu implementieren sind. Es gibt jedoch ein Junit-Erweiterungstool Struts TestCase, das seine Unit-Tests implementieren kann.

4. FormBean von Struts behandelt alle Daten als String-Typ und kann das Tool Commons-Beanutils für die Typkonvertierung verwenden. Die Konvertierung erfolgt jedoch ausschließlich auf Klassenebene und der Konvertierungstyp ist nicht konfigurierbar. Außerdem ist es sehr schwierig, Fehlermeldungen während der Typkonvertierung an den Benutzer zurückzugeben.

5. Struts ist bei der Verarbeitung von Aktionen zu stark auf ServletRequest und ServletResponse angewiesen, sodass der Servlet-Container nicht entfernt werden kann.

6. In Bezug auf die Front-End-Ausdruckssprache integriert Struts JSTL und verwendet daher hauptsächlich die JSTL-Ausdruckssprache, um Daten zu erhalten. Die Ausdruckssprache von JSTL ist jedoch sehr schwach im Umgang mit Sammlungs- und Indexeigenschaften.

7. Es ist schwierig, die Ausführung einer Aktion zu kontrollieren. Wenn Struts eine Aktion erstellt, ist es sehr schwierig, deren Ausführungsreihenfolge zu kontrollieren. Möglicherweise müssen Sie das Servlet sogar neu schreiben, um Ihre funktionalen Anforderungen zu erfüllen.

8. Verarbeitung vor und nach der Aktionsausführung Wenn Struts Aktionen verarbeitet, basiert es auf Klassenhierarchien und es ist schwierig, vor und nach der Aktionsverarbeitung zu arbeiten.

Unzureichende Unterstützung für Ereignisse. In Struts entspricht ein Formular tatsächlich nur einem Ereignis Im Vergleich zum Komponentenereignis ist das Anwendungsereignis ein grobkörniges Ereignis.

12. Warum Feder nutzen (also Vorteile)?

1. Spring kann Ihre Objekte der mittleren Ebene effektiv organisieren, unabhängig davon, ob Sie sich für die Verwendung von EJB entscheiden. Wenn Sie nur Struts oder andere Frameworks verwenden, die speziell für J2EE-APIs entwickelt wurden, ist Spring bestrebt, den Rest zu lösen.

2. Spring kann den übermäßigen Einsatz von Singleton eliminieren, der in vielen Projekten üblich ist. Übermäßiger Einsatz von Singleton verringert die Testbarkeit und Objektorientierung des Systems.

3. Durch die konsistente Handhabung von Konfigurationsdateien über verschiedene Anwendungen und Projekte hinweg kann Spring die Notwendigkeit verschiedener benutzerdefinierter Formate von Eigenschaftendateien überflüssig machen. Haben Sie sich schon einmal gefragt, nach welchem ​​magischen Attribut oder welcher Systemeigenschaft eine bestimmte Klasse sucht, und dafür müssen Sie Javadoc oder sogar Quellcode lesen? Bei Spring müssen Sie sich nur die JavaBean-Eigenschaften der Klasse ansehen. Die Verwendung von Inversion ofControl (unten besprochen) trägt dazu bei, diese Vereinfachung zu erreichen.

4. Indem Spring die Kosten für Programmierschnittstellen anstelle von Klassen auf nahezu Null reduziert, kann es die Entwicklung guter Programmiergewohnheiten fördern.

5. Spring ist so konzipiert, dass damit erstellte Anwendungen so wenig wie möglich auf seine APIs angewiesen sind. Die meisten Geschäftsobjekte in Spring-Anwendungen weisen keine Abhängigkeiten von Spring auf.

6. Mit Spring erstellte Anwendungen lassen sich leicht Unit-Tests durchführen.

7. Spring kann die Verwendung von EJB zu einer Implementierungsentscheidung machen und nicht zu einer unvermeidlichen Wahl der Anwendungsarchitektur. Sie können POJOs oder lokale EJBs verwenden, um die Geschäftsschnittstelle zu implementieren, ohne den aufrufenden Code zu beeinträchtigen.

8. Spring hilft Ihnen, viele Probleme zu lösen, ohne EJB zu verwenden. Spring kann einen EJB-Ersatz bereitstellen, der für viele Webanwendungen geeignet ist. Spring kann beispielsweise eine deklarative Transaktionsverwaltung mithilfe von AOP bereitstellen, ohne einen EJB-Container verwenden zu müssen, und wenn Sie nur mit einer einzigen Datenbank arbeiten müssen, benötigen Sie nicht einmal eine JTA-Implementierung.

9. Spring bietet ein konsistentes Framework für den Datenzugriff, unabhängig davon, ob JDBC oder O/R-Mapping-Produkte (wie Hibernate) verwendet werden.

13. Listen Sie die verschiedenen Möglichkeiten auf, die Sie kennen, um Spring-Transaktionen zu implementieren

(1), Programmatische Transaktionsverwaltung: erfordert manuelles Schreiben von Code, wird in der tatsächlichen Entwicklung selten verwendet,

(2), basierend auf der Aussage von TransactionProxyFactoryBean Für deklarativ Bei der Transaktionsverwaltung müssen Sie für jede Klasse, die die Transaktionsverwaltung ausführt, entsprechende Konfigurationen vornehmen

​​​​(3). Bei der deklarativen Transaktionsverwaltung auf Basis von AspectJs XML muss die Klasse nicht geändert werden, sondern nur in der XML-Datei konfiguriert werden

​​(4) Annotationsbasiertes deklaratives Transaktionsmanagement, einfache Konfiguration, Annotationen müssen in der Business-Layer-Klasse hinzugefügt werden

14, über die Isolationsstufe und das Ausbreitungsverhalten von Spring-Transaktionen sprechen

Isolationsstufe:

- STANDARD Verwendet die Standardisolationsstufe der Datenbank

– READ_UNCOMMITTED führt zu Dirty Reads, nicht wiederholbaren Lesevorgängen und Phantom-Lesevorgängen

– READ_COMMITTED führt zu wiederholten Lesevorgängen und Phantom-Lesevorgängen

– REPEATABLE_READ führt zu Phantom-Lesevorgängen

– SERIALIZABLE ist am sichersten , aber die Kosten sind am höchsten und die Auswirkungen auf die Leistung sind äußerst gravierend

und Weitergabezeilen:

– ERFORDERLICH Wenn die Transaktion vorhanden ist, wird sie in die Transaktion integriert, wenn sie nicht vorhanden ist, wird die Transaktion erstellt

- UNTERSTÜTZT Wenn die Transaktion existiert, wird sie in die Transaktion integriert, wenn sie nicht existiert, wird die Transaktion nicht erstellt

- OBLIGATORISCH Wenn die Transaktion existiert, wird sie in die Transaktion integriert, wenn sie nicht existiert, wird eine ausgelöst Ausnahme

– REQUIRES_NEW erstellt immer eine neue Transaktion

– NOT_SUPPORTED hält an, wenn eine Transaktion vorhanden ist, und führt immer Nicht-Transaktionsvorgänge aus

– NIEMALS führt immer Nicht-Transaktionen aus und löst eine Ausnahme aus, wenn derzeit eine Transaktion vorhanden ist

– VERSCHACHTELT eingebettete Stilangelegenheiten

15. Was ist der DI-Mechanismus?
        Abhängigkeitsinjektion (Dependecy Injection) und Inversion of Control (Inversion of Control) sind das gleiche Konzept. Konkret: Wenn eine Rolle im herkömmlichen Programmierprozess die Unterstützung einer anderen Rolle benötigt, ist es normalerweise der Aufrufer, der eine Instanz erstellt Angerufener.

   Aber im Frühjahr wird die Arbeit des Angerufenen nicht mehr vom Anrufer erledigt, daher spricht man von einer Umkehrung der Kontrolle. Die Arbeit zum Erstellen des Aufgerufenen ist bis zum Frühjahr erledigt, und dann wird der Aufrufer injiziert. Daher wird es auch als Abhängigkeitsinjektion bezeichnet.动 Spring verwaltet die Objekte auf dynamische und flexible Weise. Es werden zwei Methoden zum Festlegen und Konstruieren von Injektionen verwendet.点 Legen Sie die Vorteile der Injektion fest: intuitiv, natürlich.
Die Vorteile der Konstruktor-Injektion: Kann die Reihenfolge der Abhängigkeitsbeziehungen im Konstruktor bestimmen.

16. Was ist AOP?
Aspektorientierte Programmierung (AOP) verbessert die Abhängigkeitsinjektion (DI) von Spring:
1. Aspektorientierte Programmierung bietet deklaratives Transaktionsmanagement
2.Spring unterstützt die Benutzeranpassung

Empfohlenes Tutorial:
Erste Schritte mit Java

Das obige ist der detaillierte Inhalt vonZusammenfassung der neuesten SSH-Framework-Interviewfragen im Jahr 2023. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Java知音
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!