この記事では、古典的なインタビューの書面によるテストの質問とその参照の回答について説明します。次のように、参照のために共有してください。
1.冬眠はどのように機能し、なぜそれを使用する必要がありますか?
原理:
1.構成ファイルの読み取りと解析
2。マッピング情報を読み取り、解析し、SessionFactoryを作成します
3。オープンセッション
4.トランザクショントランセーションを作成します
5。持続操作
6.トランザクションを送信します
7。セッションを閉じる
8。sesstionfactoryを閉じます
使用する理由:
①。データベースへのJDBCアクセスのコードはカプセル化されており、データアクセスレイヤーの面倒な反復コードを大幅に簡素化しています。
②。 Hibernateは、JDBCに基づく主流の永続性フレームワークであり、優れたORM実装です。 DAO層のコーディング作業を大幅に簡素化します
③。 Hibernateは、透明性を実現するために、バイトコード強化プログラムではなく、Java反射メカニズムを使用します。
④。 Hibernateは、軽量のフレームワークであるため、非常にうまく機能します。マッピングの柔軟性は優れています。 1つから1つまで、多くの複雑な関係から多くの複雑な関係をサポートしています。
2。冬眠はどのように負荷を遅らせますか?
①。 hibernate2の読み込み遅延実装:a)エンティティオブジェクトb)コレクション(コレクション)
②。 hibernate3は、属性の遅延負荷関数を提供します。 Hibernate Querysデータの場合、データは存在せず、メモリ。プログラムが本当にデータで動作すると、オブジェクトが存在し、メモリが存在し、遅延荷重が実現します。サーバーのメモリオーバーヘッドを保存するため、サーバーのパフォーマンスが向上します。
3.冬眠のクラス間の関係を実装する方法は? (1対多、多対多数の関係など)
クラス間の関係は、主にテーブル間の関係に反映されています。彼らは市内のオブジェクトで動作します。私たちのプログラムは、すべてのテーブルとクラスを一緒にマッピングし、構成ファイルの多くの、1対多、多くの、および多目的で多数のファイルに渡されます。
4。冬眠のキャッシュメカニズムについて話しましょう
①。内部キャッシュは、アプリケーションレベルのキャッシュに属するHibernateの第1レベルのキャッシュとも呼ばれます
②。レベル2キャッシュ:
a)アプリケーションとキャッシュ
b)分散キャッシュ条件:データは第三者によって変更されず、データサイズは許容範囲内にあり、データの更新頻度は低く、同じデータがシステムで頻繁に使用され、非批判的なデータは頻繁に使用されます。
c)サードパーティキャッシュの実装
5。冬眠クエリメソッド
SQL、基準、オブジェクトコンポジット
HQL:
1。属性クエリ
2。パラメータークエリ、名前付きパラメータークエリ
3。関連クエリ
4。ページネーションクエリ
5。統計関数
6.冬眠を最適化する方法は?
①。 1対多数の1対多数の②ではなく、双方向の1対多くの関連性を使用します。柔軟に1対多数の1対多アソシエーションを使用してください。 1対1を使用しないでください。オブジェクトキャッシュを構成し、セットキャッシュを使用しないでください。 1対多くのコレクションにはバッグを使用し、多くの対応コレクションにセットを使用します。
⑥。継承クラスで明示的な多型を使用してください。テーブルフィールドが少なくなり、多くのテーブル関連を恐れないでください。あなたをサポートするための二次キャッシュがあります。
7.ストラットワーキングメカニズム?なぜストラットを使用するのですか?
作業メカニズム:
Strutsのワークフロー:
Webアプリケーションが開始されると、初期化アクションサーバーがロードされます。 ActionServletはからロードされます
struts-config.xmlファイルから構成情報を読み、さまざまな構成オブジェクトに保存します
ActionServletがクライアントリクエストを受信すると、次のプロセスが実行されます。
- (1)ユーザーリクエストに一致するアクションマッピングインスタンスを取得します。存在しない場合、要求パス無効な情報を返します。
- (2)ActionFormインスタンスが存在しない場合は、ActionFormオブジェクトを作成し、クライアントが提出したフォームデータをActionFormオブジェクトに保存します。
- (3)構成情報に基づいてフォーム検証が必要かどうかを決定します。検証が必要な場合は、ActionFormの検証()メソッドを呼び出します。
- (4)ActionFormの検証()メソッドがnullを返したり、ActionMessageを含まないactuiberrorsオブジェクトを返したりする場合、フォーム検証が成功することを意味します。
- (5)ActionServletは、アクションマッピングに含まれるマッピング情報に基づいて、リクエストを転送するアクションを決定します。対応するアクションインスタンスが存在しない場合は、最初にこのインスタンスを作成してから、アクションのexecute()メソッドを呼び出します。
- (6)Actionのexecute()メソッドはActionForwardオブジェクトを返し、ActionServletはActionForwardオブジェクトによって指されたJSPコンポーネントにクライアント要求を転送します。
- (7)ActionForwardオブジェクトは、JSPコンポーネントを指して動的なWebページを生成し、クライアントに返します。
使用する理由:
JSP、サーブレット、およびJavabean Technologiesの出現により、強力なエンタープライズアプリケーションシステムを構築する可能性があります。しかし、これらのテクノロジーで構築されたシステムは非常に混oticとしているため、これに加えて、これらのテクノロジーを整理するためのルールとルールが必要です。これがフレームワークであり、ストラットが生まれました。
ストラットに基づいて開発されたアプリケーションは、コントローラーコンポーネント、モデルコンポーネント、ビューコンポーネントの3種類のコンポーネントで構成されています。
8。Strutsの検証フレームワークはどのように検証されていますか?
Struts構成ファイルで特定のエラープロンプトを構成し、FormbeanのValidate()メソッドを呼び出します。
9。Strutsのデザインパターンについて話しましょう
MVCモード:ActionServlerは、Webアプリケーションの開始時にロードされ、初期化されます。ユーザーがフォームを送信すると、構成されたActionFormオブジェクトが作成され、フォームの対応するデータに入力されます。 ActionServlerは、Struts-config.xmlファイルによって構成された設定に基づいて、フォーム検証が必要かどうかを決定します。必要に応じて、ActionFormのVALIDATE()検証を呼び出し、リクエストを送信するアクションを選択します。アクションが存在しない場合、ActionServletは最初にこのオブジェクトを作成し、次にアクションのexecute()メソッドを呼び出します。 execute()ActionFormオブジェクトからデータを取得し、ビジネスロジックを完了し、ActionForwardオブジェクトを返します。 ActionServletは、ActionForwardオブジェクトによって指定されたJSPコンポーネントにクライアント要求を転送します。 ActionForwardオブジェクトによって指定されたJSPは、動的なWebページを生成し、クライアントに返します。
10。春の作業メカニズムとその理由は何ですか?
spring MVCすべてのリクエストをDispatcherServletに送信してください。これにより、アプリケーションシステムの他のモジュールにリクエストの実際の処理を担当するように委託します。
dispatcherservletは、1つ以上のハンドラーマッピングを照会し、リクエストを処理するコントローラーを見つけます。
③.dispatcherservletターゲットコントローラーにリクエストを送信してください
④。コントローラーがビジネスロジック処理を実行すると、ModelandViewが返されます。
⑤.dispathcherは、1つ以上のViewResolverビューリゾルバーを照会し、ModelandViewオブジェクトで指定されたビューオブジェクトを見つけます。ビューオブジェクトは、クライアントにレンダリングして返すことに責任があります。
使用する理由:
{AOPを使用すると、開発者は、相互習慣の懸念と呼ばれる非行動的懸念を作成し、アプリケーションコードに挿入できます。 AOPを使用した後、公共サービス(ログ、永続性、トランザクションなど)をアスペクトに分割し、ドメインオブジェクトのオブジェクトモデルの複雑さを増やすことなくドメインオブジェクトに適用できます。
IOCを使用すると、オブジェクトを構築できるアプリケーション環境を作成し、それらのオブジェクトにコラボレーションオブジェクトを渡すことができます。反転という言葉が示すように、IOCは逆のJNDIのようなものです。抽象的な工場、サービスロケーター、シングルトン、ストレート構造を使用することなく、各オブジェクトはその共同オブジェクトで構築されています。したがって、コラボレーターはコンテナによって管理されます。
Springは、AOPフレームワークであってもIOCコンテナです。 Springの一番のことは、オブジェクトを交換するのに役立つことです。 Springを使用すると、Javabeanプロパティと構成ファイルを使用して、依存関係(コラボレーションオブジェクト)を追加するだけです。同様のインターフェイスを持つコラボレーションオブジェクトは、必要に応じて簡単に交換できます。 }
Springフレームワークは、7つの明確なモジュールで構成される階層アーキテクチャです。スプリングモジュールは、豆の作成、構成、および管理方法を定義するコアコンテナの上に構築されています。
Springフレームワークを構成する各モジュール(またはコンポーネント)は、単独で存在するか、1つ以上の他のモジュールと組み合わせて実装できます。各モジュールの機能は次のとおりです。
coreコアコンテナ:コアコンテナは、スプリングフレームワークの基本的な機能を提供します。コアコンテナの主なコンポーネントはBeanFactoryであり、工場パターンの実装です。 BeanFactoryは、コントロールの反転(IOC)モードを使用して、アプリケーションの構成仕様と依存関係を実際のアプリケーションコードから分離します。
springコンテキスト:スプリングコンテキストは、スプリングフレームワークにコンテキスト情報を提供する構成ファイルです。 Springコンテキストには、JNDI、EJB、電子メール、国際化、チェックサムスケジューリング機能などのエンタープライズサービスが含まれます。
spring AOP:構成管理機能を通じて、Spring AOPモジュールは、アスペクト指向のプログラミング関数をSpringフレームワークに直接統合します。したがって、Spring FrameworkサポートAOPによって管理されたオブジェクトを簡単に作成できます。 Spring AOPモジュールは、Springベースのアプリケーションでオブジェクトにトランザクション管理サービスを提供します。 Spring AOPを使用することにより、EJBコンポーネントに依存せずに宣言的なトランザクション管理をアプリケーションに統合できます。
spring DAO:JDBC DAO抽象化レイヤーは、異なるデータベースベンダーによってスローされる例外処理とエラーメッセージの管理に使用できる意味のある例外階層を提供します。例外階層により、エラー処理が簡素化され、記述する必要がある例外コードの量(接続の開閉など)が大幅に削減されます。 Spring DAOのJDBC指向の例外は、一般的なDAO例外階層に従います。
Spring ORM:Spring FrameworkにはいくつかのORMフレームワークが挿入されるため、JDO、Hibernate、Ibatis SQLマップなどのORMオブジェクト関係ツールを提供します。これはすべて、Springの一般的なトランザクションおよびDAO例外階層に従います。
Spring Webモジュール:Webコンテキストモジュールは、アプリケーションコンテキストモジュールに基づいて構築され、Webベースのアプリケーションのコンテキストを提供します。したがって、スプリングフレームワークは、ジャカルタストラットとの統合をサポートしています。 Webモジュールは、マルチパートリクエストとドメインオブジェクトへのバインディングリクエストパラメーターの処理作業も簡素化されます。
spring MVCフレームワーク:MVCフレームワークは、Webアプリケーションを構築するための完全に機能的なMVC実装です。ポリシーインターフェイスを通じて、MVCフレームワークは高度に構成可能になり、MVCはJSP、速度、タイル、ITEXT、POIなどの多数のビューテクノロジーを収容します。
Spring Frameworkの機能は、任意のJ2EEサーバーで使用でき、それらのほとんどは管理されていない環境に適しています。春のコアポイントは、特定のJ2EEサービスに拘束されない再利用可能なビジネスおよびデータアクセスオブジェクトのサポートです。そのようなオブジェクトを、異なるJ2EE環境(WebまたはEJB)、スタンドアロンアプリケーション、テスト環境間で再利用できることは間違いありません。
IOCとAOP
反転パターンを制御するという基本的な概念(依存関係介入とも呼ばれます)は、オブジェクトを作成するのではなく、それらの作成方法を説明することです。コード内のオブジェクトやサービスに直接接続するわけではありませんが、構成ファイル内のどのサービスが必要かを説明します。コンテナ(Spring FrameworkのIOCコンテナ)は、これらをリンクする責任があります。
典型的なIOCシナリオでは、コンテナはすべてのオブジェクトを作成し、それらを接続するために必要なプロパティを設定し、メソッドがいつ呼び出されるかを決定します。次の表には、IOCの実装パターンを示します。
Spring FrameworkのIOCコンテナは、タイプ2とタイプ3を使用して実装されています。
アスペクト指向プログラミング
アスペクト指向のプログラミングであるAOPは、プログラマーが懸念や典型的な分割線(ロギングやトランザクション管理など)をクロスカットする動作をモジュール化できるようにするプログラミング手法です。 AOPのコア構築は側面であり、複数のクラスに影響を与える動作を再利用可能なモジュールにカプセル化します。
AOPとIOCは補完的なテクノロジーであり、どちらもモジュールアプローチを使用して、エンタープライズアプリケーション開発における複雑な問題を解決します。典型的なオブジェクト指向の開発では、ロギング機能を実装するためにすべての方法とJavaクラスに配置するには、ロギングステートメントが必要になる場合があります。 AOPアプローチでは、ログサービスを順番にモジュール化し、ログを必要とするコンポーネントに宣言的に適用できます。もちろん、利点は、Javaクラスがログサービスの存在を知る必要がなく、関連するコードを考慮する必要もないことです。したがって、Spring AOPに記述されたアプリケーションコードは、大まかに結合されています。
AOPの機能は、Spring Transaction Management、Logging、その他のさまざまな機能のコンテキストに完全に統合されています。
IOCコンテナ
Springのデザインの中心にあるのは、Javabeanコンポーネントで使用するように設計されたorg.springframework.beansパッケージです。このパッケージは通常、ユーザーが直接使用するのではなく、サーバーが他のほとんどの機能の基礎となる仲介者として使用しています。次に最も高度な抽象化は、BeanFactoryインターフェイスです。これは、オブジェクトを名前で作成および取得できる工場の設計パターンの実装です。 BeanFactoryは、オブジェクト間の関係を管理することもできます。
BeanFactoryは、2つのオブジェクトモデルをサポートしています。
□Singletonモデルは、クエリ時に取得できる特定の名前を持つオブジェクトの共有インスタンスを提供します。 Singletonは、デフォルトで最も一般的に使用されるオブジェクトモデルです。ステートレスサービスオブジェクトに最適です。
□プロトタイプモデルは、取得するたびに個別のオブジェクトが作成されることを保証します。プロトタイプは、各ユーザーが独自のオブジェクトを必要とする場合に最適です。
Bean Factoryの概念は、IOCコンテナとしての春の基礎です。 IOCは、アプリケーションコードからフレームワークに物事を処理する責任をシフトします。次の例で示すように、Spring FrameworkはJavabeanプロパティと構成データを使用して、設定する必要がある依存関係を示します。
BeanFactoryインターフェイス
org.springframework.beans.factory.beanfactoryは単純なインターフェイスであるため、さまざまな基礎となるストレージ方法に実装できます。最も一般的に使用されるBeanFactoryの定義はXmlBeanFactoryです。これは、リスト1に示すように、XMLファイルの定義に従って豆をロードします。
リスト1。xmlbeanFactory
BeanFactory Factory = new XmlBeanFactory(new FileInputSteam( "mybean.xml"));
XMLファイルで定義されている豆は負にロードされます。つまり、豆自体が必要になるまで初期化されません。 BeanFactoryからBeanを取得するには、リスト2に示すように、GetBean()メソッドを呼び出して、取得する豆の名前を渡すだけです。
リスト2。getbean()
mybean mybean =(mybean)factory.getbean( "mybean");
各豆の定義は、Pojo(クラス名とJavabeanの初期化プロパティで定義)またはFactoryBeanのいずれかです。 FactoryBeanインターフェイスは、Springフレームワークを使用して構築されたアプリケーションに間接レベルを追加します。
IOCの例
制御の反転を理解する最も簡単な方法は、その実用的なアプリケーションを調べることです。 3部構成のスプリングシリーズのパート1を要約すると、スプリングIOCコンテナを介してアプリケーションの依存関係を注入する方法を示す例を使用しました(それらを構築するのではなく)。
オンラインクレジットアカウントを開始点として開くというユースケースを使用します。この実装では、クレジットアカウントを有効にするには、ユーザーが次のサービスと対話する必要があります。
☆クレジットレベル評価サービス、ユーザーのクレジット履歴情報を照会します。
Remote Remote Information Link Service、顧客情報を挿入し、顧客情報とクレジットカードと銀行情報を自動デビットのために接続します(必要に応じて)。
emailメールサービス、ユーザーにクレジットカードのステータスに関する電子メールを送信します。
3つのインターフェイス
この例では、サービスはすでに存在していると仮定します。理想的には、それらをゆるく結合した方法で統合することです。次のリストは、3つのサービスのアプリケーションプログラムインターフェイスを示しています。
リスト3。CreditRatingInterface
パブリックインターフェイスCreditRatingInterface {public boolean getUserCredithistoryInformation(icustomer icustomer);}リスト3に示されているクレジットレベル評価インターフェイスは、クレジット履歴情報を提供します。顧客情報を含む顧客オブジェクトが必要です。このインターフェイスの実装は、信用クラスによって提供されます。
リスト4。CreditLinkingInterface
public interface creditlinkinginterface {public string getUrl(); public void seturl(string url); public void linkcreditbankaccount()throws Exception;}クレジットリンクインターフェイスは、クレジット履歴情報を銀行情報(必要に応じて)と接続し、ユーザーのクレジットカード情報を挿入します。クレジットリンクインターフェイスはリモートサービスであり、そのクエリはgetURL()メソッドを使用して実行されます。 URLは、Spring FrameworkのBean構成メカニズムによって設定されています。これについては、後で説明します。このインターフェイスの実装は、クレジットリンククラスによって提供されます。
リスト5。EmailInterface
public interface emailInterface {public void sendemail(icustomer icustomer); public string getFromail(); public void setfromemail(String fromail); public string getPassword(); public void setPassword(); public string getSmtphost(); public void setsmtphost(sitsphost(); public string getuserid(); public setsmtphost(); public string getuserid(); public string getuserid(); ユーザーID);この記事がみんなのJavaプログラミングに役立つことを願っています。