成都の顔の質問少なくとも20 16K

インタビューの質問:
実装の基礎となるHashMapの原理、赤黒木、B +ツリー、Bツリー構造原理、揮発性のキーワード、CASは(比較とスワップ)の原則を実装
というものを春AOPとIOCの?使用シナリオは何ですか?春のトランザクション、トランザクション属性、通信行動、分離レベル
春とSpringMVC、MyBatisのとSpringBootコメントは何ですか?作品SpringMVC有利で、SpringBootフレームワーク、利点MyBatisのフレームワーク
SpringCouldコンポーネントは、彼らの役割は何ですか?(セイ七〇から八)マイクロサービスのCAPとは何ですか?
デザインパターン(5または6を言う)
のRedisはデータの種類と使用シナリオ、持続性、センチネルメカニズム、故障キャッシュ、キャッシュ貫通サポート
どのスレッドが達成するために、いくつかの方法があることを、それらの間の違いは、スレッドプール何ですされますロックと同期差、中voliateキーの役割を持つ原則、JUCと契約、ThreadLocalの
データの一貫性を確保する方法(システムが正常に書き込まれていない何らかの理由で、分散トランザクション(別のシステム、Bシステムとの間でデータを書き込み、 、一貫性のないデータが得られる))
セキュリティの問題が(データはデータ(量の改ざん、他のURLを取得する(改ざん)システムに送信される))
のインデックスの使用を制限し、SQLの最適化は、データ同期(キャッシング、データベースのデータの同期)
Beanはオブジェクトを初期化するには、いくつかのステップがあり、そのライフサイクル
JVMのメモリモデル、アルゴリズムは、ガベージコレクタ、チューニング、クラスローディング機構(委任両親)
スパイクシステムを設計する方法、(高い同時ハイアベイラビリティ分散クラスタ)
悲観的ロック、楽観的ロック、読み書きロック、ロー・ロック、テーブルロック、スピンロック、デッドロック、分散ロック、スレッド同期ロック、何公正ロック、ロックは不公平です
ヒープオーバーフローが、スタックオーバーフローがシーンやソリューションが発生し
、いくつかのMQ、そしてなぜこのMQは、メッセージが繰り返し(冪等)を送信し、メッセージ、メッセージの置換を送信するために失敗したとの違いを教えて、長い時間のためのメッセージを受信しません、失敗した送信されたメッセージを受信するあまりに起因する
シングルサインオンを実現する原理を
データの何百万人の何百もある場合は(いくつかの簡単なアルゴリズム)迅速にデータを見つける方法を、あなたをしたいたもので
ダボの原則を実行するためには、任意の合意をサポートし、効率が高く、飼育係根本的な原則である理由比べSpringCould
あなたがチームを取る場合は、システムを設計することができます、あなたは何を検討する必要があり
、ここで私はゆっくりと戻ってきた答えはだ、彼らは彼らの技術的能力を感じた場合、あなたはまず、見て:説明あなたは私が右に使用する、より拡大する簡潔な言語知識として、強いメッセージを確認することができます下の

答え:

インプリメンテーションの基礎となるHashMapの原理、赤黒木を、B +ツリー、Bツリー構造原理、揮発性のキーワード、CASは(比較しますそして、の原則を達成するスイッチング)
ファーストクラスのHashMapは、マップの実装であり、マップは、キーと値のペア(キー、値の形式で格納されています )のうち。これは、1つのエントリとして見ることができます。決定するキーで保存された位置にエントリー。

キーが乱れとまたとない、すべてのキーセットは、セットとして見ることができ、マップのキーがある場合は、カスタムオブジェクトがあれば、クラスはequalsメソッドおよびhashCodeメソッドをオーバーライドする必要がありますされ、地図、理由はないに書き換え、オブジェクトクラスを使用することに等しく、比較のhashCodeメソッドは、メモリアドレス値の内容以下です。

地図値は、すべての値がコレクションのコレクションとして見ることができ、再現性の乱れ、地図値カスタムオブジェクト場合、クラス必見のオーバーライドは、equalsメソッドをされています。

hashCodeをオーバーライドして、何をしていた等しくするとして、HashMapの基礎となる原理はある取ります。

