ホームページ  >  記事  >  Java  >  Java の基本的な面接の質問 (4)

Java の基本的な面接の質問 (4)

(*-*)浩
(*-*)浩オリジナル
2019-12-04 15:04:052617ブラウズ

Java の基本的な面接の質問 (4)

a.hashCode() の用途は何ですか? a.equals(b) と何の関係があるのでしょうか?

hashCode() メソッドは、オブジェクトの整数型のハッシュ値に対応します。これは、Hashtable、HashMap、LinkedHashMap などのハッシュベースのコレクション クラスでよく使用されます。特に、equals() メソッドと密接に関連しています。 Java 仕様によれば、equal() メソッドを使用して等しい 2 つのオブジェクトは、同じハッシュ コードを持つ必要があります。

バイト ストリームと文字ストリームの違い (推奨学習: Java インタビューの質問)

バイナリ データを 1 つずつ出力するには特定のデバイスにデータを送信したり、デバイスからバイナリ データを 1 つずつ読み取ったりする場合、入出力デバイスが何であっても、これらの操作を完了するには統一された方法を使用する必要があります。

抽象的な方法で記述します。この抽象記述メソッドは IO ストリームという名前です。対応する抽象クラスは OutputStream と InputStream です。異なる実装クラスは異なる入力デバイスと出力デバイスを表します。これらはバイトで動作します。

コンピュータ内のすべてのものは、最終的にはバイナリ バイト形式で存在します。頻繁に使用される漢字の場合は、まず対応するバイトを取得してから、そのバイトを出力ストリームに書き込みます。

読み取り時、最初に読み込まれるのはバイトですが、文字として表示したい場合はバイトを文字に変換する必要があります。このようなニーズは広範囲に及ぶため、Java は特別に文字ストリーム ラッパー クラスを提供します。

基盤となるデバイスは常にバイト データのみを受け入れます。基盤となるデバイスに文字列を書き込みたい場合は、書き込む前に文字列をバイトに変換する必要がある場合があります。文字ストリームはバイト ストリームのラッパーです。文字ストリームは文字列を直接受け入れます。文字列を内部でバイトに変換し、基礎となるデバイスに書き込みます。これにより、文字列をバイト ストリームに書き込んだり読み込んだりするための情報が少し提供されます。 IOデバイス便利です。

文字をバイトに変換するときは、エンコードの問題に注意してください。文字列をバイト配列に変換すると、実際には文字の特定のエンコードされたバイト形式に変換され、読み取り時にはその逆が当てはまります。

Java シリアル化とは何ですか?また、Java シリアル化を実装する方法は何ですか?または、Serializable インターフェイスの役割を説明してください。

Java オブジェクトをバイト ストリームに転送したり、バイト ストリームから Java オブジェクトに復元したりすることがあります。たとえば、Java オブジェクトをハードディスクに保存するか、For に転送する必要があります。このプロセスでは、Java オブジェクトを特定の形式のバイト ストリームに変換して送信する独自​​のコードを作成できます。

ただし、jre 自体がこのサポートを提供します。これを行うには、OutputStream の writeObject メソッドを呼び出すことができます。Java にそれを行わせたい場合は、送信されるオブジェクトはシリアル化可能なインターフェイスを実装する必要があります。この方法では、 , javac のコンパイル時に、コンパイルしたクラスを writeObject メソッドで操作できるように特別な処理が行われます。これをシリアル化といいます。

シリアル化する必要があるクラスは、Serializable インターフェイスを実装する必要があります。このインターフェイスは、メソッドを実装する必要がないミニ インターフェイスです。Serializable の実装は、オブジェクトがシリアル化できることを示すためだけです。

たとえば、Web 開発では、オブジェクトがセッションに保存されている場合、Tomcat は再起動時にセッション オブジェクトをハードディスクにシリアル化する必要があり、このオブジェクトは Serializable インターフェイスを実装する必要があります。オブジェクトが分散システムを介してネットワーク上で送信される場合、送信されるオブジェクトは Serializable インターフェイスを実装する必要があります。

JVM がクラス ファイルをロードする原理的なメカニズムについて説明しますか?

JVM でのクラスのロードは、ClassLoader とそのサブクラスによって実装されます。Java ClassLoader は重要な Java ランタイム システムです。コンポーネント。実行時にクラス ファイルからクラスを検索してロードする役割を果たします。

ヒープとスタックの違いは何ですか。

Java のメモリは 2 つのカテゴリに分類され、1 つはスタック メモリ、もう 1 つはヒープ メモリです。スタック メモリとは、プログラムがメソッドに入るときに、このメソッド内のローカル変数を保存するためにプライベート ストレージ スペースがこのメソッドに割り当てられることを意味します。このメソッドが終了すると、このメソッドに割り当てられたスタックが解放されます。変数も解放されます。それに応じて。

ヒープは、スタックとは異なる機能を持つメモリであり、通常、現在のメソッド スタックにないデータを格納するために使用されます。

