2020最新のJava 200+インタビューの質問(ThreadLocalモジュールの追加分析)

序文:

前者はThreadLocal補足モジュールの分析です。

第二部:200以上のインタビューの質問。

1. ThreadLocalとは何ですか?

ThreadLocalは、ローカルスレッドコピー変数ツールクラスです。

これは主に、プライベートスレッドと、スレッドによって保存されたコピーオブジェクトのマッピングに使用されます。各スレッド間の変数は互いに干渉しません。同時実行性の高いシナリオでは、ステートレスコールを実装できます。これは、各スレッドが変数値を共有しない操作に適しています。 。

2. ThreadLocalの動作原理は何ですか?

ThreadLocalの原則:各スレッドは、Map(キー、値)データ形式であるThreadLocalMapを維持し、キーは弱い参照、つまりThreadLocal自体であり、値はスレッド変数の値を格納します。

つまり、ThreadLocal自体はスレッドの変数値を格納しません。これは、変数の格納と取得に役立つスレッドの内部マップを維持するための単なるツールです。

データ構造を以下に示します。

3. ThreadLocalはハッシュの競合をどのように解決しますか?

HashMapとは異なり、ThreadLocalMap構造は非常に単純で、次の参照はありません。

つまり、ThreadLocalMapでのハッシュの競合を解決する方法は、リンクリストではなく、線形検出方法です。

いわゆる線形検出は、初期キーのハッシュコード値に従ってテーブル配列内の要素の位置を決定することです。この位置が他のキー値によって占められていることが判明した場合は、固定アルゴリズムを使用して特定のステップサイズの次の位置を見つけ、順番に判断します。保管できる場所が見つかるまで。

ソースコードは次のように実装されています。

/
 * Increment i modulo len.
 */
private static int nextIndex(int i, int len) {
    return ((i + 1 < len) ? i + 1 : 0);
}

/
 * Decrement i modulo len.
 */
private static int prevIndex(int i, int len) {
    return ((i - 1 >= 0) ? i - 1 : len - 1);
}

4. ThreadLocalのメモリリークとは何ですか?

ThreadLocalはエントリのキーによってThreadLocalMapの弱い参照として参照されるため、ThreadLocalがそれを参照する外部の強い参照を持たない場合、次回のJVMガベージコレクション時にThreadLocalがリサイクルされます。

この時点で、エントリ内のキーは回復されていますが、値は強参照であり、ガベージコレクターによって回復されません。ThreadLocalスレッドが実行を継続すると、値は回復されず、メモリリークが発生します。

5. ThreadLocalMapのキーが弱い参照になるのはなぜですか?

ThreadLocalMapのキーは弱い参照であり、値は強い参照であるため、メモリリークの問題が発生することがわかっています。このように設計されている理由は、2つの状況に分けて説明します。

  • キーは強い参照を使用しています。これにより問題が発生します。参照されたThreadLocalオブジェクトはリサイクルされますが、ThreadLocalMapもThreadLocalへの強い参照を保持します。手動で削除しない場合、ThreadLocalはリサイクルされず、メモリリークが発生します。
  • キーは弱い参照を使用します:この場合、参照されるThreadLocalオブジェクトはリサイクルされます。ThreadLocalMapはThreadLocalへの弱い参照を保持しているため、手動で削除しなくてもThreadLocalはリサイクルされます。値は、次にThreadLocalMapがset、get、またはremoveを呼び出すときにクリアされます。

上記の2つの状況を比較すると、次のことがわかります。ThreadLocalMapのライフサイクルはThreadと同じであるため、対応するキーを手動で削除しないと、メモリリークが発生します。

ただし、弱い参照を使用すると、追加の保護層が提供される可能性があります。ThreadLocalへの弱い参照によってメモリリークが発生することはありません。対応する値は、次にThreadLocalMapが設定、取得、または削除されるときにクリアされます。これが最良の解決策です。

6. ThreadLocalのアプリケーションシナリオは何ですか?

ThreadLocalは、Hibernateのセッション取得シナリオなど、独立した変数コピーの場合に適しています。

サンプルコード:

private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

public static Session getCurrentSession(){
    Session session =  threadLocal.get();
    try {
        if(session ==null&&!session.isOpen()){
            //...
        }
        threadLocal.set(session);
    } catch (Exception e) {
        // TODO: handle exception
    }
    return session;
}

すべてのモジュールの残りのナレッジポイントには、19のモジュールが含まれます。Javaの基本、コンテナ、マルチスレッド、リフレクション、オブジェクトコピー、Java Webモジュール、例外、ネットワーク、設計パターン、Spring / Spring MVC、Spring Boot / Spring Cloud、 Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM。

