序文
2020年の秋の採用は難しすぎます。面接をスムーズに通過する方法がわからないと多くの友人が言っています。明らかに、彼らはこれらの技術的な質問を知っていますが、面接担当者が尋ねるたびに答えることはできません。このタイプのプロジェクトを実行したか、同じタイプのプロジェクトを実行しましたが、これらの質問への回答方法がわからないので、非常に心配です。今日、これらの質問に対する回答を整理して、参考にして調査します。
最近、仕事を見つけるのに最適な時期です。今年(2020年)に、主要メーカーからのインタビューの質問と最新のデータを収集しました。以下は、データのスクリーンショットです(すべてのデータがドキュメントに統合され、pdfで圧縮およびパッケージ化されています)。 。
友達が必要な場合は、ここをクリックして情報を取得できます
。コード:qf 1. StringとStringBuffer
JAVAプラットフォームの違いは、StringとStringBufferの 2つのクラスを提供します。これらは、文字列、つまり複数の文字を含む文字を格納および操作できます。データこのStringクラスは値の不変文字列を提供し、このStringBufferクラスによって提供される文字列は変更されます。文字データが変更されることがわかっている場合は、StringBufferを使用できます。通常、StringBuffersを使用して文字データを動的に構築できます。
2. ArrayList、Vector、LinkedListのストレージパフォーマンスと特性について教えてください。ArrayList
とVectorはどちらも配列を使用してデータを格納します。この配列の要素の数は、要素を追加および挿入するために実際に格納されたデータよりも多くなります。これらはすべて、シーケンス番号による要素の直接インデックス付けを許可しますが、挿入します要素は配列要素の移動などのメモリ操作を伴うため、データのインデックス作成は高速で、データの挿入は低速です。Vectorは、通常、パフォーマンスがArrayListよりも劣るシンクロナイズドシンキングメソッド(スレッドセーフティ)を使用しますが、LinkedListは、ストレージに二重リンクリストを使用し、シーケンス番号でデータにインデックスを付けます前方または後方にトラバースする必要がありますが、データを挿入するときは、このアイテムの前後のアイテムを記録するだけでよいため、挿入速度が速くなります
3.
HashMap とHashtableの違い HashMapは、Hashtableの軽量実装(非スレッドセーフな実装)です。Mapインターフェースが完成しています。主な違いは、HashMapがnull(キー)を許可することです。非スレッドセーフのため、効率はHashtable JAVA中国のステーションコミュニティポータルよりも高い場合がありますoC)| g | ax、HashMapではNullをentrydeキーまたは値として使用できますが、HashtableではHashMapを使用できませんこのメソッドは、HashtableがDictionaryクラスを継承していることを誤解しやすく、HashMapはJava 1.2で導入されたMapインターフェースの実装です。
最大的区别是,Hashtable的思路方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的思路方法实现同步,而HashMap 就必须为的提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
4. final、finally、finalize
final の違いは、プロパティ、メソッド、およびクラスをそれぞれ宣言するために使用され、プロパティは不変であり、メソッドはオーバーライドできず、クラスは継承できないことを示します。
最後に、例外処理ステートメントの構造の一部です。つまり、常に実行されます。
FinalizeはObjectクラスのメソッドです。リサイクルされたオブジェクトのこのメソッドは、ガベージコレクターの実行時に呼び出されます。このメソッドは、ファイルを閉じるなど、ガベージコレクション中に他のリソースを回復するためにオーバーライドできます。
5.バイト、ロング、またはストリング
でswtichを使用できますか?バイトショートint charのみをswtichで使用できます。
6.マルチスレッドの実装方法はいくつかありますが、何ですか?どちらが良いですか?同期の実装方法はいくつかありますが、何ですか?
マルチスレッドには、Threadクラスを継承し、Runnableインターフェースを実装する2つの実装方法があります。
実装クラスは複数のインターフェースを実装できますが、継承できるクラスは1つだけなので、Runnableインターフェースを実装することをお勧めします。
同期には、同期、待機、通知という2つの実装側面があります。
7. Javaには何種類のストリームがありますか?JDKは、継承のためにストリームのタイプごとにいくつかの抽象クラスを提供します。それらが
バイトストリームと文字ストリームのどちらのクラスであるかを教えてください。バイトストリームはinputStream / outputStreamから継承し、文字ストリームはinputStreamReader / outputSteamWriterから継承します。
8:メインメソッドがプライベートとして宣言されている場合はどうなりますか?
回答:正常にコンパイルできますが、実行すると「main method is not public」と表示されます。
9:Javaでの参照渡しと値渡しの違いは何ですか?
回答:参照渡しとは、値自体ではなくアドレスを渡すことを意味し、値渡しとは、値のコピーを渡すことを意味します。
10:オブジェクトのequalsメソッドを書き換えたい場合、他に何を考慮すべきですか?
回答:hashCode。
11:Javaはどのように「1度書き込み、どこでも実行」を実装していますか?
回答:Javaプログラムはバイトコードで構成されるクラスファイルにコンパイルされます。これらのバイトコードはどのプラットフォームでも実行できるため、Javaはプラットフォームに依存しません。
12:public static void main(String args [])ステートメントの各キーワードの役割を説明してください
回答:public:mainメソッドは、Javaプログラムの実行時に最初に呼び出されるメソッドであるため、Java環境から見える必要があります。したがって、可視性はpulicに設定されます。
static:Javaプラットフォームは、このメソッドを呼び出すときにこのクラスのインスタンスを作成しないため、このメソッドはstaticとして宣言する必要があります。
void:mainメソッドには戻り値がありません。
文字列はコマンドラインから渡されるパラメータのタイプであり、引数はコマンドラインから渡される文字列の配列を指します。
13:==と等しいの違い
答え:== 2つのオブジェクトがメモリ内の同じオブジェクトであるかどうか、つまり、メモリ内の格納場所が同じかどうかを比較します。2つのStringオブジェクトは同じ値を格納しますが、メモリ内の異なる場所に格納される場合があります。
比較は参照であり、equalsメソッドはコンテンツです。public boolean equals(Object obj)このメソッドはObjectオブジェクトによって提供され、サブクラスによってオーバーライドできます。デフォルトの実装は、オブジェクトがそれ自体と比較されたときにのみtrueを返します。同等です。String、BitSet、Date、およびFileはすべて、equalsメソッドを書き換えます。2つのStringオブジェクトの場合、等しい値は、同じ文字シーケンスが含まれていることを意味します。基本タイプのパッケージクラスの場合、等しい値は、対応する基本タイプの値が同じであることを意味します。
public class EqualsTest {
public static void main(String[] args) {
String s1 = “abc”;
String s2 = s1;
String s5 = “abc”;
String s3 = new String(”abc”);
String s4 = new String(”abc”);
System.out.println(”== comparison : ” + (s1 == s5));
System.out.println(”== comparison : ” + (s1 == s2));
System.out.println(”Using equals method : ” + s1.equals(s2));
System.out.println(”== comparison : ” + s3 == s4);
System.out.println(”Using equals method : ” + s3.equals(s4));
}
}
结果:
== comparison : true
== comparison : true
Using equals method : true
false
Using equals method :true
14:メインメソッドの静的修飾子を削除するとどうなりますか?
回答:プログラムは正常にコンパイルできます。NoSuchMethodErrorは実行時にスローされます。
15:Oracle Type4ドライバーがThinドライバーと呼ばれるのはなぜですか?
回答:Oracleは、シンドライバーと呼ばれるタイプ4 JDBCドライバーを提供しています。このドライバには、Javaで完全に実装されたOracle独自のTCP / IP Net8の実装が含まれているため、プラットフォームに依存せず、クライアント側のOracle実装に依存することなく、実行時にブラウザからダウンロードできます。クライアント接続文字列は、データベース名のtnsnameの代わりにTCP / IPアドレスポートを使用します。
16:finalizeメソッドの導入
回答:final:定数宣言。最後に、例外を処理します。finalize:ガベージコレクションを支援します。
インターフェースで宣言された変数は、デフォルトではfinalです。最後のクラスは継承できません。つまり、サブクラスはありません。これは、StringやIntegerなどの基本的な型の安全のために行われます。これにより、コンパイラーはいくつかの最適化を実行できるようになり、スレッドの安全性を確保しやすくなります。最後のメソッドはオーバーライドできません。最終変数の値は変更できません。finalize()メソッドは、オブジェクトが破棄されてリサイクルされる前に呼び出されます。最後に、通常は例外処理に使用され、例外がスローされたかどうかに関係なく実行されます。たとえば、接続のクローズは通常、finallyブロックで行われます。
17:Java APIとは何ですか?
回答:Java APIは多数のソフトウェアコンポーネントのコレクションであり、GUIコンポーネントなどの便利な機能を多数提供します。
18:GregorianCalendarクラスとは何ですか?
回答:GregorianCalendarは、伝統的な西暦のサポートを提供します。
19:ResourceBundleクラスとは何ですか?
回答:ResourceBundleは、指定された言語環境のリソースを格納するために使用されます。アプリケーションは、ランタイム言語環境に従ってこれらのリソースをロードし、さまざまな言語で表示できます。
20:Javaにグローバル変数がないのはなぜですか?
回答:グローバル変数はグローバルに表示されますJavaはグローバルに表示される変数をサポートしません。理由:グローバル変数は参照透過性の原則に違反しています。グローバル変数は名前空間で競合を引き起こします。