2019年のJavaインタビューの質問シリーズ228(5)に基づいて、何をしませんで簡単に見?

2019 Javaのインタビューの質問の基礎シリーズ228

Javaのインタビューの質問(a)の

解決20個の質問に答えるために最初に更新する1

juejin.im/post/5de8c6...

第2の更新の回答解決に21〜50の質問
juejin.im/post/5dea1d ...

パートIIIは、解決するために95個の質問に答えるために51を更新しました
juejin.im/post/5decd3 ...


Javaのインタビューの質問(B)

解決20個の質問に答えるためにタイトルIVアップデート1


Javaのインタビューの質問(B)

21、二つのクラス、B継承A、C継承Bがあり、我々はC Bなぜ変換することができますか?そのようなC =(C)Bとして;
クローンクラスのメソッドが含まれている22、?Cloneableをまたはオブジェクトのですか?
23、++演算子におけるJavaはスレッドセーフですか?
23、スレッドセーフではありません操作。これは、複数の命令を含む、変数値、増加を読み取り、再びメモリに格納されているような、このプロセスは、複数のスレッドが交差していてもよいです。
24、= A + Bと+ = bの区別
25、私は長い変数にそれを型にキャストすることなく、ケース内の二重値を割り当てることができるのだろうか?
何== * 0.1 0.3 26,3が返されますか?真か偽か
より多くのメモリを取るだろう27、int型と整数?
28、なぜJavaのStringでは不変(不変)とは?
31,64ビットJVMは、int型の長さは、大多数のですか?
32、シリアルおよびパラレルGCとの間の差?
33、32ビットおよび64ビットJVM、大多数のINT型可変長?
34、Javaと弱い参照SoftReference差で?
35、それがどのように動作するかのWeakHashMap?
36、JVMオプション-XX:+ UseCompressedOops役割は何ですか?なぜ私が使用する必要がありますか?
32ビットまたは64ビットは37、どのようにJVMのJavaプログラムによって判断するのですか?
38,32ビットと64ビットのJVM JVM最大ヒープメモリは、大部分がありますか?
39. JRE、JDK、JVMとJITの違いは何ですか?
40は、Javaヒープ領域とGCを説明しましたか?
41、あなたはGCがそれを実行保証することができますか?
42、どのようにメモリのJavaプログラムの使用を取得しますか?使用するヒープの割合?
43、Javaヒープとスタックの違いは何ですか?
44、 "== B" と "a.equals(B)" の違いは何ですか?
45、a.hashCode()の使用は何ですか?a.equals(B)との関係は何ですか?
46、最終的に、ファイナライズから、最終的にで異なりますか?
47、Javaでどのようなコンパイル時の定数はありますか?リスクはどのようなものがあり、それを使用しますか?
48、リスト、セット、マップとキュー間の差(答え)
49、()ポーリング方式とのremove()メソッドの違いは?
50、JavaとのLinkedHashMap優先度つきキューの違いは何なのさ?

Benpian更新回答の質問21-50


21、二つのクラス、B継承A、C継承Bがあり、我々はC Bなぜ変換することができますか?そのようなC =(C)Bとして;

これは、B、実施例C型に変換しない場合に、異常が存在するであろう、キャストに属し
たとえば、ABCはあなたの動物、猫、黒猫に対応しています。
例えば、遷移が最大であります
CはC =新しいC();
B B = C。
あなたは、黒猫は猫である、Bに移行cは?はいああ、これはのokです。
しかし、順番に、
BはB =新しいB();
C C =(C)B。
これはちょうどbは猫であることを知って、彼は必ずしも黒猫ではありません、OKではありません。
しかし、Bは黒猫であり、それは遷移可能性があると判断された場合
BはB =新しいC();
C C =(C)B。
ここでBは常に黒猫ああてきました。

クローンクラスのメソッドが含まれている22、?Cloneableをまたはオブジェクトのですか?

