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