Java面接準備(2)春

[インターセプターとフィルターの違いは?
フィルタはサーブレットコンテナに依存し、関数のコールバックに基づいて実装されます。コンテナの初期化時に1回呼び出され、静的ファイルを含むほぼすべてのリソースをフィルタリングできます。
インターセプターは、springmvcなどのWebフレームワークに基づいており、リフレクションに基づくaopを使用します。複数回呼び出すことができますが、コントローラーのみをインターセプトでき、静的ファイルはインターセプトできません。
[Springmvcプロセス?
コアコンポーネント:
フロントコントローラー
DispacherServlet
プロセッサーマッパーHandleMappingプロセッサーアダプターHandleAdapter
ハンドル
ビューリゾルバーViewResovle

1.フロントコントローラーにリクエストを送信します
DispacherServlet2。DispacherServletはプロセッサーマッパーHandleMappingを呼び出して、プロセッサーオブジェクトとインターセプターを生成します
3. DispatcherServletは、プロセッサーアダプターHandleAdapterを呼び出して、対応するハンドルを見つけます
4.ハンドルを呼び出し、モデルビューに戻ります、フロントコントローラー次に、ビューリゾルバーを呼び出してビューを解析します
。5。DispatcherServletはビューをレンダリングし、ユーザーに返します。
[SpringMvcとAJAXはどのように相互に呼び出しますか?]
SpringMvcとAJAXはどのように相互に呼び出しますか?
Jacksonフレームワークを介して、JavaのオブジェクトをJsが認識できるJsonオブジェクトに直接変換できます。具体的な手順は次のとおりです。
(1)Jackson.jarに参加します。
(2)構成ファイルでjsonマッピングを構成します。
(3)AjaxメソッドでObject、Listなどを直接返すことができますが、@ ResponseBodyアノテーションを追加する必要があります。メソッドの前。
[springmvc中国語の文字化けを解決する方法は?
web.xmlでCharacterEncodingFilterフィルターを構成し、utf-8に設定します;

CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
utf-8



CharacterEncodingFilter
/

[一般的な注釈は何ですか?]
@Autowired @Configuration @Import @ImportResource @Bean @ Controller、@ Service、@ Component @Qualifier @RequestBody @RequestParam @PathVariable
[単にaopについて話しますか?]
アスペクト指向プログラミング、独立関数の抽出、デカップリング、Springトランザクション、MVCインターセプターはaopを使用します。
【ダイナミックエージェントとは何ですか?違いは何ですか?
Java動的プロキシは、リフレクションメカニズムを使用して、プロキシインターフェイスを実装する匿名クラスを生成し、特定のメソッドを呼び出す前にInvokeHandlerを呼び出してそれを処理します。
cglib動的プロキシは、asmオープンソースパッケージを使用してプロキシオブジェクトクラスのクラスファイルをロードし、バイトコードを変更してサブクラスを生成することで処理します。
(1)JDK動的プロキシは、インターフェイスを実装するクラスのプロキシのみを生成できますが、クラスのプロキシは生成できません。
(2)CGLIBは、主に指定されたクラスのサブクラスを生成するクラスのプロキシであり、
継承されたものをオーバーライドします。したがって、このクラスまたはメソッドをfinalとして宣言しないことをお勧め
します[Springで動的プロキシを使用する方法は?
1.ターゲットオブジェクトがインターフェイスを実装している
場合、デフォルトでJDKの動的プロキシを使用してAOPを実装します。2。ターゲットオブジェクトがインターフェイスを実装している場合、CGLIBを使用してAOPを実装できます。3
。ターゲットの場合オブジェクトはインターフェースを実装していません。CGLIBライブラリを使用する必要があります。Springは自動的にJDK動的プロキシとCGLIBを切り替えます
[CGLIBを使用してAOPを実装するにはどうすればよいですか?]
(1)CGLIBライブラリSPRING_HOME / cglib /.jarを追加します
(2)スプリング構成ファイルに<aop:aspectj-autoproxy proxy-target-class = "true" />を追加します
[スプリングトランザクションの実装方法は何ですか?
実現する方法は2つあります。コーディング方法と宣言型トランザクション管理方法です。
コード化されたトランザクションは、コード内のコミットロールバックメソッドを呼び出すことです。
宣言型トランザクション管理には2つの方法があります。XML構成ファイルに基づく方法と、ビジネスメソッドで@Transactionalに注釈を付け、ビジネスロジックにトランザクションルールを適用する方法です。
トランザクション伝播メカニズム(トランザクション構成をサポートするか
どうか)トランザクション注釈パラメーター[トランザクションの特徴は何ですか?
Atomicity(Atomicity):トランザクション内のデータベースに対するすべての操作は、すべてまたはすべての分割できない一連の操作です。
整合性(整合性):トランザクションの実行によってデータが破棄されることはありません。
分離:トランザクションの実行は、他のトランザクション(プロセス)によって妨害されません。同時に実行される両方のトランザクションは、互いに干渉しません。
耐久性:トランザクションがコミットされると、データベースへの変更は永続的になります。
[トランザクションにはいくつの分離レベルがありますか?彼らは何ですか?]
(1)コミットされていない読み取り:トランザクション分離レベルが最も低く、別のトランザクションがこのトランザクションのコミットされていないデータを確認できるようにします。
(2)読み取​​りコミット:トランザクションが送信された後にのみ別のトランザクションで読み取ることができるようにします。別のトランザクションは、トランザクションのコミットされていないデータを読み取ることができません。
(3)繰り返し可能な読み取り:このトランザクション分離レベルは、ダーティな読み取りと繰り返し不可能な読み取りを防ぐことができます。ただし、ファントム読み取りが発生する場合があります。あるトランザクションを別のトランザクションで読み取れないようにするだけでなく、次の状況(繰り返し不可能な読み取り)も回避します。
(4)シリアル化可能:これは最も高価ですが、最も信頼性の高いトランザクション分離レベルです。トランザクションは順次実行として処理されます。ダーティリードと繰り返し不可能なリードを防ぐことに加えて、ファントムリードも回避します。
分散トランザクション。
分散ロック
[iocとdiの理解?
IOCは制御の反転と呼ばれ、制御の反転の略です。DI(依存性注入)は依存性注入と呼ばれ、IOCのより単純な解釈です。
元のオブジェクトは開発者自身が作成しましたが、オブジェクトの作成はSpringコンテナに任され、権限が逆になります。
インジェクションと同様に、オブジェクトに必要な他の依存オブジェクトを動的に作成します。コントローラで使用されるサービスコールは、サービスに注入する必要があります。
[iocコンテナとは何ですか?]
BeanFactoryとそのサブインターフェースApplicationContextBeanFactory
は基本的なフレームワーク構成を
提供しますApplicationContextはより完全な機能を提供します
[ApplicationContextとBeanFactoryの長所と短所は何ですか?]
ApplicationContext、すべてのBeanは起動時にインスタンス化されます。利点はプリロードできることですが、欠点はメモリの浪費です。
BeanFactoryがオブジェクトをインスタンス化するとき、構成されたBeanはすぐにはインスタンス化されませんが、Bean(getBean)を使用するまでインスタンス化されません。利点はメモリを節約することですが、欠点は速度が比較的遅いことです。
[ApplicationContextをインスタンス化する3つの方法?
FileSystemXmlApplicationContextは、
デフォルトでプロジェクトのパスの下に
ClassPathをロードします。XmlApplicationContextはデフォルトでCLASSPATHの下にWebXmlApplicationContextを検索します。コンテナは、Webアプリケーションのスコープ内のXMLファイルで定義されたBeanをロードします。これはWebプロジェクト用にカスタマイズされています。WebApplicationContextUtilsクラスのgetWebApplicationContextメソッドを使用して、JSPおよびサーブレットのIOCコンテナへの参照を取得します。
[Springioc Beanはいつインスタンス化されますか?
1.Spring BeanのファクトリクラスであるBeanFactoryは、Beanを初めて使用するときにインスタンス化されます。
2. Spring BeanのファクトリクラスとしてのApplicationContextで、スコープと遅延読み込みの識別を確認します。
Singleton(scope = singleton)lazy-initはfalse(デフォルトはfalse)、BeanはApplicationContextの開始時にインスタンス化され、インスタンス化されたBeanはマップ構造のキャッシュに配置され、Beanは次回使用されます。この場合、このキャッシュから直接フェッチされ、同じインスタンスがフェッチされます。
シングルトン(scope = singleton)lazy-initはtrueであり、Beanが初めて使用されるときにインスタンス化されます。
複数のケース(スコープ=プロトタイプ)では、Beanを初めて使用するときにBeanをインスタンス化します。
【豆のライフサイクル】
6段階
Bean定義のロード-Beanのインスタンス化-属性の割り当て()-()初期化()start-use-kill破棄
詳細な説明
(1)Bean定義のロード:( Bean定義情報に@Bean @Componentを追加し、インスタンスがあるかどうかを確認します同じ名前)
(2)属性の割り当てはiocインジェクションであり、コントローラーでのサービス割り当て(インジェクション)などです
(3)2つの拡張機能
1.属性の割り当て後、初期化の前に、認識インターフェイス拡張機能があり、リソースをスプリングコンテナーにロードします
2.初期化の前後に、Beanpostprocessorの前/後処理
(4)対応のインターフェースがあります
BeanNameAware:Beanの名前をバッチで変更できます
BeanFactoryAware
ApplicationContextAware:通常はBeanFactoryAwareを使用しません。このコンテンツはより豊富で、一般的なアプリケーションには-getインターフェース実装クラスは、ApplicationContextAwareを使用して
Beanpostを拡張することです。これは通常、Beanのコンテンツを変更し、キャッシュ技術に使用できます。
(5)破棄すると、インターフェースDisposableBeanのdestroyメソッドが呼び出されます。
[豆の範囲は?]
シングルトンのインスタンスは1つだけです。これは、シングルトンモードです(春のデフォルト)。
プロトタイプアクセスは、一度に1つのインスタンスを作成します。これは、newと同等です。
requestすべてのWeb要求
セッションのインスタンスを作成しますすべてのセッション
global-sessionグローバルセッション
[コントローラーはシングルトンですか?]
デフォルトはシングルトンであり、コントローラーのすべてのコンポーネントのデフォルトだけでなく、
[照会されたコントローラーのURLが呼び出された回数を監視する方法は?
コントローラーはシングルトンであるため、メンバー変数は同じシングルトンに属します。コントローラーは、urlメソッドでメンバー変数i ++を定義します。
[BeanPostProcessorを知っていますか?いつ実行されますか?]
Beanライフサイクルの初期化の前後に、Beanポストプロセッサの前処理/後処理があります
[認識インターフェイス拡張機能を知っていますか?いつ実行されましたか?]
Beanのライフサイクルでは、プロパティの割り当て後、初期化の前に、認識インターフェースの拡張があります。
[Springでの依存性注入にはいくつかの方法がありますが、それらは何ですか?]
コンストラクター注入
セットメソッド属性注入(対応する構築方法は不要)
インターフェイス注入(一般的には使用されません)
アノテーション:属性自動アセンブリ@Autowired
[を使用してSpringをテストする方法注釈とxml?]
Xml
ApplicationContext context = new new ClassPathXmlApplicationContext( "the CLASSPATH:applicationContext.xml");
MyBean myBean =(MyBean)context.getBean( "myBean");
メモ
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
MyBean myBean =(MyBean)context.getBean( "myBean2");
[Springのトランザクション管理メカニズムはどのように実現しますか?]
Springのトランザクション管理メカニズムの原則は、このような動的エージェントを介してトランザクション管理を必要とするすべてのBeanをロードし、構成に従って、invokeメソッドで現在呼び出されているメソッド名を決定することです。method.invokeメソッドの前後はWithです。適切なトランザクション管理コード、Springスタイルのトランザクション管理が実現されます。SpringでのAOPの実装はより複雑で柔軟性がありますが、基本的な原則は同じです。
[@Transactionalが有効にならないのはいつですか?
1.springmvcの下のコントローラーの@Transactionalは有効になりません。コントローラーレイヤーをフィルターで
除外する必要があります通常、mvcはコントローラーをスキャンします。springがコントローラーを再度スキャンすると、スキャンが繰り返され、トランザクションはに渡されません。トランザクションを管理するための春。
2.チェック例外は、FileNotFoundExceptionを通り、ロールバックされていない
だけで、パブリック修飾子で動作します3. @Transactional。
4.春とspringmvcが管理のために春に引き渡されていないJDBC接続で、その結果、繰り返しスキャンサービスに設定されている
[何ですかaopのアプリケーションシナリオ?]
Springのトランザクション、mvcのインターセプター
[Springタイミングタスクの実行原理?
Springタイミングタスクは、実際にはJDKが提供するScheduledExecutorServiceを介して実行されます。デフォルトでは、Springはタイミングタスクを実行するためにシングルスレッドのScheduledExecutorServiceを生成します。そのため、特定のタイミングタスクが実行スレッドを長時間ブロックすると、他のタイミングタスクが影響を受け、実行スレッドによって実行される可能性がなくなります。
複数のタイミングタスクを実行する必要がある場合、Springのデフォルト構成はピットになる可能性があります。Springが複数のスレッドを使用してタイミングタスクを実行するように構成を変更できます。
[スプリングマルチスレッドタイミングタスクを実行するにはどうすればよいですか?
SpringはTaskScheduler / ScheduledExecutorServiceを検出し、存在する場合はそれを使用します。
@Bean
public TaskScheduler taskScheduler(){ ThreadPoolTask​​Scheduler taskScheduler = new ThreadPoolTask​​Scheduler(); taskScheduler.setPoolSize(2); return taskScheduler; } [springboot自動構成はどのように機能しますか?@SpringBootApplicationの@ EnableAutoConfiguration、@ Import({EnableAutoConfigurationImportSelector.class})の@EnableAutoConfiguration






親クラスAutoConfigurationImportSelectorのselectImportsメソッドは、META-INF / spring.factories構成ファイルを検索します。構成ファイルで構成されたEnableAutoConfigurationの自動構成クラス(springboot-autoconfigure META-INF / spring.factories自動構成クラスなど)
アセンブリの構成クラス
[springbootの3つの特性?]
自動構成、起動の依存関係、アクチュエータによる実行ステータスの監視
[SpringBoot jarと通常のjarの違いは何ですか?
SpringBootプロジェクトに最終的にパッケージ化されたjarは、実行可能jarです。このjarは、java -jar xxx.jarコマンドを使用して直接実行できます。このjarは、他のプロジェクトでは通常のjarとして使用できません。依存している場合でも、使用できません。クラス間で。
Spring Bootのjarは、主にその構造が通常のjarとは異なるため、他のプロジェクトでは信頼できません。通常のjarパッケージでは、パッケージ名は解凍直後であり、コードはパッケージ内にあります。SpringBootによってパッケージ化された実行可能jarは解凍後、\ BOOT-INF \ classesディレクトリにあるコードであるため、直接することはできません。参照。参照する必要がある場合は、pom.xmlファイルに構成を追加し、SpringBootプロジェクトを実行可能ファイルと参照可能ファイルの2つのjarにパッケージ化できます。
[Spring BootはXML構成を使用できますか?その方法は?
Spring Bootでは、XML構成の代わりにJava構成を使用することをお勧めしますが、XML構成はSpringBootでも使用できます。XML構成は@ImportResourceアノテーションを介して導入できます。
[ImportSelectorインターフェースの機能は何ですか?]
主な機能は、インポートする必要のある構成クラスを収集することです。インターフェイスの実装クラスがEnvironmentAware、BeanFactoryAware、BeanClassLoaderAware、またはResourceLoaderAwareも実装している場合は、selectImportsメソッドを呼び出す前に、上記のインターフェイスで対応するメソッドを呼び出します。すべての@Configurationを使用する必要があります処理後、インポート時にDeferredImportSelectorインターフェースを実装できます。

おすすめ

転載: blog.csdn.net/x18094/article/details/113835582