たとえば、new を使用して作成されたオブジェクトはヒープ上に配置されるため、メソッドが終了しても消えることはありません。メソッド内のローカル変数が Final で変更されると、それらはスタックではなくヒープに配置されます。

GC とは何ですか?なぜ GC があるのですか?

GC とは、ガベージ コレクション (Gabage Collection) を意味します。メモリ処理は、プログラマが問題を起こしやすい場所です。メモリの忘れまたは不正なメモリリサイクルすると、プログラムやシステムが不安定になったり、クラッシュしたりする可能性があります。

Java が提供する GC 関数は、オブジェクトがスコープを超えているかどうかを自動的に検出してメモリを自動的に解放する目的を達成できますが、Java 言語には割り当てられたメモリを解放するための表示操作メソッドがありません。

ガベージ コレクションの利点と原則。そして2つのリサイクルメカニズムを考えてみましょう。

Java 言語の注目すべき機能は、C プログラマにとって最も厄介なメモリ管理問題を解決するガベージ コレクション メカニズムの導入です。これにより、Java プログラマはプログラムを作成するときにメモリ管理を考慮する必要がなくなります。ガベージ コレクション メカニズムにより、Java のオブジェクトには「スコープ」の概念がなくなり、オブジェクトへの参照のみが「スコープ」を持ちます。

ガベージ コレクションは、メモリ リークを効果的に防止し、利用可能なメモリを効果的に使用できます。

ガベージ コレクターは、通常、別個の低レベル スレッドとして実行されます。予期せぬ状況下で、メモリ ヒープ内の死んだオブジェクトや長期間使用されなかったオブジェクトをクリアしてリサイクルします。プログラマは実際にはこれを実行できませんガベージ コレクターを呼び出して、オブジェクトまたはすべてのオブジェクトをガベージ コレクションします。

リサイクル メカニズムには、世代別コピー ガベージ コレクション、マーク付きガベージ コレクション、および増分ガベージ コレクションが含まれます。

ガベージ コレクターの基本原理は何ですか?ガベージ コレクターはメモリをすぐに再利用できますか?ガベージ コレクションを実行するように仮想マシンに積極的に通知する方法はありますか?

GC の場合、プログラマがオブジェクトを作成すると、GC はオブジェクトのアドレス、サイズ、使用状況の監視を開始します。通常、GC は有向グラフを使用して、ヒープ内のすべてのオブジェクトを記録および管理します。

このようにして、どのオブジェクトが「到達可能」でどのオブジェクトが「到達不能」であるかを判断します。一部のオブジェクトが「到達不能」であると GC が判断した場合、GC はこれらのメモリ空間を再利用する責任があります。

プログラマは System.gc() を手動で実行して GC の実行を通知できますが、Java 言語仕様では GC が実行されることは保証されていません。

Java では、throw と throws の違いは何ですか。

throw は、java.lang.Throwable クラスのインスタンス化されたオブジェクトをスローするために使用されます。 can pass キーワード throw は、次のような例外をスローします:

throw new IllegalArgumentException(“XXXXXXXXX″)

throws の役割は、メソッド宣言とシグネチャの一部としてあり、呼び出し元が処理できるように、メソッドは対応する例外をスローします。 Java では、未処理のチェック例外はスロー句で強制的に宣言されます。

Java にメモリ リークはありますか? 簡単に説明してください。

まず、メモリ リークとは何かについて説明します。いわゆるメモリ リークとは、プログラムで使用されなくなったオブジェクトまたは変数がメモリ内で占有されていることを意味します。 Java にはガベージ コレクション メカニズムがあり、オブジェクトが参照されなくなった場合、オブジェクトはガベージ コレクタによってメモリから自動的にクリアされます。

Java はガベージ コレクション管理に有向グラフを使用するため、参照サイクルの問題を排除できます。たとえば、相互に参照する 2 つのオブジェクトがある場合、それらのオブジェクトがルート プロセスから到達できない限り、 GC はそれらをリサイクルすることもできます。

Java でのメモリ リーク: メモリ リークは、存続期間の長いオブジェクトが存続期間の短いオブジェクトへの参照を保持しているときに発生する可能性があります。存続期間の短いオブジェクトは必要なくなりましたが、存続期間の長いオブジェクトが保持しているためです。それを参照し、リサイクルを防ぐことは、Java でメモリ リークが発生するシナリオです。

平たく言えば、プログラマはオブジェクトを作成しても、そのオブジェクトを再度使用することはありません。ただし、オブジェクトは常に参照されます。つまり、オブジェクトは役に立たないものの、ガベージ コレクターによってリサイクルすることはできません。これがメモリです。 Javaではリークが発生する可能性があります。

たとえば、キャッシュ システムでは、オブジェクトをロードしてキャッシュ (たとえば、グローバル マップ オブジェクト) に置きます。その後、それを再度使用することはありません。このオブジェクトは常にキャッシュによって参照されます。 、しかしもう使われていません。

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

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