Hibernate はどのように機能するのでしょうか?また、なぜ Hibernate を使用する必要があるのでしょうか?
(より関連性の高い面接の質問に関する推奨事項: java 面接の質問と回答)
動作原理:
1. 構成の読み取りと解析file
2. マッピング情報を読み取って解析し、SessionFactory
を作成します。 3. Session
# # を作成します。
# 5. 永続化操作
# 8. SessionFactory を閉じる
Hibernate を使用する理由 (つまり、その利点):
1. データベースへの JDBC アクセスのコードはカプセル化されており、データ アクセス層の退屈で反復的なコードが大幅に簡素化されます。
2. Hibernate は、JDBC と優れた ORM 実装に基づく主流の永続化フレームワークです。これにより、DAO 層のコーディング作業が大幅に簡素化されます。
3. Hibernate は、バイトコード拡張プログラムの代わりに Java リフレクション メカニズムを使用して、透過性を実現します。
4. Hibernate マッピングの柔軟性は優れています。 1 対 1 から多対多の複雑な関係まで、さまざまなリレーショナル データベースをサポートします。
2. Hibernate の get メソッドとload メソッドの違い
4. Hibernate でクラス間の関係を実現するにはどうすればよいですか?
クラス間の関係は主にテーブルとテーブル間の関係に反映されます。すべてのテーブルとクラスをプログラム内で一緒にマップし、構成ファイル内で多対 1、1 対多、および多対多を通じて動作します。
3. サードパーティのキャッシュ (ehcache など) を導入します。
7, Hibernate を最適化するにはどうすればよいですか?
1. 一方向の 1 対多の関連付けではなく、双方向の 1 対多の関連付けを使用します。
2. 一方向の 1 対多の関連付けを柔軟に使用します
3. 1 対 1 の関連付けは必要ありません。多対 1 に置き換えます。
4. オブジェクト キャッシュを設定し、コレクション キャッシュを使用しないでください。
5. Bag を使用する1 対多のコレクション、および多対多のコレクションの Set
6 . 継承されたクラスで明示的なポリモーフィズムを使用する
7 . テーブル フィールドが少なくても心配する必要はありません多くのテーブルアソシエーション、およびセカンドレベルのキャッシュ
8のサポートがあります。Hibernateの怠zyなロードとOpenSessionInview
について話しましょう。
(ビデオ推奨: java コース)
9、struts のワークフローを簡単に説明します2
1. クライアントのブラウザーが HTTP ask を送信します。 。
2. web.xml 設定に従って、リクエストは FilterDispatcher によって受信されます。
3. struts.xml 設定に従って、呼び出す必要がある Action クラスとメソッドを見つけ、IoC を通じてその値を Aciton に注入します。
4. アクションはビジネス ロジック コンポーネントを呼び出してビジネス ロジックを処理します。このステップにはフォームの検証が含まれます。
5. アクションの実行後、struts.xml の設定に従って対応する戻り結果を見つけ、対応するページにジャンプします。
6. HTTP 応答をクライアントのブラウザに返します。
10、Struts の設計パターンについて話しましょう
MVC パターン
1. Web アプリケーションの開始時に ActionServlet がロードされ、初期化されます;
2. ユーザーがフォームを送信すると、構成された ActionForm オブジェクトが作成され、フォームの対応するデータが入力されます;
3. ActionServlet は、構成された設定に基づいてフォームが必要かどうかを判断します。 Struts-config.xml ファイルを確認します。必要に応じて、ActionForm の Validate() を呼び出し、確認後にリクエストを送信するアクションを選択します。アクションが存在しない場合、ActionServlet は最初にオブジェクトを作成し、その後、execute() を呼び出します。 Action のメソッド;
4, Execute() は、ActionForm オブジェクトからデータを取得し、ビジネス ロジックを完了し、ActionForward オブジェクトを返します。その後、ActionServlet は顧客のリクエストを、ActionForward オブジェクトで指定された JSP コンポーネントに転送します。
## 5. ActionForward オブジェクトで指定された JSP は動的 Web ページを生成し、クライアントに返します。 11、Struts の利点と欠点利点:5. サーブレットへの依存度が高すぎる Struts は、Action を処理するときに ServletRequest と ServletResponse に依存する必要があるため、Servlet コンテナを取り除くことができません。
6. フロントエンドの表現言語について Struts は JSTL を統合しているため、主に JSTL 表現言語を使用してデータを取得します。ただし、JSTL の式言語は、コレクションとインデックスのプロパティの処理が非常に弱いです。
7. アクションの実行制御が難しい Struts でアクションを作成する場合、その実行順序を制御するのは非常に困難です。機能要件を実現するには、サーブレットを書き直す必要がある場合もあります。
8. アクション実行前後の処理 Struts がアクションを処理する場合、クラス階層に基づいており、アクション処理前後の操作が困難です。
9. イベントのサポートが不十分です。Struts では、フォームは実際には Action クラス (または DispatchAction) に対応します。つまり、Struts では、フォームは実際に 1 つのイベントにのみ対応します。Struts このイベント メソッドは、アプリケーション イベントは、コンポーネント イベントと比較して粒度の粗いイベントです。
12、なぜスプリング (つまり利点) を使用する必要があるのでしょうか?
1. Spring は、EJB の使用を選択するかどうかに関係なく、中間層オブジェクトを効果的に整理できます。 Struts または J2EE API 用に特別に設計されたその他のフレームワークだけを使用している場合、Spring は残りの部分の解決に取り組んでいます。
2. Spring では、多くのプロジェクトでよく見られるシングルトンの過剰な使用を排除できます。シングルトンを過度に使用すると、システムのテスト容易性とオブジェクト指向性が低下します。
3. Spring では、さまざまなアプリケーションやプロジェクトにわたって設定ファイルを一貫した方法で処理することにより、プロパティ ファイルのさまざまなカスタム形式の必要性を排除できます。特定のクラスがどのマジック属性またはシステム プロパティを探しているのか疑問に思ったことはありますか。そのためには Javadoc やソース コードを読む必要がありますか? Spring では、クラスの JavaBean プロパティを確認するだけで済みます。 Inversion ofControl (後述) を使用すると、この単純化を実現できます。
4. Spring は、クラスではなくプログラミング インターフェイスのコストをほぼゼロに削減することで、優れたプログラミング習慣の開発を促進できます。
5. Spring は、Spring を使用して作成されたアプリケーションが API にできるだけ依存しないように設計されています。 Spring アプリケーションのほとんどのビジネス オブジェクトは Spring に依存しません。
6. Spring で構築されたアプリケーションは単体テストが簡単です。
7. Spring では、アプリケーション アーキテクチャの必然的な選択ではなく、実装上の選択肢として EJB を使用できます。 POJO またはローカル EJB の使用を選択して、呼び出しコードに影響を与えずにビジネス インターフェイスを実装できます。
8. Spring は、EJB を使用せずに多くの問題を解決するのに役立ちます。 Spring は、多くの Web アプリケーションに適した EJB の代替品を提供できます。たとえば、Spring は EJB コンテナを経由せずに AOP を使用して宣言型トランザクション管理を提供できます。単一のデータベースのみを処理する必要がある場合は、JTA 実装さえ必要ありません。
9. Spring は、JDBC を使用する場合でも、O/R マッピング製品 (Hibernate など) を使用する場合でも、データ アクセスのための一貫したフレームワークを提供します。
13. Spring トランザクションを実装するために知っているいくつかの方法を列挙してください
(1) プログラムによるトランザクション管理: コードを手動で記述する必要があり、実際の開発ではほとんど使用されません。
(2)、TransactionProxyFactoryBean に基づく宣言型トランザクション管理には、各トランザクション管理クラスに対応する設定が必要です
(3)、AspectJ の XML に基づく宣言型トランザクション管理、必要ありません クラスを変更する場合は、XML で設定するだけですファイル
(4)、アノテーションベースの宣言型トランザクション管理、シンプルな構成、ビジネス層クラスにアノテーションを追加する必要があります
14、Springトランザクションの分離レベルと伝播動作について説明します
分離レベル:
- DEFAULT はデータベースのデフォルトの分離レベルを使用します
# - READ_UNCOMMITTED により、ダーティ リード、非反復読み取り、ファントム リードの問題が発生します - READ_COMMITTED では繰り返し読み取りとファントム読み取りが発生します。 - REPEATABLE_READ ではファントム読み取りが発生します。 - SERIALIZABLE が最も安全ですが、コストが最も高く、パフォーマンスへの影響が非常に深刻ですそして伝播行: - 必須 トランザクションが存在する場合はトランザクションに統合され、存在しない場合はトランザクションを作成します - サポートトランザクションが存在する場合はトランザクションに統合され、存在しない場合はトランザクションは作成されません - トランザクションが MANDATORY に存在する場合は、トランザクションに統合されます。存在しない場合、例外がスローされます - REQUIRES_NEW は常に新しいトランザクションを作成します - NOT_SUPPORTED トランザクションが存在する場合、トランザクションは中断され、非実行が継続されます トランザクション操作 - 常に非トランザクションを実行することはありません。現在トランザクションが存在する場合は、例外がスローされます。 - NESTED 埋め込みトランザクション15. DIの仕組みとは何ですか?
依存性の注入と制御の反転は同じ概念です。具体的には、従来のプログラミング プロセスでは、ロールが別のロールからの支援を必要とする場合、通常、呼び出し先のインスタンスを作成するためにそのロールが呼び出されます。
しかし、Spring では、呼び出し先を作成する作業が呼び出し元によって行われなくなるため、これは制御の反転と呼ばれます。呼び出し先を作成する作業は Spring によって実行され、その後呼び出し元が注入されます。
そのため、依存性注入とも呼ばれます。
Spring では動的かつ柔軟な方法でオブジェクトを管理しますが、インジェクションには設定インジェクションとコンストラクションインジェクションの 2 つの方法があります。
設定インジェクションの利点: 直感的で自然です
コンストラクションインジェクションの利点: 依存関係の順序をコンストラクターで決定できます。
16. AOP とは何ですか?
アスペクト指向プログラミング (AOP) は、Spring の依存関係注入 (DI) を改善します。
アスペクト指向プログラミングは、Spring の主に 2 つの側面で現れます:
1. アスペクト指向プログラミングは、宣言型トランザクション管理を提供します。
2.spring はユーザー定義のアスペクトをサポートします
推奨チュートリアル: Java の入門
以上が2023 年の最新の SSH フレームワーク面接の質問の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。