以下に示すように:

読者の友人は、自分の状況に応じて、対応するモジュールを選択して読むことができます。

人を読むのに適しています

  • 面接が必要な初心者/中級/上級のJavaプログラマー
  • 欠員をチェックしたい人
  • Javaテクノロジスタックを継続的に改善および拡張したい人
  • Javaインタビュアー

特定のインタビューの質問

具体的な内容である208問のインタビューの質問を見てみましょう。

1. Javaの基本

1. JDKとJREの違いは何ですか?
2. ==と=の違いは何ですか?
3. 2つのオブジェクトのhashCode()は同じであるため、equals()もtrueでなければなりません。
4. Javaでのfinalの役割は何ですか?
5. JavaでのMath.round(-1.5)はどれくらいですか?
6. Stringは基本的なデータ型ですか?
7. Javaで文字列を操作するためのクラスは何ですか?それらの違いは何ですか?
8. String str = "i"は、String str = new String( "i")と同じですか?
9.文字列を逆にする方法は?
10. Stringクラスの一般的なメソッドは何ですか?
11.抽象クラスには抽象メソッドが必要ですか?
12.通常のクラスと抽象クラスの違いは何ですか?
13. finalでfinalクラスを変更できますか?
14.インターフェイスと抽象クラスの違いは何ですか?
15. JavaにはいくつかのタイプのIOストリームがありますか?
16. BIO、NIO、AIOの違いは何ですか?
17.ファイルの一般的な方法は何ですか?

第二に、コンテナ

18. Javaコンテナとは何ですか?
19.コレクションとコレクションの違いは何ですか?
20.リスト、セット、マップの違いは何ですか?
21. HashMapとHashtableの違いは何ですか?
22. HashMapとTreeMapのどちらを使用するかを決める方法は?
23. HashMapの実現原理について教えてください。
24. HashSetの実現原理について教えてください。
25. ArrayListとLinkedListの違いは何ですか?
26.配列とリストを変換する方法は?
27. ArrayListとVectorの違いは何ですか?
28. ArrayとArrayListの違いは何ですか?
29.キューのポーリング()と削除()の違いは何ですか?
30.どのコレクションクラスはスレッドセーフですか?
31.イテレータとは何ですか?
32.イテレーターの使い方は?特徴は何ですか?
33. IteratorとListIteratorの違いは何ですか?
34.コレクションを変更できないようにする方法は?

3、マルチスレッド

35.並列と並行の違いは何ですか?
36.スレッドとプロセスの違いは?
37.デーモンスレッドとは何ですか?
38.スレッドを作成する方法は何ですか?
39.実行可能と呼び出し可能の違いは何ですか?
40.スレッドの状態はどうですか?
41.スリープ()とウェイト()の違いは何ですか?
42. notify()とnotifyAll()の違いは何ですか?
43.スレッドのrun()とstart()の違いは何ですか?
44.スレッドプールを作成する方法は何ですか?
45.スレッドプールの状態は何ですか?
46.スレッドプールのsubmit()メソッドとexecute()メソッドの違いは何ですか?
47. Javaプログラムでマルチスレッド操作の安全性を確保する方法は?
48.マルチスレッドロックアップグレードの原則は何ですか?
49.デッドロックとは何ですか?
50.デッドロックを防ぐには?
51. ThreadLocalとは何ですか?使用シナリオは何ですか?
52.同期の基本的な実装原理について教えてください。
53.同期型と揮発性の違いは何ですか?
54.同期とロックの違いは何ですか?
55.同期とReentrantLockの違いは何ですか?
56.原子の原理について教えてください。

4、反射

57.リフレクションとは何ですか?
58. Javaシリアライゼーションとは何ですか?シリアル化はいつ必要ですか?
59.動的エージェントとは何ですか?アプリケーションは何ですか?
60.動的プロキシを実装するには?

5、オブジェクトのコピー

61.クローンを使用する理由
62.オブジェクトのクローンを作成するには?
63.ディープコピーとシャローコピーの違いは何ですか?

6、Java Web

64.jspとサーブレットの違いは何ですか?
65.jspにはどの組み込みオブジェクトがありますか?役割は何ですか?
66. jspの4つのスコープについて教えてください。
67.セッションとcookieの違いは何ですか?
68.セッションの仕組みについて教えてください。
69.クライアントがCookieを禁止している場合、セッションを使用できますか?
70. Spring MVCとStrutsの違いは何ですか?
71. SQLインジェクションを回避するには?
72. XSS攻撃とは何ですか。
73. CSRF攻撃とは何ですか。

