『インタビュー八編エッセイ』春の巻18
「インタビュー全8回エッセイ」の春の第18弾 新しくリリースされました。今回は春に関するインタビューの質問を整理しました。また、春に関するインタビューの質問をネット上で調べてまとめました。 , 基本はすべてここにあります。もちろん、基本的すぎる概念もあるかもしれません。私はそれらを直接特定の質問にまとめたので、別の質問は開いていません。皆さんのスムーズな面接を祈っています~
1. Spring ではどのようなデザイン パターンが使用されますか?
2. コアとは何ですか?春のモジュール?
3. IOC について理解していることを教えてください?
4. 春の IOC コンテナとは何ですか?違いは何ですか?
5. BeanFactory と FactoryBean の違いは何ですか?
6. @Repository と @Service の違いは何ですか? 、@Compent、および @Controller?
7. DI とは何ですか?
8. AOP とは何ですか?
- ##9. 動的プロキシと静的プロキシの違いは何ですか?
- 10. JDK 動的プロキシと CGLIB プロキシの違いは何ですか?
- 11.Spring AOP と AspectJ AOP の違いは何ですか? #12.Spring の Bean のライフサイクルとは何ですか?
- #13.Spring は循環依存関係をどのように解決しますか?
- 14. なぜ 3 次キャッシュを使用するのでしょうか? 2 次キャッシュでは解決できないのでしょうか?
- 15. @Autowired と @ の違いは何ですか?リソース?
- 16. Spring のトランザクション分離レベルとは何ですか?
- 17. Spring トランザクションの伝播メカニズムとは何ですか?
- 18.springBoot 自動アセンブリ原理?
- ##
『1.Factory 設計パターン』: 例: BeanFactory と ApplicationContext による Bean オブジェクトの生成 『2.Agent 設計パターン』: AOP実装方法はプロキシ経由で、Spring では主に JDK ダイナミックプロキシと CGLIB プロキシを使用します。 「3. シングルトン設計パターン」: Spring の Bean デフォルトはシングルトン #「4. テンプレートメソッドモード」: Spring では、jdbcTemplate や、データベース上で動作する Template で終わるその他のクラスは、テンプレートを使用します。 メソッド設計パターン、いくつかの共通関数 「5. ラッパー設計パターン」: 私たちのプロジェクトは複数のデータベースに接続する必要があり、異なる顧客が各データベースに接続する必要があります。必要に応じてデータベースにアクセスします。このモードを使用すると、顧客のニーズに応じて異なるデータ ソースを動的に切り替えることができます。 「6. オブザーバー モード」: Spring イベント駆動型モデルのオブザーバー モード #「7. アダプター モード」: Spring AOP の機能拡張または通知 (アドバイス) はアダプター モードを使用します - 1.
「Spring Core」 : フレームワークの最も基本的な部分である Spring コアは、IOC および依存関係注入 DI 機能を提供します - 2.
"Spring Context": Spring BeanFactory の機能が強化されたサブインターフェイスであるコンテキスト コンテナ #3. - 「Spring Web」
: Web アプリケーション開発のサポートを提供します 4. - 「Spring MVC」
: MVC のアイデアを Web アプリケーションに実装することを目的としています 5. - 「Spring DAO」
: JDBC 抽象化レイヤーを提供し、JDBC コーディングを簡素化すると同時に、コーディングをより堅牢にします。 #6. 「Spring ORM」 - : Spring Hibernate、Spring iBatis、Spring JDO 統合などの一般的な ORM フレームワークの統合をサポートします。
7. 「Spring AOP」 - : アスペクト指向プログラミング。AOP Alliance と互換性のあるプログラミング実装を提供します。
@リポジトリ:dao レイヤー @サービス:サービス レイヤー @コントローラー:コントローラー レイヤー @Compent: 上記の 3 つのレイヤーに属さない他のコンポーネントは、この注釈 - インターフェースインジェクション
- コンストラクターインジェクション
- set インジェクション
「静的 AOP 実装」、AOP フレームワーク「コンパイル段階」プログラムのソース コードを変更します。 AspectJ 「動的 AOP 実装」などの静的 AOP プロキシ クラスが生成されます (生成された *.class ファイルは変更されており、特定のコンパイラを使用する必要があります)。 、AOP フレームワーク "実行時" SpringAOP # など、プロキシ オブジェクトを動的に生成する場合 (メモリ内の JDK 動的プロキシを使用するか、CGlib を使用して AOP プロキシ クラスを動的に生成する) - 「@Before」
: 対象のメソッドが呼び出される前に通知 ##「@AfterReturning」 - : 対象のメソッドが返されるか例外が発生した後に呼び出します
- : ターゲット メソッドが返された後に呼び出されます。
#『@After』 : ターゲット メソッドの例外の後に呼び出されます -
#『@Around』 : 対象のメソッドをカプセル化し、呼び出し時間を自分で決定する プログラマによって作成されるか、特定のツールによって自動的に生成され、コンパイルされます。プログラムが実行される前に、プロキシ クラスの .class ファイルはすでに存在します。 静的プロキシは通常、1 つのクラスのみをプロキシします。 静的プロキシは、それを認識します。事前にプロキシするもの プログラムの実行時に、プロキシは次を使用して動的に作成されます。 Cheng 動的プロキシは、インターフェイス下の複数の実装クラスのプロキシです 動的プロキシは、何をプロキシするのかを知りません。実行時のみ そのとき初めて知りました -
「コンパイル時ウィービング」: バイトコードのコンパイル時に、関連するプロキシ クラスをバイトコードに織り込みます。 # "コンパイル後のウィービング" : 初期クラスのコンパイル後、AOP 拡張が必要であることが判明し、関連するコードがそれに織り込まれます -
"クラスのロード時のウィービング」 : ローダーがクラスをロードするときのウィービング - を指します。
- 1.
「インスタンス化」、Bean オブジェクトをインスタンス化します ##2. - 「属性の入力」
、Bean に値を割り当てます 3. - 「初期化」
- BeanPostProcessor インターフェースが実装されている場合、このインターフェースの前処理および後処理の拡張機能が呼び出されます。 back
- init-method メソッドが設定されている場合、] はこのメソッドを実行します
- 4. 「破壊」
-
DisposableBean インターフェイスが実装されている場合、インターフェイスの destroy メソッドがコールバックされます。 If destroy- Method メソッドが設定されている場合、destroy メソッドが実行されます -method 設定メソッド 「一次キャッシュ」: インスタンス化および初期化されたオブジェクトを保存するために使用されます。 「第 1 レベル キャッシュ」第 2 レベル キャッシュ": インスタンス化されているが初期化されていないオブジェクトの保存に使用されます。 "第 3 レベル キャッシュ": オブジェクトの保存に使用されます。ファクトリーは、2 番目のレベルのキャッシュにオブジェクトを作成するための匿名内部クラスを提供します - 1.A インスタンス化が完了したら、
「オブジェクト ファクトリを作成し、3 番目のレベルのキャッシュに置く」に進みます。 - ## A が AOP によってプロキシされている場合、このファクトリを通じて取得されるのは、A プロキシの後のオブジェクトです。 #A が AOP によってプロキシされていない場合、このファクトリによって取得されるのはインスタンス化ですA オブジェクトの
- #2。A が属性注入を実行するときは、
「B の作成」 ## に進みます。 3. B は属性注入を実行し、A を必要とします。その後、 - 「A ファクトリ プロキシ オブジェクトを 3 次レベル キャッシュから取得します」
そしてそれを注入し、3 次キャッシュ内の A ファクトリを削除し、A を配置します。オブジェクトを第 2 レベルのキャッシュに移します 4.B 初期化が完了するまで後続の属性の注入を完了し、B を第 1 レベルのキャッシュに入れます - ##5.
- 「A from 一次キャッシュから B を取得し、B を注入」
、後続の操作が完了するまで、A は二次キャッシュから削除され、一次キャッシュに配置されます #spring には、循環依存関係を解決するための 2 つの前提条件があります。 1."すべてのコンストラクター メソッドではありません" 循環依存関係 (そうしないと、初期化操作とインスタンス化操作を分離できません) 2 .「シングルトンである必要があります」(そうしないと、同じオブジェクトであることが保証されません) 「 @Resource これは Java 独自のアノテーションです。"
、@Resource には、name と type というより重要な 2 つの属性があります。Spring は @Resource アノテーションの name 属性を Bean の名前に解析し、type 属性は次のように解析します。豆の種類。したがって、name 属性が使用される場合は byName 自動挿入戦略が使用され、type 属性が使用される場合は byType 自動挿入戦略が使用されます。 name 属性も type 属性も指定されていない場合は、リフレクション メカニズムを通じて byName 自動挿入戦略が使用されます。「@Autowired は spring のアノテーションです」、spring2.5 バージョンで導入されました。Autowired は型に基づいてのみ挿入します。「名前が一致しません」
。型が挿入されたオブジェクトを識別できない場合は、 @Qualifier または @Primary アノテーションで修飾する必要があります。 ###- DEFAULT: DB のデフォルトのトランザクション分離レベルを使用します
- READ_UNCOMMITTED: コミットされていない読み取り
- READ_COMMITTED: コミットされた読み取り
- REPEATABLE_READ: 反復可能な読み取り
- SERIALIZABLE: シリアル化
-
##1.『propagation_required』 現在のメソッド「トランザクションのあるコンテキストで実行する必要があります」、進行中のクライアント トランザクションがある場合、呼び出される側はトランザクション Run 内になります。それ以外の場合は、トランザクションを再開します。(呼び出される側で例外が発生した場合、呼び出し側と呼び出される側のトランザクションは両方ともロールバックされます) -
2.『propagation_supports』 現在のメソッドはトランザクション コンテキストを持つ必要はありませんが、トランザクション コンテキストがあればトランザクション内で実行できます -
3.『propagation_mandatory』 現在のメソッド 「トランザクションで実行する必要がある」 ことを示します。トランザクションがない場合、例外がスローされます 4.『propagation_nested』 - # #現在のメソッドにトランザクションが実行中の場合、メソッドは
「ネストされたトランザクションで実行される」 必要があります。ネストされたトランザクションは、カプセル化されたトランザクションとは独立してコミットまたはロールバックできます。カプセル化されたトランザクションが存在し、外側のトランザクションがロールバック例外をスローした場合、内側のトランザクションはロールバックする必要がありますが、逆に、内側のトランザクションは外側のトランザクションには影響しません。カプセル化されたトランザクションが存在しない場合は、propagation_required - 5.
『propagation_never』 # と同じになります。 - 「トランザクションがある場合、例外がスローされます」
- 。新しいトランザクションが開始され、既存のトランザクションが実行されている場合、新しいトランザクションがコミットまたはロールバックされるまで、このメソッドは実行中に一時停止されます。
1. コンテナーは、 EnableAutoConfigurationImportSelector.class の selectImports メソッドを呼び出します。"一般的に使用される BeanConfiguration の包括的なリストを取得します。"
2. Spring-boot- は次のようになります。後で読む autoconfigure.jar の下の spring.factories、
"すべての Spring 関連 Bean の完全修飾名 ClassName を取得します"-
# に進み、必要のない、条件を満たさない Bean をフィルターで除外します。3.次に、
#「フィルターを呼び出して 1 つずつフィルターする」 4.最後に、修飾された BeanConfiguration は、プロパティ値をデフォルトの EnableConfigurationPropertie クラスに挿入し、"それを IOC 環境に挿入します"
#1.春にはどのようなデザイン パターンが使用されますか?