我々はHashMapのにエレメント(K1、V1)を格納するとき、第一K1位置の方法に従って、配列に格納されたハッシュコードを決定します。

これは他の要素の位置でない場合、アレイに直接(K1、V1)ノードタイプは、アレイ16は、初期容量、デフォルトの負荷係数が0.75であり、すなわち、基礎となる膨張に適用要素12がなる場合、膨張は2倍です。場所は、他の要素(K2、V2)を有し、この方法は、リターン場合、2つの要素が、別のV2のV1と、結果が真である場合に記載したように、二つの要素が同じで、同じである比較等しいK2 K1呼び出す場合偽、2つの要素は、それがリンクリストの形式で格納されている(K1、V1)になり、同じではありません。

より多くのデータがリンクされたリストには、クエリの効率が低下するとき8への要素のリストは、リストは、検索効率を向上させるために、赤、黒の木に置き換えられますときしかし、そうでアップグレード、のJDK1.8のバージョンを行います。検索、挿入のために、多くの動作条件の下で、削除するので、赤黒木の利用効率が高くなっています。

赤黒木は、特別な二分探索木、左サブツリー内のすべてのノードが少ないノードよりも二分探索木であるので理由は、右の部分木のすべてのノードがノードよりも大きく、それが関係の大きさを比較することによって行うことができます高速検索。

赤黒木挿入後、またはノードを削除、赤黒木は、変更されていない5つのプロパティは赤黒木を満たさない可能性があり、もはや赤黒木ではなく、通常の木であります、左右の手で、風雲ツリーは再び赤黒木になります。赤黒木(黒ルートノード、の5つのプロパティノードは、その子ノードが黒でなければならないである場合、各ノードは、黒または赤で、各リーフノードは黒であり、一つのノードからノードに赤黒ドットの同じ数を含むすべてのパスの子孫外部ノード)



と、このシナリオのようなバイナリツリー構造は、B +ツリーを使用して、Bツリー、InnoDBテーブルを使用してインデックスMySQLのエンジンの二種類、MyISAMテーブルを使用することがより一般的です。

まず、そのBツリーは、各ノードは、そのソート・キー値は、データを格納する、左から右に増加している、Key.valueタプルです。データを読み出すという点で、このような高性能モード、別個のインデックスファイル、ストレージファイル三MYISAM .frmファイルテーブルの構造、.MYDデータファイルを持っているため、インデックスファイルは.MYIあります。しかしMYISAMまた、いくつかの不利な点は、それは、それが一般的に大規模なデータストレージのために使用される、などのトランザクション、外部キーをサポートしていない行レベルのロックをサポートしていない、テーブルレベルのロックをサポートします。



次にInnoDBは、それがIDインデックスデータの保存のために、データは現在、リーフノード、非リーフノードのインデックスのために存在しているに基づいており、小さなストアファイル比較のMyISAMインデックスファイルには、です。これらのノードは、インデックスページに点在します。InnoDBは、各ページのデフォルトの16キロバイトでは、インデックスはデータ8Bの長いタイプであると仮定すると、図4(b)は、他のデータページ6Bは、16キロバイト/(8Bの各ページについて、次にファンアウト因子、各数字キーの後にそこにあります各ページが1000キーをインデックス付けすることができる+(b)+(b))≈1000、。場合は、高さh = 3、S = 1000 ^ 3 = 10 李!言い換えれば、3つのインデックス・ページI / OによってInnoDBは、あなたではなく、ラインストアインデックスのリーフノードよりもインデックス10億キー、でき、より多くの数は、I / Oの数が少ないです。したがって、店舗当たりのインデックスの数を減らすこと、データとインデックスを格納するための各ノードにおけるMYISAM。そして、それはInnoDBの行レベル、テーブルレベルのロックをサポートし、また取引、外国キーをサポートしています。



HashMapを使用したり、いくつかのスレッドの安全性の問題があるでしょうが、実際のプロセスに加えて:

HashMapのは、スレッドセーフではありませんマルチスレッド環境では、使用ハッシュマップがあることプット・アクションは、100%のCPU使用率に近い、その結果、無限ループが発生しますし、例外同時変更がスローされます、原因は、彼が書き込みスレッドにつながる、スレッド、競争を超えるスレッドを書き込んで変更データが得られ、リソースのための並行スレッドですプロセスは、一貫性のないデータにつながる、別のスレッドによって中断されます。

