私は当初 3 時に面接を予定していましたが、面接官は早めにオンラインに来て、私がオンラインであることを見て、早めに始めるように言いました。
B ツリーを使用する理由MySQL
のインデックス スキップ リストを使用せずに B ツリーを作成しますか? Redis
B ツリーやバイナリ ツリーの代わりにスキップ テーブルを使用する理由は何ですか? 新人の答え:
こんにちは、インタビュアーさん、私の名前はZhang Sanです。河南出身です。XX大学を卒業しました。XX大学を卒業して以来、Java開発に従事しています。 3年が経ちました。あなたの会社に面接に来て、Java 開発の仕事を探してください。
自己紹介のためのいくつかのポイント: あなたは誰ですか、そしてあなたの長所は何ですか?ここ何年も何をしてたんですか?学校でどんな賞を受賞しましたか?どのようなテクノロジーについて詳細な研究を行ってきましたか?高度な同時実行システムの設計はありますか?何か大規模なプロジェクトに参加したことがありますか?
つまり、自分のすべての資産を誇示し、自分が比較的得意な分野を他の人に知らせてください。
この質問は実際には人によって異なります。始めたばかりの方へ、彼に電話してください プロジェクトの構築は非常に挑戦的だと感じます。
ダニエルにとって、「挑戦」はもはやテクノロジーではありません。さらに、プロジェクトをどのようにパッケージ化して上司を説得するか、部下をどのように絞り込むかがプロジェクトの難しいところです。
面接では「やりがい」が面接官の基準です。面接官がプロジェクト ビジネスの技術的な側面に触れたことがなく、難しそうに聞こえる場合、これは「挑戦的な」プロジェクトです。
面接官があなたが言及したチャレンジ プロジェクトに精通している場合は、現時点ではそれがあなたにとってチャンスであり、挑戦である可能性があります。面接官が遭遇したことのない質問と、それをどのように解決したかに答えてください。面接官「私はあなたを完全に尊敬しています。逆に、面接官がこのプロジェクトについて知っていることをあなたに質問し、あなたが答えられない場合、面接は大きく損なわれることになります。」
例: 5 ~ 6 年前、テクノロジー スタックには dubbo と Spring Boot が含まれており、非常に人気がありましたが、現在では標準になっています。
しかし、ほとんどの企業は大企業に成長できないため、ビッグ データ、高同時実行性、アーキテクチャ変革の経験を持つ開発者はまだ少数です。しかし。これはソフトウェア工学がどんなに発展しても変えることはできません。
したがって、挑戦的なプロジェクトには次のような特徴があります:
1. 大量のデータ
2. 高い同時実行性
3. アーキテクチャの変革
あなたのプロジェクトがこれらのことに関わることができる限り、あなたのプロジェクトのレベルは少なくとも 1 レベル高くなります。
ここで、回答テンプレートを提供します:
1. 私はこの xxx ビジネス プロジェクトの責任者であり、このビジネスは xxx のものです。
2. 迅速な試行錯誤と市場への迅速な対応のため、初期段階ではシンプルな xxxx プランが使用されました。
3. ビジネスの発展に伴い、この計画には xxx の技術的な問題が発生しました。
4. これらの技術的問題を解決するために、最終的に xxx ソリューションを使用し、これらのソリューションと、これらのソリューションがこれらの技術的問題をどのように解決したかを紹介しました。
学習プロセスについて真実を話してください。ただし、学習には積極的に反映する必要があることに注意してください。さらに、自分自身にマークを付ける良い習慣があります。何度もメモを取ることは、悪いペンほど効果的ではありません。
公式サイトを読んだり、本を読んだり、動画を見たりすることをお勧めします。
学習プロセスでは、練習を続け、常に反省し、常に要約してください。
① 作成時に容量の初期値を指定しなかった場合、ハッシュテーブルのデフォルトの初期サイズは 11 です。拡張するたびに、容量は元の 2n 1 になります。 HashMap のデフォルトの初期化サイズは 16 です。その後の拡張ごとに容量が 2 倍になります。
② 作成時に容量の初期値が指定されている場合、Hashtable は指定されたサイズを直接使用し、HashMap はそれを 2 のべき乗に拡張します (tableSizeFor( in HashMap) )
方法保証)。
基盤となるデータ構造: JDK1.8 以降の HashMap は、ハッシュの競合を解決するために大幅な変更が加えられました。リンクされたリストの長さがしきい値 (デフォルト) を超える場合、は 8 ) (リンク リストを赤黒ツリーに変換する前に判断されます。現在の配列の長さが 64 より大きい場合は、赤黒ツリーに変換せずに、最初に配列を拡張することを選択します。 ). リンク リストを赤黒ツリーに変換する場合、検索時間を短縮するためにリンク リストは赤黒ツリーに変換されます。 Hashtable にはそのようなメカニズムはありません。
これは一般的な面接の質問ですが、多くの学生は面接中にうまく答えられません。回答には 2 の n 乗が記載されており、面接官は関連する質問を続ける可能性がありますが、それでも不明な場合は、体系的に HashMap を学習することをお勧めします。
私は以前にブログに 2 つの記事を投稿しました:
HashMap
要素を追加するプロセス HashMap
PUT 要素を追加するプロセスは、次の 9 つのステップに分割できます。
putVal()
メソッドを直接呼び出します私のブログのブログ投稿を読むことができます: 3 年間の重要な HashMap ソース コード: http://www.woaijava.cc/blog/211
Red Black Tree (Red Black Tree) は、特殊な AVL ツリー (バランス型バイナリ ツリー) であり、挿入および削除操作中に特定の操作を通じてバイナリ値を維持します。検索ツリーを使用して、より高い検索パフォーマンスを実現します。
赤黒木には 5 つの特徴があります:
ノードは赤または黒です。
#実際、この質問は難しいものではありません。まれに、赤黒木の左右回転の操作について質問する面接官もいます。 ..、インタビューしてきました 何百人もいますが、声を上げられるのはほんのわずかです。
レコードのサイズが 1KB であると仮定すると、16 個のデータを保存できます。 1 つのデータ ページ内 (ページ内の他のデータ構造は無視します)
したがって、2 層の B ツリーには、
16*1638=26208MySQL
B ツリー ファンの出力は次のようになります。すごく高い。 は約 2kw のデータを保存できます。つまり、データを 1 回クエリすると、これらのデータ ページがすべてディスク上にある場合、ディスク IO に対して最大 3 回クエリを実行する必要があります。 ジャンプ リストはリンク リスト構造で、1 つのデータが 1 つのノードになります。最下層に になります。ディスク IO が少ないため、B ツリー クエリが高速になります。 の場合、B ツリーはインデックス データ ページを分割およびマージする必要があり、ジャンプ テーブルが独立して挿入され、レイヤーの数はランダム関数に基づいて決定されます。回転やバランス維持のオーバーヘッドがないため、スキップテーブルの書き込みパフォーマンスはB-treeよりも優れています。 実際、MySQL の 。以前は、mysql 5.5 は myisam でしたが、その後は 2kw
データを格納する場合、各クエリは # を達成できる必要があります。 ##二分探索, 2kw の効果は約
2 の 24 乗 であるため、ジャンプ テーブルのおおよその高さは
24 層 あたりになります。 。最悪の場合、これら 24 層のデータが異なるデータ ページに分散されることになります。これは、1 つのデータ クエリに 24 ディスク IO が必要になることを意味します。 innodb## になりました。 #. それらの基礎となるインデックスはすべて
B ツリー を使用します。言い換えれば、スキップ テーブル インデックスを備えたストレージ エンジンを完全に構築し、MySQL にインストールすることができます。実際、
facebook は、jump table を使用する
rocksDB ストレージ エンジンを構築しました。結論から言えば、
書き込みパフォーマンスは確かにinnodbよりも優れていますが、読み取りパフォーマンスは確かにinnodbよりもはるかに悪いです。ご興味がございましたら、記事の最後にある 参考文献 でパフォーマンス比較データをご覧ください。 Redis
以上がSFテクノロジーインタビューの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。