JAVA知識に関する200の質問(91〜120)

91. Spring mvc実行プロセス?

ここに画像の説明を挿入
春の実行プロセスの説明:

  1. ユーザーがサーバーにリクエストを送信すると、そのリクエストはSpringフロントエンドコントロールのServelt DispatcherServletによってキャプチャされます。

  2. DispatcherServletはリクエストURLを解析して、リクエストされたリソース識別子(URI)を取得します。次に、URIに従って、HandlerMappingを呼び出して、Handlerによって構成されたすべての関連オブジェクト(Handlerオブジェクトと、Handlerオブジェクトに対応するインターセプターを含む)を取得し、最後にHandlerExecutionChainオブジェクトの形式で返します。

  3. DispatcherServletは、取得したハンドラーに従って適切なHandlerAdapterを選択します(注:HandlerAdapterが正常に取得された場合、この時点でインターセプターのpreHandler(...)メソッドが実行されます)。

  4. リクエストでモデルデータを抽出し、ハンドラー入力パラメーターを入力して、ハンドラー(コントローラー)の実行を開始します。ハンドラーの入力パラメーターを埋めるプロセスでは、構成に応じて、Springがいくつかの追加作業を行うのに役立ちます。

•HttpMessageConveter:要求メッセージ(Json、XMLなど)をオブジェクトに変換し、オブジェクトを指定された応答情報に
変換します•データ変換:要求メッセージを変換します。たとえば、StringはInteger、Doubleなどに変換され
ます•データルートのフォーマット:リクエストメッセージのデータフォーマット。文字列をフォーマットされた数値またはフォーマットされた日付などに変換するなど。
•データ検証:データの有効性(長さ、フォーマットなど)を検証し、検証結果をBindingResultまたはErrorに保存します。

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

  2. 返されたModelAndViewに従って、適切なViewResolver(Springコンテナに登録されているViewResolverである必要があります)を選択し、DispatcherServletに返します。

  3. ViewResolverは、モデルとビューを組み合わせてビューをレンダリングします。

  4. レンダリング結果をクライアントに返します。

92. Spring MVCのコンポーネントは何ですか?

Spring MVCのコアコンポーネント:

  1. DispatcherServlet:リクエストを特定の制御クラスに転送する中央コントローラー
  2. コントローラ:リクエストを明確に処理するコントローラ
  3. HandlerMapping:中央処理装置がコントローラーに転送されるときのマッピング戦略のマッピングを担当するマッピングプロセッサー
  4. ModelAndView:サービスレイヤーとビューレイヤーのパッケージクラスによって返されるデータ
  5. ViewResolver:リゾルバーの表示、特定のビューの解決
  6. インターセプター:インターセプター。定義したリクエストをインターセプトして処理します。

93. @RequestMappingの役割は何ですか?

RequestMappingは、クラスまたはメソッドで使用できるリクエストアドレスマッピングの処理に使用されるアノテーションです。クラスで使用すると、要求に応答するクラスのすべてのメソッドがこのアドレスを親パスとして使用します。

RequestMappingアノテーションには6つの属性がありますが、以下では説明のために3つのカテゴリに分類します。

(値、メソッド):
•値:リクエストの実際のアドレスを指定します。指定したアドレスは、URIテンプレートモードにすることができます(後述)。
•メソッド:リクエストのメソッドタイプを指定します(GET、POST、PUT、DELETEなど)。

(消費、生成):
•消費:処理リクエストのコンテンツタイプ(Content-Type)を指定します(application / json、text / htmlなど)。
•生成:返されるコンテンツタイプを指定します指定されたタイプがタイプに含まれている場合にのみ返されます。

(params、headers)
•params:メソッドが処理される前に、特定のパラメーター値をリクエストに含める必要があることを指定します。
•headers:メソッドがリクエストを処理するために、リクエストが特定の指定されたヘッダー値を含む必要があることを指定します。

94. @Autowiredの役割は何ですか?

@Autowiredは、クラスメンバー変数、メソッド、およびコンストラクターに注釈を付けることができる注釈であり、SpringがBeanの自動アセンブリー作業を完了できるようにします。
@Autowiredはデフォルトでクラスに従って一致し、@ Qualifierで指定された名前に従ってBeanをアセンブルします。

