ホームページ  >  記事  >  Java  >  Java の典型的な面接の質問の要約

Java の典型的な面接の質問の要約

零下一度
零下一度オリジナル
2017-06-25 10:54:401007ブラウズ

面接は私たち全員が経験しなければならないものであり、ほとんどの人が複数回受けます。ここでは、誰もが半分の労力で 2 倍の結果を得ることができるように、2016 年の最新の面接の質問をまとめています。仕事。

1. Switch はパラメータとして文字列を使用できますか?

a. Java 7 より前では、switch は byte、short、char、int、またはそれらに対応するカプセル化クラスと Enum 型のみをサポートしていました。 JAVA 7 では、文字列のサポートが追加されました。

2. 等しいと == の違い:

a.== は、2 つの変数またはインスタンスが同じメモリ空間を指しているかどうかを判断することです。変数やインスタンスは同じです

3.Object の public メソッドとは何ですか?

a. メソッド equals は、2 つのオブジェクトが等しいかどうかをテストします
b. メソッド clone は、現在のオブジェクトに関連する Class オブジェクトを返します
d. メソッドは、notify、notifyall、および wait をすべて返します。

4. Java の 4 種類の参照 (強参照と弱参照) を使用するシナリオ

a. OOM の問題を解決するためにソフト参照と弱参照を使用する: 画像のパスと対応する画像のマッピングを保存するために HashMap を使用するメモリが不足している場合、JVM はこれらのキャッシュされた画像オブジェクトによって占有されているスペースを自動的に再利用するため、OOM の問題を効果的に回避します

b. ソフトでアクセス可能なオブジェクトの取得方法であるオブジェクト キャッシュを使用して Java を実装します。 : たとえば、従業員の情報を毎回クエリする必要がある場合に、Employee クラスを作成する場合です。たとえほんの数秒前にクエリされたとしても、インスタンスを再構築する必要があり、これには多くの時間がかかります。ソフト参照と HashMap を組み合わせることができます。まず、参照を保存します。従業員オブジェクトのインスタンスをソフト参照の形式で参照し、その参照を HashMap に保存します。キーは従業員の ID で、値はそのソフト参照です。一方、このオブジェクトは、参照を取り出して、キャッシュ内に Employee インスタンスへのソフト参照があるかどうかを確認し、存在する場合はソフト参照から取得します。ソフト参照がない場合、またはソフト参照から取得したインスタンスが null の場合は、インスタンスを再構築し、この新しく作成されたインスタンスにソフト参照を保存します
c. オブジェクトに強参照がある場合、それはガベージにはなりません。回収されたデバイスのリサイクル。現在のメモリ空間が不十分な場合でも、JVM はメモリ空間を再利用せず、OutOfMemoryError エラーをスローし、プログラムが異常終了します。強い参照とオブジェクトの間の関連付けを解除したい場合は、JVM が適切なタイミングでオブジェクトをリサイクルできるように、参照を明示的に割り当てることができます
d ソフト参照を使用する場合 (存在する場合)。十分なメモリ領域がある場合、ソフト参照はガベージ コレクターによってリサイクルされずに引き続き使用できます。メモリが不足している場合にのみ、ソフト参照はガベージ コレクターによってリサイクルされます。
e. 弱い参照: 弱い参照を持つオブジェクトのライフサイクルは短くなります。これは、JVM がガベージ コレクションを実行するときに、弱参照オブジェクトが見つかると、現在のメモリ領域が十分であるかどうかに関係なく、その弱参照がリサイクルされるためです。ただし、ガベージ コレクターは優先度の低いスレッドであるため、弱い参照オブジェクトをすぐに見つけることができない可能性があります
f. 仮想参照: 名前が示すように、オブジェクトが仮想参照のみを保持している場合、それは名前だけです。その場合、参照がないことと同じになり、いつでもガベージ コレクターによって収集される可能性があります。
g. 使用シナリオ:

5. ハッシュコードと等しいの違いは何ですか?

a. Java コレクションには list と set の 2 種類があります。要素の繰り返しを許可しない実装。比較にequalを使用する場合、要素が1000個あり、新しい要素を作成すると、それらを1つずつ比較するためにequalを1000回呼び出す必要があります。それらが同じオブジェクトであるかどうかを確認するため、効率が大幅に低下します。ハッシュコードは実際にはオブジェクトの格納アドレスを返します。この位置に要素が存在しない場合、その要素はそのすぐ上に格納されます。要素がすでに存在する場合は、新しい要素と比較するために、equal メソッドが呼び出されます。同じであれば、他のアドレスに保存したりハッシュしたりすることはありません

