Heim  >  Artikel  >  Java  >  Fragen zum Java-Framework-Interview (1)

Fragen zum Java-Framework-Interview (1)

(*-*)浩
(*-*)浩Original
2019-12-07 15:03:141747Durchsuche

Fragen zum Java-Framework-Interview (1)

Sprechen Sie über Ihr Verständnis von Struts.

Struts ist ein Web-Layer-Framework, das nach dem MVC-Muster entwickelt wurde. Tatsächlich handelt es sich um ein Servlet, das als ActionServlet bezeichnet wird. (Empfohlene Studie: Java-Interviewfragen)

Wir können alle Anfragen, die bestimmte Merkmale in der web.xml-Datei erfüllen, zur Verarbeitung an dieses Servlet übergeben, und dieses Servlet verweist auf eine Konfiguration Jeder Anfrage wird eine andere Aktion zur Bearbeitung zugeordnet.

(Struts können mehrere Konfigurationsdateien haben, und jede Konfigurationsdatei kann entsprechend dem Modul konfiguriert werden, wodurch eine übermäßige Erweiterung der Konfigurationsdatei verhindert werden kann)

2. ActionServlet übergibt die Anforderung an eine Aktion Zur Verarbeitung wurden die Anforderungsparameter zuvor in ein Formbean-Objekt gekapselt (d. h. eine Java-Klasse, jedes Attribut in dieser Klasse entspricht einem Anforderungsparameter)

3. Es ist zu beachten, dass ActionServlet das Formbean-Objekt übergibt zur Aktion Vor der Ausführungsmethode kann die Validierungsmethode der Formbean zur Überprüfung aufgerufen werden. Erst nach erfolgreicher Überprüfung wird das Formbean-Objekt an die Ausführungsmethode der Aktion übergeben. Andernfalls wird eine Fehlerseite zurückgegeben durch das Eingabeattribut.

4. Nachdem die Aktion ausgeführt wurde, wird die angezeigte Ergebnisansicht durch ein ActionForward-Objekt dargestellt. Das ActionForward-Objekt ist über die Konfiguration in der Struts-Konfiguration verknüpft. xml-Konfigurationsdatei.

Da das Programm den logischen Namen verwendet, der für die JSP-Seite in der Konfigurationsdatei struts-config.xml festgelegt ist, kann dadurch die Entkopplung des Aktionsprogrammcodes und des zurückgegebenen JSP-Seitennamens erreicht werden.

(Zu den oben genannten Themen können Sie auch über Ihre eigene Meinung sprechen, die auf Ihren eigenen Erfahrungen basiert)

Sprechen Sie über Ihr Verständnis von Hibernate.

1. Der interne Betriebsprozess objektorientierter Software kann so verstanden werden, dass er ständig verschiedene neue Objekte erstellt, Beziehungen zwischen Objekten herstellt und Methoden von Objekten aufruft, um den Status und den Status jedes Objekts zu ändern. Der Prozess des Todes besteht unabhängig vom Prozess und Betrieb des Programms im Wesentlichen darin, ein Ergebnis zu erzielen. Der Unterschied zwischen den laufenden Ergebnissen des Programms im vorherigen Moment und im nächsten Moment spiegelt sich in der Änderung des Objektzustands wider in der Erinnerung.

2. Um den laufenden Status des Programms beim Herunterfahren oder bei unzureichendem Speicherplatz aufrechtzuerhalten, ist es notwendig, den Objektstatus im Speicher auf dem Persistenzgerät zu speichern und den Objektstatus vom Persistenzgerät wiederherzustellen Normalerweise werden sie alle in einer relationalen Datenbank gespeichert, um eine große Menge an Objektinformationen zu speichern.

