ホームページ  >  記事  >  Java  >  15 の高度な Java マルチスレッドに関するインタビューの質問と回答

15 の高度な Java マルチスレッドに関するインタビューの質問と回答

高洛峰
高洛峰オリジナル
2017-01-16 16:09:161639ブラウズ

Java スレッドの面接の質問

マルチスレッドと同時実行に関する質問は、Java の面接で重要な部分です。株式投資銀行でフロントオフィスの情報職に就きたい場合は、マルチスレッドに関する多くの質問を準備しておく必要があります。マルチスレッドと同時実行性は、特に電子取引の開発に関連する投資銀行業務において非常に人気のあるトピックです。彼らは面接官に、Java スレッドに関するわかりにくい質問をたくさんします。多くの候補者はほんの表面をなぞっただけであるため、面接官は Java スレッドと同時実行性について十分な知識があることを確認したいだけです。市場直接取引のための大量かつ低遅延の電子取引システムは、本質的に同時実行されます。以下は、私がさまざまな時間や場所で尋ねたい Java スレッドに関する質問です。私は答えを提供しませんが、可能な限りヒントを提供します。場合によっては、それらのヒントが質問に答えるのに十分である場合もあります。 Java 5 同時実行パッケージを参照する同時実行ツールおよび同時実行コレクションに関する質問が増えています。これらの問題の中で、ThreadLocal、Blocking Queue、Counting Semaphore、および ConcurrentHashMap がより一般的です。


15 Java マルチスレッド インタビューの質問と回答

1) T1、T2、T3 の 3 つのスレッドがあります。T1 の実行後に T2 が実行され、T2 の実行後に T3 が実行されるようにするにはどうすればよいですか。処刑された?

このスレッドの質問は通常、「参加」方法に精通しているかどうかをテストするために、最初のラウンドまたは電話面接の段階で尋ねられます。このマルチスレッドの問題は比較的単純で、join メソッドを使用して実装できます。

2) Java の同期ブロックに対する Lock インターフェースの利点は何ですか?複数のユーザーに読み取りを許可し、書き込みを許可するのは 1 人のユーザーのみである効率的なキャッシュを実装する必要があります。これをどのように実装しますか?

マルチスレッドおよび同時プログラミングにおけるロック インターフェイスの最大の利点は、読み取りと書き込みに個別のロックが提供されることです。これにより、ConcurrentHashMap や条件付きブロックなどの高性能データ構造を作成できるようになります。 Java スレッドの面接の質問は、面接者の回答に基づいて行われることが増えています。 Locks は現在、クライアント側のキャッシュと電子取引端末のトランザクション接続スペースを構築するために頻繁に使用されているため、マルチスレッドの面接に行く前に Locks についてよく読んでおくことを強くお勧めします。

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

電話インタビューで通常尋ねられる Java スレッドのインタビューの質問。最大の違いは、wait は待機中にロックを解放しますが、sleep は常にロックを保持していることです。通常、待機はスレッド間の対話に使用され、スリープは通常、実行を一時停止するために使用されます。

4) Java でブロッキングキューを実装します。

これは、多くの目的を達成できる比較的難しいマルチスレッドの面接の質問です。 1 つ目は、受験者が実際に Java スレッドを使用してプログラムを作成できるかどうかをテストでき、2 つ目は、受験者が同時実行シナリオについて理解しているかどうかをテストでき、これに基づいて多くの質問をすることができます。ユーザーが wait() メソッドと Notice() メソッドを使用してブロッキング キューを実装する場合は、Java 5 の最新の同時実行クラスを使用してキューを再度作成するように依頼できます。

5) Java でコードを作成して、生産者と消費者の問題を解決します。

上記の質問とよく似ていますが、この質問はより古典的なもので、面接で次のような質問がされることがあります。 Java でプロデューサーとコンシューマーの問題を解決するには? もちろん、ブロッキング キューを使用して実装される解決策はたくさんあります。時には、食事の哲学者の問題をどのように実装すればよいか尋ねることもあります。

6) デッドロックを引き起こすプログラムを Java でプログラムします。それをどのように解決しますか?

これは私のお気に入りの Java スレッド面接の質問です。なぜなら、マルチスレッド同時実行プログラムを作成するときにデッドロックの問題は非常に一般的であるにもかかわらず、多くの受験者はデッドロックのないコード (デッドロックのないコード?) を書くことができず、苦労しているからです。 N 個のリソースと N 個のスレッドがあり、操作を完了するにはすべてのリソースが必要であることを伝えてください。簡単にするために、ここでの n は 2 に置き換えることができます。データが大きくなると、問題がより複雑に見えます。デッドロックの詳細については、「Java でのデッドロックの回避」を参照してください。

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

非常に単純な Java スレッドのインタビューの質問です。次の質問は、アトミック操作を同期する必要があるというものです。