java.lang.Cloneableは、任意のメソッドが含まれていないインターフェイスのマークは、cloneメソッドはオブジェクトクラスで定義されています。そして、クローン()メソッドを知っておく必要があり、それがCまたはC ++または他のローカル言語で実装されていることを意味地元方法、です。

23、++演算子におけるJavaはスレッドセーフですか?

スレッドセーフではありません操作。これは、複数の命令を含む、変数値、増加を読み取り、再びメモリに格納されているような、このプロセスは、複数のスレッドが交差していてもよいです。

24、= A + Bと+ = bの区別

+ =暗黙的に追加操作型のタイプは、保持の結果としてキャストされるもたらします。二つのそのようなバイト、短いまたはintとして整数の和である場合、INT型が最初に上昇され、次いで加算演算を行います。加算演算の結果が最大値よりも大きい場合、次いで+ bは、コンパイルエラーになりますが、
byte a = 127;
byte b = 127;
b = a + b;
// error : cannot convert from int to byte
b += a;
// ok复制代码
(翻訳者注:操作はB +になりますので、この場所は表現しなければならないが、実際には、a + bの値は、コンパイラはエラーになりますどんなに間違っている、bが、それはバイトのint型に割り当てられます、int型に昇格しましたエラーをコンパイルします)

25、私は長い変数にそれを型にキャストすることなく、ケース内の二重値を割り当てることができるのだろうか?

いいえ、あなたはロングタイプの2倍広いタイプは、キャストされる必要があるため、変換は、long型の変数に割り当てられたdouble値の前提の下では必須ではありません入力することはできません。

何== * 0.1 0.3 26,3が返されますか?真か偽か

偽の、ので、いくつかの浮動小数点数は、それを完全に正確に表現することはできません。

より多くのメモリを取るだろう27、int型と整数?

Integerオブジェクトは、より多くのメモリを占有します。整数は、オブジェクトがメタデータを格納する必要があり、オブジェクトです。しかし、int型は、データのプリミティブ型であるので、より少ないスペースを取ります。

28、なぜJavaのStringでは不変(不変)とは?

Javaで文字列の不変のJava設計者は非常に頻繁に使用される文字列を考えているので、文字列は、複数のクライアント間で同じ不変の文字列を共有することが許可されるように設定されています。

29、我々は中に文字列スイッチでそれを使用することができますか?

Javaの7から、我々はスイッチケース内の文字列を使用することができますが、これは単なるシンタックスシュガーです。内部には、文字列のハッシュコードのスイッチに実装されています。

30、Javaでコンストラクタのチェーンとは何かありますか?

あなたはコンストラクタから別のコンストラクタを呼び出すと、Javaはコンストラクタ鎖です。この状況は、クラスだけ時間のオーバーロードコンストラクタに表示されます。

31,64ビットJVMは、int型の長さは、大多数のですか?

Javaは、整数型の変数の長さは、プラットフォームに関係なく、32ビットであり、固定値です。意味は、32ビットおよび64ビットのJava仮想マシンでは、int型は、同じ長さです。

32、シリアルおよびパラレルGCとの間の差?

ときGCのシリアルおよびパラレル実行が停止-世界の原因となります。それらの間の主な違いは、唯一のGCを実行するスレッド、およびGC平行コレクタが実行する複数のスレッドを使用する場合、コレクタをコピーシリアルコレクタデフォルトです。

33、32ビットおよび64ビットJVM、大多数のINT型可変長?

32ビットおよび64ビットJVM、int型の変数の長さが同じで、32ビットまたは4バイトです。

34、Javaと弱い参照SoftReference差で?

弱い参照とSoftReferenceは、GCとメモリが、弱い参照の効率を向上させることに資するですが最後の強い参照を失った後、GCは、それが停止リサイクルされることはできませんが、JVMのメモリ不足になるまで遅延させることができるが、ソフト参照しながら、リサイクルされます。

35、それがどのように動作するかのWeakHashMap?