Aus Sicht der Ausführungsfunktion von Java-Programmen sollte die Funktion zum Speichern des Objektstatus im Vergleich zu anderen Funktionen des Systembetriebs eine sehr unauffällige Nebenfunktion sein. Java verwendet JDBC, um diese Funktion zu implementieren Für die auffällige Funktion muss viel Code geschrieben werden. Sie dient lediglich dem Speichern und Wiederherstellen von Objekten. Diese großen Mengen an JDBC-Code haben keinen technischen Inhalt. Sie werden im Wesentlichen mithilfe einer Reihe routinemäßiger Standardcodevorlagen geschrieben. Es ist harte Arbeit und sich wiederholende Arbeit.

3. Durch das Speichern der generierten Objekte und Wiederherstellungsobjekte in der Datenbank wird tatsächlich die Zuordnungsbeziehung zwischen Java-Objekten und relationalen Datenbankdatensätzen realisiert, die als ORM (dh Object RelationMapping) bezeichnet wird Zur Implementierung dieser Funktion wird JDBC-Code verwendet, und das gekapselte Produkt wird als ORM-Framework bezeichnet. Hibernate ist eines der beliebtesten ORM-Frameworks.

Mit dem Hibernate-Framework müssen Sie keinen JDBC-Code schreiben. Sie können ein Objekt in einer relationalen Datenbank speichern, indem Sie einfach eine Speichermethode aufrufen Verfahren.

4. Der grundlegende Prozess der Verwendung von Hibernate ist: Konfigurationsobjekt konfigurieren, SessionFactory generieren, Sitzungsobjekt erstellen, Transaktion starten, CRUD-Vorgang abschließen, Transaktion senden, Sitzung schließen.

5. Wenn Sie Hibernate verwenden, müssen Sie zunächst die Datei hibernate.cfg.xml konfigurieren, die die Datenbankverbindungsinformationen und Dialekte usw. konfiguriert, und außerdem die entsprechende hbm.xml-Datei für jede Entität, hibernate .cfg.xml Jede hbm.xml-Datei muss in der Datei registriert werden.

6. Bei der Anwendung von Hibernate ist es wichtig, das Caching-Prinzip von Sitzung, Kaskadierung, Lazy Loading und HQL-Abfrage zu verstehen.

(Oben können Sie auch über Ihre Gefühle zum Ruhezustand sprechen, basierend auf Ihrer eigenen umständlichen Erfahrung mit der Verwendung von JDBC)

Sprechen Sie über Ihr Verständnis von Frühling.

Spring ist eine Factory-Klasse, die das Factory-Muster implementiert (hier muss klar erklärt werden, was das Factory-Muster ist) (eigentlich eine Schnittstelle). Normalerweise handelt es sich dabei um die BeanFactory-Unterklasse ApplicationContext. Spring entspricht einer großen Factory-Klasse. Der zum Erstellen von Instanzobjekten verwendete Klassenname und die Eigenschaften des Instanzobjekts werden über das Element konfiguriert.

2. Spring bietet eine gute Unterstützung für IOC und ist eine architektonische Kunst, mit der eine gute Entkopplung zwischen IOC erreicht werden kann.

3. Spring bietet eine gute Kapselung der AOP-Technologie, die als aspektorientierte Programmierung bezeichnet wird, was bedeutet, dass zu diesen vielen Methoden Code für bestimmte Systemfunktionen hinzugefügt werden muss as, Protokollierung hinzufügen, Berechtigungsbeurteilung hinzufügen und Ausnahmebehandlung hinzufügen. Diese Anwendung wird als AOP bezeichnet.

Proxy-Technologie wird verwendet, um die AOP-Funktion zu implementieren. Es gibt zwei Möglichkeiten, die Proxy-Klasse und die Zielklasse aufzurufen Implementieren Sie dieselbe Methodenanweisung, eine dient dazu, dieselbe Schnittstelle zu implementieren, und die andere dient als Unterklasse des Ziels.

Im JDK wird die Proxy-Klasse verwendet, um einen dynamischen Proxy zu generieren, um eine Implementierungsklasse für eine Schnittstelle zu generieren. Wenn Sie eine Unterklasse für eine bestimmte Klasse generieren möchten, können Sie CGLI B verwenden.