95.スプリングブーツとは何ですか?

Springフレームワークの大きなファミリーでは、Spring、SpringMvcフレームワークなど、多くの派生フレームワークが作成されています。Springのコアコンテンツは、制御の反転(IOC)と依存性注入(DI)です。いわゆる制御の反転はテクノロジーではありませんが、操作の観点では、Spring構成ファイルでの作成を指します<bean>。依存性注入とは、Springコンテナが参照オブジェクトや定数データなどのアプリケーションのオブジェクトにリソースを提供することを意味します

SpringBootはフレームワークであり、まったく新しいプログラミング仕様です。その生産により、フレームワークの使用が簡素化されます。いわゆる単純化とは、Springの多くのフレームワークで必要となる多数の扱いにくい構成ファイルの単純化を指します。したがって、SpringBootは、フレームワークに役立つフレームワークです。 、サービスの範囲は、構成ファイルを単純化することです。

96.スプリングブーツを使用する理由

•Spring Bootはコーディングを簡単にし
ます•Spring Bootは設定を簡単にし
ます•Spring Bootは展開を簡単にし
ます•Spring Bootは監視を簡単にし
ます•Springの欠点

97. Spring Bootコア構成ファイルとは何ですか?

Spring Bootは現在クラスパスの下にある2つのファイルを自動的にロードします、ファイル形式はプロパティまたはyml形式です

* .propertiesファイルはkey = valueの形式です
* .ymlはkey:valueの形式です:value
* .yml読み込まれたプロパティは正しいですが、@ PropertySourceアノテーションは構成のインポートをサポートしていません。一般的に、明確で簡潔なymlファイルを使用することをお勧めします晴れ

98.どのような種類のスプリングブート構成ファイルがありますか?それらの違いは何ですか?

Spring Bootは、一般的に使用される2つの構成ファイル、つまり、プロパティファイルとymlファイルを提供します。プロパティファイルと比較して、ymlはスペースを使用して階層関係を決定するため、構成ファイルの構造は明確ですが、簡単なスペースのために階層関係も破棄されます。

99.スプリングブートでホットデプロイメントを実現する方法は何ですか。

SpringBootホットデプロイメントを実装する方法は2つあります。

①。使用されたスプリング

次のコードをプロジェクトに追加します。

<build>        
<plugins>            
<plugin>               
 <!-- springBoot编译插件-->                
 <groupId>org.springframework.boot</groupId>                
 <artifactId>spring-boot-maven-plugin</artifactId>                
 <dependencies>                    
<!-- spring热部署 -->                    
<!-- 该依赖在此处下载不下来,可以放置在build标签外部下载完成后再粘贴进plugin中 -->                    
<dependency>                        
	<groupId>org.springframework</groupId>  
	<artifactId>springloaded</artifactId>       
	<version>1.2.6.RELEASE</version>                   
</dependency>                
</dependencies>            
</plugin>        
</plugins>    
</build>

ここに画像の説明を挿入
②。spring-boot-devtools
使用して、プロジェクトのpomファイルに依存関係を追加します。

<dependency>    
 <groupId>org.springframework.boot</groupId>     
<artifactId>spring-boot-devtools</artifactId> 
</dependency>

次に、shift + ctrl + alt + "/"(IDEAのショートカットキー)を使用して[レジストリ]を選択し、compiler.automake.allow.when.app.runningを確認します。

100. jpaとhibernateの違いは何ですか?