WeakHashMap HashMapの正常な動作は似ていますが、キーオブジェクトは、時間への参照を持っていない場合は、キー/値が回復されることを意味し、弱い鍵を組み込みます。

36、JVMオプション-XX:+ UseCompressedOops役割は何ですか?なぜ私が使用する必要がありますか?

あなたがオブジェクトポインタので、32ビットから64ビットに、64ビットのJVM JVMへの32ビットからアプリケーションを移行する場合、ヒープメモリは突然にほぼ倍増、増加しますので。このデータは、CPUキャッシュ(はるかに小さいよりもメモリ容量)が悪影響を受けます。64ビットのJVM主な動機への移行は、あなたが最大ヒープサイズを指定することができるということですので、あなたはOOPを圧縮することにより、いくつかのメモリを節約することができます。-XXによって:+ UseCompressedOopsオプション、JVM 32の使用OOPはなく、64ビットOOP。

32ビットまたは64ビットは37、どのようにJVMのJavaプログラムによって判断するのですか?

あなたはsun.arch.data.modelまたはos.archなどのシステム情報を取得するには、いくつかのプロパティを確認することができます。

38,32ビットと64ビットのJVM JVM最大ヒープメモリは、大部分がありますか?

理論的には32ビットJVMのヒープメモリはつまり4ギガバイト、2 ^ 32に到達することができますが、実際にはこれよりもはるかに小さくなります。こうした3ギガバイト約1.5 GB、Solarisの程度、Windowsシステムなど、異なるオペレーティング・システムとの差。64ビットJVMは理論的には、非常に大きな数である、2 ^ 64まですることができ、あなたは最大ヒープメモリを指定することができ、実際には、あなたは100ギガバイトに、ヒープサイズを指定することができます。このようアズール、1000Gにヒープメモリとしても、いくつかのJVMが可能です。

39. JRE、JDK、JVMとJITの違いは何ですか?

JRE Javaランタイム(Javaのランタイム)を代表して、Javaの参照を実行する必要があります。Javaの開発ツールJDK(Java開発キット)を代表して、このようにもJREが含まれているJavaコンパイラなどのJavaプログラム開発ツールです。Java仮想マシンJVM(Java仮想マシン)を代表して、それは、Javaアプリケーションを実行しているの責任です。代表的なJITの時間コンパイル(ジャスト・タイムコンパイル)、コード実行の数が特定の閾値を超えた場合に、あろうJavaは、ネイティブコードへのバイトコード、例えば、ホットキーコードが疑似ネイティブコードに置き換えられます、大きいので、有利です大きさは、Javaアプリケーションのパフォーマンスを向上させます。

40は、Javaヒープ領域とGCを説明しましたか?

Javaコマンド経由のJavaの処理を開始するとすると、そのためのメモリを割り当てます。オブジェクトは、プログラムで作成されたときに、ヒープを作成するためのメモリ空間の一部は、それが空間にメモリを割り当てます。GCは、JVM内のプロセスで、無効なオブジェクトは、今後の割り当てのメモリを回復しました。

41、あなたはGCがそれを実行保証することができますか?

いいえ、けれどもあなたはにSystem.gc()またはRuntime.gc()を呼び出すことができますが、GCの実装を保証する方法はありません。

42、どのようにメモリのJavaプログラムの使用を取得しますか?使用するヒープの割合?

残りのメモリは、最大合計メモリーとヒープメモリは、関連するメソッドjava.lang.Runtimeクラスによって取得してもよいです。また、これらの方法で使用され、残りのスペースとヒープメモリのヒープの割合を得ることができます。Runtime.freeMemory()メソッドを返すことにより、空き領域のバイト数(メモリRuntime.totalMemory、Runtime.maxMemory(の総バイト数の)方法)は、メモリの最大バイト数を返します。

43、Javaヒープとスタックの違いは何ですか?

別のメモリ領域に属し、JVMのヒープとスタック、異なる目的の使用。保存方法は、一般的にフレームスタックとローカル変数に使用され、オブジェクトが常にヒープ上に割り当てられています。ヒープ、スタック、ヒープはJVM全体のすべてのスレッドで共有され、それは複数のスレッド間で共有されることはありません、通常は比較的小さいです。

