インタビューは[フレームワーク]に尋ねる必要があります-春の家族のバケツ、mybatis、RPC、ORM

春とは

Springは、Beanを作成し、ioc、aop、その他の技術的なポイントを含むオブジェクトを管理するためのフレームワークです。

春のスタートアップクラス

1. @configurationは、クラスを開始することを意味します。2
。@componentScan( "package path")は、クラスをスキャンしてクラスファイルをクラスに生成するbeanDefinitionのすべてのパスを指定し
ます。3。@ Import、スキャンに加えて、インポートを通じてbeanDefinitionをインポートすることもできます
ここに画像の説明を挿入

Beanとは

Springは自動依存性注入を作成して実装し、プロパティを埋めるオブジェクトはBeanです

Beanの依存性注入のタイミング

依存性注入のプロセスは
ユーザーがIoCコンテナーからBeanを初めて要求したときにトリガーされます。lazy-init= trueが設定されている場合、最初のgetBeanが設定されたときにBeanが初期化され、lazy-init = falseコンテナの起動時に直接初期化されます(シングルトンBean)。

オブジェクトとBeanの作成の違い

Spring Beanは、Springによって作成されたオブジェクトであり、依存関係を自動的に挿入して属性を入力します。たとえば
、自動アセンブリ属性userが直接存在します。これは
@component
class person { @Autowired User user; // AutowiredwillタイプまたはBean名アセンブリに従ってアセンブルします}次に、Springコンテキストコンテナによって初期化されたBean Personのuser属性が自動的に注入されます。新しいオブジェクトpersonが使用される場合、このjavaオブジェクトのuserはnullです。




春の豆の作成==豆のライフサイクル

1. SpringはapplicationContextを起動し、componentScanによって注釈が付けられたクラスクラスをスキャンします
。1。クラスのクラスファイル、BeanDefinitionを生成し、BeanDefinitionMap(concurrentHashMap)
BeanDefinitionMap <beanName、beanDefinition object>を追加します。これはBeanFactoryの属性です
。2。すべてのクラスとフォームをスキャンしますたBeanFactoryオブジェクト(たBeanFactoryのBeanDefinitionMapが完全にロードされている)
3.コールBeanDefinitinonを処理することができbeanFactoryPostProcesssorポストプロセッサ、
(プログラマが実装beanFactoryPostProcesssor方法とBeanDefinitinonを変更することができます)
4.インスタンス化および豆beanFactory.getBean()メソッドを作成
たBeanFactoryを。 getBean()メソッド、Beanを取得できない場合は、Bean
5を作成します。BeanPostProcessor、Beanポストプロセッサ、Bean
での@Autowiredアノテーションの入力(autowirePostProcessor)の
実現、Bean Aopの実現、動的プロキシクラス
6の作成シングルトンプール(ConcurrentHashMap <beanName、object address>)
7。次に、getBean()メソッドによってBeanを呼び出しbeanDefinitionを生成し、それをbeanDefinitionMapにアセンブルして、beanFactoryに配置できます。
ここに画像の説明を挿入
beanFactory

FactoryBeanインターフェース

カスタム
BeanBeanクラスはFactoryBeanインターフェースを実装し、getObjectメソッドをオーバーライドしてこのBeanクラスのオブジェクトをカスタマイズします。たとえば
、次のBeanはFactoryBeanインターフェースを実装し、proxy.newProxyInstanceメソッドを使用して動的プロキシクラスを作成します。
ここに画像の説明を挿入

さまざまなAwareコールバックメカニズム

Springがプロパティを入力した後、インターフェイスを実装すると、インターフェイスのメソッドを呼び出して独自のプロパティの一部を
取得します。SpringはどのようにしてBeanプロパティのbeanNameを取得しますか?
beanNameAware
Springで現在のbeanFactoryを取得するにはどうすればよいですか?
図に示すように、beanFactoryAware
使用します
ここに画像の説明を挿入

beanDefinitionとはbeanDefinition
クラスは、コンストラクター、遅延読み込み、自動インジェクションメソッド、プロパティ、メソッド名、Beanが他のBeanに依存するかどうか、beanClassなど、Beanのいくつかのプロパティを抽象化します。
ここに画像の説明を挿入

制御のIOC反転、DI依存性注入

制御の反転:オブジェクトを作成する権利はSpringによって管理されます
。DI(依存性注入):Springでオブジェクトを作成するプロセスでは、オブジェクトが依存する属性がクラスに注入されます。

SpringのIOC依存性注入法

コンストラクターインジェクション、セッターメソッドインジェクション、アノテーションインジェクション、インターフェイスインジェクション

循環依存とは何ですか?なぜ循環依存があるのですか?

Aオブジェクトの属性はBに依存し、Bクラスの属性はAに依存します。作成時に属性設定を完了する方法はありません。

Bean
1のライフサイクルのため、beanDefinitionをロード
し、未入力のプロパティを持つオブジェクト生成します2、プロパティを入力し、認識します
3、プロキシオブジェクトを生成するBean aopなどのBeanの後処理
4、シングルトンプールに入れます

3レベルのキャッシュは、循環依存の問題を解決します。

第3レベルのキャッシュはcurrentHashmap
です。1。第1レベルのキャッシュ:シングルトンプール、Beanの元のオブジェクトsingletonObjectsを格納します
。2。第2レベルのキャッシュ:未入力の属性、早期に公開されたオブジェクトearlySingletonObjects
3.第3レベルのキャッシュ:( no aop just未使用)aopに使用されるファクトリであるSingletonFactoriesは、実行後に1回だけ実行され、プロキシオブジェクトが生成され、第2レベルのキャッシュに配置されます。循環依存関係とaopがある場合、その後aopが実行されると、プロキシオブジェクトは再生成されず、第2レベルのキャッシュから直接取得されます。

第2レベルのキャッシュ
A作成はBに依存し、属性Bで満たされていないAオブジェクトは第2レベルのキャッシュに配置されます。Bオブジェクトが作成されると、第1レベルのキャッシュを使用して検索します。 Aオブジェクト、次に第2レベルのキャッシュが見つかり
ます。プロパティの中で、Aオブジェクトも正常にインスタンス化されます。

3レベルのキャッシュ
しかし、Beanは動作する可能性があります。AOP後、第2レベルのキャッシュ内のオブジェクトはプロキシオブジェクトであり、元のオブジェクトと矛盾しています。現時点では問題が発生する
ため、第3レベルのキャッシュsingletonFactoriesが必要です。
Bは最初に第3レベルのキャッシュからsingletonFactoriesを取得します。SingletonFactoriesはプロキシオブジェクトを生成し、Bの属性を挿入します。これにより、AOPで挿入されたオブジェクトが元のオブジェクトからプロキシオブジェクトに変更され、プロキシオブジェクトが生成されるため、属性Bの問題が解決されます。 2番目のレベルで。キャッシュ内

singletonFactoriesの3レベルキャッシュを追加するための前提条件はコンストラクター実行することであるため、コンストラクターの循環依存関係を解決することはできません

mybatisとは

Mybatisは、データベースデータとJavaオブジェクトをマッピングするためのフレームワークです。手動でSQLを作成する必要があるため、半自動
Hibernate + jpaは完全自動SQLであるため、完全自動マッピングです

MyBatisの分析SQLと操作の手順と原則


1.InputStreamはxml構成ファイルをロードします2.sqlSessionFactoryを作成します3.sqlSessionFactoryは
接続を確立するためにsqlSessionを作成します
4.sqlSession.getMapperはマッパーオブジェクトを作成します
5.マッパー呼び出しメソッド
5.sqlSession.commit、flush、close

$ {}動的SQLドル-動的
#{}静的SQL、最初に変換された?xmlファイルを解析するとき?、jdbc
mybatisのプリロードメカニズムと同様に、SQLインジェクションを防止します

春に使われるデザインパターン

ファクトリモード:SpringのBeanFactoryは、渡された一意の識別子に従ってBeanオブジェクトを取得する単純なファクトリモードの実施形態です。
シングルトンモード:グローバルアクセスポイントBeanFactoryを提供します。
プロキシモード:AOP関数の原理はプロキシモードを使用します(1 JDK動的プロキシ。2。CGLibバイトコード生成テクノロジプロキシ。)
デコレータモード:依存関係の挿入にはBeanWrapperの使用が必要です。
オブザーバモード:Springのオブザーバモードは、リスナーの実装で一般的に使用されます。ApplicationListenerなど。
ストラテジーモード:Beanがインスタンス化されると、Beanインスタンスを初期化する方法が決定されます(リフレクションまたはCGLIB動的バイトコード生成)。

AOP動的プロキシ

1.JDK動的プロキシProxy.InvocationHandlerはプロキシオブジェクトを生成します。invokeメソッドを書き直すと、プロキシオブジェクトはinvokeメソッド
2を反映して実際のオブジェクトを呼び出すメソッドを実装します。cglib動的プロキシ

動的プロキシと静的プロキシの違い
静的プロキシ、プロキシクラスの.classファイルは
プログラムの実行前に存在します;動的プロキシ:プログラムの実行時にリフレクションを使用してプロキシオブジェクトを動的に作成します<再利用性、使いやすさ、より集中化された呼び出し呼び出す>

CGLIBとJDKの動的プロキシの
違いJdkは、使用するインターフェイスを提供する必要があります。
非抽象クラスが動的プロキシを実現できる限り、cglibは必要ありません

Springはmybatisを統合しますが、どのオブジェクトが自動的に組み立てられますか?

これはjdkの動的プロキシを使用してmybatisによって作成さプロキシオブジェクトです。
ここに画像の説明を挿入
ここに画像の説明を挿入

mybatisによって作成されたMapperオブジェクトをSpringクラスに自動的にアセンブルする方法

1.クラスAを作成してImportBeanDefinitionRegistrarを実装します。2
。@ import(A.class)アノテーション、マッパークラスをbeanDefinitionにインポートします。

beanFactory.registerSingleton
1、proxy.newProxyInstanceはプロキシクラス
2を作成します。beanFactory.registerSingleton(beanName ""、xxx); Factorybeanを実装します。

サーブレットとは

サーブレットは、httpリクエストを送受信するためにWebサーバー上で実行されるJavaプログラムです。
使用法:
1。サーブレットインターフェイスを実装し、doGetメソッドとdoPostメソッドを書き直します
。2。開発したJavaクラスをWebサーバーにデプロイします。

サーブレットのライフサイクル

1.各ユーザーがサーブレットにアクセスすると、サーブレットのインスタンスが作成され、サーブレットはinitメソッドを実行します
。2 リクエストごとに、サーブレットはサービスメソッドを呼び出します。サービスメソッドの内部の違いに応じて、さまざまなdogetメソッドが要求されます。3。
サーブレットがサーバーから削除されます。deletedeleteservlet

MVCとは何ですか?

MVCは、デザインパターン、モデル(モデル)-ビュー(ビュー)-コントローラー(コントローラー)
jsp(ビュー)+サーブレット(コントローラー)+ javabean(モデル)
1です。ここで、モデルはdaoレイヤーとデータ処理レイヤー
2を指します。ビューはjsp3を介して表示され
ます。コントローラー層は、サーブレットを介した要求の送受信を抽象化します。

SPRINGMVCの実行プロセス