•Java EE 5の標準ORMインターフェースであるJPA Java Persistence APIもejb3仕様の一部です。
•現在非常に人気のあるORMフレームワークであるHibernateはJPAの実装ですが、その機能はJPAのスーパーセットです。
•JPAは標準インターフェースであり、Hibernateは実装であるため、JPAとHibernateの関係は簡単に理解できます。では、HibernateはJPAとのこの関係をどのように実現するのでしょうか。Hibernateは主に、hibernate-annotation、hibernate-entitymanager、およびhibernate-coreの3つのコンポーネントを介して実装されます。
•Hibernate-annotationは、Hibernateによるアノテーション構成のサポートの基礎であり、標準のJPAアノテーションとHibernate独自の特別な関数アノテーションが含まれています。
•hibernate-coreはHibernateのコア実装であり、Hibernateのすべてのコア機能を提供します。
•hibernate-entitymanagerはhibernate-coreとJPAの間のアダプターと見なすことができる標準のJPAを実装します。ORM関数を直接提供するのではなく、hibernate-coreをカプセル化して、HibernateをJPA仕様に準拠させます。

101.春の雲とは?

文字通り、Spring Cloudは分散システムとクラウドサービス専用のフレームワークです。
Spring Cloudは、Springファミリー全体の新しいメンバーであり、最近のクラウドサービスの必然的な製品です。
Spring Cloudは、分散システムでいくつかの一般的なパターンをすばやく構築するためのツールを開発者に提供します。

•構成管理
•サービスの登録と検出
•サーキットブレーカー
•インテリジェントルーティング
•サービス間コール
•ロードバランシング
•マイクロエージェント
•制御バス
•ワンタイムトークン
•グローバルロック
•リーダー選出
•分散会話
•クラスターステータス
•分散メッセージ
• ...

Spring Cloudを使用すると、開発者はこれらのパターンのサービスとアプリケーションをすぐに実装できます。これらのサービスは、分散環境、開発者独自のラップトップ、さまざまなホスティングプラットフォームなど、あらゆる環境で実行できます。

102.スプリングクラウドサーキットブレーカーの機能は何ですか?

Hystrixは、Spring Cloudでサーキットブレーカー機能を実装するために使用されます。サーキットブレーカーは、アプリケーションが操作を複数回実行しようとするのを防ぐことができます。つまり、アプリケーションが失敗する可能性が高く、障害の回復を待機したり、CPUサイクルを浪費したりせずにアプリケーションを続行できます。障害は永続的です。サーキットブレーカーモードでは、アプリケーションが障害が解決したかどうかを検出することもできます。問題が修正されたように見える場合、アプリケーションは操作を呼び出すことができます。

回路ブレーカーは安定性と柔軟性を高めてシステムに安定性を提供し、システムは障害から回復し、この障害がパフォーマンスに与える影響を最小限に抑えます。システムの応答時間を維持するために、操作が要求をタイムアウトする(または返さない)のを待つ代わりに、失敗する可能性のある操作をすばやく拒否するのに役立ちます。回路ブレーカーが状態変化の各イベントの時間を増やす場合、この情報を使用して、回路ブレーカーによって保護されているシステムのコンポーネントの状態を監視したり、回路ブレーカーが作動して開状態になったときに管理者に警告したりできます。

103.春の雲のコアコンポーネントは何ですか?

①。サービスの発見-Netflix Eureka

AWSリージョン(リージョン)で実行されている中間層サービスを見つけるために使用されるRESTfulサービス。EurekaサーバーとEurekaクライアントの2つのコンポーネントで構成されています。Eurekaサーバーは、サービス登録サーバーとして使用されます。Eurekaクライアントは、ポーリングロードバランサーとしてサーバーとのやり取りを簡素化し、サービスのフェイルオーバーサポートを提供するために使用されるJavaクライアントです。Netflixは、本番環境で別のクライアントを使用しており、トラフィック、リソース使用率、エラーステータスに基づいて加重ロードバランシングを提供します。

②。カスタマーサービス側の負荷分散-Netflix Ribbon

リボンは、主にクライアント側のソフトウェアロードバランシングアルゴリズムを提供します。リボンクライアントコンポーネントは、接続タイムアウト、再試行、再試行アルゴリズムなど、一連の完全な構成オプションを提供します。リボンには、プラグイン可能なカスタマイズ可能なロードバランシングコンポーネントが組み込まれています。

③。サーキットブレーカー——Netflix Hystrix