8) Java における volatile の重要な役割は何ですか?それの使い方? Java の同期メソッドとの違いは何ですか?

Java 5 と Java メモリ モデルが変更されて以来、volatile キーワードに基づくスレッドの問題がますます一般的になってきました。揮発性変数が同時環境で可視性、順序付け、一貫性をどのように確保するかについての質問に答える準備をしておく必要があります。

9) 競合状態とは何ですか?競合をどのように特定して解決しますか?

これは、マルチスレッド面接の上級段階で現れる質問です。ほとんどの面接官は、あなたが最近遭遇した競争条件と、それをどのように解決したかについて質問します。場合によっては、単純なコードを記述して、コード内の競合状態を検出できるようにすることもあります。 Java 競合状態に関する私の以前の記事を参照してください。私の意見では、これは Java スレッドの面接で最高の質問の 1 つであり、競合状態の解決、またはデータ競合やその他の競合状態のないコードの作成における候補者の経験を正確に検出できます (データ競合のないこの文は、翻訳しません)。このテーマに関する最良の本は、『Java の同時実行プラクティス』です。

10) スレッドダンプはどのように使用しますか?スレッド ダンプをどのように分析しますか?

UNIX では kill -3 を使用すると、スレッド ダンプによってログが出力されます。Windows では、「CTRL+Break」を使用できます。非常にシンプルで専門的なスレッドのインタビューの質問ですが、それを分析する方法を尋ねられると難しいです。

11) start() メソッドを呼び出すと run() メソッドが実行されるのはなぜですか? run() メソッドを直接呼び出すことができないのはなぜですか?

これも非常に古典的な Java マルチスレッドの面接の質問です。これは、私が最初にスレッド プログラムを書き始めたときの混乱でもありました。現在、この質問は通常、電話面接、または初心者から中級レベルの Java 面接の最初のラウンドで尋ねられます。この質問に対する答えは次のようになります。 start() メソッドを呼び出すと、新しいスレッドが作成され、 run() メソッドのコードが実行されます。ただし、 run() メソッドを直接呼び出した場合、新しいスレッドは作成されず、呼び出しスレッドのコードは実行されません。詳細については、以前の記事「開始メソッドと実行メソッドの違い」を参照してください。

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

これはスレッドとブロックに関する難しい質問ですが、解決策はたくさんあります。 IO ブロックに遭遇した場合にスレッドを中止する方法はないと思います。 wait()、sleep()、または join() の呼び出しによってスレッドがブロックされた場合、InterruptedException をスローすることでスレッドを中断し、ウェイクアップできます。前回の記事「Java でメソッドのブロッキングに対処する方法」には、スレッドのブロッキングへの対処に関する多くの情報が記載されています。

13) Java の CycliBarriar と CountdownLatch の違いは何ですか?

このスレッドの質問は主に、JDK5 の並行パッケージに精通しているかどうかをテストするために使用されます。 2 つの違いは、CyclicBarrier は通過したバリアを再利用できるのに対し、CountdownLatch は再利用できないことです。

14) 不変オブジェクトとは何ですか?それは同時アプリケーションの作成にどのように役立ちますか?

もう 1 つの典型的なマルチスレッド面接の質問。スレッドとは直接関係ありませんが、間接的に役立ちます。この Java 面接の質問で、不変オブジェクトを書くように求められたり、String が不変である理由を尋ねられたりすると、非常に扱いにくくなる可能性があります。

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

マルチスレッドおよび同時プログラムでよく発生するのは、メモリ インターフェイス、競合状態、デッドロック、ライブロック、および飢餓です。問題は無限にあり、間違った場合は、発見してデバッグすることが困難になります。これは主にインタビューベースであり、実際のアプリケーションベースの Java スレッドに関する質問ではありません。

追加の質問がいくつかあります:

1) Java のグリーン スレッドとローカル スレッドの違いは何ですか?

2) スレッドとプロセスの違いは何ですか?

3) マルチスレッドにおけるコンテキストスイッチングとは何ですか?

4) デッドロックとライブロックの違い、デッドロックとパイの違いは何ですか?

5) Java で使用されるスレッド スケジューリング アルゴリズムは何ですか?

6) Java のスレッド スケジューリングとは何ですか?

7) スレッド内でキャッチできない例外をどのように処理しますか?

8) スレッド グループとは何ですか? Java ではなぜ推奨されないのですか?

9) スレッドの作成と管理にアプリケーションを使用するよりも Executor フレームワークを使用する方が良いのはなぜですか?

10) Java の Executor と Executor の違いは何ですか?

11) Windows と Linux で最も CPU 時間を使用しているスレッドを見つけるにはどうすればよいですか?

高度な Java マルチスレッドに関する 15 のインタビューの質問と回答については、PHP 中国語 Web サイトに注目してください。

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