Java 面接の質問 (春)

1. Spring の理解について話す

Spring はオープン ソース フレームワークです。他のフレームワークとシームレスに統合できる土台です。エンタープライズ開発を簡素化し、開発をよりエレガントで簡潔にするために生まれました。これは IOC および AOP コンテナ フレームワークです。

アドバンテージ:

        1. 強力なエコシステム

        2.低侵入設計、低コード汚染

        3. 様々なサーバーから独立

        4.ioc は、ビジネス オブジェクトの複雑さを軽減し、コンポーネント間の分離を改善します。

        5.開放性が高く、スプリングの全部または一部を自由に選べる

2. Spring はどのように開発を簡素化しますか?

        1. POJO ベースの軽量で低侵襲なプログラミング

        2.依存性注入とインターフェース指向による疎結合

        3. アスペクトと規約に基づく宣言型プログラミング

        4. アスペクトとテンプレートを使用してボイラープレート コードを削減する

3. AOP の理解

        AOPはアスペクト指向プログラミングと呼ばれます.たとえば、ビジネス A とビジネス B は同じ操作を必要とするようになりました.従来の方法では、関連する操作コードを A と B の両方に追加する必要がある場合があります.しかし、AOP を使用すると、コードのみを記述できます。 A と B は同じ操作を共有します。さらに、A と B が新しい操作を追加する必要がある場合、元のコードを変更することなく、新しいビジネス ロジックの実装を柔軟に追加できます。

4. IOCの理解

        IOCは制御の反転と呼ばれ、従来の開発方法では new キーワードを介してオブジェクトが初期化されますが、ioc の考え方はコンテナーを介してオブジェクトをインスタンス化することです。必要なオブジェクトは ioc コンテナーから直接取り出され、オブジェクトを作成する権利は ioc コンテナーに渡されます。

        2 つの間の結合が減り、リソース管理が容易になります。

5. Spring がサポートする bean スコープ

  1. シングルトン: デフォルトでは、ioc コンテナは Bean インスタンスを 1 つだけ作成し、毎回同じインスタンスを返します。
  2. プロトタイプ: ioc コンテナは複数の Bean インスタンスを作成し、それぞれが新しいインスタンスを返します。
  3. request: http リクエストでのみ機能し、各リクエストは新しいインスタンスを作成します。
  4. session: http セッションにのみ使用されます。同じセッションは Bean を共有し、異なるセッションは異なるインスタンスを使用します。
  5. global-session: http セッションの場合のみ、すべてのセッションが 1 つのインスタンスを共有します。

6. Spring のトランザクション伝搬メカニズム

複数のトランザクション メソッドが互いに呼び出します。トランザクションはこれらのメソッド間でどのように伝播しますか? トランザクションの正常な実行を保証するために、7 つの異なる伝搬機能が提供されています。

  1. トランザクションがある場合は参加し、トランザクションがない場合は作成します (デフォルト)。
  2. トランザクションがあれば結合、トランザクションがなければ非トランザクション方式で実行
  3. トランザクションがあれば参加し、トランザクションがなければ例外を投げる
  4. 新しいトランザクションを作成し、存在する場合はトランザクションを一時停止します
  5. 非トランザクション方式で実行し、トランザクションが存在する場合は中断します
  6. トランザクションを使用せず、トランザクションが存在する場合は例外をスローします
  7. トランザクションがある場合は、トランザクションにネストして実行します

7. Spring のトランザクションが失敗するのはいつですか?

  1. 自己呼び出しが発生し、クラスはこれを使用してこのクラスのメソッドを呼び出します
  2. メソッドのアクセス修飾子がパブリックではありません
  3. データベースはトランザクションをサポートしていません
  4. オブジェクトはSpringコンテナによって管理されていません
  5. 例外がスローされ、トランザクションはロールバックされませんでした

8. 春豆のライフサイクル

9. Bean はスレッドセーフですか?

        Bean がステートレスであれば安全

        Bean に状態がある場合、安全ではありません

10. BeanFactory と ApplicationContext の違いは何ですか?

どちらも Bean コンテナーです。

  1. ApplicationContext は BeanFactory のサブインターフェースです
  2. BeanFactory は単純な機能を提供し、ApplicationContext はより完全な機能を提供します
  3. BeanFactory は遅延読み込みの形で Bean を注入し、使用時にのみインスタンス化します; ApplicationContext は起動時にすべての Bean をインスタンス化します
  4. BeanFactory はプログラムによって作成され、ApplicationContext はプログラムおよび宣言によって作成されます

11.春のトランザクションの実装原理と分離レベル

トランザクションの実装:

        1. プログラム: コードによる制御ロジック

        2. 宣言型: アノテーションを介して実装

トランザクション実装の原則:

        実際には、トランザクションの操作はデータベースによって制御される必要がありますが、ユーザーがビジネス ロジックを操作しやすくするために、Spring はトランザクション機能の実装を拡張しました. 通常、プログラムによるトランザクションはほとんど使用せず、さらに追加することで、実装には @Transactional アノテーションが使用されます. このアノテーションが追加されると、トランザクションの自動機能が閉じられ、Spring フレームワークがそれを制御するのに役立ちます.
        実際、トランザクション操作は AOP のコアな実施形態です. メソッドに @Transactional のアノテーションが付けられると、Spring はこのクラスに基づいてプロキシ オブジェクトを生成し、このプロキシ オブジェクトを Bean として使用します. このプロキシ オブジェクトのメソッドを使用する場合、トランザクション処理がある場合、トランザクションは最初にリレーションシップに自動的に送信され、次に特定のビジネス ロジックが実行されます。実行ロジックに例外がない場合は、プロキシ ロジックが直接送信されます。例外がある場合もちろん、ロールバックする例外をユーザーが制御できます。