回路ブレーカーは、アプリケーションが失敗する可能性が高い操作を複数回実行しようとするのを防ぎ、障害が回復するのを待機したり、CPUサイクルを浪費したりせずに続行できるようにし、障害が永続的であると判断します。回路ブレーカーモードでは、アプリケーションで障害が解決されたかどうかを検出することもできます。問題が修正されたと思われる場合、アプリケーションはオペレーションを呼び出すことができます。

④。サービスゲートウェイ——Netflix Zuul

nginxと同様、リバースプロキシ機能ですが、netflixには他のコンポーネントと連携するためのいくつかの機能が追加されています。

⑤。分散構成-Spring Cloud Config

これはまだ静的であり、動的構成更新を実装するためにSpring Cloud Busで使用する必要があります。

104.なぜ休止状態を使用するのですか?

•JDBCアクセスデータベースコードはカプセル化され、データアクセスレイヤーの面倒で反復的なコードを大幅に簡素化します。
•Hibernateは、JDBCと優れたORM実装に基づく主流の永続性フレームワークです。彼はDAOレイヤーのコーディング作業を大幅に簡素化し
ます。•Hibernateは、バイトコード拡張プログラムの代わりにJavaリフレクションメカニズムを使用して、透過性を実現します。
•hibernateは軽量フレームワークであるため、パフォーマンスは非常に優れています。マッピングの柔軟性は優れています。1対1から多対多の複雑な関係まで、さまざまなリレーショナルデータベースをサポートしています。

105. ORMフレームワークとは何ですか?

オブジェクトリレーショナルマッピング(ORM)、オブジェクト指向の開発方法は、今日のエンタープライズアプリケーション開発環境における主流の開発方法であり、リレーショナルデータベースは、エンタープライズアプリケーション環境における永続的なデータストレージのための主流のデータストレージシステムです。オブジェクトとリレーショナルデータは、ビジネスエンティティの2つの表現です。ビジネスエンティティは、メモリ内ではオブジェクトとして、データベースではリレーショナルデータとして表されます。メモリ内のオブジェクト間には関連付けと継承関係がありますが、データベースでは、リレーショナルデータは多対多の関連付けと継承関係を直接表すことはできません。したがって、オブジェクトリレーショナルマッピング(ORM)システムは、一般にミドルウェアの形で存在し、主にプログラムオブジェクトのリレーショナルデータベースデータへのマッピングを実装します。

106. hibernateにはいくつのクエリメソッドがありますか?

1.hqlクエリ
2.sqlクエリ
3.条件付きクエリ

ここに画像の説明を挿入

107. hibernateエンティティークラスをfinalとして定義できますか?

Hibernateのエンティティークラスは最終クラスとして定義できますが、このアプローチは良くありません。Hibernateはプロキシモードを使用して遅延関連付けの場合のパフォーマンスを向上させるため、エンティティクラスを最終クラスとして定義すると、Javaでは最終クラスを拡張できないため、Hibernateはプロキシを使用できなくなり、制限されます。パフォーマンスを改善できるメソッドの使用。ただし、永続クラスがインターフェースを実装し、インターフェースのエンティティクラスで定義されたすべてのパブリックメソッドを宣言する場合は、上記の悪影響を回避するのはあなたの番です。

108.休止状態でのマッピングにIntegerとintを使用する場合の違いは何ですか?

Hibernateでは、OIDが整数型として定義されている場合、Hibernateはその値がnullかどうかに基づいてオブジェクトが一時的であるかどうかを判断できます。OIDがint型として定義されている場合は、hbmマッピングファイルに未保存を設定する必要もあります。 value属性は0です。

109.休止状態はどのように機能しますか?

休止状態のしくみ:

  1. Configuration config = new Configuration()。configure(); // hibernate.cfg.xml構成ファイルを読み取って解析する
  2. hibernate.cfg.xmlからマッピング情報を読み取って解析します
  3. SessionFactoryを介してsf = config.buildSessionFactory(); // Create SessionFactory
  4. セッションsession = sf.openSession(); //打开Sesssion
  5. トランザクションtx = session.beginTransaction(); //トランザクションの作成と開始
  6. 永続的な操作の操作データ、永続的な操作
  7. tx.commit(); //コミットトランザクション
  8. セッションを閉じる
  9. SesstionFactoryを閉じる

