ホームページ  >  記事  >  Java  >  長年の開発経験からまとめられた Java 面接の質問 - (7)

長年の開発経験からまとめられた Java 面接の質問 - (7)

王林
王林転載
2020-08-20 16:37:042076ブラウズ

長年の開発経験からまとめられた Java 面接の質問 - (7)

1. Hibernate の悲観的ロックと楽観的ロック

(その他のインタビューの質問に関する推奨事項: Java インタビューの質問と回答)

Hibernate 悲観的ロック: データがロードされるときにデータをロックします。ロックが解放されるまで、他のユーザーは変更を加えることができます。利点: データの一貫性が非常によく維持されます。欠点: 複数のユーザーによる同時アクセスには適していません。複数のユーザー。ロックされたリソースが解放されないと、そのリソースは他のユーザーによって変更されず、無期限の待機が発生しやすくなります。

Hibernate のオプティミスティック ロック: データが変更されると、データがバージョンまたはタイムスタンプと比較され、ロックを実現するためにデータが一貫しているかどうかが確認されます。メリットは比較的良いです。

2. Hibernate の 3 つの状態

一時状態: 新しいオブジェクトはまだ永続化されておらず、まだセッションにもありません

永続状態:すでに永続化されており、セッション キャッシュに追加されているこの状態のオブジェクトは永続オブジェクトと呼ばれます;

フリー状態: 永続オブジェクトはセッション オブジェクトから分離されています。セッション キャッシュがクリアされたオブジェクトなど。特徴: すでに永続化されていますが、セッション キャッシュには存在しません。この状態のオブジェクトはフリー オブジェクトと呼ばれます;

(関連チュートリアルの推奨事項: java 入門チュートリアル)

3. Hibernate と ibatis の違い

ibatis: オープン ソース プロジェクトは開始が簡単で、開発が柔軟で、開発ワークロードが重いです。ほとんどのプロジェクトは独自の SQL と多くの構成ファイルを作成します。

Hibernate: オープン ソースオブジェクト リレーショナル マッピング フレームワーク、開発効率は高いが SQL に干渉できない、最適化の程度は低い

#4. mybatis 接続プールについて話す

一般的な mybatis接続プールには、ファクトリ モードの DataSource インターフェイスを通じて作成されるネイティブ、c3p0、および dbcp が含まれます。その実装には、対応するファクトリ クラス オブジェクトを通じて取得できる、unpooledDataSource (接続プールのないデータ ソース) および PooledDataSource (接続プールのあるデータ ソース) が含まれます。 ;

PooledDataSource を例に挙げます 最初: データベースに接続するためのオブジェクトが必要で、SQL ステートメントの実行時に java.sql.Connection 接続オブジェクトを取得します

2 番目: PooledDataSource データソースは、接続プール オブジェクトを PooledConnection オブジェクトにラップし、それを PoolState 型コンテナーに入れて維持します。 MyBatis は、接続プール内の接続プールをアイドル状態 (idle) とアクティブ状態 (active) の 2 つの状態に分割します。PooledConnection オブジェクトは、PoolState コンテナーの 2 つの List コレクション、idleConnections と activeConnections に格納されます。アイドル状態の場合、PooledConnection オブジェクトは idleConnections コレクションに配置され、現在アイドル状態で使用されていない PooledConnection コレクションを示します。PooledDataSource の getConnection() メソッドが呼び出されると、最初に PooledConnection オブジェクトがこのコレクションから取得されます。 java.sql.Connection オブジェクトが使い果たされると、MyBatis はそれを PooledConnection オブジェクトにラップし、このコレクションに置きます。

アクティブ状態では、PooledConnection オブジェクトは activeConnections という名前の ArrayList に配置され、現在使用されている PooledConnection コレクションを示します。PooledDataSource の getConnection() メソッドが呼び出されると、最初に idleConnections コレクションから取得されます。 PooledConnection オブジェクト、そうでない場合は、コレクションがいっぱいかどうかを確認します。そうでない場合、PooledDataSource は PooledConnection を作成し、このコレクションに追加して、戻ります;

(ビデオ チュートリアルの推奨事項:

java コース

)

5. SpringMVC の動作原理

ユーザーがリクエストを送信すると、リクエストはフロントエンド コントローラー DispatcherServlet によってキャプチャされインターセプトされます。 ##DispatcherServlet は HandlerMapping を呼び出して処理します ハンドラー マッピング管理オブジェクトは Handler プロセッサを取得します;

DispatcherServlet は Handler に応じて適切なアダプター HandlerAdpter を取得し、HttpMessageConveter は要求情報を指定された応答オブジェクトに変換します;

アダプターを使用して、リクエストパラメーターを入力します。ハンドラーに到達した後、Spring はデータ変換、データ検証、データフォーマット操作のためにハンドラー (コントローラー) の実行を開始します。

ハンドラーが実行された後、ModelAndViewオブジェクトが DispatcherServlet に返されます。

返された ModelAndView に従って、適切な ViewResolver ビュー リゾルバーを選択し、ModelAndView で指定されたビューを見つけます。

ViewResolver は、Model と View を組み合わせて表示ページをレンダリングします。

以上が長年の開発経験からまとめられた Java 面接の質問 - (7)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。