44、 "== B" と "a.equals(B)" の違いは何ですか?

aとbが目的である場合、== Bは、2つのオブジェクトを比較するための基準となるヒープA及びBで同一のオブジェクトが指示された場合にのみtrueを返し、そしてa.equals(b)は論理的です比較は、典型的には、一貫性のある比較ロジックを提供するためにこのメソッドをオーバーライドする必要があります。例えば、ストリングクラスのオーバーライドの等号()メソッドは、2つの異なるオブジェクトのために使用されるが、同じ比較が文字が含まれることができます。

45、a.hashCode()の使用は何ですか?a.equals(B)との関係は何ですか?

ハッシュコード()メソッドは、整数対応するオブジェクトのハッシュ値です。このようなハッシュテーブル、HashMapの、のようなのLinkedHashMapとしてハッシュベースのコレクションに使用されています。この方法は特に密接な関係である()に等しいです。同じオブジェクトを決定するために2つの等しい()メソッドを使用して、Java仕様は、同一のハッシュコードを有していなければなりません。

46、最終的に、ファイナライズから、最終的にで異なりますか?

final修飾子は、変数、メソッドやクラスを変更することができています。最終変性変数、変数の平均値は、初期化後に変更できない場合。finalizeメソッドは、オブジェクトが回収される前に呼び出されるメソッド、オブジェクト自体を復活させる最後のチャンス、しかしときなしコールファイナライズ保証です。最終的にはキーワードであり、そして試してみて、例外処理のために一緒にキャッチします。finallyブロックは関係なく、tryブロックで例外が発生するかどうかの、実行されます。

47、Javaでどのようなコンパイル時の定数はありますか?リスクはどのようなものがあり、それを使用しますか?

パブリック静的の不変(のpublic static final)変数は、ここでは、公開はオプションで、我々はコンパイル時定数と呼んでいます。コンパイラはこれらの変数の値を知っており、実行時にこれらの変数を変更しないことを知っているので、実際には、これらの変数は、コンパイル時に置き換えられます。このアプローチの1つの問題は、あなたが公共のコンパイル時定数では、社内またはサードパーティ製のライブラリを使用することであるが、この値は変更され、他の人の背後にあるが、あなたのクライアントはまだあなたが持っている場合でも、古い値を使用して新しいjarファイルを展開。これを避けるために、あなたが依存JARファイルを更新するとき、あなたのプログラムを再コンパイルすることを確認してください。

48、リスト、セット、マップとキュー間の差(答え)

リストは、順序付けられた要素の集合は繰り返しが可能です。その実装のいくつかは、時間ベースのインデックス値に一定のアクセスを提供することができますが、これは、Listインタフェースの保証するものではありません。セットには、順不同のコレクションです。

49、()ポーリング方式とのremove()メソッドの違いは?

ポーリング()とのremove()キュー要素から削除されますが、世論調査())故障時の要素は、(空返しますが、削除されます取得が失敗した場合に例外がスローされます。

50、JavaとのLinkedHashMap優先度つきキューの違いは何なのさ?

最高または最低の優先順位の要素がキューの先頭に常にあるが、要素の順序を維持するのLinkedHashMap注文が挿入されていることを確認し優先度つきキュー。優先度つきキュー、順序保証なしを横断するときは、しかし、のLinkedHashMapクラス横断順序は、挿入要素を確実にするためです。

遂に

私は一種の公共-hoの[プログラマ]の群れは、より多くの400ページのPDF文書よりも会社の上に1000の2019 Javaの顔の質問を終え、記事が内側に更新されます懸念へようこそ、データのコンパイルが内側になります。

記事私は、ヨーヨーのような関心のポイントのように支援への感謝を忘れないでください!


おすすめ

転載: juejin.im/post/5def4dc86fb9a0161104c1f2