ハッシュテーブル/すべての操作は全体のハッシュテーブルプラスビッグロックに相当する、同期されて入れます、スレッドセーフされているが、実現コストがあまりにも偉大な、シンプルで、粗されています。マルチスレッドアクセスは、限りがアクセスに1つのスレッドであるか、他のスレッドにのみブロックされることができ、オブジェクトを操作するよう、同時パフォーマンスの競争力のあるシナリオで連載すべての操作の同等は非常に悪くなります。

それに応答してハッシュマップの不安は、パフォーマンスのためのロック競合の影響を低減するために、並行環境、ConcurrentHashMapの揮発性、CASおよび他の技術の使用の多くを使用することができます。

JDK1.7バージョンのConcurrentHashMapのグローバルロックにローカルロックを回避する(ロックセグメント)、ロック付きセグメントロック技術によるデータ・ストレージ・セグメント、およびデータの各部分に、場合ロックアクセス一つのセグメントのデータを保持するスレッドが、データの他のセグメントはまた、真の同時アクセスを実現するために、他のスレッドによってアクセスすることができます。しかし、この構造の副作用は通常のHashMapよりも長いハッシュプロセスです。

従ってJDK1.8バージョン値は視認性を確保するために内部の揮発性CurrentHashMap修飾に使用同時命令再配置を禁止するが、CAS(交換を比較)を用いて原子性を保証するために使用される揮発性保証の原子が、ない楽観解決するには、ロック。

CAS操作は3つのオペランド含む-メモリ位置(V)を、元の値(A)と新たな値(B)と期待されます。

メモリアドレスの値と同じであるAの値が、値は、Bの内部メモリに更新される場合 CASは、最初のラウンドで、無限ループを介しRuoguoサイクルのデータを取得することで、スレッドは、アドレス値内部に入っ実行する次の可能な機会にスピンサイクルにBスレッドは、スレッドのニーズに変更されます。

3つの揮発性の特性があります:可視性は、アトミック、disableコマンドの並び替えを保証するものではありません。

可視性:この時点では(あると仮定プラス1)独自のスレッドのワークスペースの操作にメインメモリ1からのデータを取るためにスレッド1は、データ1、データ2に変更されました、そしてメインメモリのデータ2(スレッドに他のスレッドの書き込みバックを通知します2、スレッド3)、メインメモリのデータ1のデータが2に変更、再取る新しいデータ(データ2)に他のスレッドをさせてきました。

保証アトミックではありません:スレッド1は、値が2になり、メインメモリから1インクリメント操作として自分の仕事スペースこれにデータ値を取ったメインメモリへの書き戻し、まだ他のスレッドに通知する時間を持っていた、スレッド1は、スレッド2、CPUの割り当ては、1プラス1の元の値のデータを保持しているスレッド1、スレッド2またはメインメモリに懸濁され、値がメインメモリに2、ライトバックとなり、メインメモリは横取りしましたあるいは2 2、スレッド1に、通知に、スレッド2は、メインメモリ2にデータ値を取り戻します。

並べ替え命令を禁止する。まず、命令の並べ替えは常にダウンの実行から、プログラムの実行ではなく、大学入試の解答のように、あなたは簡単に行うための最初の困難なトピックを行うことができ、その後、質問を行うためには、からではありませんダウン。禁止命令の並べ替えは、この状況に終止符を打ちます。

(一般のインタビュアーは、あなたが最もこの作品のコレクションに質問をしますが、Javaの基礎から求めることができます要求し、より多くのHashMapを頼むのコレクションは、この時あなたは今まであなたを尋ねるインタビュアーこれらの方向を取ることができ、拡張の深さは十分、あなたがそれを言うことについては、上記乾燥の十分なので、10分、最初の質問、あなたの心の面接少なくともシンプル十分強固な基盤、左側の最初のブラウニーポイント)獲得した後

の春を何AOPとIOCこと?使用シナリオは何ですか?春のトランザクションとデータベースサービス、通信行動、データベースの分離レベル
AOP:アスペクト指向プログラミング。

