Heim >Java >JavaInterview Fragen >„Interview Eight-Part Essay', Frühjahrsband 18

„Interview Eight-Part Essay', Frühjahrsband 18

Java后端技术全栈
Java后端技术全栈nach vorne
2023-08-22 15:55:591224Durchsuche

„Frühling Band 18 von „Interview Eight-Part Essay“ ist wieder da. Dieses Mal habe ich die Interviewfragen zum Frühling aussortiert. Ich habe auch die Interviewfragen zum Frühling online durchgesehen und zusammengefasst. Im Grunde sind sie hier. Natürlich kann es einige zu grundlegende Konzepte geben, die ich direkt in einer bestimmten Frage organisiert habe, daher habe ich keine separate Frage eröffnet. Ich wünsche allen ein reibungsloses Interview ~



  • 1

  • 2. Was sind die Kernmodule im Frühling?

  • 4

  • 5. Was ist der Unterschied zwischen @Repository, @Compent, @Controller?
  • 8. Was ist AOP?
  • 9. Was ist der Unterschied zwischen dynamischem Proxy und CGLIB-Proxy?
  • 11.Was ist der Unterschied zwischen Spring AOP und AspectJ AOP?
  • 12. Wie ist der Lebenszyklus von Bean im Frühling?
  • 14. Warum kann der Cache der zweiten Ebene nicht verwendet werden? lösen?
  • 15.Was ist der Unterschied zwischen @Autowired und @Resource?
  • 16.Was sind die Transaktionsisolationsstufen von Spring?
  • 17.Was sind die Ausbreitungsmechanismen von Spring-Transaktionen?
  • 18.springBoot automatisches Montageprinzip?
  • 1. Welche Designmuster werden im Frühling verwendet? 「 2.Agent-Entwurfsmuster“


    : Die Implementierung von AOP erfolgt über einen Proxy. Spring verwendet hauptsächlich den dynamischen JDK-Proxy und den CGLIB-Proxy

    “3. Singleton-Entwurfsmuster“

    : Beans in Spring sind standardmäßig einzeln. Beispiel
    „Interview Eight-Part Essay', Frühjahrsband 18
    • 「4. Template-Methodenmuster」
      : In Spring verwenden jdbcTemplate und andere Klassen, die mit Template enden, das Template-Methoden-Designmuster, einige allgemeine Funktionen
    • 「5 Muster"
      : Unser Projekt muss eine Verbindung zu mehreren Datenbanken herstellen, und verschiedene Kunden greifen bei jedem Besuch je nach Bedarf auf unterschiedliche Datenbanken zu.Dieser Modus ermöglicht es uns, entsprechend den Kundenanforderungen dynamisch zwischen verschiedenen Datenquellen zu wechseln. 6. Beobachtermuster für ereignisgesteuerte Modelle von Spring Verbesserung oder Beratung verwendet das Adaptermuster
    • 2. Welche Kernmodule gibt es im Frühling?
    1.

    "Spring Core": Spring Core, es ist der grundlegendste Teil des Frameworks, das IOC- und Dependency-Injection-DI-Funktionen bereitstellt : Es bietet Unterstützung für die Entwicklung von Webanwendungen

    4.
    "Spring MVC"„Interview Eight-Part Essay', Frühjahrsband 18: Es zielt auf die Implementierung von MVC-Ideen in Webanwendungen ab
    • 5."Spring DAO": Bietet Unterstützung für JDBC Die Abstraktion Layer vereinfacht die JDBC-Codierung und gleichzeitig ist die Codierung robuster + JDO-Integration usw.
    • 7."Spring AOP": Aspektorientierte Programmierung, die eine mit der AOP Alliance kompatible Programmierimplementierung bietet
    • 3. Sagen Sie mir, was Sie unter IOC verstehen?
    • Erstens ist IOC ein
    • „Container“
    • , der zum Laden von Objekten verwendet wird. Seine Kernidee ist
      „Inversion of Control“
      Also was genau
    • „Was ist Inversion of Control“
    • Kontrollumkehr bedeutet: „Übergeben Sie die Kontrolle über das Objekt an die Feder und verwalten Sie es durch den Federbehälter“
      , wir führen keine Operationen aus
    • Warum also „Was braucht eine Umkehrung der Kontrolle?“? „

      Wenn ein Projekt vergrößert wird, ist die Aufrechterhaltung dieser Beziehung sehr mühsam. Daher gibt es das Konzept der Umkehrung der Kontrolle, das die Erstellung und Konfiguration von Objekten usw. kombiniert. Eine Reihe von Vorgängen werden von Spring verwaltet. Wenn wir sie verwenden, müssen wir sie nur abholen. 4. Was sind die IOC-Container im Frühling? Was sind die Unterschiede?

      und das andere ist „ApplicationContext“ Der Unterschied zwischen ihnen besteht darin, dass BeanFactory

      „nur die grundlegendsten Funktionen zum Instanziieren von Objekten und Abrufen von Objekten bereitstellt“

      , ApplicationContext ist ein von BeanFactory abgeleitetes Produkt und eine Unterklasse davon . Seine Funktion ist leistungsfähiger, z. B. die Unterstützung von Annotationsinjektion, Internationalisierung und anderen Funktionen.

      5. Was ist der Unterschied zwischen BeanFactory und FactoryBean? ist ein IOC-Container

      , der zum Transport von Objekten verwendet wird „FactoryBean ist eine Schnittstelle“ , die Bean eine flexiblere Möglichkeit bietet. Durch Proxying eines Bean-Objekts werden einige Vorgänge vor und nach der Methode ausgeführt.

      6. Was sind die Unterschiede zwischen @Repository, @Service, @Compent und @Controller? Federbehälter, es dient lediglich der Unterscheidung verschiedener Anwendungsschichten im Einsatz“

      • @Repository:dao-Schicht
      • @Service:Service-Schicht
      • @Controller:Controller-Schicht
      • @Kompetent: Andere Schichten, die nicht zu den oben genannten drei Schichten gehören, verwenden diese Annotation einheitlich

      7. Was ist DI?

      DI ist in der Tat das Gleiche wie IOC, aber „Das gleiche Konzept wird aus verschiedenen Blickwinkeln erklärt“

      Was DI beschreibt „Der Punkt sind Abhängigkeiten“, sagten wir: „Die Kernfunktion von IOC besteht darin, einem Objekt dynamisch andere abhängige Objekte bereitzustellen, wenn das Programm ausgeführt wird.“ Diese Funktion wird beispielsweise durch DI ausgeführt ein Objekt A und dieses Objekt A hängt von einem Objekt B ab, dann müssen wir dieses Objekt B in Objekt A injizieren. Es gibt drei Injektionsmethoden im Frühjahr Injektion

        8. Was ist AOP?
      • AOP bedeutet:
      • „Aspektorientierte Programmierung, die eine einheitliche Aufrechterhaltung der Programmfunktionen durch Vorkompilierung und dynamische Proxys während der Laufzeit A-Technologie erreicht“
      • .
        AOP ist
      • „die Fortsetzung von OOP (Objektorientierte Programmierung)“
      • Es ist ein wichtiger Inhalt im Spring-Framework und ein abgeleitetes Paradigma der funktionalen Programmierung. AOP kann verwendet werden, um verschiedene Teile der Geschäftslogik zu isolieren, wodurch die Kopplung zwischen verschiedenen Teilen der Geschäftslogik verringert, die Wiederverwendbarkeit von Programmen verbessert und die Entwicklungseffizienz verbessert wird.
      • 「Die AOP-Implementierung ist hauptsächlich in zwei Kategorien unterteilt:」

      „Interview Eight-Part Essay', Frühjahrsband 18
      • „Statische AOP-Implementierung“ , AOP-Framework „Während der Kompilierungsphase“ hat den Programmquellcode geändert und eine statische AOP-Proxy-Klasse generiert (die generierte *.class-Datei wurde geändert, Sie müssen Verwenden Sie einen bestimmten Compiler), wie z. B. AspectJ
      • „Dynamische AOP-Implementierung“ , AOP-Framework „zur Laufzeit“ für dynamisch generierte Proxy-Objekte (im Speicher mit dynamischem JDK-Proxy oder dynamisch generiert durch die CGlib-AOP-Proxy-Klasse). ), wie z. B. SpringAOP

      Die Implementierung von AOP im Frühjahr erfolgt „implementiert durch dynamischen Proxy“ Wenn die Schnittstelle implementiert ist, wird der dynamische JDK-Proxy verwendet, andernfalls wird der CGLIB-Proxy verwendet.

      „Interview Eight-Part Essay', Frühjahrsband 18

      "Es gibt 5 Benachrichtigungstypen:"

      • "@Before": Benachrichtigen, bevor die Zielmethode aufgerufen wird
      • "@AfterReturning": Rückgabe oder Ausnahme beim Ziel Methode kehrt nach dem Aufruf zurück
      • 「@AfterThrowing」: Wird aufgerufen, nachdem die Zielmethode zurückgegeben wurde
      • 「@After」: Wird aufgerufen, nachdem die Zielmethode eine Ausnahme hat
      • 「@Around」 : Wird aufgerufen, nachdem die Zielmethode eine Ausnahme zurückgegeben hat. Kapseln Sie sie und bestimmen Sie die Aufrufzeit selbst.

      9 Was ist der Unterschied zwischen dynamischem Proxy und statischem Proxy?
      • Quellcode wird von Programmierern erstellt oder von bestimmten Tools automatisch generiert und dann kompiliert. Bevor das Programm ausgeführt wird, ist die .class-Datei der Proxy-Klasse bereits vorhanden.
      • Statischer Proxy repräsentiert normalerweise nur eine Klasse
      • Dynamisch erstellt mithilfe des Reflexionsmechanismus, wenn das Programm ausgeführt wird.
      Ein dynamischer Proxy ist ein Proxy für mehrere Implementierungsklassen unter einer Schnittstelle.

      Ein dynamischer Proxy weiß nicht, was er vermitteln soll, er weiß nur, wann läuft
      • 10 Was ist der Unterschied zwischen dem dynamischen JDK-Proxy und dem CGLIB-Proxy?
      • JDK dynamische Proxy-Geschäftsklasse
        „muss eine bestimmte Schnittstelle implementieren“
        , die
      • „basierend auf einem Reflexionsmechanismus implementiert“ ist
      Sie generiert eine Proxy-Klasse, die dieselbe Schnittstelle implementiert, und schreibt dann die Methode neu Verbesserungen am Code erzielen.

      Der dynamische CGLIB-Proxy verwendet das Bytecode-Verarbeitungsframework ASM. Sein Prinzip besteht darin, mithilfe der Bytecode-Technologie „eine Unterklasse für eine Klasse zu erstellen und dann die Methode der übergeordneten Klasse zu überschreiben“, um den Code zu verbessern.

      11.Was ist der Unterschied zwischen Spring AOP und AspectJ AOP? Spring AOP ist eine Laufzeitverbesserung, die durch

      „Dynamische Proxy-Implementierung“ erreicht wird.

      AspectJ AOP ist eine Erweiterung zur Kompilierungszeit, für deren Vervollständigung ein spezieller Compiler erforderlich ist und die durch

      „Änderung des Codes“ erreicht wird.

      , Unterstützung „drei Webmethoden“
      • "Weben zur Kompilierungszeit": Es dient zum Weben verwandter Proxy-Klassen beim Kompilieren des Bytecodes
      • "Weben nach dem Kompilieren": Nach dem Kompilieren der ursprünglichen Klasse wird festgestellt, dass eine AOP-Verbesserung erforderlich ist. und dann Weben Geben Sie den entsprechenden Code ein
      • „Weben, wenn die Klasse geladen wird“ : Bezieht sich auf das Weben, wenn der Lader die Klasse lädt
      „Interview Eight-Part Essay', Frühjahrsband 18
      ImplementierungsmethodeDynamischer ProxyÄnderungscode Kompilierungszeit, nach der Kompilierung Klassenladezeit
      Hauptunterschied Spring AOP AspecjtJ AOP
      Erweiterungsmethode Laufzeitverbesserung Kompilierungszeit
      ?
      12. Was ist der Lebenszyklus von Beans im Frühling?

      2."Attribute füllen", der Bean einen Wert zuweisen

      3.
      "Initialisierung"„Interview Eight-Part Essay', Frühjahrsband 18
      • Wenn die Aware-Schnittstelle implementiert ist, werden Containerressourcen über ihre Schnittstelle abgerufen
      • Wenn die BeanPostProcessor-Schnittstelle implementiert ist, werden die Vor- und Nachverarbeitungserweiterungen der Schnittstelle zurückgerufen
        Wenn die Init-Methodenmethode konfiguriert ist, wird die Methode ausgeführt
      • 4.
        "Zerstören"
        • Wenn die DisposibleBean-Schnittstelle implementiert ist, wird die Zerstörungsmethode der Schnittstelle zurückgerufen
        • Wenn die Methode der Zerstörungsmethode konfiguriert ist, wird die durch die Zerstörungsmethode konfigurierte Methode ausgeführt 13.Spring Wie löst man die zirkuläre Abhängigkeit? Lösen Sie die zirkuläre Abhängigkeit. Seine Kernlogik besteht darin, die Schritte der Instanziierung und Initialisierung zu trennen und sie dann zum Aufruf durch ein anderes Objekt in den Cache zu legen
          • „Cache der ersten Ebene“: Wird zum Speichern von Objekten verwendet, die instanziiert und initialisiert wurden.
          • „Cache der zweiten Ebene“: Wird zum Speichern von Objekten verwendet, die instanziiert, aber nicht initialisiert wurden
            "Cache der dritten Ebene"
          • : Wird verwendet, um eine Objektfabrik zu speichern und eine anonyme innere Klasse zum Erstellen von Objekten im Cache der zweiten Ebene bereitzustellen
          • Wenn ein Zirkelverweis zwischen den Klassen A und B auftritt Grober Prozess

          1 . Nachdem A die Instanziierung abgeschlossen hat, gehen Sie zu

          „Erstellen Sie eine Objektfabrik und legen Sie sie im Cache der dritten Ebene ab.“
          • Proxy
            • Wenn A kein Proxy durch AOP ist, erhält diese Fabrik das von A instanziierte Objekt
            • 2. Wenn A die Attributinjektion durchführt, gehen Sie zu
            • „B erstellen“
          • 3 .B erfordert A für die Attributinjektion, dann
            „Holen Sie sich das A-Factory-Proxy-Objekt aus dem Cache der dritten Ebene“
          • und injizieren Sie es, löschen Sie dann die A-Factory im Cache der dritten Ebene und legen Sie das A-Objekt in der zweiten Ebene ab Cache
          • 4.B Führen Sie die nachfolgende Attributinjektion durch, bis die Initialisierung abgeschlossen ist, und legen Sie B in den Cache der ersten Ebene ab
          • 5.
            "A ruft B aus dem Cache der ersten Ebene ab und injiziert B"
          • , bis die nachfolgenden Vorgänge abgeschlossen sind, löschen Sie A aus dem Cache der zweiten Ebene und legen Sie es in den Cache der ersten Ebene, und die zirkuläre Abhängigkeit endet
          • spring Es gibt zwei Voraussetzungen für die Lösung zirkulärer Abhängigkeiten:
            • 1.„Nicht alle Konstruktormethoden“zyklische Abhängigkeit (andernfalls können die Initialisierungs- und Instanziierungsvorgänge nicht getrennt werden)
            • 2.„Muss ein Singleton sein“(andernfalls kann nicht garantiert werden, dass es dasselbe ist Objekt)

            14. Warum kann der Cache der zweiten Ebene das Problem nicht lösen? Nur wenn tatsächlich zirkuläre Abhängigkeiten auftreten, andernfalls wird nur „eine Fabrik erstellt und in den Cache der dritten Ebene gelegt“, es werden jedoch keine Objekte über diese Fabrik erstellt.

            Wenn Sie den Cache der zweiten Ebene verwenden, um zirkuläre Abhängigkeiten aufzulösen, bedeutet dies, dass alle Beans den AOP-Proxy nach der Instanziierung abschließen müssen, was „gegen die Prinzipien des Spring-Designs verstößt“ Spring wird im letzten Schritt des Beans entworfen Lebenszyklus Um den AOP-Proxy abzuschließen, anstatt den AOP-Proxy unmittelbar nach der Instanziierung auszuführen.

            15. Was ist der Unterschied zwischen @Autowired und @Resource?

              „@Resource ist Javas eigene Annotation“
            • , @Resource hat zwei wichtigere Attribute, nämlich Name und Typ; Spring löst das Namensattribut der @Resource-Annotation in den Namen der Bean und das Typattribut in den Bean-Typ auf. Wenn also das Namensattribut verwendet wird, wird die automatische Injektionsstrategie byName verwendet, und wenn das Typattribut verwendet wird, wird die automatische Injektionsstrategie byType verwendet. Wenn weder der Name noch das Typattribut angegeben sind, wird die automatische Injektionsstrategie byName über den Reflexionsmechanismus verwendet.

            • „@Autowired ist eine Annotation von Spring“
            • , die in der Spring2.5-Version eingeführt wurde, injiziert nur basierend auf dem Typ,
              „stimmt nicht mit dem Namen überein“

              . Wenn der Typ das injizierte Objekt nicht identifizieren kann, muss es mit @Qualifier- oder @Primary-Annotationen versehen werden. Was sind die Transaktionsisolationsstufen von Spring?

            1.

            「propagation_required」
            „Interview Eight-Part Essay', Frühjahrsband 18
            • Die aktuelle Methode
              „muss in einem Kontext mit einer Transaktion ausgeführt werden“
            • Wenn eine Client-Transaktion läuft, wird das aufgerufene Ende ausgeführt Andernfalls wird die Transaktion erneut eröffnet.(Wenn auf der aufgerufenen Seite eine Ausnahme auftritt, werden sowohl die Transaktionen auf der aufrufenden Seite als auch auf der aufgerufenen Seite zurückgesetzt.) Transaktionskontext, aber wenn vorhanden Wenn es sich um eine Transaktion handelt, kann sie auch in dieser Transaktion ausgeführt werden.
          • 3 „, wenn keine Transaktion vorhanden ist, wird eine Ausnahme ausgelöst
            • 4.
              「propagation_nested」
          • Wenn in der aktuellen Methode eine Transaktion ausgeführt wird, sollte die Methode "in einer verschachtelten Transaktion ausgeführt werden „
            , die verschachtelte Transaktion kann unabhängig von der gekapselten Transaktion festgeschrieben oder zurückgesetzt werden. Wenn die gekapselte Transaktion vorhanden ist und die äußere Transaktion eine Rollback-Ausnahme auslöst, muss die innere Transaktion zurückgesetzt werden. Im Gegensatz dazu hat die innere Transaktion keinen Einfluss auf die äußere Transaktion. Wenn die gekapselte Transaktion nicht vorhanden ist, ist sie dasselbe wie propagation_required
            • 5.「propagation_never」
          • Der aktuelle Dienst sollte nicht in einer Transaktion ausgeführt werden. Wenn「Es gibt eine Transaktion Ausnahme wird ausgelöst „
            • 6.“propagation_requires_new“
          • Die aktuelle Methode „muss in einer eigenen Transaktion ausgeführt werden“
            . Eine neue Transaktion wird gestartet, und wenn eine vorhandene Transaktion ausgeführt wird, wird diese Methode während der Laufzeit angehalten, bis die neue Transaktion festgeschrieben oder zurückgesetzt wird.
            • 7.「propagation_not_supported」
          • Methode sollte nicht innerhalb einer Transaktion ausgeführt werden.„Wenn eine Transaktion ausgeführt wird, wird sie während der Laufzeit ausgesetzt und die Ausführung wird erst wieder aufgenommen, wenn die Transaktion festgeschrieben oder zurückgesetzt wird.“

        1. Wenn der Container startet, ruft er die selectImports-Methode von EnableAutoConfigurationImportSelector.class auf „Eine umfassende Liste häufig verwendeter BeanConfiguration abrufen“

        „Interview Eight-Part Essay', Frühjahrsband 18
          2 -boot-autoconfigure.jar unter spring.factories,
        • „Erhalten Sie den vollständig qualifizierten Klassennamen aller Spring-bezogenen Beans“

        • 3. Fahren Sie dann fort
        • „Rufen Sie den Filter auf, um einen nach dem anderen zu filtern“
          und filtern Sie ihn heraus einige, die wir nicht benötigen.

        • 4 Schließlich fügen Sie die qualifizierte BeanConfiguration in den Attributwert in der Standardklasse EnableConfigurationPropertie ein und
        • „injizieren Sie sie in die IOC-Umgebung“

Das obige ist der detaillierte Inhalt von„Interview Eight-Part Essay', Frühjahrsband 18. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:Java后端技术全栈. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen