Heim >Java >JavaInterview Fragen >Grundlegende Fragen zu Java-Hochfrequenzinterviews——(6)
1. Sprechen Sie über Ihr Verständnis von Struts ist ein Servlet. Dieses Servlet heißt ActionServlet oder ist eine Unterklasse von ActionServlet. Wir können alle Anfragen, die bestimmte Merkmale in der web.xml-Datei erfüllen, zur Verarbeitung an dieses Servlet übergeben. Dieses Servlet verweist dann auf eine Konfigurationsdatei, um jede Anfrage verschiedenen Aktionen zur Verarbeitung zuzuordnen.
(Struts können mehrere Konfigurationsdateien haben, und Sie können jede Konfigurationsdatei entsprechend dem Modul konfigurieren, was eine übermäßige Erweiterung der Konfigurationsdatei verhindern kann)
2 Bevor ActionServlet die Anforderung zur Verarbeitung an die Aktion übergibt, wird sie gekapselt die Anforderungsparameter in ein Formbean-Objekt (eine Java-Klasse, jedes Attribut in dieser Klasse entspricht einem Anforderungsparameter),
3 Es ist zu beachten, dass ActionServlet das Formbean-Objekt möglicherweise an die Ausführungsmethode der Aktion übergibt Die Validierungsmethode der Formbean wird durchgeführt und erst nach erfolgreicher Überprüfung wird das Formbean-Objekt an die Ausführungsmethode der Aktion übergeben. Andernfalls wird eine Fehlerseite zurückgegeben, die durch das Eingabeattribut angegeben wird. 4. Nachdem die Aktion ausgeführt wurde, muss die angezeigte Ergebnisansicht durch ein ActionForward-Objekt dargestellt werden. Das actionForward-Objekt ist über die Konfiguration in der Konfigurationsdatei struts-config.xml verknüpft. weil das Programm Der für die JSP-Seite in der Konfigurationsdatei struts-config.xml festgelegte logische Name wird verwendet, wodurch der Aktionsprogrammcode vom zurückgegebenen JSP-Seitennamen entkoppelt werden kann.
(Oben können Sie auch über Ihre eigene Meinung sprechen, die auf Ihren eigenen Erfahrungen mit der Anwendung basiert)
Zweitens: Sprechen Sie über Ihr Verständnis von Hibernate.
1. Es versteht sich, dass der interne Betriebsprozess objektorientierter Software darin besteht, kontinuierlich verschiedene neue Objekte zu erstellen, Beziehungen zwischen Objekten herzustellen und Objektmethoden aufzurufen, um den Status jedes Objekts und den Prozess des Objektsterbens zu ändern Der Prozess und die Operation des laufenden Programms dienen im Wesentlichen dazu, ein Ergebnis zu erhalten. Der Unterschied zwischen den laufenden Ergebnissen des Programms im vorherigen Moment und im nächsten Moment spiegelt sich in der Änderung des Zustands des Objekts im Speicher wider.
2. Um den Betriebsstatus des Programms aufrechtzuerhalten, wenn es heruntergefahren wird und der Speicherplatz nicht ausreicht, ist es notwendig, den Objektstatus im Speicher auf dem Persistenzgerät zu speichern und den Objektstatus vom Persistenzgerät wiederherzustellen Normalerweise wird es in einer relationalen Datenbank gespeichert, um große Mengen an Objektinformationen zu speichern. Aus Sicht der laufenden Funktion eines Java-Programms 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. Diese unauffällige Funktion erfordert jedoch das Schreiben Es gibt eine Menge Code, und das Einzige, was es tut, ist das Speichern und Wiederherstellen von Objekten, und diese großen Mengen an JDBC-Code haben keinen technischen Inhalt. Sie werden im Grunde unter Verwendung einer Reihe routinemäßiger Standardcodevorlagen geschrieben, was eine Art harte Arbeit darstellt repetitive 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. Dies kann durch Kapselung von JDBC erreicht werden Code Das gekapselte Produkt mit dieser Funktion wird als ORM-Framework bezeichnet, und 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. Sie können ein Objekt aus der Datenbank laden, indem Sie einfach eine Get-Methode aufrufen.
4. Der grundlegende Prozess bei der Verwendung von Hibernate ist: Konfigurieren Sie das Konfigurationsobjekt, generieren Sie die SessionFactory, erstellen Sie das Sitzungsobjekt, starten Sie die Transaktion, schließen Sie den CRUD-Vorgang ab, senden Sie die Transaktion und schließen Sie die Sitzung.
5. Wenn Sie Hibernate verwenden, müssen Sie zuerst die Datei hibernate.cfg.xml konfigurieren, die die Datenbankverbindungsinformationen und Dialekte usw. konfiguriert, und auch die entsprechende hbm.xml-Datei für jede Entität. Die XML-Datei muss pro hbm.xml-Datei registriert werden.
6. Bei der Anwendung von Hibernate ist es wichtig, das Caching-Prinzip von Session, Cascading, Lazy Loading und HQL-Abfrage zu verstehen.
(Oben können Sie auch über Ihre Erfahrungen mit dem Ruhezustand sprechen, basierend auf Ihrer eigenen umständlichen Verwendung von JDBC.)
Drittens: Sprechen Sie über Ihr Verständnis des Frühlings.
1. Spring ist eine Factory-Klasse, die das Factory-Muster implementiert (hier muss klar erklärt werden, was das Factory-Muster ist (eigentlich eine Unterklasse von BeanFactory). normalerweise ApplicationContext. Spring entspricht einer großen Factory-Klasse. Der zum Erstellen von Instanzobjekten verwendete Klassenname und die Eigenschaften des Instanzobjekts werden über das Element3. 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. Fügen Sie ein Protokoll hinzu, fügen Sie eine Berechtigungsbeurteilung hinzu und fügen Sie eine Ausnahmebehandlung hinzu. Diese Anwendung heißt AOP.
Proxy-Technologie wird zum Implementieren der AOP-Funktion verwendet. Das Client-Programm ruft nicht mehr das Ziel auf, sondern ruft die Proxy-Klasse und die Zielklasse extern auf. Es gibt zwei Möglichkeiten, dieselbe Methode zu erreichen Eine Anweisung besteht darin, dieselbe Schnittstelle zu implementieren, die zweite ist eine 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. Um ein Proxy-Objekt zu erstellen, müssen Sie natürlich mindestens die Zielklasse und die Beratungsunterricht 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.
(Oben können Sie auch Ihre eigenen Meinungen basierend auf Ihren eigenen Erfahrungen mit der Verwendung teilen)
Viertens: Sprechen Sie über die Vor- und Nachteile von Struts
Vorteile:
1. Implementieren Sie das MVC-Modell mit einer klaren Struktur. So können sich Entwickler nur auf die Implementierung der Geschäftslogik konzentrieren.
2 Es steht eine umfangreiche Tag-Bibliothek (Taglib) zur Verfügung, die bei flexibler Verwendung die Entwicklungseffizienz erheblich verbessern kann.
3 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. Stellen Sie einen Ausnahmebehandlungsmechanismus bereit.
6. Unterstützen Sie I18N.
1. Wenn Sie zur Anzeigeebene wechseln, müssen Sie eine Weiterleitung vornehmen jsps, Struts muss zehnmal konfiguriert werden, und dazu gehören manchmal Verzeichnis- und Dateiänderungen, die eine erneute Änderung der Weiterleitung erfordern. Beachten Sie, dass bei jeder Änderung der Konfiguration das gesamte Projekt erneut bereitgestellt werden muss, und zwar für Server Wie bei Tomcate muss der Server neu gestartet werden
2. Struts Action muss threadsicher sein, sodass nur eine Instanz alle Anforderungen verarbeiten kann. Daher müssen alle von Aktionen verwendeten Ressourcen einheitlich synchronisiert werden, was zu Thread-Sicherheitsproblemen führt.
3. Da jede Aktion von Struts mit der Webschicht gekoppelt ist, hängt ihr Test vom Webcontainer ab und Unit-Tests sind ebenfalls schwierig zu implementieren. 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 muss sich bei der Verarbeitung von Action auf ServletRequest und ServletResponse verlassen, sodass der Servlet-Container nicht entfernt werden kann.
6. In Bezug auf die Front-End-Ausdruckssprache verwendet Struts 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. Die Verarbeitung vor und nach der Aktionsausführung basiert auf Klassenhierarchien.
9. Unzureichende Unterstützung für Ereignisse. In Struts entspricht ein Formular tatsächlich nur einem Ereignis Ereignis, Anwendungsereignis ist ein grobkörniges Ereignis im Vergleich zu Komponentenereignis
(Video-Tutorial-Empfehlung:
Java-Kurs)
5 Was ist der Unterschied zwischen iBatis und Hibernate? Details ermöglichen uns den Zugriff auf Daten, 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, automatisch zu kapseln, und queryForObject gibt eine einzelne zurück Object; 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, und ist viel verantwortungsvoller und leistungsfähiger. 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 Hibernate sehr gut helfen. Bei besonders komplexen Abfragen ist die Anpassung jedoch schwierig. Derzeit ist die Verwendung von Ibatis eine gute Wahl, da Ibatis immer noch erfordert, dass wir SQL schreiben Aussagen selbst.
6. Führen Sie eine Abfrage mit mehreren Tabellen im Ruhezustand durch und wählen Sie mehrere Felder aus jeder Tabelle aus. 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 die Bean selbst.
Lösung 2: Schreiben Sie einen Konstruktor für die Bean jeder Tabelle, wenn Sie beispielsweise die beiden Felder herausfinden möchten field1 und field2 in Tabelle 1, dann gibt es einen Der Konstruktor ist Bean(type1filed1,type2 field2), und dann kann diese Bean direkt in hql generiert werden.
7. Stellen Sie den Cache der zweiten Ebene von Hibernate vor
Antworten Sie gemäß den folgenden Ideen:
(1) Erklären Sie zunächst deutlich, was Cache ist Cache, das heißt, es gibt einen Cache der ersten Ebene. Warum benötigen wir einen Cache der zweiten Ebene? (3) Lassen Sie uns abschließend darüber sprechen, wie der Cache der zweiten Ebene von Hibernate konfiguriert wird.
1. Beim Caching werden Objekte, die aus der Datenbank abgefragt und verwendet werden, im Speicher gespeichert (in einer Datenstruktur, die der HashMap ähnelt). wird zuerst abgefragt Ob sich dieses Objekt im Cache befindet. Wenn ja, 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 das Objekt intern vorhanden ist. Greifen Sie nur auf die Datenbank zu, wenn diese nicht vorhanden ist, und speichern Sie 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 am Ende geschlossen werden 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 von Hibernate 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 verwenden können.
3. Der Second-Level-Cache ist eine von Hibernate unabhängige Softwarekomponente und ein Drittanbieterprodukt. Mehrere Hersteller und Organisationen bieten Cache-Produkte wie EHCache und OSCache usw. an. 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 Cache der zweiten Ebene zugeordnet werden, d Anwendungen oder SessionFactory ändern die aktuellen Daten in der Datenbank, sodass die zwischengespeicherten Daten nicht mit den tatsächlichen Daten in der Datenbank übereinstimmen.
8. Was ist JDO?
JDO ist eine neue Spezifikation für Java-Objektpersistenz. Es ist die Abkürzung für Java Data Object und eine standardisierte API für den Zugriff auf Objekte in einem bestimmten Data Warehouse. 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.
9. Was ist der Unterschied zwischen den bidirektionalen Eins-zu-Viele-Zuordnungen und den Viele-zu-Eins-Zuordnungen 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 vielen Ende, um auf den Fremdschlüssel am einen Ende zu verweisen, und Der Hauptunterschied besteht darin, dass das Wartungsende unterschiedlich ist.
Der Unterschied zwischen ihnen liegt in der Beziehung, die sie aufrechterhalten:
Eins-zu-viele-Assoziationszuordnung bedeutet, dass Daten an einem Ende geladen werden, während Daten an vielen Enden geladen werden gleichzeitig. Ein Ende der Daten.
10. Wie verzögert Hibernate das Laden?
1. Entitätsobjekt b) Sammlung (Sammlung)
2. Wenn Hibernate die Daten abfragt nicht Es existiert nicht im Speicher. Wenn das Programm die Daten tatsächlich verarbeitet, ist das Objekt nur im Speicher vorhanden, wodurch der Speicheraufwand des Servers gespart und dadurch die Leistung des Servers verbessert wird.
Empfohlene verwandte Tutorials: Java-Einführungs-Tutorial
Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews——(6). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!