7、異常

74.スローとスローの違いは何ですか?
75. final、finally、finalizeの違いは何ですか?
76. try-catch-finallyのどの部分を省略できますか?
77. try-catch-finallyでは、returnがcatchにある場合、最終的に実行されますか?
78.一般的な例外クラスは何ですか?

8.ネットワーク

79. http応答コード301および302は何を表していますか?違いは何ですか?
80.転送とリダイレクトの違いは何ですか?
81. tcpとudpの違いを簡単に説明してください。
82.なぜTCPは2回ではなく3回握手しなければならないのですか?なんで?
83. tcpスティッキパケットの生成方法を教えてください。
84. OSIの7つのレイヤーとは何ですか?
85. getリクエストとpostリクエストの違いは何ですか?
86.クロスドメインを実現するには?
87. JSONP実装の原理について教えてください。

9つのデザインパターン

88.おなじみのデザインパターンについて教えてください。
89.単純なファクトリと抽象的なファクトリの違いは何ですか?

十、春/春MVC

90.なぜばねを使用するのですか?
91. aopとは何かを説明してください。
92. iocとは何かを説明してください。
93.春の主要なモジュールは何ですか?
94.春の一般的な注入方法は何ですか?
95. Beanは春のスレッドセーフですか?
96. SpringはどのようなBeanスコープをサポートしていますか?
97.春に豆を自動配線する方法は何ですか?
98.春のトランザクションを実装する方法は何ですか?
99.春のトランザクションの分離について話しますか?
100. Spring MVCの実行プロセスについて教えてください。
101. Spring MVCにはどのコンポーネントがありますか?
102. @RequestMappingの役割は何ですか?
103. @Autowiredの役割は何ですか?

十一、スプリングブーツ/スプリングクラウド

104.スプリングブーツとは何ですか?
105.スプリングブーツを使用する理由
106. Spring Bootのコア構成ファイルは何ですか?
107. Spring Boot構成ファイルのタイプは何ですか?違いは何ですか?
108.スプリングブートでホットデプロイメントを実現する方法を教えてください。
109.jpaとhibernateの違いは何ですか?
110.春の雲とは?
111.スプリングクラウド回路ブレーカーの役割は何ですか?
112.春の雲のコアコンポーネントは何ですか?

12.休止状態

113.なぜ休止状態を使用するのですか?
114. ORMフレームワークとは何ですか?
115.印刷されたSQLステートメントを休止状態のコンソールで表示するにはどうすればよいですか?
116. hibernateにはいくつのクエリメソッドがありますか?
117. hibernateエンティティクラスをfinalとして定義できますか?
118.休止状態でのマッピングにIntegerとintを使用することの違いは何ですか?
119.休止状態はどのように機能しますか?
120. get()とload()の違いは何ですか?
121. hibernateのキャッシュメカニズムについて教えてください。
122.休止状態オブジェクトにはどのような状態がありますか?
123. hibernateのgetCurrentSessionとopenSessionの違いは何ですか?
124. hibernateエンティティクラスにはパラメータのないコンストラクタがありますか?なんで?

13、Mybatis

125.mybatisの#{}と$ {}の違いは何ですか?
126. mybatisにはいくつのページング方法がありますか?
127. RowBoundsは1回限りのクエリの結果すべてですか?なんで?
128.論理ページングと物理ページングの違いは何ですか?
129. mybatisは遅延読み込みをサポートしていますか?遅延読み込みの原則は何ですか?
130. mybatisの1次キャッシュと2次キャッシュについて教えてください。
131. mybatisとhibernateの違いは何ですか?
132. Mybatisにはどのようなエグゼキューターがいますか?
133. mybatisページングプラグインの実装原理は何ですか?
134. mybatisはどのようにカスタムプラグインを作成しますか?

14. RabbitMQ