#2. Spring のコア モジュールとは何ですか?

3. どの IOC を理解しているのか教えてください。

"制御の反転" です。 " それでは具体的には何ですか"制御の反転とは"
?制御の反転とは、"オブジェクトの制御をスプリングとSpring コンテナで管理します
、操作は行いませんでは、なぜ 「制御の反転が必要なものは何ですか」?
制御の反転がない場合、「オブジェクトを作成し、オブジェクトを自分で構成する必要がある」と想像してみましょう。 および 「オブジェクト間のさまざまな複雑な依存関係を手動で処理する」 では、プロジェクトがスケールアップすると、この関係を維持するのが非常に面倒になるため、制御の反転という概念があります。オブジェクトの作成や設定などの一連の操作を Spring に管理用に提供するもので、使用する場合はそれを取得するだけで済みます
4.Spring の IOC コンテナとは何ですか?違いは何ですか?
spring は主に "2 種類の IOC コンテナ" を提供します。1 つは "BeanFactory" "、もう 1 つは "ApplicationContext"
両者の違いは、BeanFactory "オブジェクトのインスタンス化とオブジェクトの取得という最も基本的な機能のみを提供する" ことと、ApplicationContext は BeanFactory から派生した製品であることです。
5. BeanFactory と FactoryBean の違いは何ですか?
#これら 2 つは「別の製品」
「BeanFactory は IOC コンテナです」 はオブジェクトを運ぶために使用されます
# #"FactoryBean はインターフェイスです"これは、Bean により柔軟な方法を提供します。Bean オブジェクトをプロキシすることにより、メソッドは一部の操作の前後に処理できます。
「本質は同じです。アノテーションによって識別されるオブジェクトは、使用されているさまざまなアプリケーション層を区別するためだけに、スプリング コンテナーに配置されます。」
「同じ概念を別の角度から解説したもの」 「依存関係に焦点を当てている」 と我々は述べました 「IOC の中核機能は、プログラムの実行中に他の依存オブジェクトをオブジェクトに動的に提供することです」, この機能は DI に依存することで実現されます。たとえば、オブジェクト A を注入する必要があり、このオブジェクト A がオブジェクト B に依存する場合、このオブジェクト B をオブジェクト A に注入する必要があります。これが依存関係注入です 「アスペクト指向」プログラミング、実行時のプリコンパイルと動的プロキシによりプログラム機能の一元的な保守を実現する技術". 「OOP (オブジェクト指向プログラミング) の継続」 であり、Spring フレームワークの重要な内容であり、関数型プログラミングの派生パラダイムです。 AOP を使用すると、ビジネス ロジックのさまざまな部分を分離できるため、ビジネス ロジックのさまざまな部分間の結合が軽減され、プログラムの再利用性が向上し、開発効率が向上します。 「AOP 実装は主に 2 つのカテゴリに分類されます:」 「動的プロキシを介して実装される」 です。インターフェースが実装されている場合は JDK 動的プロキシが使用され、それ以外の場合は CGLIB プロキシが使用されます。
「動的プロキシ」 JDK 動的プロキシ ビジネス クラス 「特定のインターフェイスを実装する必要がある」 (これは 「リフレクション メカニズムに基づいて実装される」 CGLIB ダイナミック プロキシは、バイトコード処理フレームワーク ASM を使用します。その原理は、バイトコード テクノロジを使用して「クラスのサブクラスを作成し、親クラスのメソッドをオーバーライドする」ことです。コード。 Spring AOP は実行時の拡張機能であり、「動的プロキシ実装」を通じて実装されます。 AspectJ AOP はコンパイル時の拡張機能であり、これには特別なコンパイラ。「コードを修正」することで完成し、「3 つのウィービング方法」をサポートします。 SpringBean のライフ サイクルは、大きく 4 つの段階に分かれています。 はい、3 レベル キャッシュの機能は、循環依存関係が実際に発生する場合にのみ事前にプロキシ オブジェクトを生成し、それ以外の場合はプロキシ オブジェクトを生成することです。 「ファクトリを作成し、それを第 3 レベルのキャッシュに入れる」 だけですが、オブジェクトはこのファクトリを通じて実際に作成されるわけではありません。 第 2 レベルのキャッシュを使用して循環依存関係を解決する場合、すべての Bean がインスタンス化後に AOP プロキシを完了する必要があることを意味します。これは 「Spring 設計の原則に違反します」 、Spring は当初の設計 インスタンス化直後に AOP プロキシを実行するのではなく、Bean ライフサイクルの最後のステップで AOP プロキシを完了させることです。
7 を使用します。ではDIとは何でしょうか?
#DIとは依存性注入のことで、実はIOCとほぼ同じなのですが、
8. AOP とは何ですか?
AOP とは次のことを意味します:
#Spring の AOP の実装は
「静的プロキシ」
10. JDK ダイナミック プロキシと CGLIB プロキシの違いは何ですか?
11.Spring AOP と AspectJ AOP の違いは何ですか?
##主な違い
拡張方法Spring AOP
AspecjtJ AOP
動的プロキシ実行時の拡張 #コンパイル時の拡張
##実装方法
javacコードの変更
コンパイラ
低い (実行時反射損失パフォーマンス)特別なコンパイラ ajc
効率
実行時高い
ウィービング方法
コンパイル時間、コンパイル後、クラスの読み込み時間
12. Spring の Bean のライフ サイクルとは何ですか?
13. Spring は循環依存関係をどのように解決しますか?
#循環依存関係とは、2 つのオブジェクトが相互に依存し、循環呼び出しリンクを形成することを意味しますspring は、第 3 レベルのキャッシュを使用して循環リンクを解決します。中心となるロジックは、インスタンス化と初期化のステップを分離し、それらを別のオブジェクトが呼び出せるようにキャッシュに入れることです。
#クラス A と B の間で循環参照が発生した場合の一般的なプロセス
14. なぜ使用するのかレベル 3 キャッシュ、2 レベル キャッシュでは解決できませんか?
15. @Autowired と @Resource の違いは何ですか?
16. Spring のトランザクション分離レベルは何ですか?
17 Spring トランザクションの伝播メカニズムとは何ですか?
##現在のサービスはトランザクション内で実行しないでください。
「propagation_requires_new」「独自のトランザクションで実行する必要がある」
『propagation_not_supported』
18. SpringBoot の自動アセンブリ原理?
###
以上が『インタビュー八編エッセイ』春の巻18の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用する; 5. トランザクション マネージャーをカスタマイズする。

Java によるスケジュールされたタスクの実装 Jdk に付属のライブラリでは、スケジュールされたタスクを実装する 2 つの方法があります。1 つは Timer で、もう 1 つは ScheduledThreadPoolExecutor です。 Timer+TimerTask が Timer を作成すると、TimerTask タスクのスケジュールに使用できるスレッドが作成されます。Timer には 4 つの構築メソッドがあり、Timer スレッドの名前と、それをデーモン スレッドとして設定するかどうかを指定できます。デフォルト名は Timer-number で、デフォルトはデーモン スレッドではありません。主なメソッドは 3 つあります。 cancel(): タスクのスケジュールを終了し、現在スケジュールされているすべてのタスクをキャンセルします。実行中のタスクは影響を受けません。 purge(): タスク キューからタスクを削除します。

SpringBoot と SpringCloud は両方とも、開発者がマイクロサービス アプリケーションをより迅速に構築およびデプロイできるようにする Spring Framework の拡張機能ですが、それぞれ異なる目的と機能を持っています。 SpringBoot は、Java アプリケーションを迅速に構築するためのフレームワークであり、開発者は Spring ベースのアプリケーションをより迅速に作成してデプロイできるようになります。スタンドアロンの実行可能な Spring アプリケーションを構築するための、シンプルでわかりやすい方法を提供します。

テクノロジーの更新と反復により、Java5.0 はアノテーションをサポートし始めました。 Java の主要なフレームワークである Spring は、バージョン 2.5 に更新されて以来、徐々に XML 構成を放棄し始めており、Spring フレームワークを制御するために使用されるアノテーションが増えています。

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

Java 開発者として、Spring フレームワークを学習して使用することは必須のスキルです。クラウド コンピューティングとマイクロサービスの人気に伴い、Spring Cloud の学習と使用も習得しなければならないスキルになりました。 SpringCloud は、分散システムを迅速に構築するための SpringBoot に基づく開発ツールセットです。サービスの登録と検出、構成センター、負荷分散、サーキット ブレーカーなどの一連のコンポーネントを開発者に提供し、開発者がマイクロ サービスを構築できるようにします。