6. String、StringBuffer、StringBuilder の違い

a.String 型と StringBuffer 型の主なパフォーマンスの違いは、実際には String が不変オブジェクトであることです

b.StringBuffer と StringBuilder は char の基礎となる [] 配列実装です
c.StringBuffer はスレッドセーフですが、StringBuilder はスレッドアンセーフです

7 オーバーライドとオーバーロードの意味を区別します

a.Overload は、名前が示すように、クラスのポリモーフィズムを表現できるリロードでは、関数の名前は同じであってもパラメータ名、戻り値、型を同じにすることはできない、またはパラメータ、型、戻り値を変更することができます。ただし、関数名は変更されません。

b. サブクラスが親クラスを継承する場合、サブクラスがこの関数を呼び出すと、そのサブクラスのメソッドが自動的に呼び出されます。 、親クラスはオーバーライドされる (オーバーライドされる) ことと同等です。

8. 抽象クラスとインターフェイスの違い

a. クラスは 1 つのクラスのみを継承できますが、複数のインターフェイスを実装できます

b. インターフェイスは特定の関数の実装を重視しますが、抽象クラスは所有権関係を重視します
c.抽象クラス すべてのメソッドが抽象である必要はありません。抽象クラスでいくつかの基本メソッドを実装することを選択できます。インターフェイスでは、すべてのメソッドが抽象である必要があります

9. XML を解析するいくつかの方法の原理と特徴: DOM、SAX、PULL

a.DOM: メモリ消費: 最初にすべての XML ドキュメントをメモリに読み取り、次に DOM API を使用してツリー構造にアクセスし、データを取得します。これは非常に簡単に記述できますが、大量のメモリを消費します。データが大きすぎて携帯電話の性能が十分でない場合、携帯電話が直接クラッシュする可能性があります
b.SAX: 高い解析効率、少ないメモリ使用量、イベント駆動型: より簡単に言うと、文書を順次スキャンし、文書がスキャンされた イベント処理関数は、開始と終了、要素の開始と終了、ドキュメントの終了などで通知されます。イベント処理関数は対応するアクションを実行し、ドキュメントの終了まで同じスキャンを継続します。 。
c.SAX: SAX と同様に、イベント駆動型でもあり、次の解析イベント (つまり、開始ドキュメント、終了ドキュメント、開始タグ、終了タグ) を取得するために next() メソッドを呼び出すことができます。特定の要素で XmlPullParser の getAttributte() メソッドを呼び出して属性の値を取得するか、その nextText() を呼び出してこのノードの値を取得できます。

10. wait() と sleep() の違いは

sleep は Thread クラスに由来し、wait は Object クラスに由来します
sleep() メソッドの呼び出し中、スレッドはオブジェクトのロックを解放しません。 wait メソッドを呼び出すスレッドはオブジェクトのロックを解放します
Sleep はスリープ後にシステム リソースを放棄しません。Wait はシステム リソースを放棄し、他のスレッドが CPU を占有する可能性があります
sleep(ミリ秒) はスリープ時間を指定する必要があります。時間になると自動的に起動します

11.JAVA ヒープとスタックの違い、Java のメモリメカニズムについて話しましょう

a. 基本的なデータ型、変数、オブジェクト参照はすべてスタック上に割り当てられます
b。 new
c. クラス変数 (static によって変更された変数) を格納するために使用され、プログラムはロードされるとすぐにクラス変数にメモリを割り当て、ヒープ内のメモリ アドレスはstack
d. インスタンス変数: Java キーワード new を使用すると、システムは、必ずしも連続的ではないヒープ内の変数にスペースを割り当てます。これは、分散されたヒープ メモリ アドレスに基づいて、ハッシュを通じて長い一連の数値に変換されます。ヒープ内の変数の「物理的な位置」を表すアルゴリズム。 インスタンス変数のライフサイクル - インスタンス変数への参照が失われると、そのインスタンス変数は GC (ガベージ コレクター) によって再利用可能な「リスト」に含められます。ヒープ内のメモリはすぐには解放されません
e. ローカル変数: メソッド内で宣言されるか、特定のコード セグメント (for ループなど) で実行されると、メモリがスタック上に割り当てられます。変数がスコープ外になると、メモリはすぐに解放されます

