マルチスレッドと並行性の問題は、Javaインタビューの重要な部分です。株式投資銀行でフロントエンドの情報ポジションを取得したい場合は、マルチスレッドに関する多くの質問を準備する必要があります。マルチスレッドと並行性は、特に電子取引の開発に関連する投資銀行で非常に人気のあるトピックです。彼らはインタビュアーに多くの混乱しているJavaスレッドの質問を尋ねます。インタビュアーは、候補者の多くが表面的なだけであるため、インタビュアーがJavaのスレッド化と並行性について十分な知識を持っていることを確認したいだけです。直接市場指向のトランザクションのための大容量および低潜伏電子取引システムは、本質的に同時に行われます。以下は、私がさまざまな時間や場所で尋ねたいJavaスレッドの質問です。私は答えを提供しませんでしたが、可能な限り手がかりを与えます、そして時々これらの手がかりは質問に答えるのに十分です。現在、同時ツールと同時コレクションに関するJava5の同時パッケージを参照する問題がますます増えています。 Threadlocal、Blocking Keue、Counting Semaphore、Concurrenthashmapは、これらの質問の中でより一般的です。
15 Javaマルチスレッドインタビューの質問と回答
1)3つのスレッドT1、T2、T3があります。 T1が実行され、T3が実行された後にT2が実行された後にT2が実行されることをどのように保証しますか?
このスレッドの質問は、通常、最初のラウンドまたは電話インタビューの段階で、「参加」方法に精通しているかどうかを確認する目的で尋ねられます。このマルチスレッドの問題は比較的単純で、Joinメソッドを使用して実装できます。
2)Javaの同期ブロック上のロックインターフェイスの利点は何ですか?複数のユーザーが読み取ることができるが、その整合性を維持するために1人のユーザーのみを書き込むことができる効率的なキャッシュを実装する必要があります。どのように実装しますか?
マルチスレッドおよび同時プログラミングのロックインターフェイスの最大の利点は、それらが別々に読み取りと書き込みのためにロックを提供することです。 Javaスレッドインタビューの質問は、インタビュアーの回答に基づいてますます質問されます。電子トランザクションシステムのクライアントキャッシュとトランザクション接続スペースの構築に現在使用されているため、マルチスレッドインタビューに行く前にロックを注意深く読むことを強くお勧めします。
3)Javaの待機方法と睡眠方法の違いは何ですか?
Javaスレッドインタビューの質問は、電話インタビュー中によく尋ねられます。最大の違いは、待機中にロックを解放し、睡眠が常にロックを保持していることです。待機は通常、スレッド間の相互作用に使用され、睡眠は通常実行を一時停止するために使用されます。
4)Javaを使用して、ブロッキングキューを実装します。
これは比較的難しいマルチスレッドインタビューの質問であり、多くの目標を達成できます。まず、候補者が実際にJavaスレッドでプログラムを作成できるかどうかを検出できます。第二に、候補者の同時シナリオの理解を検出することができ、これに基づいて多くの質問をすることができます。 wait()and notify()メソッドを使用してブロッキングキューを実装する場合、Java 5の最新の同時クラスで再度書くように依頼することができます。
5)Javaを使用してコードを書き、プロデューサー消費者の問題を解決します。
上記の質問に非常に似ていますが、この質問はより古典的です。時々、インタビューで次の質問が尋ねられます。 Javaでプロデューサー消費者の問題を解決する方法は?もちろん、多くの解決策があります。ブロックキューを使用して実装する方法を共有しました。時々、彼らは哲学者が食べる問題をどのように実現するかさえ尋ねます。
6)Javaでデッドロックを引き起こすプログラムをプログラミングする問題をどのように解決しますか?
これは私のお気に入りのJavaスレッドインタビューの質問です。なぜなら、マルチスレッドの同時プログラムを書くときにデッドロックの問題が非常に一般的であるにもかかわらず、多くの候補者はデッドロック無料コード(デッドロックコードなし?)を書くことができず、彼らは苦労しています。 nリソースとnスレッドがあることを伝え、操作を完了するためにすべてのリソースが必要であることを伝えてください。簡単にするために、nを2に置き換えることができます。データが大きくなるほど、問題がより複雑に見えるようになります。 Javaのデッドロックを避けて、デッドロックの詳細情報を入手してください。
7)原子動作とは何であり、Javaの原子動作とは何ですか?
非常にシンプルなJavaスレッドインタビューの質問、次の質問は、原子操作を同期する必要があることです。
8)Javaの揮発性の重要な役割は何ですか?それを使用する方法は? Javaの同期メソッドとどう違うのですか?
Java 5およびJavaメモリモデルが変更されて以来、揮発性キーワードに基づいたスレッドの問題がますます人気が高まっています。揮発性変数が、同時環境での視認性をどのように保証するかについて答える準備ができている必要があります。
9)競争条件とは何ですか?競争をどのように発見して解決しますか?
これは、マルチスレッドインタビューの高度な段階に表示される質問です。ほとんどのインタビュアーは、最近遭遇した競争条件と、どのように解決したかについて尋ねます。簡単なコードを書いてから、コードのレース条件を検出できる場合があります。 Javaレースの条件に関する私の以前の記事を参照できます。私の意見では、これは最高のJavaスレッドインタビューの質問の1つであり、レースの条件を解決したり、データレースやその他の人種条件がないコードを書いたりした候補者の経験を正確に検出できます。これについての最高の本は、「Javaの並行性慣行」です。
10)スレッドダンプをどのように使用しますか?スレッドダンプをどのように分析しますか?
UNIXでは、キル-3を使用でき、スレッドダンプがログを印刷します。 Windowsでは、「Ctrl+Break」を使用できます。非常にシンプルでプロフェッショナルなスレッドインタビューの質問ですが、彼がそれを分析する方法をあなたに尋ねると難しいでしょう。
11)start()メソッドを呼び出すときにrun()メソッドを実行するのはなぜですか、そしてrun()メソッドを直接呼び出すことができないのはなぜですか?
これは、もう1つの非常に古典的なJavaマルチスレッドインタビューの質問です。これは、私が最初にスレッドプログラムを書き始めたときの私の混乱でもあります。現在、この質問は、通常、電話インタビューまたはジュニアおよびミドルジャワインタビューの最初のラウンドで尋ねられます。この質問に対する答えは次のようにする必要があります。Start()メソッドを呼び出すと、新しいスレッドを作成し、run()メソッドでコードを実行します。ただし、run()メソッドを直接呼び出すと、新しいスレッドを作成したり、スレッドを呼び出すコードを実行したりしません。より多くの情報を入手するために、私が前に書いた記事「start grun methodとrun methodの違い」を読んでください。
12)Javaのブロッキングスレッドをどのように覚ますのですか?
これは、スレッドとブロックに関する難しい質問であり、多くの解決策があります。スレッドがIOの閉塞に遭遇した場合、スレッドを中止する方法はないと思います。 wait()、sleep()、またはjoin()メソッドを呼び出すためにスレッドがブロックされた場合、中断したエクセプトを投げることでスレッドを中断して目覚めることができます。私が以前に書いた「Javaでのブロッキング方法への対処方法」には、スレッドブロッキングの処理に関する多くの情報があります。
13)JavaのCyclibarriarとCountdownlatchの違いは何ですか?
このスレッドの問題は、主にJDK5の同時パッケージに精通しているかどうかを検出するために使用されます。これら2つの違いは、Cyclicbarrierが通過した障壁を再利用できるのに対し、CountDownLatchを再利用できないことです。
14)不変のオブジェクトとは何ですか?また、同時アプリケーションの作成にどのように役立ちますか?
マルチスレッドに関する別の古典的なインタビューの質問は、スレッドに直接関係していませんが、間接的には非常に役立ちます。このJavaのインタビューの質問は、彼があなたに不変のオブジェクトを書くように頼むなら、非常に難しくなる可能性があります。
15)マルチスレッド環境で遭遇する一般的な問題は何ですか?どのように解決しましたか?
マルチスレッドと同時プログラムで一般的に遭遇するのは、メモリインターフェイス、人種条件、デッドロック、ライブロック、飢erです。問題には終わりがありません。間違っていると、発見してデバッグすることは困難です。これは主にインタビューベースであり、実用的なアプリケーションベースのJavaスレッドの質問ではありません。
他のいくつかの質問が追加されました:
1)Javaの緑の糸とローカルスレッドの違いは何ですか?
2)スレッドとプロセスの違いは?
3)マルチスレッドのコンテキストの切り替えとは何ですか?
4)デッドロックとライブロックの違い、デッドロックと空腹の違いは?
5)Javaで使用されているスレッドスケジューリングアルゴリズムは何ですか?
6)Javaのスレッドスケジューリングとは何ですか?
7)スレッドの不可能な例外にどのように対処しますか?
8)スレッドグループとは何ですか?なぜJavaで推奨されないのですか?
9)アプリケーションを使用してスレッドを作成および管理するよりも、エグゼキューターフレームワークを使用する方が良いのはなぜですか?
10)Javaの執行者と執行者の違いは何ですか?
11)WindowsとLinuxで最も長いCPU時間を使用するスレッドを見つける方法は?
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。