分離レベル:

  1. コミットされていない読み取り: 他のトランザクションでコミットされていないデータが表示される場合があります (ダーティ読み取り)
  2. コミットされた読み取り: コミットされたトランザクションのデータを読み取ることができます (反復不可能な読み取り)
  3. 反復可能な読み取り: 同じトランザクションの複数のクエリの結果が一貫していることを確認できます (ファントム読み取り)
  4. シリアル化: 競合が発生しないようにトランザクションの順序付けを強制する; 実行効率が低く、使用されるシナリオが少ない

12. Spring コンテナの起動プロセスは?

       1.Spring コンテナを初期化する

        2. BeanPostProcessor 構成クラスの BeanDefinition をコンテナーに登録します。

        3. refresh() メソッドを呼び出してコンテナをリフレッシュします

13. Spring が使用する設計パターン

        ファクトリー、アダプター、ビジター、デコレーター、デリゲーション、プロキシー、オブザーバー、ポリシー、テンプレート、責任の連鎖

14. スプリング注入の仕方

  1. コンストラクター注入
  2. set メソッド注入
  3. アノテーション注入

15. bean オブジェクトと通常のオブジェクトの違い

        大部分は同じですが、プロセスごとに名前が異なり、通常のオブジェクトは依存性注入などのプロセスを経てプロパティが割り当てられ、Bean オブジェクトになります。

16. Bean オートワイヤーとは何ですか? 方法は何ですか

Bean の自動アセンブリは、Bean のプロパティ値を参照し、注入時に特定のルールとメソッドを通じてコン​​テナ内で検索され、特定のオブジェクト プロパティに設定されます。

道:

        1. いいえ: デフォルト

        2.byName:属性名に従って自動アセンブル

        3.byType:タイプ別自動組立

        4.constructor: コンストラクタパラメータの byType メソッド内

        5.autodetect: デフォルトのコンストラクターが見つかった場合は自動アセンブリ構築を使用し、そうでない場合は型による自動アセンブリを使用します

17.依存性注入はどのように実装されますか?

        パラメーターなしで構築されたオブジェクトを判断して、どの属性に @Autowired アノテーションが付けられているかを判断し、アノテーションがある場合は、リフレクションを使用して、現在の Service クラスのオブジェクト内の属性に値を割り当てます

SpringMVC

1. springmvc の概要。springmvc の利点

        SpringMvc は、統合するための中間統合レイヤーを必要としない、MVC に基づくフレームワークである spring のモジュールです。

アドバンテージ:

  1.  要素技術に基づく

  2. サーブレットに依存しない

  3. 任意のビューを使用できます

  4. 展開しやすい

2. springmvc の動作原理

3. springmvc のワークフロー

4. springmvc のコアコンポーネント

        1. フロントエンド コントローラ: リクエストの受信、配布、およびクライアントへの応答を担当します。

        2. プロセッサ マッパー: uri に従って、処理できるものを照合して検索しHandler、リクエストHandler

        3. プロセッサ アダプタ:HandlerMapping見つかったHandler、適応は対応するものを実行します。Handler

        4.ビューパーサー:Handler返された、実際のビューを解析およびレンダリングします

        5. リクエスト プロセッサ: 実際のリクエストを処理するプロセッサ

5. springmvc の共通アノテーション

        @Component: さまざまなコンポーネントを指します

        @Controller: コントロール層

        @Service: ビジネス層

        @Repository: データ アクセス層

        @Bean: サードパーティ パッケージに注釈をインポートする

        @Import: コンテナにインポートされたコンポーネント

6. @Autowired と @Resource の違い

どちらもインジェクション用のアノテーションです。

        1. @Autowired は Spring で定義されたアノテーション、@Resource は Java で定義されたアノテーション

        2. @Autowired はタイプで検索し、複数ある場合は名前で検索し、@Resource は名前で検索し、存在しない場合はタイプで検索します。

        3. @Autowired は 1 つのパラメータの設定のみをサポートしますが、@Resource は 7 つのパラメータの設定をサポートします

        4. @Autowired はプロパティ インジェクション、コンストラクタ インジェクション、およびセッター インジェクションをサポートしますが、@Resource はプロパティ インジェクションとセッター インジェクションのみをサポートします。

7. SpringMvc のコントローラーはシングルトン モードですか?そうであれば、何が問題で、どのように解決すればよいですか?

        シングルトンパターン

問題: マルチスレッド アクセス時にスレッド セーフの問題が発生する

解決策: コントローラーでメンバー変数を定義しないでください。メンバー変数を定義する必要がある場合は、注釈を使用してマルチインスタンス モードとして設定します。

おすすめ

転載: blog.csdn.net/qq_35056891/article/details/130166251