12. JAVA ポリモーフィズムの実装原理

a. 概要 一般に、ポリモーフィズムとは、同じメッセージが受信者に応じてさまざまな方法で動作することを意味します。 (メッセージの送信は関数呼び出しです)
b. 実装の原則は、プログラムによって呼び出されるメソッドが実行時に動的にバインドされ、JVM がパラメーターの自動変換を通じて適切なメソッドを見つけることができます。 。

13.JAVA ガベージ コレクション メカニズム

a. マークのリサイクル方法: 到達不可能なオブジェクトを削除するために、オブジェクト グラフを走査し、到達可能なオブジェクトを記録します。一般に、単一スレッド作業が使用され、メモリの断片化が発生する可能性があります。方法: 初期段階は最初の方法と同じですが、もう 1 つのステップにより、生き残ったすべてのオブジェクトがメモリの一端に圧縮されるため、メモリの断片を大きな再利用可能なメモリ領域に結合でき、メモリ使用率が向上します。
c. コピーのリサイクル方法: 既存のメモリ空間を 2 つの部分に分割し、gc の実行中に、到達可能なオブジェクトを残りの半分の空間にコピーし、使用されている空間内のすべてのオブジェクトをクリアします。この方法は、存続期間の短いオブジェクトに適しています。存続期間の長いオブジェクトを継続的にコピーすると、効率が低下します。
d. 世代別リサイクル: メモリ空間を若い世代と古い世代などの 2 つ以上の領域に分割します。若い世代の特徴はオブジェクトがすぐにリサイクルされるため、若い世代ではより効率的なアルゴリズムが使用されます。世代。オブジェクトが数回リサイクルされてもまだ残っている場合、そのオブジェクトは古い世代と呼ばれるメモリ空間に置かれ、古い世代はマーク圧縮アルゴリズム
e を採用します (最も単純で最も古い方法): リソースを指します。 (オブジェクト、メモリ、ディスク領域などへの参照の数を保存し、参照の数がゼロになったときに解放するプロセスです
f。オブジェクト参照トラバーサル (現在、ほとんどの JVM で使用されている方法):オブジェクト参照トラバーサル オブジェクトのセットから開始して、オブジェクト グラフ全体の各リンクに沿って到達可能なオブジェクトを再帰的に決定します。これらのルート オブジェクトの 1 つ (少なくとも 1 つ) からオブジェクトに到達できない場合、そのオブジェクトはガベージ
g として収集されます。ガベージ コレクターとは: 参照を保持しなくなったオブジェクトのメモリを解放します
h。集める必要がありますか?
i. いくつかのガベージ コレクション メカニズム

14. Java には何種類のコレクションがあり、その違いは何ですか?

a.HashTable は古いもので、Dictionary クラスに基づいて実装されていますが、HashTable は Map インターフェイスに基づいて実装されていますが、
b.HashTable はスレッドセーフですが、HashMap は null を扱うことができます。テーブルエントリのキーまたは値
d. ArrayList、LinkedList、Vector の違い: ArrayList と Vector は配列を使用して下部にデータを保存するため、そのパフォーマンスが向上します。 LinkedList は ArrayList よりも劣っており、双方向の Linked List はストレージを実装しており、ランダム アクセスは比較的遅いです
e。キーを取得し、ハッシュ値 ( (つまり添え字) に基づいて配列内の要素の位置を取得します。配列内のこの位置に他の要素が格納されている場合、この位置の要素は の形式で格納されます。リンクされたリスト。新しく追加された要素はチェーンの先頭に配置され、最初に追加された要素はチェーンの最後に配置されます。配列内のその位置に要素がない場合、要素は配列内のその位置に直接配置されます。
f.Fail-Fast メカニズム: イテレーターの使用中に他のスレッドがマップを変更すると、ConcurrentModificationException がスローされます。これはいわゆるフェイルファスト メカニズムです。このメカニズムは、modCount フィールドを介してソース コードに実装されます。modCount は、名前が示すように、HashMap コンテンツを変更すると、この値がイテレーターの ExpectedModCount に割り当てられます。イテレータの初期化プロセス。反復プロセス中に、modCount と ExpectedModCount が等しいかどうかを確認します。等しくない場合は、他のスレッドが Map.
g を変更したことを意味します。HashMap と HashTable の違い。

Javaを学習中の学生の皆様、ご注意ください! ! !

以上がJava の典型的な面接の質問の要約の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。