Javaの同時実行性に関するこれらの高度/不公平なインタビューの質問はありますか?[閉まっている]


12

以下は、Javaの並行性を知っていると言っているインタビュー対象者に最近尋ねた質問です。

  1. 「メモリの可視性」の危険性-JVMがモニターによって保護されておらず宣言されていない変数に対する特定の操作を並べ替える方法volatile。1つのスレッドが別のスレッドによる変更を認識できないようにする方法。通常、このハザードが存在する場所にコードNoVisibilityを表示し(例:Goetz et alの「Java Concurrency in Practice」のリスト3.1 の例)、何が問題なのかを尋ねることでこれを要求します。
  2. volatile宣言された実際の変数だけでなく、変数がvolatile変更する前にスレッドによって行われた変数への変更にも影響することを説明しvolatileます。
  3. なぜvolatile代わりに使用するのsynchronizedでしょうか?
  4. wait()およびで条件変数を実装しますnotifyAll()。を使用する理由を説明しますnotifyAll()。条件変数をwhileループでテストする必要がある理由を説明します。

私の質問は-これらは適切であるか、Javaの並行性を知っていると言う人に尋ねるには高度すぎるのでしょうか?

そして、私たちがそれに取り組んでいる間、Javaの並行性で働いている誰かがJavaガベージコレクションの平均以上の知識を持っていると期待されるべきだと思いますか?


4
私が心配する唯一の考えは、「スキル」ではなく「記憶された事実」の雑草に入らないようにすることです。
タイラー

5
これらの質問は、高レベルの並行性を必要とするJavaの職に雇われている人にとっては完全に妥当と思われます。
リグ

2
並行開発を必要とするポジションに雇用する場合、これらは始まりにすぎません。しかし、私は誰かがについてのあなたの質問に答えた場合、あなたはどのように反応するかだろうnotifyAll()と「私が使用して私は、OSのスケジューラの仕事をして信じていないnotify()
kdgregory

2
また、jucロック、データ構造、スレッドプール、および安全でないことに関するQを追加します:
Martijn Verburg

2
他の人は質問の複雑さについて話しました。彼らがプロジェクトに関連していると仮定すると、候補者が彼らの深さから外れていることが明らかになった場合、より簡単な質問で彼らにつながり、この質問の行を放棄することを確認してください-それは彼らの時間の無駄であり、あなたとエネルギーを台無しにしますインタビューの。あなたが答えられないことを知っている質問をすることは意味がありません。他のトピックで同様の深さに入るように準備してください-ここで誰かが弱いからといって、彼らが他の強みで能力を発揮できず、自分自身を証明できるわけではありません。
ショーンマクサムシング

回答:


11

2年のJavaの経験がある候補者と7年のJavaの経験がある候補者のどちらを尋ねているかは本当に異なります。建築家/技術主任/シニアにとっては適切な質問のように見えますが、ジュニアや多分中級レベルにとっても、彼らはちょっと難しいようです。

またjava.util.concurrent、現在のJava開発ではほとんど置き換えられている低レベルの同期メカニズムについて質問しています。wait()/notify() ロックの代わりに推奨されます。Effective Java 2nd editionは、待機/通知メカニズムを詳細に説明する章を削除したことがわかります。これは、有用とは見なされなかったためです。また、コンテナはほとんどの場合、より高いレベルでマルチスレッドを処理します。EJBのメソッドは、たとえばプログラマからの心配なしにスレッドセーフです(これは、プログラマがマルチスレッドを知らないという意味ではありません)。

実際、マルチスレッドはプログラミング言語のサブパートではなく、オペレーティングシステムのサブパートとして見られます。ミューテックス、セマフォ、またはスケジューリングに関するマルチスレッドおよび並列プログラミングの質問を人が本当に理解しているかどうかを確認するには、まず特定のプログラミング言語での実装に関する詳細を尋ねる必要があります。


2
wait()およびnotify()コメントで+1-ただし、並行性に精通している開発者は、このスペース(Java 7のF&Jまでを含む)でのJavaの機能の歴史と進化を知っているでしょう。
マルタインVerburg

@ M3th:これらの質問を最後に聞いた人は、10年のJavaの経験があり、並行プログラミングを知っていると主張しました。投稿するためのおかげlock対はwait/notify-私は知っていたlockゲッツ帳からしかし、それは今古いやり方よりも優先して実現しませんでした。@Martijnには同意しますが、このレベルの経験がある人は古いアプローチを知っている必要があります。とにかく、もう一度質問するつもりはありません(特に、既に回答済みとマークされているので-あなたが:-))。
sparc_spread

1
@Martijn Verburgあなたの両方に同意します。優れたJava開発者(特に並行性を知っていると言う開発者)は、wait()/ notify()の使用方法を知っている必要があります。少なくともObjectクラスに表示される理由についての好奇心のために。
m3th0dman

1
@sparc_spread履歴書で、Javaの同時実行が回答(少なくとも最後の3つ)を知っている必要があることを明確に述べているプログラマ。経験レベルについては、私が言ったように、アーキテクト/技術的リーダー/シニア開発者であると主張/希望し、5以上のJava経験(JSPおよびMVCフレームワークではなくバックエンド)を持つプログラマーが答えを知っている必要があります。lockvs に関してはwait/notify、低レベルの機能が本当に必要な場合にロックが好まれますが、ほとんどの場合、より高いレベルの代替が利用可能です。BlockingQueueは特に便利なものです。
m3th0dman

14

これらは適切であるか、Javaの並行性を知っていると言う人に尋ねるには高度すぎますか?

比較的高度な質問だと思います。しかし、彼らはトリックの質問ではないという意味で「不公平」ではありません。

実際、「公平性」は実際には関連する基準ではありません。あなたが(インタビュアーとして)心配しなければならないのは、質問とあなたの答えの解釈が、あなたが面接しているポジションの最良の候補者を選ぶかどうかです。(または、別の言い方をするために、あなたがすべきことを候補拒否されて、本当に、それらは「正しく」これらの質問に答えないようにもっと配慮を与えることを?)

そして、私たちがそれに取り組んでいる間、Javaの並行性で働いている誰かがJavaガベージコレクションの平均以上の知識を持っていると期待されるべきだと思いますか?

繰り返しますが、それは実際に関連する質問ではありません。自問すべき質問は、Javaガベージコレクションについて十分な知識を持っている人が必要かどうかです。


この反応に感謝します。両方を答えとしてマークできたら本当によかったです。ここであなたが助けてくれたことに感謝します。
sparc_spread
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.