Fügen Sie die Systemfunktion und die entsprechende Methode zum Aufrufen der Zielklasse zur Methode der generierten Proxy-Klasse hinzu. Der Proxy der Systemfunktion wird offensichtlich als Advice-Objekt bereitgestellt Es sind mindestens die Zielklasse und die Advice-Klasse erforderlich. Spring bietet diese Unterstützung, und Sie müssen nur diese beiden Elemente in der Spring-Konfigurationsdatei konfigurieren, um die Proxy- und AOP-Funktionen zu implementieren.

(Sie können auch über Ihre eigene Meinung sprechen, die auf Ihren eigenen Erfahrungen mit der Anwendung basiert)

Sprechen Sie über die Vor- und Nachteile von Struts

Vorteile:

1. Implementieren Sie ein MVC-Muster mit klarer Struktur, sodass sich Entwickler nur auf die Implementierung der Geschäftslogik konzentrieren können.

2. Es gibt eine Fülle von Tags, die verwendet werden können, und die Struts-Tag-Bibliothek (Taglib) kann bei flexibler Verwendung die Entwicklungseffizienz erheblich verbessern

3. Durch die Seitennavigation 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. Ausnahmebehandlungsmechanismus bereitstellen.

5. Datenbankverbindungspoolverwaltung

Nachteile:

1. Wenn Sie zur Anzeigeebene wechseln, müssen Sie die Vorwärtskonfiguration durchführen. Wenn es zehn Anzeigeebenen-JSPs gibt, müssen Sie Struts zehnmal konfigurieren, und dies schließt manchmal keine Verzeichnis- und Dateiänderungen ein Erneut ändern. Hinweis: Jedes Mal, wenn die Konfiguration geändert wird, muss das gesamte Projekt erneut bereitgestellt und ein Server wie Tomcate neu gestartet werden.

Zweitens muss die Aktion von Struts threadsicher sein, was nur zulässig ist Eine Instanz zur Bearbeitung aller Anfragen. Daher müssen alle von Aktionen verwendeten Ressourcen einheitlich synchronisiert werden, was zu Thread-Sicherheitsproblemen führt.

Drittens ist das Testen 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.

Viertens. 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. Es ist auch sehr schwierig, Fehlermeldungen während der Typkonvertierung an den Benutzer zurückzugeben.

Fünftens ist die Abhängigkeit von Servlet zu stark, wenn die Aktion verarbeitet wird, sodass der Servlet-Container nicht entfernt werden kann.

Sechstens 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.

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

8. Die Verarbeitung vor und nach der Aktionsausführung basiert auf Klassenhierarchien, was den Betrieb vor und nach der Aktionsverarbeitung erschwert.

9. In Struts entspricht ein Formular tatsächlich einer Action-Klasse (oder DispatchAction). Die Ereignismethode wird als Anwendungsereignis bezeichnet. Im Vergleich zum Komponentenereignis ist das Anwendungsereignis ein grobkörniges Ereignis.

Was ist der Unterschied zwischen iBatis und Hibernate?

Die gleichen Punkte : Schützen Sie die zugrunde liegenden Zugriffsdetails der JDBC-API, damit wir auf Daten zugreifen können, ohne uns mit der JDBC-API befassen zu müssen.

Der JDBC-API-Programmierungsprozess ist festgelegt und es werden auch SQL-Anweisungen mit Java-Code gemischt. Oft ist es notwendig, SQL-Anweisungen zusammenzusetzen, und die Details sind sehr umständlich.

Vorteile von ibatis: schirmt die zugrunde liegenden Zugriffsdetails der JDBC-API ab; bietet die Funktion, Ergebnismengen, sogenannte Entitätsobjekte, und Objektsammlungen zurückzugeben queryForObject zur Rückgabe eines einzelnen Objekts; stellt Parameter bereit, die die Eigenschaften des Entitätsobjekts automatisch an die SQL-Anweisung übergeben.