例えば、機能モジュールに追加機能を追加することです。つまり、あなたが取る機会がかかります、私はまた聖歌を取る助ける同僚に言って、あなたは宅配便をテイクダウンしたいと言います。仕事で、システム内のいくつかのパッケージとクラスならば、あなたはクラスやメソッドのそれぞれでそれらを実装する必要があり、そのようなロギング、トランザクションおよび例外処理として、AOPを使用しないでください。各クラスのコードの絡まりおよび方法は、ログに含まれており、例外は、トランザクションにもビジネスロジックを処理しています。そのような一の方法では、実際にどのような処理を行うことは、コードを区別することは困難です。AOPは、すべてのトランザクションの1つのセクションにトランザクションコードに散在されません。

例えば、私は今、いくつかの時間インタフェースが呼び出すメソッドを記録したログを、取得したいです。使用量Aop私は、終了時刻を記録するコードの一部を挿入するには、このインタフェースの背後に、開始時刻を記録するために、このインターフェイスの前にコードの一部を挿入することができます。

それとも、データベースにアクセスするために行く、とあなたは(あまりにも多くの問題を)総務をしたくないので、あなたがデータベースにアクセス春前に、自動的に取引を開く手助け、データベースへのアクセスの終了後、自動的に/ロールバックトランザクションをコミット助けます!

あなたは、インターフェイスエラーを実行したら、アドバイスを中心に例外処理をオンにアドバイスキャッチに例外例外処理ページを周りにジャンプすることができます。

動的プロキシを使用してスプリングAOP、バイトコードを修正することではなく、メモリ内の一時的な方法のAOPオブジェクトを生成する、いわゆる動的プロキシAOPフレームワークは、オブジェクトは、すべてのAOP対象物体が含まれ、特にカットオフポイントは、エンハンスメント処理、及びコールバック元のオブジェクトを実行します。これは、主に二つの方法、JDKのダイナミックプロキシとCGLIBの動的なプロキシが存在する動的プロキシです。JDKの動的プロキシプロキシクラスは、反射により受信し、インタフェースを実装する必要があり、プロキシクラスを要求します。コアJDKの動的プロキシのInvocationHandlerインタフェースとプロキシクラスです。ターゲット・クラスがインタフェースを実装していない場合は、春AOPは、動的プロキシCGLIBのターゲットクラスを使用することを選択します。CGLIBは、動的プロキシを行うには、継承の方法により、実行時にそのノート、コード生成ライブラリを動的に生成することができますクラスのサブクラスCGLIBあるクラスはfinalとしてマークされている場合ので、それはないですCGLIBは、使用ダイナミックプロキシを行います。

IOC:依存性注入や制御の反転と呼ばれます。

我々は、オブジェクトを使用する通常の状況下ですべての必要性の新しいオブジェクトは()です。IOCは、あなたは、コンテナ内部に良い春を作成するために使用するオブジェクトを進めることです。

あなたが何かを必要とする、あなたが何かある春告げ、春のコンテナに登録されるクラスを使用するすべての必要性は、その後、春が実行されているが、また、あなたの上に置くためにあなたがあなたのシステム環境を提供するためのイニシアチブを取りたい、物事の適切な時間になりますあなたが必要とする他のもの。クラスのすべてが、作成されていないコントロールにスプリングによって破壊され、制御対象がもはやそのオブジェクトのライフサイクルを参照していることが、春れます。DI(DI)は、実際に、実際に、彼らは概念で説明した異なる角度で同じですが、IOCを別の言い方です。

春のトランザクションとデータベーストランザクション

トランザクションとは何ですか?トランザクションがアクセスすることが可能であり、完全に実行されるか、完全に実行されないプログラムの実行単位データアイテムの様々なデータベースを更新します。

Springのトランザクションは、データベースがトランザクションをサポートしていない場合はSpringのトランザクションは効果がありません、そして、最終的な自然やデータベース内を達成するために、トランザクションデータベースのパッケージである
根本的な春のトランザクションはMySQLのトランザクションに依存するように、春はコードレベルの使用であり、 AOPの実装、インターセプトとハンドルにTransactionInceptorを使用してトランザクションを実行します。
公開された964元の記事 ウォン称賛11 ビュー30000 +

おすすめ

転載: blog.csdn.net/xiaoyaGrace/article/details/105364013
おすすめ