以下は、2019 年の Tencent からのインタビューの質問です。皆さんにもシェアします。皆さんのお役に立てれば幸いです。
(推奨ビデオチュートリアル:Java 教育ビデオ)
- あなたの履歴書からプロジェクトを選択し、その中で遭遇した大きな課題を教えてください。問題を解決するためのアイデアはありますか?
- コードの一部は複数の redis コマンドを実行する必要があります。ロックせずにアトミック性を確保するにはどうすればよいですか?
lua スクリプトを使用します: https://segmentfault.com/a/1190000009811453
- バイナリ ツリーやレッド ブラック ツリーなどのデータ構造について話しましょう。
この記事を理解してください: https://juejin.im/post/5a27c6946fb9a04509096248
- B ツリーと B ツリーの違いと使用シナリオについて話しますか?
- B-tree:
B-tree は、ディスク ブロックの特性を利用して構築されるツリーです。各ディスク ブロックには 1 つのノードがあり、各ノードには多数のキーが含まれます。ツリーのノード キーワードを増やすと、ツリーの
レベルが元のバイナリ ツリーよりも少なくなり、データ検索の数と複雑さが軽減されます。
B ツリーは、ディスク先読みの原理を巧みに利用して、ノードのサイズを 1 ページ (各ページは 4K) に設定します。そのため、各ノードが完了するのに必要な I/O は 1 つだけです
フルロード。
B ツリー データは任意のノードに保存できます。
- B ツリー:
B ツリーは B ツリーの変形であり、B ツリー データはリーフ ノードにのみ格納されます。このように、B ツリーに基づいて、各ノードにはより多くのキーワードが格納され、ツリーのレベルは少なくなります
そのため、データのクエリが高速化されます。すべてのキーワード ポインターはリーフ ノードに存在するため、1 回あたりの検索数は次のようになります。同じため、クエリ速度はより安定しています。
- mysql のどのバージョンとストレージ エンジンがインデックス作成に B ツリーを使用しますか? Red Tree を使用しないのはなぜですか?
まず、B ツリーとレッド ツリーの実装原理を理解する必要があります。 B ツリーにはシーケンシャル アクセス ポインタがありますが、Red ツリーにはありません。
- いくつかの一般的なメッセージ ミドルウェアの違いについて話しますか?
- RabbitMQ は、シンプルな管理インターフェイスと高い同時実行性を備えた、中小企業にとっての第一の選択肢です。
- その他の関連する面接の質問の推奨事項:Java の面接の質問と回答
- 大企業は、より高い同時実行性と rocketmq のカスタマイズされた開発により、RocketMQ を選択できます。
- ログ収集機能には、ビッグデータ用に特別に用意された kafka が推奨されます。
- rabbitmq はどのようにしてメッセージの信頼性を確保するのでしょうか?
詳細は「試験問題バンク/rabbitmq」をご覧ください
- Springcloud サービスの発見原理?
a. リースを更新するために 30 秒ごとにハートビート チェックを送信します。クライアントがリースを複数回更新できない場合、クライアントは 90 秒以内にサーバー登録センターから削除されます。
a. 登録情報と更新は他の Eureka ノードにコピーされます。どの地域のクライアントでも登録センターの情報を見つけることができます。レプリケーションは 30 秒ごとに行われ、サービスを見つけてリモート呼び出しを行います。
b. クライアントは一部のサービス インスタンス情報をキャッシュすることもできるため、Eureka に障害が発生した場合でも、クライアントは引き続きサービス アドレスを見つけることができます。
- springcloud のさまざまなコンポーネントを紹介しますか? eureka に加えて、springcloud の登録センターには他に何を使用できますか?
springcloud の動作原理
機能 ActiveMQ RabbitMQ RocketMQ kafka
開発言語 java erlang java scala
単一マシン スループット 10,000 レベル 10,000 レベル 100,000 レベル
適時性 ms レベル us レベル ms レベル ms レベル以内
高可用性 (マスター/スレーブ アーキテクチャ) 高 (マスター/スレーブ アーキテクチャ) 非常に高い (分散アーキテクチャ) 非常に高い (分散アーキテクチャ)
機能的特徴
成熟している この製品は多くの企業で使用されており、さらに多くの機能を備えています。ドキュメント; さまざまなプロトコルのサポートが優れている
Erlang に基づいて開発されているため、強力な同時実行機能、非常に優れたパフォーマンス、低遅延を備えています; 管理インターフェイスは比較的豊富です
MQ は比較的完全な機能を備えており、優れた機能を備えていますスケーラビリティ
MQ の主要な機能のみをサポートしており、メッセージ クエリやメッセージ バックトラッキングなどの一部の機能は提供されていません。結局のところ、ビッグ データ向けに用意されており、ビッグ データの分野で使用する必要があります。幅広く使用してください。
springcloud は次のコア コンポーネントで構成されます。
Eureka: 各サービスが開始されると、Eureka Client はそのサービスを Eureka Server に登録します。また、Eureka Client は順番に Eureka Server からレジストリをプルすることもできるため、他のサービスがどこにあるかを知ることができます。
リボン: サービス間でリクエストが開始されると、リボンに基づいて負荷分散が行われ、サービスの複数のマシンから 1 つのマシンが選択されます。
Feign: アノテーションと選択したマシン、リクエスト URL アドレスを結合し、リクエストを開始します
Hystrix: リクエストは Hystrix のスレッド プールを通じて開始されます。異なるサービスは異なるスレッド プールを使用するため、異なるサービス呼び出しの分離が実現され、サービス アバランチが回避されます
問題
Zuul: フロントエンドとモバイル端末がバックエンド システムを呼び出す必要がある場合、Zuul ゲートウェイを介して入る必要があり、Zuul ゲートウェイはリクエストを対応するサービスに転送します
登録センターはわかりました、zookeeper を使用してください。
- マイクロサービスには電流制限方法がいくつありますか?
Spring Cloud Gateway: https://windmt.com/2018/05/09/spring-cloud-15-spring-cloud-gateway-ratelimiter/
- 電流制限、サービス分離の場合まだ必要ですか?
https://www.javazhiyin.com/25964.html
- Dubbo にはいくつかの種類の負荷分散がありますか?負荷分散はサーバー側で行われますか、それともクライアント側で行われますか?
Dubbo の負荷分散はクライアント側にあり、Dubbo には 4 つの組み込みの負荷分散戦略があります:
a. RandomLoadBalance: ランダムな負荷分散。ランダムに 1 つ選択します。これは、Dubbo のデフォルトの負荷分散戦略です。
b. RoundRobinLoadBalance: ポーリング負荷分散。投票して 1 つ選択します。
c. LeastActiveLoadBalance: アクティブ コールの最小数。アクティブ コールの数が同じでランダムです。アクティブなカウントは、通話の前後のカウントの差を指します。遅いプロバイダーが受信するリクエストを少なくします。
プロバイダーが遅いほど、呼び出しの前後のカウントの差が大きくなるからです。
d. ConsistentHashLoadBalance: 一貫したハッシュのロード バランシング。同じパラメータを持つリクエストは常に同じマシンに到達します。
- Redis 分散ロックを実装するにはどうすればよいですか?どのような問題に注意すべきでしょうか?
この記事についてはこちらをご覧ください: https://juejin.im/post/5bbb0d8df265da0abd3533a5
- あなたが読んだソース コードについて教えてください。どのようなデザインパターンまたはデザインハイライトが使用されていますか?
特定の分析を行うには、インタビューの前に Spring ソース コードなどのソース コードを読む必要があります。
- AOP を実装するにはどうすればよいですか? AOP はプロジェクトのどこで使用されますか?
マスター: https://juejin.im/post/5bf4fc84f265da611b57f906
- ポストプロセッサーの役割は何ですか?
Spring の BeanPostProcessor: https://www.jianshu.com/p/f80b77d65d39
- Spring Bean スコープ、リクエスト スコープを使用する場合。
詳細な資料: https://blog.csdn.net/icarus_wang/article/details/51586776
- 次の質問の結果について教えてください。
-
1 package com.giveu.web; 2 3 public class VolatileTest { 4 public static volatile int race = 0; 5 6 public static void increase() { 7 race++; 8 } 9 10 private static final int THREADS_COUNT = 10; 11 12 public static void main(String[] args) { 13 Thread[] threads = new Thread[THREADS_COUNT]; 14 for (int i = 0; i < THREADS_COUNT; i++) { 15 threads[i] = new Thread(new Runnable() { 16 @Override 17 public void run() { 18 for (int i = 0; i < 10000; i++) { 19 increase(); 20 } 21 } 22 }); 23 threads[i].start(); 24 } 25 while (Thread.activeCount() > 1) { 26 Thread.yield(); 27 } 28 System.out.println(race); 29 } 30
ログイン後にコピー
プログラムは終了せず、印刷も行われません。
関連する推奨事項:Java 入門チュートリアル
以上が2019 Java 面接の質問 (Tencent)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。