110. get()とload()の違いは何ですか?

•load()がオブジェクトの他のプロパティを使用しない場合、SQL遅延読み込みはありません
•get()がオブジェクトの他のプロパティを使用しない場合、SQLも生成されます。

111. hibernateのキャッシュメカニズムについて教えてください。

Hibernateのキャッシュは、1次キャッシュと2次キャッシュに分かれています。

1次キャッシュはセッションレベルのキャッシュであり、トランザクションのスコープ内で有効であり、組み込みキャッシュはアンインストールできません。2番目のレベルのキャッシュはSesionFactoryレベルのキャッシュであり、アプリケーションの開始からアプリケーションの終了まで有効です。これはオプションであり、デフォルトでは2次キャッシュはありません。手動でオンにする必要があります。データベースが保存されると、キャッシュのコピーがメモリに保存されます。データベースが更新された場合は、同期的に更新する必要があります。

2次キャッシュへの格納に適したデータの種類は何ですか?

•ほとんど変更されないデータ投稿の最終応答時間
•頻繁に照会されるデータeコマースの場所
•それほど重要ではないデータ、時々同時データが許可される
•同時にアクセスされない
データ•一定のデータ

拡張機能:Hibernateの2次キャッシュは、デフォルトでは分散キャッシュをサポートしていません。セカンダリキャッシュの代わりにmemcaheやredisなどの中央キャッシュを使用します。

112.休止状態のオブジェクトのステータスは何ですか?

ここに画像の説明を挿入

113. hibernateのgetCurrentSessionとopenSessionの違いは何ですか?

openSessionは文字通り表示され、新しいセッションオブジェクトを開くことであり、それぞれの用途は新しいセッションを開くことです。複数回使用する場合、取得されたセッションは同じオブジェクトではなく、使用後にcloseを呼び出す必要がありますセッションを閉じるメソッド。

GetCurrentSessionは、文字通り、現在のコンテキストでセッションオブジェクトを取得することです。このメソッドを初めて使用すると、セッションオブジェクトが自動的に生成され、連続して複数回使用すると、取得したセッションは同じオブジェクトになります。これはopenSessionとの違いの1つです。簡単に言えば、getCurrentSessionは、既に使用されているものがある場合は古いものを使用し、ない場合は新しいものを作成します。

注:実際の開発では、一般に同じトランザクションが処理されるため(つまり、データベースを使用する場合)、getCurrentSessionがより頻繁に使用されるため、一般に、openSessionはあまり使用されないか、openSessionは古いインターフェースのセットです。

114. hibernateエンティティークラスにはパラメーターのないコンストラクターが必要ですか?どうして?

これは、Hibernateフレームワークがこのデフォルトの構築メソッドを呼び出してインスタンスオブジェクト、つまりClassクラスのnewInstanceメソッドを構築するためです。このメソッドは、デフォルトの構築メソッドを呼び出してインスタンスオブジェクトを作成します。
もう1つの注意点として、構築方法を指定しない場合、仮想マシンはデフォルトの構築方法(パラメーターなしのコンストラクター)を自動的に提供しますが、他の構築方法にパラメーターを指定すると、仮想マシンはデフォルトの構築方法を提供しなくなります。メソッド。現時点では、コードにパラメーターなしのコンストラクターを手動で記述する必要があります。そうしないと、新しいXxxx()がエラーを報告するため、デフォルトのコンストラクターは必要ありません。コンストラクターが複数ある場合にのみ必要です。ここで「必須」とは、「手動で記述する必要がある」ことを意味します。

115. mybatisの#{}と$ {}の違いは何ですか?

•これは、#{}事前コンパイル処理、ある${}文字列置換である;
•MyBatisのが処理しているとき#{}、それはなります#{}置き換えるSQL と?
サインインして、その値を割り当てるためのPreparedStatementのsetメソッドを呼び出します。•MyBatisのが処理しているときに${}、それがされ${}、変数の値に置き換え;
•使用#{}すると、SQLインジェクションを効果的に防止し、システムのセキュリティを向上させることができます。

