1。質問:AおよびBオブジェクトが循環的に参照されている場合、それらはGCになりますか?
回答:はい、仮想マシン今日の仮想マシンは、基本的にアクセシビリティ分析アルゴリズムを使用して、オブジェクトのカウントを参照するのではなく、オブジェクトが生き残るかどうかを判断します。アクセシビリティ分析アルゴリズムは、一連の「GCルーツ」オブジェクト(仮想マシンスタックで参照されるオブジェクト、静的属性参照オブジェクト)を開始点として使用します。これらのノードが下に検索するパスは、参照チェーンと呼ばれます。オブジェクトにGCルーツへの参照チェーン接続がない場合、オブジェクトはオブジェクトが利用できないことを証明します。
2。Javaのメモリオーバーフローはどのように引き起こされますか?
outofmemoryerror:
(1)Pergern Spaceプログラムは、多数の瓶またはクラスを使用しているため、Java Virtual Machineがクラススペースをロードしないようにします。
解決策:パラメーターを調整しますXX:PermsizeとXX:MaxPermsize、JARパッケージを減らし、クラスの重複負荷を減らします。
(2)JavaヒープスペースJava仮想マシンは、あまりにも多くのオブジェクトを作成します。
解決策:パラメーターXMS(初期ヒープサイズ)XMX(最大ヒープサイズ)を調整し、デッドループまたは不必要な重複オブジェクトを確認します
(3)JVMがメモリスペースを取り上げすぎる新しいネイティブスレッドを作成できず、JVMにスレッドを作成するには、オペレーティングシステムにスレッドを作成する必要があります。
解決策:JVMのスレッドのサイズ変更。
3。文字列s = "123";このステートメントでは、いくつのオブジェクトが生成されますか?
文字列プールに「123」がない場合、オブジェクトが生成され、定数プールに配置されます。 「123」がある場合、0のオブジェクトが生成されます。
String s = new String("123")の場合、定数プールに存在しない場合は、定数プールにそれを作成してから、ヒープメモリに作成します。
4.エラー、例外、runtimeexceptionの違いは何ですか?
エラーと例外は両方ともスロー可能なサブクラスであり、RuntimeExceptionは例外のサブクラスです。
エラーは、合理的なアプリケーションがエラーをキャッチしようとすべきではないことを示すために使用されます。
例外は、合理的なアプリケーションがキャプチャする必要がある条件を指摘しています。これは、チェックされた例外と未確認の例外に分かれています。
runtimeexceptionは、チェックされていない例外であり、メソッドでキャッチまたは宣言されたことを試す必要はありません。メインサブクラス:nullpointer、算術、arrayindexoutofbounds、classcast。
5.読者とinputstreamの違いは何ですか?
これらはすべて抽象クラスであり、読者は文字ストリーム(charまたは文字列)の読み取りに使用され、inputstreamはバイトストリーム(バイト配列)を読むために使用されます。
6.ハッシュコードの役割は何ですか?
ハッシュコードは、主にハッシュマップ構造などの迅速な検索に使用されます。これは、キー価値ペアの位置を見つけるために使用されます。 2つのオブジェクトが同じ場合、ハッシュコードは同じでなければなりませんが、同じハッシュコードを持つハッシュコードオブジェクトは同じではない場合があります。これは同じボックスに入れるのと同等です。
7.ハッシュマップとハッシュテーブルの違いは何ですか?
スレッドの安全性、ヌル値キー、効率、ハッシュマップ(イテレータ高速故障反復因子)、ハッシュテーブル(列挙者のイテレーター)、およびハッシュマップ要素の位置は時間の経過とともに変化します
8。ハッシュマップのオブジェクトはキーとして使用できますか?キーとしてユーザー定義のオブジェクトに要件はありますか?
はい。しかし、重要なオブジェクトは不変のオブジェクトでなければなりません。それ以外の場合、エントリがマップに挿入された後、キー値を変更すると、現在のキー値がハッシュ値と矛盾します。つまり、配列インデックスと一致せず、見つかりません。
9。run()またはstart()を使用してスレッドを起動する必要がありますか?
マルチスレッドにおける同期と同時性の問題を解決する方法は?デーモンスレッドとは何ですか?デーモンスレッドとは何ですか?デーモンスレッド(thread.setdeamon()の意味)を実装する方法は何ですか?スレッドを停止する方法は何ですか?スレッドの安全性とは何ですか?スレッドの不安定な例を挙げてください。同期されたキーワードの役割を説明します。スレッドがオブジェクトの同期されたメソッドを入力すると、他のスレッドがこのオブジェクトの他のメソッドを入力できますか?
(1)開始
(2)スレッドクラスを継承し、実行可能なインターフェイスを実装し、exectuorservice、future、およびcallableを使用して、値を返すスレッドを実装します。
(3)同期方法、同期コードブロック、ロック
(4)デイモンスレッドは、GCやスレッドなどの他のスレッドの操作のためのサービスを提供します。 Setdeamon(True)。
(5)thread.stop()は推奨されません(リソースは正しくリリースされません)、割り込みはスレッドを停止するために使用されます。
(6)複数のスレッドがオブジェクトにアクセスする場合、ランタイム環境でこれらのスレッドのスケジューリングと交互の実行が必要ない場合、追加の同期は必要ありません。または、発信者に対して他の調整操作が実行され、このオブジェクトを呼び出すことで正しい結果を取得できます。
(7)チケットは繰り返し販売されています。
(8)キーワードを同期します。静的メソッドを変更すると、クラスはロックオブジェクトとして使用され、この種の同期静的方法にアクセスできるスレッドのみが1つのスレッドのみです。通常の方法を変更するとき、オブジェクトはロックオブジェクトとして使用され、この種の同期通常の方法にアクセスできるスレッドのみが1つのスレッドのみです。ロックオブジェクト同期コードブロックをカスタマイズすることもできます。
(9)同期されたメソッドを入力することはできず、非同期に入力することができます。
10. JDK8のどの新機能を学び、対応する機能を例で説明しましたか?
(1)ラムダの表現:機能プログラミング、メソッドリファレンス
(2)Stream API
(3)インターフェイスのデフォルトの方法
(4)日付と時刻のAPIの改善、DateTimeFormatterメソッドの追加
11. SQLを最適化するための原則は何ですか?
詳細については、私のデータベース分類のブログをご覧ください
12.サーブレットのライフサイクルにおけるSerlvetとCGIの違いは何ですか?
ライフサイクル:クラスの読み込み、インスタンス化(オブジェクトの構築)、初期化(init)、サービス(サービス)、および破壊。
CGI:Perl言語で記述されたCommon Gatewayインターフェイス、Common Gatewayインターフェイスは、各リクエストにCGIオブジェクトを作成します。
サーブレット:インスタンス化と初期化のみが1回必要で、マルチスレッドが必要です。
13. StringBufferの利点は何ですか?なぜ速いのですか?
StringBufferは文字列オブジェクトの繰り返しの作成を必要としないため、そうではありません。
たとえば、string s = "a" + "b" + "c"操作コンパイラは最適化し、string s = "abc"になります
文字列s = s1 + s2 + s3コンパイラも最適化され、stringbuilderの追加操作になります。ただし、一度にスプライスされていない場合、操作では、文字列オブジェクトとstringbuilderオブジェクトが繰り返し生成され、非常に低くなります。
14.暗号化と復号化アルゴリズムを理解していますか?
抽象アルゴリズム:MD5(128ビット)、SHA1(160ビット)は、不可逆的なプロセスです。データの大きさに関係なく、同じ長さのデータがダイジェストアルゴリズムの後に生成されます。辞書を通してのみひび割れます。
対称暗号化アルゴリズム:DES、AES、暗号化と復号化時に同じ秘密キーが使用されます。
非対称暗号化アルゴリズム:RSAは、暗号化と復号化時に異なる秘密キーを使用し、Alipayに接続するときにRSA2を使用します。
15.高い並行性と高負荷を解決しますか?
(1)静的ページの消費は最小限であり、HTMLは可能な限り静的であり、情報公開システムCMSを使用して、情報入力で静的ページを自動的に生成し、フロントエンドでは頻繁に変更されない動的データをキャッシュします。
(2)CDN、さまざまなサーバー上のCSS/JSなどのリソースを配布します。
(3)負荷分散(nginx)。
(4)頻繁に変更されないキャッシュデータ(Redis、Memcache)。
(5)画像サーバーはアプリケーションサーバーから分離されています。
(6)クラスター。
16.整数内部キャッシュ?
整数クラス内に静的整数配列があり、初期化された整数オブジェクトを保存します。一般的な値は(-128〜127)です。 ==比較を使用する場合、値がキャッシュにないためにfalseが返される場合があるため、Equalsを使用して比較する必要があります。
17. ArrayListの原則は何ですか?
(1)ArrayListはスレッドインセクターです。スレッドセーフが必要な場合は、CopyOnWriteListを使用してください。
(2)下層はオブジェクト[]配列であり、内部の配列を指す要素Data参照があります。最初は、デフォルトでキャッシュされた空のアレイ(過渡)を指します。拡張したい場合、1.5倍(x +(x >> 1))のサイズの新しい配列が反応し、古い要素がSystem.arraycopyネイティブメソッドを介して新しい配列にコピーされます。
(3)ランダム読み取りと書き込み(GET、SET)メソッドのアルゴリズムの複雑さはO(1)です。
(4)追加操作には2つのタイプがあります。 ADD(インデックス、値)のアルゴリズムの複雑さはO(n)です。これは、要素のコピーを介して移動する必要があるためです。 ADD(値)操作のアルゴリズムの複雑さはO(1)です(拡張が発生しない場合)。
(5)削除操作の時間の複雑さはo(n)です。これは、インデックスまたはオブジェクトに従って削除されているかどうかにかかわらず、コピーを通じて移動操作を実装する必要があるためです。削除後、配列のサイズは変更されず、長さはサイズ属性によって維持されます。オブジェクトでオブジェクトを削除する場合、新しいオブジェクトを使用することはできません。 ArrayListのオブジェクトへの参照を使用してそれらを削除する必要があります。
18. LinkedListの原則は何ですか?
(1)基礎となる層は、双方向リンクリストであり、最初のポインターと最後のポインターを維持します。
(2)ランダム読み取りと書き込みの時間の複雑さ(get、set)はo(n)です。
(3)挿入操作の時間の複雑さ(オブジェクト)はO(1)です。 add(index、object)の時間の複雑さはo(n)です。
(4)削除操作削除(オブジェクト)の時間の複雑さはO(1)です。除去(インデックス)の時間の複雑さはO(n)です。
19。スレッドプールを使用するときに注意すべきことは?
(1)デッドロックを防ぐ。スレッドプールのすべてのスレッドはイベントAが発生するのを待っており、Aを実行する無料のスレッドはありません。
(2)システムリソースが不十分な防止。スレッドの数を制御します。
(3)同時エラーを防止します。
(4)糸の漏れを防ぎます。 runtimeexceptionまたはエラーが正常にキャッチされていないため、スレッドは異常に終了し、スレッドプールはスレッドを失います。
(5)タスクの過負荷を避けます。
20。春の@Autowireと@Resourceの違いは何ですか?
@Autowireは、デフォルトでTypeごとに組み立てられます。デフォルトでは、依存関係オブジェクトが存在する必要があります。 nullが許可されている場合、それはfalseに設定できます。名前で組み立てられたい場合は、 @qualifierアノテーションと組み合わせて使用できます。
@Resourceはデフォルトで名前で組み立てられます。名前に一致する豆が見つからない場合、タイプに従って組み立てられます。名前属性を介して指定できます。名前属性が指定されていない場合、注釈がフィールドに注釈が付けられている場合、フィールドの名前はデフォルトでbean名として依存関係オブジェクトを見つけます。アノテーションが属性のセッターメソッドにマークされている場合、属性名はデフォルトでbean名として使用され、依存関係オブジェクトを見つけます。
21.スレッド状態転送図。
22。オブジェクトクラスの方法?
(1)等しい:それが等しいかどうかを判断します。
(2)ハッシュコード:ハッシュ値を見つけます。 2つのオブジェクトのハッシュ値が等しい場合、等しくない場合があります。等しい場合、2つのオブジェクトのハッシュ値は等しくなければなりません。
(3)toString:オブジェクトの文字列式形式を取得します。これは一般に書き換えられます。
(4)getClass:反射方法オブジェクトが属するクラスを取得します。
(5)待機:同期コードセグメントでのみ使用できます。時間パラメーターが含まれていない場合、実行するスレッドはロックを放棄し、待機状態(待機プール)に入ります。
(6)Notify:同期コードセグメントでのみ使用し、待機中のプールからスレッドを取り出し、ロックフラグプールに入れます。
(7)NotifyAll:同期コードセグメントでのみ使用でき、すべてのスレッドは待機中のプールから取り出され、ロックフラグプールに入れられます。
23. Javaのシリアル化の根本的な原則?
オブジェクト情報をbytecode情報に変換します。
(1)シリアル化の説明を保存します。 (2)現在のクラスの説明情報。 (3)現在のクラス属性の説明。 (4)スーパークラスの説明(5)スーパークラス属性説明(6)スーパークラス属性値説明(7)サブクラス属性値説明