ホームページ  >  記事  >  Java  >  15 Java スレッド同時実行に関するインタビューの質問と回答

15 Java スレッド同時実行に関するインタビューの質問と回答

(*-*)浩
(*-*)浩オリジナル
2019-11-07 15:23:101811ブラウズ

15 Java スレッド同時実行に関するインタビューの質問と回答

#1. 現在、スレッド T1、T2、および T3 があります。 T2 スレッドが T1 の後に実行され、T3 スレッドが T2 の後に実行されるようにするにはどうすればよいでしょうか?

このスレッドの面接の質問は、通常、一次面接または電話面接で尋ねられます。このマルチスレッドの質問は、面接官が結合メソッドの概念に精通しているかどうかをテストするように設計されています。答えも非常に簡単です。Thread クラスの join メソッドを使用すると、この効果を実現できます。

2. Java の新しい Lock インターフェイスには、同期ブロックと比べてどのような利点がありますか?同時読み取りと単一書き込みをサポートする高性能キャッシュの実装を求められた場合、データの整合性をどのように確保すればよいでしょうか。

マルチスレッドおよび同時プログラミングでロック インターフェイスを使用する最大の利点は、読み取りと書き込みに 2 つの個別のロックが提供され、ConcurrentHashMap や条件付きなどの高性能データ構造を構築できることです。ブロッキング。

この Java スレッドの面接の質問はますます一般的になってきており、その後の面接の質問は、この質問に対する面接官の回答に基づいています。

Java マルチスレッドに関するインタビューの前に、ロックについて詳しく読むことを強くお勧めします。ロックは、今日の電子取引システムでクライアントのキャッシュやデータのやり取りを構築するために頻繁に使用されているためです。

3. Java の wait メソッドと sleep メソッドの違いは何ですか?

スレッドの面接でよくある質問をもう 1 つ見てみましょう。この質問は電話インタビューでよく聞かれます。 2 つの主な違いは、ロックが解除されるのを待つこととモニターです。 sleep メソッドは、待機中にロックやモニターを解放しません。 wait メソッドは主にスレッド間通信に使用されますが、sleep は実行中に一時停止するだけです。 Java での待機とスリープに関する私の他の記事を読むことができます。

4. Java でブロッキング キューを実装するにはどうすればよいですか?

これは、多くの検査ポイントがある比較的難しい Java マルチスレッド面接の質問です。これは、面接官が実際に Java マルチスレッド コードを作成したかどうかを検査し、面接官が同時実行シナリオについて理解しているかどうかを検査します。面接官のコードに基づいて、多くのフォローアップの質問をすることができます。面接官が wait() および Notice() メソッドを使用してブロッキング キューを正常に実装した場合は、Java 5 同時実行クラスを使用してそれを再実装させることができます。

5. Java のプロデューサーとコンシューマーの問題を解決するコードをどのように記述するか?

答えは、スレッドに関する上記の質問と似ています。この質問は職場では非常に一般的ですが、面接官がこの種の質問をすることがあります。「生産者と消費者の問題をどのように解決するか」 Java?」実際には、解決策はたくさんあります。 Java の BlockingQueue を使用したソリューションを共有しました。場合によっては、食事の哲学者の問題の解決策を教えてほしいと頼まれることもあります。

6. デッドロック コードを作成します。 Java でデッドロックを解決するにはどうすればよいですか?

これは、私のお気に入りの Java マルチスレッド インタビューの質問です。マルチスレッド同時プログラミングではデッドロックが非常によくあるにもかかわらず、多くのインタビュー対象者がまだ頭を悩ませており、デッドロックのないコードを書くことができないからです。

操作を実行するための N 個のリソースと N 個のスレッドがあるかどうかを尋ね、すべてのリソースを要求します。ここでの

N は、最も単純なケースとして 2 である場合もありますが、大きな数になると問題が複雑になる場合もあります。

7. アトミック操作とは何ですか? Java のアトミック操作とは何ですか?