116. mybatisにはいくつのページング方法がありますか?

1.
番号グループページ
2. SQLページ3.インターセプターページ
4. RowBoundsページ

117. mybatis論理ページングと物理ページングの違いは何ですか?

•物理ページングは​​必ずしも論理ページングよりも高速であるとは限らず、論理ページングは​​必ずしも物理ページングよりも高速であるとは限りません。
•物理ページングは​​常に論理ページングより優れており、データベース側からアプリケーション側に圧力をかける必要はありません。速度に利点がある場合でも、他のパフォーマンス上の利点がこの欠点を補うことができます。

118. mybatisは遅延読み込みをサポートしていますか?遅延読み込みの原則は何ですか?

Mybatisは、関連付けオブジェクトとコレクションオブジェクトの遅延読み込みのみをサポートしています。関連付けは1対1を指し、コレクションは1対多のクエリを指します。Mybatis構成ファイルで、遅延ロードを有効にするかどうかを構成できますlazyLoadingEnabled = true | false。

その原則は、CGLIBを使用してターゲットオブジェクトのプロキシオブジェクトを作成することです。ターゲットメソッドが呼び出されたら、a.getB()。getName()の呼び出しなどのインターセプターメソッドを入力します。インターセプターinvoke()メソッドは、a.getB()がnull値の場合、Bオブジェクトに関連付けられている以前に保存されたSQLクエリを個別に送信し、Bをクエリしてから、a.setB(b)を呼び出します。これにより、aのオブジェクトb属性に値があり、a.getB( ).getName()メソッド呼び出し。これが遅延読み込みの基本原則です。

もちろん、Mybatisだけでなく、Hibernateを含むほとんどすべてが遅延読み込みの原則をサポートしています。

119. mybatisの1次キャッシュと2次キャッシュについて教えてください。

レベル1キャッシュ:PerpetualCacheに基づくHashMapローカルキャッシュ。そのストレージスコープはセッションです。セッションのフラッシュまたはクローズ後、セッション内のすべてのキャッシュが空になり、レベル1キャッシュはデフォルトでオンになります。

2次キャッシュのメカニズムは1次キャッシュのメカニズムと同じです。デフォルトでPerpetualCacheおよびHashMapストレージが使用されます。違いは、ストレージスコープがマッパー(名前空間)であり、Ehcacheなどのストレージソースをカスタマイズできることです。2次レベルキャッシュはデフォルトではオンになっていません。2次レベルキャッシュを有効にするには、2次レベルキャッシュ属性クラスを使用して、オブジェクトの状態を保存するためのSerializableシリアル化インターフェイスを実装する必要があります。これは、マッピングファイルで構成できます<cache/>

キャッシュデータ更新メカニズムの場合、特定のスコープ(一次キャッシュセッション/二次キャッシュネームスペース)でC / U / D操作が実行されると、デフォルトで、このスコープの下で選択されているすべてのキャッシュがクリアされます。

120. mybatisとhibernateの違いは何ですか?

(1)MyBatisは休止状態とは異なり、厳密にはORMフレームワークではありません。MyBatisはプログラマーがSqlステートメントを記述する必要があるためです。

(2)Mybatisは、SQLの実行パフォーマンスを厳密に制御でき、高い柔軟性を備えた元のエコロジカルSQLを直接書き込みます。これは、リレーショナルデータモデルに高い要件を必要としないソフトウェア開発に非常に適しています。これは、このタイプのソフトウェアの要件が頻繁に変更され、要件の変更後に迅速な出力が必要になるためです。 。ただし、柔軟性の前提として、mybatisはデータベースの独立性を実現できないため、複数のデータベースをサポートするソフトウェアを実装する必要がある場合は、SQLマッピングファイルの複数のセットをカスタマイズする必要があります。

(3)Hibernateは、強力なオブジェクト/リレーショナルマッピング機能と優れたデータベース独立性を備えています。リレーショナルモデルの要件が高いソフトウェアの場合、Hibernateで開発すると、多くのコードを保存して効率を向上させることができます。

おすすめ

転載: blog.csdn.net/cyb_123/article/details/107598720