Hibernate ist ein vollautomatisches ORM-Mapping-Tool. Es erfordert, dass wir selbst SQL-Anweisungen in die XML-Konfigurationsdatei schreiben. Da der Ruhezustand automatisch SQL-Anweisungen generiert, können wir die Anweisungen nicht steuern und keine spezifischen und effizienten SQL-Anweisungen schreiben.

Bei einigen weniger komplexen SQL-Abfragen kann uns der Ruhezustand sehr gut helfen. Bei besonders komplexen Abfragen ist die Verwendung von ibatis jedoch eine gute Wahl, da ibatis immer noch von gesteuert wird uns. SQL-Anweisungen schreiben.

Wenn Sie im Ruhezustand eine Mehrtabellenabfrage durchführen, nehmen Sie mehrere Felder aus jeder Tabelle. Das heißt, die Abfrageergebnismenge verfügt nicht über eine entsprechende Entitätsklasse.

Lösung 1: Nehmen Sie die Daten gemäß den Object[]-Daten heraus und bilden Sie dann selbst die Bean

Lösung 2: Schreiben Sie einen Konstruktor für die Bean jeder Tabelle, z Beispiel: Tabelle 1 erfordert Finden Sie die beiden Felder Feld1 und Feld2 heraus, dann gibt es einen Konstruktor namens Bean (Typ1, Feld1, Typ2, Feld2), und dann können Sie diese Bean direkt in HQL generieren.

Stellen Sie den Second-Level-Cache von Hibernate vor

Antworten Sie gemäß den folgenden Ideen:

(1) Erklären Sie zunächst, was Es ist Cache

(2) Außerdem ist die Sitzung mit Ruhezustand der Cache der ersten Ebene. Das heißt, warum brauchen wir den Cache der zweiten Ebene? (3) Lassen Sie uns abschließend darüber sprechen, wie Sie den Hibernate Level 2-Cache konfigurieren.

1. Beim Caching werden zuvor abgefragte und verwendete Objekte aus der Datenbank im Speicher gespeichert (in einer Datenstruktur, die normalerweise HashMap ähnelt, wenn ein Objekt in Zukunft verwendet werden soll). Fragen Sie zunächst ab, ob sich dieses Objekt im Cache befindet.

Wenn dies der Fall ist, verwenden Sie das Objekt im Cache. Wenn nicht, fragen Sie die Datenbank ab und speichern Sie das abgefragte Objekt für die nächste Verwendung im Cache.

2. Die Sitzung von Hibernate ist eine Art Cache. Wir nennen sie normalerweise den Cache der ersten Ebene. Wenn Sie die Sitzung zum Abfragen eines Objekts aus der Datenbank verwenden möchten, prüft die Sitzung zunächst, ob sie intern vorhanden ist Wenn dieses Objekt vorhanden ist, wird es direkt zurückgegeben. Wenn es nicht vorhanden ist, greift es auf die Datenbank zu und speichert die Abfrageergebnisse intern.

Da die Sitzung einen Sitzungsprozess darstellt und eine Sitzung mit einer Datenbankverbindung verknüpft ist, ist es am besten, die Sitzung nicht für längere Zeit geöffnet zu lassen. Sie wird normalerweise nur in einer Transaktion verwendet und sollte geschlossen werden das Ende der Transaktion. Und Session ist Thread-unsicher und anfällig für Probleme, wenn sie von mehreren Threads gemeinsam genutzt wird.

Normalerweise ist nur der Cache im globalen Sinne die eigentliche Cache-Anwendung und hat einen größeren Cache-Wert. Daher ist die Cache-Funktion des Caches auf Sitzungsebene nicht offensichtlich und der Anwendungswert ist nicht groß.

Der Cache der zweiten Ebene von Hibernate besteht darin, einen globalen Cache für Hibernate zu konfigurieren, sodass mehrere Threads und mehrere Transaktionen diesen Cache gemeinsam nutzen können.

Wir hoffen, dass, sobald eine Person es verwendet hat, auch andere es nicht nutzen können.

