チャンスは常に準備された人にあると私は固く信じています。他の人の成功を羨むのではなく、この瞬間から十分な知識と面接経験を蓄積して、将来より良い会社に入るための完全な準備をする必要があります!
インタビュアーがたった数十分であなたの能力を認めて欲しいですか?Javaテクノロジスタックのコアナレッジポイントを最短時間で取得したいですか?Javaテクノロジーをより包括的かつ詳細に理解したいですか?この記事はあなたが望むすべての答えを与えます。
この記事では、次の知識を得ます。
- JavaとJvmの最も一般的なインタビューの質問の分析。
- Spring、Spring MVC、MyBatis、Hibernateインタビューの質問の分析。
- MySQLとRedisのインタビューの質問の分析。
- RabbitMQ、Kafka、Zookeeperのインタビュー分析。
- Microservice Spring BootおよびSpring Cloudインタビュー分析。
- Javaに関する完全なビデオチュートリアルと体系的な資料のセットを構築します。これには、Javaのコアナレッジポイント、インタビュートピック、20年間の最新のインターネットの実際の質問、電子書籍などが含まれます。
- 困っている友達は下のリンクをクリックして無料で入手できます!
リンク:1103806531パスワード:CSDN
JVMインタビューの質問
1. JVMとは何ですか?それは何をするためのものか?
JVMはJava Virtual Machine(Java Virtual Machine)の略で、その名前が示すとおり、仮想コンピュータであり、クロスプラットフォームJavaプログラムを実現するための基礎でもあります。その機能は、Javaプログラムをロードし、バイトコードをマシンコードに変換して、CPUによって実行される仮想計算機に引き渡すことです。
2. JVMの主なコンポーネントは何ですか?
JVMの主なコンポーネントは次のとおりです。
- ClassLoader(ClassLoader)
- 実行時データ領域
- 実行エンジン
- ネイティブインターフェイス
3. JVMはどのように機能しますか?
まず、プログラムを実行する前に、Javaコード(.java)をバイトコード(.class)に変換する必要があります。JVMはClassLoaderを介してバイトコードをメモリにロードしますが、バイトコードファイルはJVMの一部です。命令セット仕様のセットは、基盤となるオペレーティングシステムに直接引き渡して実行することはできません。したがって、特定のコマンドパーサー実行エンジン(実行エンジン)は、バイトコードを基盤となるマシンコードに変換してから、CPUに引き渡して実行する必要があります。CPU実行プロセスプログラム全体の操作を完了するには、ネイティブライブラリインターフェイス(ネイティブインターフェイス)を呼び出す必要があります。
4. JVMメモリレイアウトとは何ですか?
異なる仮想マシンの実装は少し異なる場合がありますが、それらはすべてJava仮想マシン仕様に準拠します。Java8仮想マシン仕様では、Java仮想マシンによって管理されるメモリには次の領域が含まれると規定されています。
- プログラムカウンターレジスタ
- Java仮想マシンスタック(Java仮想マシンスタック)
- ネイティブメソッドスタック(ネイティブメソッドスタック)
- Java((Javaヒープ)
- 方法領域(適合領域)
5. JVMガベージコレクション中にガベージを判別する方法は?GCルートとは何か知っていますか?
参照カウントと到達可能性分析を使用して、ごみを判別します。
(1)参照カウント方法:各オブジェクトに参照カウンターを追加します。参照カウンターが存在する場合は常にカウンターが1増加し、参照が無効な場合はカウンターが1減少します
カウンターが0の場合、オブジェクトはリサイクルできると見なされます(参照カウントメソッドは循環参照中にメモリリークを引き起こすため、このメソッドは現在Javaでは非推奨です)。
(2)到達可能性分析方法:「GC ROOT」オブジェクトを開始点として、これらのノードから参照オブジェクトを検索すると、見つかったオブジェクトはすべて非ジャンクオブジェクトとしてマークされ、残りのマークされていないオブジェクトはすべてガベージオブジェクトです。
Javaは、GC ROOTオブジェクトとして使用できます。仮想マシンスタックで参照されるオブジェクト、メソッド領域のクラス静的プロパティによって参照されるオブジェクト、メソッド領域で一般的に参照されるオブジェクト、およびローカルメソッドスタックのJNIによって参照されるオブジェクト。
GC ROOTルートノード:スレッドスタックのローカル変数、静的変数、ローカルメソッドスタックの変数など
6. JVMシリアルコレクション、パラレルコレクション、コンカレントコレクションの違いについて説明します。
スレッド実行ステータスからのガベージコレクタの分類には、3つのタイプがあります。
シリアルコレクション:シリアルコレクター、シングルスレッドコレクション、フルプロセスstw;シングルスレッドガベージコレクションの使用を指し、ガベージコレクション中には1つのスレッドのみが動作しており、Javaアプリケーションのすべてのスレッドが作業を一時停止し、ガベージコレクションの完了を待機する必要があります。この現象はSTW(stop-the-world)と呼ばれます。
短所:スレッドが1つしかなく、ガベージコレクションが実行されるとプログラムが長時間停止します。よりインタラクティブなアプリケーションの場合、このガベージコレクタは受け入れられません。
Parallelコレクション:名前がParallel、multi-threaded collection、full stwで始まるコレクターは、並行して動作する複数のガベージコレクションスレッドを参照しますが、ユーザースレッドはまだ待機しています。つまり、シリアルガベージコレクターに基づいて改善が行われ、シングルスレッドガベージコレクションがマルチスレッドガベージコレクションに変更されました。これにより、ガベージコレクション時間を短縮できます。ただし、並列ガベージコレクターも収集プロセス中にアプリケーションを一時停止します。これは、並列実行速度が速く、一時停止時間が短いことを除いて、シリアルガベージコレクターと同じです。
ガベージコレクションを実行する複数のスレッドはスループットシステムに適しており、システムはリサイクル中に同時実行性の高いプロジェクトの実行を停止します。
並行コレクション:cmsとG1、マルチスレッドコレクションの段階的、特定のステージのみがstwになります。
つまり、ユーザースレッドとガベージコレクションスレッドが同時に実行されます(ただし、必ずしも並列である必要はありません)、ユーザープログラムはミラーリングを継続しており、ガベージ収集プログラムは別のCPUで実行されます。
7. Javaでのメモリオーバーフローとメモリリークの違いについて説明します。
メモリリーク:プログラムがメモリに適用した後、適用したメモリ空間を解放できません。簡単に言えば、mallocまたはnewを使用してメモリの一部を適用しましたが、時間内にメモリを解放しなかったため、このメモリが占有されていました。メモリリークの影響は無視できますが、メモリリークの蓄積による影響は、メモリの量に関係なく、いつかは使用されても非常に深刻です。
メモリリークは4つのカテゴリに分類されます。
頻繁なメモリリーク:メモリリークがあるコードは複数回実行され、実行されるたびにメモリリークが発生します。
時折のメモリリーク:メモリリークは、特定の状況下または操作中にのみ発生します。頻繁なメモリリークとは逆で、特定の環境にいると、メモリリークが頻繁に発生する場合があります。したがって、テスト環境とテスト方法は、メモリリークの検出に不可欠です。
1回限りのメモリリーク:メモリリークのあるコードは1回だけ実行されます。アルゴリズムの欠陥により、常に1つまたは1つのメモリリークが発生します。たとえば、メモリはクラスのコンストラクタで割り当てられますが、メモリはデストラクタで解放されないため、メモリリークは1回だけ発生します。
暗黙的なメモリリーク:プログラムは実行中にメモリを割り当て続けますが、最後までメモリを解放しません。厳密には、要求されたすべてのメモリが最終的に解放されるため、メモリリークは発生しません。ただし、サーバープログラムの場合は、数日、数週間、場合によっては数か月にわたって実行する必要があり、時間内にメモリを解放できないと、システムのすべてのメモリを使い果たす可能性があります。したがって、このタイプのメモリリークを暗黙的なメモリリークと呼びます。
メモリオーバーフロー:プログラムがメモリを要求しているときに、使用するための十分なメモリ領域がないため、outofmemoryが表示されます。簡単に言うと、10バイトのスペースを申請しました
が、このスペースに11バイト以上のデータを書き込むと、オーバーフローが発生します。
スペースが限られているため、ここには一部しか表示されていません。困っている友達は下のリンクをクリックして無料で入手できます。
リンク:1103806531パスワード:CSDN
面接経験の共有-面接で際立つ方法
- インタビューに参加する前に、使用するプログラミング言語を確認し、最高のコードを入手する必要があります。コードを書くことは、プログラム設計の面接プロセスのハイライトであるため、仕事をする能力があることを示す機会です。プログラミングインタビューの質問に答える際のパフォーマンスは、ほとんどのコンピューター会社やソフトウェア会社が誰かを雇うかどうかを決定するための最も重要な基準の1つです。プログラムの実際のインタビューの質問は通常、かなり難しいものです。プログラミング面接の質問は、一方では、コードを書く能力をテストすることであり、他方では、問題を分析して解決する能力をテストすることです。ほとんどの面接の質問は基本的に回答を得るのに1時間かかるため、面接の質問に対する回答がすぐに見つからないのが普通ですが、これに落胆しないでください。
- また、理解する前に質問に答えないでください。例から始めると、質問の理解をさらに深めることができます。記述した後、記述したコードを検証する例を見つけ、コードがさまざまなエラー条件や特殊なケースを考慮しているかどうかを確認します。
- ほとんどの技術面接には、技術以外の質問がいくつかあります。これらの質問は通常、面接プロセス全体の初期段階に表示されます。目的は、職務経験と就職活動の目標を決定し、職位の資格があるかどうかを確認することです。
- 非技術的な問題は比較的単純であるように見えます。特に、厳しい技術テストをすでに突破している場合はそうです。しかし、技術以外の問題も非常に重要であり、軽視してはなりません。
- 最後に、審査官は通常、あなたに返信する時間を伝えますが、応答がない場合もあります。求職者の場合は、面接後1週間以内に審査官に連絡するか、電話またはメールで連絡し、感謝の意を表し、面接の結果について尋ねることをお勧めします。もちろん、この仕事に対する熱意を表すことができます。多くの人々はこのリンクを無視します。面接後、会社は一部の応募者を失う可能性があります。良い始まりと良い終わりは大きな機会をもたらすかもしれません。
- すべての面接が順調に進んでいるわけではありません。一度失敗した場合は、この面接の経験と教訓を要約することに注意を払う必要があります。これにより、将来の就職のために莫大な財産を節約できます。一生懸命働く求職者は誰でも彼の好きな仕事に勝つと信じています。
やっと
この記事が皆様のお役に立てば幸いです。
また、Javaのコアナレッジポイント、インタビュートピック、最新の20年間のインターネットの実際の質問や電子書籍など、Javaに関する建築家および体系的な資料のビデオチュートリアルの完全なセットをまとめました。
困っている友達は下のリンクをクリックして無料で入手できます!
リンク:1103806531パスワード:CSDN