  1. (DispatcherServlet)ユーザーリクエストをインターセプトする

springmvcとspringbootの違い

Springは「エンジン」です。SpringMVCはSpringに
基づくMVCフレームワークです
。SpringBootは、Spring4条件付き登録に基づく迅速な開発統合パッケージのセットです。

AOPとは何ですか?あなたはそれを何に使っているの?

動的プロキシを使用して、アスペクトで実行する必要のあるロジックを織り込みます。
目的:
JWT認証インターセプト、ログ処理、Springトランザクション実装の原則はすべてAOPです。

AOPの2つの実現?

JDK動的プロキシとCGLIB動的プロキシ

どのような状況でエージェントとして行動できませんか?

JDKプロキシモードにはインターフェイスが必要です。

Springは循環依存の問題をどのように解決しますか

春のトランザクションの伝播特性

 required:如果存在事务,就用当前事务,没事务,创建事务
 supports:如果存在事务,就用当前事务,没事务,则非事务的执行(但增删改根本存不上)
 mandatory:如果存在事务,就用当前事务,没事务,抛出异常
 required_new:总是开启一个新的事务(很少用)
 not_support:总是非事务的运行,有事务也是非事务运行
 never:如果有一个事务,则抛出异常
 nested:如果一个活动的事务存在

springMVCプロセス:

(1):ユーザー要求がDispatcherServletに送信され、DispatcherServletがHandlerMappingプロセッサマッパーを呼び出します。

(2):HandlerMappingは、xmlまたはアノテーションに従って対応するプロセッサを検索し、プロセッサオブジェクトを生成して、DispatcherServletに返します。

(3):DispatcherServletは対応するHandlerAdapterを呼び出します。

(4):HandlerAdapterは、特定のプロセッサーを呼び出して、適応後に要求を処理し、ModelAndViewを生成して、それをDispatcherServletに返します。

(5):DispatcherServletはModelAndViewをViewResloverに渡して、生成されたビューを解析し、それをDispatcherServletに返します。

(6):DispatcherServletはビューに従ってビューをレンダリングします。

SpringBoot自動構成の原則

@EnableAutoConfigurationは、META-INF / spring.factoriesの構成ファイルを検索します(作成する必要のあるBeanが含まれてい
ます)。各スターターのspring.factoriesファイルを読み取ります。

SpringBootのコアアノテーション

コアアノテーションは、@ SpringBootApplicationが次の3つのタイプで構成されていることです。

@SpringBootConfiguration:@Configurationアノテーションを組み合わせて、構成ファイルの機能を実現します。
@EnableAutoConfiguration:自動構成機能をオンにします。
@ComponentScan:Springコンポーネントのスキャン。

Mybatisの第1レベルのキャッシュと第2レベルのキャッシュ

第1レベルのキャッシュはデフォルトでオンになっており、オフにすることはできません。

第1レベルのキャッシュは、SqlSessionレベルのキャッシュの原則を参照しています。使用されるデータ構造はマップです
。2つの中間にコミット操作(変更、追加、削除)がある場合、このsqlsessionの第1レベルのキャッシュ領域はすべてです。明確なSqlSessions間で二次キャッシュ。キャッシュ。これはマッパーレベルのキャッシュです。原則:CacheExecutorを介して実装されます。CacheExecutorは、実際にはExecutorのプロキシオブジェクトです。

従来のJDBC開発の問題

1.データベース接続オブジェクトの頻繁な作成と解放は、システムリソースの浪費を簡単に引き起こす可能性があります

HibernateとJPAのデメリット

SQLステートメントはルールに基づいて生成できますが、多対1および1対多の関係の構成はより面倒であり、複雑なSQLを作成するのは簡単ではありません。

MybatisのXmlマッピングファイルとMybatisの内部データ構造の間のマッピングはどのようにマッピングされますか?

タグrequestMap
タグはResultMapオブジェクトとして解析されます。、、、、
およびタグはそれぞれMappedStatementオブジェクトとして解析されます。

動的SQLはどのラベルを使用しますか?

foreach、trim

一意のIDの自動インクリメント主キーに使用されるラベル

selectkey

Mybatisはどのようにページングを実行しますか?ページングプラグインの原理は何ですか?

ページングプラグインを介して、SQLがメモリでインターセプトされ、制限ステートメントが追加され、物理ページングが実行されます

Mybatisの#と$の違い

#受信データを文字列として扱い、自動的に受信するデータに二重引用符を追加します。
$受信データを直接表示し、SQLで生成します

SQLインジェクションを防ぐ方法or1 = 1

#Methodは、SQLインジェクションを大幅に防ぐことができます。

Mybatisを使用する場合、DAO(マッパー)インターフェースを呼び出すときにSQLを呼び出す方法

マッパーインターフェイス、マッパーインターフェイス実装クラス、mapper.xmlファイル
マッパーインターフェイスの完全なクラス名は、.xmlマッピングファイル内の名前空間の値です。
インターフェイスのメソッド名は、マッピング内のMappedStatementのID値です。インターフェイスメソッドのパラメータは、sqlに渡されるパラメータです。

Daoインターフェースの動作原理はJDK動的プロキシです。MybatisはJDK動的プロキシを使用して、Mybatisの実行時にDaoインターフェースのプロキシプロキシオブジェクトを生成します。プロキシオブジェクトプロキシは、インターフェースメソッドをインターセプトし、で表されるsqlを実行します。代わりにMappedStatementを実行し、sqlの実行結果を返します。

MybatisのXmlマッピングファイルで、異なるXmlマッピングファイルに対してIDを繰り返すことはできますか?

異なるXmlマッピングファイルの場合、名前空間が構成されていると、IDを繰り返すことができます

Mybatisのプライマリキャッシュとセカンダリキャッシュ

春の雲

登録センターEureka、ロードバランサーリボン、クライアント呼び出しツールRest and Feign、分散構成センターConfig、サービス保護Hystrix、ゲートウェイZuul Gateway、サービスリンクZipkin、メッセージバスバスなど。
Eurekaサービス登録センター、クライアントとサーバーの2つの部分があります
Eurekaクライアント:Eurekaサーバーにこのサービスの情報を登録する責任があります
Eurekaサーバー:登録センター、各サービスのマシンとポート番号を保存するレジストリがあります

偽のサービスコンシューマーRESTスタイルのカプセル化
を実現するために@FeignClientアノテーションを使用して、さまざまなマイクロサービス間で呼び出し
、GRPCRPC呼び出し

hystrixサービスのヒューズ
負荷分散:リボン、nginx

Hystrixの原理(調査予定)

独自のスレッドプールを維持することにより、スレッドプールがしきい値に達すると、サービスの低下が開始され、フォールバックのデフォルト値が返されます。

なぜhystrixサーキットブレーカーが必要なのですか

雪崩を防ぎ、リソースを時間内に解放し、システムでのカスケード障害を防ぎ、障害と遅延を分離して、単一の依存関係の障害がアプリケーション全体に影響を与えないようにします。

.LINUXサーバーの操作方法

sshサーバーのインストールにはLinuxサーバーに依存する必要があります。通常、このsshサービスのポートは22であり
、sftpサーバーのインストールにはLinuxサーバーに依存する必要があります。通常、このsftpサービスのポートは25です。 。

sshクライアントを使用してlinuxサーバーに接続し、コマンドを使用してlinuxサーバーを操作します
.sftpクライアントを使用してsftpサーバーに接続し、ファイルをアップロードおよびダウンロードします(インストールパッケージ、変更されたファイルのアップロード)

LINUXで一般的に使用されるコマンド

Pwd現在のパスを取得する
Suユーザーを切り替える
Ll現在のディレクトリ内のファイルとディレクトリを
表示するテールビューファイル
Rm –rfファイルを削除する
Viファイルを変更する
Mvファイルまたはフォルダーを移動/名前変更する
Mkdirフォルダーを作成する
Rm –fフォルダーを削除する
Tar Pack / unzipGrep
検索する必要な情報

おすすめ

転載: blog.csdn.net/u010010600/article/details/109203708
おすすめ