面接の過程の小さい問題の小さい問答、私はあなたに答えます^^;


1)T 1、T 2、T 3の3つのスレッドがありますが、T 2がT 1の実行後に実行され、T 3がT 2の実行後に実行されることをどのように保証しますか?
(ついでにGitHubのリンクを残して、面接などの内容を取得する必要がある場合は自分で探してもいいです)https://github.com/xiangjiana/Android-MS
このスレッドの問題は、通常、第1ラウンドまたは電話面接の段階で聞かれ、「join」方法に詳しいかどうかを検出することを目的としています.このマルチスレッド問題は比較的簡単でjoin法で実現できる.
2)Javaにおけるロックインタフェースがsynchronizedブロックより優れている点は何ですか.複数のユーザーが読むことができる効率的なキャッシュを実現する必要がありますが、1人のユーザーだけが書くことができ、完全性を維持するには、どのように実現しますか?
lockインタフェースのマルチスレッドと同時プログラミングにおける最大の利点は、ConcurrentHashMapのような高性能データ構造と条件付きブロックを満たすリードとライトにそれぞれロックを提供することです.Javaスレッド面接の質問は、面接者の回答に基づいて質問されるようになりました.マルチスレッドの面接に参加する前にロックを真剣に読むことを強くお勧めします.現在、電子取引の最終的なクライアントキャッシュと取引接続空間を構築するために多く使われているからです.
3)javaでwaitとsleepの方法の違い?
通常、電話面接でよく聞かれるJavaスレッド面接の質問です.最大の違いは、待機中にwaitがロックを解放し、sleepがロックを保持していることです.Waitは通常スレッド間インタラクションに用いられ、sleepは通常実行を一時停止するために用いられる.
4)Javaでブロックキューを実現する.
これは比較的困難なマルチスレッド面接問題であり、多くの目的を達成することができます.第一に、候補者が実際にJavaスレッドでプログラムを書くことができるかどうかを検出することができる.第二に、候補者の同時シーンに対する理解を検出することができ、これに基づいて多くの質問をすることができます.もし彼がwait()notify()の方法でブロックキューを実現したら、最新のJava 5の同時クラスでもう一度書くように要求することができます.
5)Javaでコードを書くことで生産者である消費者問題を解決する.
上の質問と似ていますが、この質問はもっと古典的で、面接で次の質問をすることがあります.Javaで生産者である消費者の問題をどのように解決するかは、もちろん多くの解決方法があり、ブロックキューで実現する方法を共有しました.哲学者の食事の実現方法を聞くこともある.
6)Javaでデッドロックを引き起こすプログラムをプログラミングしますが、どうやって解決しますか?
これは私の大好きなJavaスレッドの面接問題です.デッドロック問題がマルチスレッド同時プログラムを書くときに非常に一般的であっても、多くの候補者はdeadlock free code(デッドロックコードなし?)を書くことができず、彼らはもがいているからです.N個のリソースとN個のスレッドがあり、操作を完了するにはすべてのリソースが必要だと彼らに伝えてください.ここでのnを簡単に2に置き換えるには,大きなデータほど問題が複雑に見える.Javaのデッドロックを回避することで、デッドロックに関する詳細情報が得られます.
7)原子操作とは何か,Javaにおける原子操作とは何か.
非常に簡単なjavaスレッドの面接問題ですが、次の問題は原子操作を同期する必要があります.
8)Javaでのvolatileのポイントは何ですか?どのように使用しますか?Javaでsynchronizedメソッドと何が違いますか?
Java 5とJavaメモリモデルが変更されてから、volatileキーワードに基づくスレッドの問題がますます流行しています.volatile変数が同時環境で可視性を確保する方法について答える準備をしておく必要があります.
9)競争条件とは?どのようにして競争を発見し、解決しますか?
これはマルチスレッド面接の高度な段階に現れる問題です.多くの面接官は、最近出会った競争条件と、どのように解決したのかを聞いています.簡単なコードを書いて、コードの競争条件を検出する時間があります.私が以前発表したJavaの競争条件に関する記事を参考にすることができます.私から見れば、これは最高のjavaスレッド面接問題の一つであり、候補者が競争条件を解決した経験を正確に検出することができ、or writing code which is free of data race or anyother race conditionである.この方面の最も良い本《Concurrency practices in Java》について.
10)threaddumpをどのように使用しますか.どうやって分析するの?
UNIXではkill-3を使用し、thread dumpでログを印刷し、windowsでは「CTRL+Break」を使用できます.非常に簡単で専門的なスレッドの面接問題ですが、彼がどのように分析するかと聞くと、難しいです.
11)start()メソッドを呼び出すとrun()メソッドが実行されるのはなぜですか.なぜrun()メソッドを直接呼び出すことができないのですか.
これはもう一つの古典的なjavaマルチスレッド面接問題です.これも私がスレッドプログラムを書き始めたときの困惑です.現在、この問題は電話面接や中級Java面接の第1ラウンドで聞かれることが多い.この質問の答えは、start()メソッドを呼び出すと、新しいスレッドを作成し、run()メソッドのコードを実行するはずです.しかし、run()メソッドを直接呼び出すと、新しいスレッドは作成されず、呼び出しスレッドのコードも実行されません.
12)Javaでブロックされたスレッドをどのように起動しますか?
これはスレッドとブロックに関する厄介な問題であり,多くの解決方法がある.スレッドがIOブロックに遭遇した場合、スレッドを中止する方法があるとは思いません.スレッドがwait()sleep()、またはjoin()メソッドを呼び出すことによってブロックされた場合、スレッドを中断し、InterruptedExceptionを投げ出すことによって起動することができます.
13)JavaでCycliBarriarとCountdownLatchの違いは何ですか?
このスレッドの問題は主にあなたがJDK 5の中の並発注に熟知しているかどうかを検出するために使用されます.この2つの違いは、CyclicBarrierが通過した障害を繰り返し使用することができ、CountdownLatchが繰り返し使用できないことである.
14)可変オブジェクトとは何ですか.書き込み同時アプリケーションに役立ちますか.
もう一つのマルチスレッドの古典的な面接問題は、スレッドに直接関係するわけではありませんが、間接的に多くの助けがあります.このjava面接の問題は非常に厄介になります.もし彼があなたに可変オブジェクトを書くように要求したり、Stringが可変ではない理由を聞いたりします.
15)マルチスレッド環境でよくある質問は何ですか.どうやって解決したの?
マルチスレッドおよびコンカレント・プログラムでよく遭遇するのは、Memory-interface、競合条件、デッドロック、ライブ・ロック、および飢餓です.問題は果てしないことです.間違えたら、発見したりデバッグしたりするのは難しいです.これは、実際のアプリケーションに基づいたJavaスレッドの問題ではなく、面接に基づいていることが多い.
ついでにGitHubのリンクを残して、面接などの内容を取得する必要がある人は自分で探してもいいです.https://github.com/xiangjiana/Android-MS