3. Der Second-Level-Cache ist eine von Hibernate unabhängige Softwarekomponente und ein Drittanbieterprodukt, das Caching-Produkte wie EHCache und OSCache usw. anbietet. Um den Second-Level-Cache in Hibernate zu verwenden, müssen Sie zunächst in der Konfigurationsdatei hibernate.cfg.xml konfigurieren, welches Cache-Produkt des Herstellers verwendet werden soll. Anschließend müssen Sie die eigene Konfigurationsdatei des Cache-Produkts konfigurieren Objekte im Ruhezustand sollten in die Verwaltung des Second-Level-Cache einbezogen werden.

Nachdem Sie das Prinzip des Second-Level-Cache verstanden und diese Idee verstanden haben, ist es einfach, den Second-Level-Cache von Hibernate zu konfigurieren.

Erweiterte Kenntnisse: Eine SessionFactory kann einem Second-Level-Cache zugeordnet werden, d. h. ein Second-Level-Cache kann nur für das Zwischenspeichern von Daten in einer Datenbank verantwortlich sein. Seien Sie vorsichtig, wenn Sie den Second-Level-Cache von Hibernate verwenden andere Anwendungen oder SessionFactory dürfen die Daten in der aktuellen Datenbank nicht so ändern, dass die zwischengespeicherten Daten nicht mit den tatsächlichen Daten in der Datenbank übereinstimmen.

Was ist JDO?

JDO ist eine neue Spezifikation für Java-Objektpersistenz. Es ist die Abkürzung für Java Data Object und ist auch ein Data Warehouse, das für den Zugriff auf einige verwendet wird Art von Daten. Standardisierte API für Objekte in . JDO bietet transparente Objektspeicherung, sodass für Entwickler kein zusätzlicher Code (z. B. die Verwendung der JDBC-API) zum Speichern von Datenobjekten erforderlich ist.

Diese mühsamen Routineaufgaben wurden auf JDO-Produktanbieter übertragen, sodass Entwickler ihre Zeit und Energie auf die Geschäftslogik konzentrieren können. Darüber hinaus ist JDO flexibel, da es auf allen zugrunde liegenden Daten ausgeführt werden kann.

Vergleich: JDBC ist nur für relationale Datenbanken (RDBMS) gedacht und bietet zugrunde liegende Speicherfunktionen für beliebige Daten wie relationale Datenbanken, Dateien, XML und Objektdatenbanken (ODBMS) usw Anwendungen tragbarer.

Was ist der Unterschied zwischen den bidirektionalen One-to-many- und Many-to-many-Assoziationen von Hibernate? ?

Die Grundprinzipien der Implementierung der Eins-zu-Viele-Assoziationszuordnung und der Viele-zu-Eins-Assoziationszuordnung sind dieselben, d. h. das Hinzufügen eines Fremdschlüssels am Viele-Ende, um auf den Fremdschlüssel zu verweisen Schlüssel an einem Ende, und der Hauptunterschied besteht darin, dass die Wartungsseite unterschiedlich ist.

Der Unterschied liegt in den Beziehungen, die sie aufrechterhalten:

Eins-zu-viele-Assoziationszuordnung bezieht sich auf das Laden der Daten der vielen Enden, während die Daten der vielen geladen werden Eine assoziative Zuordnung bedeutet, dass die Daten eines Endes geladen werden, während die Daten eines Endes geladen werden.

Wie funktioniert Hibernate Lazy Loading?

2. Hibernate3 bietet die Funktion zum verzögerten Laden von Attributen. Wenn das Programm die Daten tatsächlich verarbeitet, ist es nur im Speicher vorhanden, wodurch ein verzögertes Laden erreicht wird . Dadurch wird der Speicheraufwand des Servers gespart und dadurch die Leistung des Servers verbessert.

Das obige ist der detaillierte Inhalt vonFragen zum Java-Framework-Interview (1). 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
Vorheriger Artikel:Javaweb-Interviewfragen (2)Nächster Artikel:Javaweb-Interviewfragen (2)