135. rabbitmqの使用シナリオは何ですか?
136. rabbitmqの重要な役割は何ですか?
137. rabbitmqの重要なコンポーネントは何ですか?
138. rabbitmqでのvhostの役割は何ですか?
139. rabbitmqのメッセージはどのように送信されますか?
140. rabbitmqはメッセージの安定性をどのように保証しますか?
141. rabbitmqはメッセージの損失をどのように回避しますか?
142.メッセージの永続性を確実に成功させるための条件は何ですか?
143. rabbitmqの永続化の欠点は何ですか?
144. rabbitmqにはいくつのブロードキャストタイプがありますか?
145. rabbitmqは遅延メッセージキューをどのように実装しますか?
146. rabbitmqクラスターの用途は何ですか?
147. rabbitmqノードのタイプは何ですか?
148. rabbitmqクラスターを構築するときに注意すべき点は何ですか?
149. rabbitmqは各ノードの完全なコピーですか?なんで?
150. rabbitmqクラスター内の唯一のディスクノードがクラッシュするとどうなりますか?
151. rabbitmqにはクラスターノードを停止する必要がありますか?

15.カフカ

152.飼育係なしでカフカを単独で使用できますか?なんで?
153. Kafkaにはいくつかのデータ保持戦略がありますか?
154. Kafkaは、7日と10Gを同時に設定してデータを消去します。5日目までに、メッセージは10Gに到達します。Kafkaはこの時間をどのように処理しますか?
155. Kafkaの動作が遅くなる原因は何ですか?
156. Kafkaクラスターを使用する場合、何に注意すべきですか?

16.飼育係

157.飼育係とは何ですか?
158.飼育係にはどんな機能がありますか?
159. Zookeeperにはいくつの展開モードがありますか?
160. zookeeperは、マスターノードとスレーブノードのステータスが同期されていることをどのように確認しますか?
161.クラスターにマスターノードがあるのはなぜですか?
162.クラスター内に3つのサーバーがあり、ノードの1つがダウンしていますが、現時点ではZookeeperを使用できますか?
163.飼育係の通知メカニズムについて教えてください。

17. MySql

164.データベースの3つの通常の形式は何ですか?
165.自動インクリメントテーブルには合計7つのデータがあり、最後の2つのデータが削除され、mysqlデータベースが再起動され、別のデータが挿入されます。現時点でのIDは何ですか?
166.現在のデータベースバージョンを取得する方法
167. ACIDとは何か教えてください。
168. charとvarcharの違いは何ですか?
169. floatとdoubleの違いは何ですか?
170. mysqlの内部接続、左接続、および右接続の違いは何ですか?
171. MySQLインデックスはどのように実装されますか?
172. mysqlのインデックスが要求を満たしているかどうかを確認するにはどうすればよいですか?
173.データベースのトランザクション分離について教えてください。
174. mysqlでよく使用されるエンジンについて教えてください。
175. mysqlの行ロックとテーブルロックについて教えてください。
176.楽観的ロックと悲観的ロックについてはどうですか?
177. MySQLのトラブルシューティングにはどのような方法がありますか?
178. mysqlのパフォーマンスを最適化する方法は?

18. Redis

179. redisとは何ですか?使用シナリオは何ですか?
180. redisの機能は何ですか?
181. redisとmemecacheの違いは何ですか?
182.なぜredisはシングルスレッドなのですか?
183.キャッシュペネトレーションとは何ですか?それを解決するには?
184. Redisはどのデータ型をサポートしていますか?
185. redisがサポートするJavaクライアントは何ですか?
186. jedisとredissonの違いは何ですか?
187.キャッシュとデータベースデータの一貫性を確保する方法は?
188. redisはいくつの方法で持続できますか?
189. redisはどのように分散ロックを実装しますか?
190. redis分散ロックの欠点は何ですか?
191. redisはどのようにメモリを最適化しますか?
192. redis除去戦略とは何ですか?
193. redisの一般的なパフォーマンスの問題は何ですか?それを解決するには?

19、JVM

194. jvmの主なコンポーネントについて教えてください。そしてその役割は?
195. JVMランタイムデータ領域について教えてください。
196.スタックの違いについて教えてください。
197.キューとスタックとは何ですか?違いは何ですか?
198.親委任モデルとは何ですか?
199.クラスローディングのプロセスについて教えてください。
200.オブジェクトをリサイクルできるかどうかを判断するにはどうすればよいですか?
201.javaにはどのような参照型がありますか?
202. jvmのガベージコレクションアルゴリズムとは何ですか?
203. jvmのガベージコレクターを教えてください。
204. CMSガベージコレクターについて詳しく教えてください。
205.新世代のガベージコレクターと旧世代のガベージコレクターとは何ですか。違いは何ですか?
206.世代別ガベージコレクタの仕組みを簡単に説明してください。
207. jvmチューニングツールについて教えてください。
208.一般的に使用されるjvmチューニングパラメータは何ですか?


回答、公開アカウントの下のQRコードに従って、


おすすめ

転載: www.cnblogs.com/look-look/p/12738407.html