これは、Java スレッドのインタビューの簡単な質問です。もう 1 つの当面の疑問は、アトミック操作を同期する必要があるかどうかということです。 Java 同期について詳しくは、この記事をご覧ください。

8. Java の volatile キーワードとは何ですか?それをどうやって使いますか? Java の同期メソッドとの違いは何ですか?

Java 5 での volatile キーワードと Java メモリ モデルの調整以来、volatile キーワードに関連するスレッドの問題がますます一般的になりました。揮発性変数が同時環境での可視性、順序付け、一貫性をどのように確保するかを理解することが重要です。

9. 競合状態とは何ですか?競合状態をどのように検出して解決しますか?

この Java マルチスレッドに関する質問は、通常、上級インタビューで取り上げられます。ほとんどの面接官は、最後に発生した競合状態とそれをどのように解決したかについて質問し、場合によっては、競合状態を発見できるようにするための簡単なコードを作成することもあります。私の記事「Java の競合状態」を参照してください。私の意見では、これは Java スレッドの面接で最高の質問の 1 つであり、競合状態を解決したり、データ競合や競合状態のないコードを書いたりする際の候補者の経験をテストします。

10. Java でスレッドをダンプするにはどうすればよいですか?どのように分析すればよいでしょうか?

UNIX では、kill -3 を使用すると、スレッド ダンプ ログが画面に出力され、CTRL Break を使用して表示できます。これはスレッドのインタビューの簡単な質問です。少し賢い人であれば、ダンプ ログを分析する方法を尋ねられるでしょう。スレッド ダンプ ログは、デッドロック状況を分析するのに非常に役立ちます。

11. start() メソッドは run() メソッドを呼び出すのに、なぜ run() メソッドを直接呼び出すのではなく start() メソッドを呼び出すのでしょうか?

これは、Java マルチスレッドに関する基本的な面接の質問です。マルチスレッドプログラミングを始めたばかりの頃は、最初は少し戸惑いました。現在では、Java 中級レベルの面接では電話面接か 1 ラウンド面接で会うことが多いです。

この質問に対する答えはこれです。 start() メソッドを呼び出すと、新しいスレッドが作成され、run() メソッドのコードが実行されます。 run() メソッドを直接呼び出すと、新しいスレッドは作成されず、メソッド内のコードは現在の呼び出し元のスレッドで実行されます。

12. Java でブロックされたスレッドを起動するにはどうすればよいですか?

これはスレッドに関する難しい質問です。ブロックにはさまざまな理由がありますが、IO ブロックの場合、スレッドを中断する方法はないと思います (ある場合は教えてください)。一方、wait()、sleep()、または join() メソッドの呼び出しによってスレッドがブロックされた場合は、InterruptedException 例外をスローすることでスレッドを中断し、ウェイクアップすることができます。

13. Java の CyclicBarriar と CountdownLatch の違いは何ですか?

最近の Java スレッドのインタビューの質問のほとんどは、JDK 5 同時実行パッケージの習熟度をテストするものです。 2 つの違いの 1 つは、バリアがオープンされた後 (すべてのスレッドがバリア ポイントに到達した後)、CyclicBarrier を再利用できることです。ただし、CountDownLatch は機能しません。さらに詳しく学びたい場合は、「Java でのマルチスレッドと並列コンピューティング」コースを受講してください。

14. 不変クラスとは何ですか?同時アプリケーションの作成にどのように役立ちますか?

このインタビューの質問はスレッドとは直接関係ありませんが、間接的な影響も大きいです。その後、面接官が不変クラスを書くように求めたり、Java の String が不変である理由を尋ねたりすると、面接の質問はさらに複雑になります。

15. マルチスレッド環境で発生する最も一般的な問題は何ですか?どうやって解決しましたか?

メモリ干渉、競合状態、デッドロック、ライブロック、およびスレッドの枯渇は、マルチスレッドおよび同時プログラミングにおける比較的代表的な問題です。これらの問題は無限にあり、特定してデバッグするのは困難です。

以上が15 Java スレッド同時実行に関するインタビューの質問と回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。