Java バックエンド開発者職の面接で必須の 10 の質問
出典: Medium 記事の著者は、Java バックエンド開発者のポジションのいくつかの面接に合格した個人的な経験を共有しています。 面接は難しいことが多いです。したがって、面接を受ける前に質問される内容を知っておくとよいでしょう。過去 2 か月間、数多くのインタビューを受けてきたので、最も頻繁に遭遇した質問のいくつかをここで共有したいと思います。私は 1 ~ 3 年の経験を持つバックエンド Java 開発者のポジションに応募しました。1. Javaとその機能
面接官は通常、使用している Java の最新バージョンとその機能について質問します。私は主に Java 8 を使用しており、API ストリーム、ラムダ式、関数インターフェイスなどに関する質問を受けてきました。面接官は通常、これらの機能とそれに基づいたアプリケーションについて質問します。2. HashMap の内部動作
私が参加した面接のほとんどがこの質問でした。その仕組みを説明した後、デフォルトの HashMap サイズについて質問する人もいれば、Java コレクションについて詳しく質問する人もいます。3. エラーと例外
エラーと例外の違いは、面接でよく聞かれる質問です。また、チェックされた例外とチェックされていない例外とは何なのかも尋ねられました。4. マルチスレッド化
マルチスレッドは面接において非常に重要な概念であり、通常、スレッド、実行可能クラス、それらの違い、および両方の使用例について質問されます。また、Executor フレームワークについても学習することをお勧めします。5. 文字列と不変性
ほとんどの面接官は文字列クラスの不変性について質問し、その後、文字列ビルダーと文字列バッファーについて質問することもありました (変更可能な代替文字列であると答えた場合)。時々、不変クラスを作成する方法を尋ねられることがありました。6. ガベージコレクション
Java のガベージ コレクションは、面接の準備として非常に重要なトピックです。ガベージ コレクションのライフサイクルや、ガベージ コレクションのさまざまな方法について質問されることがあります。7. Java のコンパレータと比較対象
よくある質問は、Java で Comparator と Comparable をいつ使用するのか、またそれらの違いは何なのかというものです。8. Java デザイン パターン
Java デザイン パターンに関して言えば、通常、質問は現在のプロジェクトで使用されているさまざまなパターンから始まります。それぞれをいつ使用するかについて質問されることがあります。Java での不変クラスの作成についても質問されました。9. ファイナル、ファイナル、ファイナライズ
キーワード「final」、「finally」、「finalize」の違いは、面接でよく聞かれる質問です。追加の質問として、各キーワードを使用するためのオプションについて尋ねます。10. Java でのシリアル化と逆シリアル化
シリアル化と逆シリアル化は、面接の準備において非常に重要なトピックです。通常はユースケースについて質問され、場合によっては休止状態と JPA について質問されます。Java サーバーサイド開発者のポジションの面接がもうすぐ迫っている場合は、ここで説明した質問を準備しておくと役立つことを願っています。Java でのキューの実装
出典: Faun.pub この出版物のおかげで、Java でキューを実装する方法を学ぶことができます。キューとは何ですか?
キューは、「先入れ先出し」の原則に従った要素への一連のアクセスの形式の線形データ構造です。これは、最初に挿入された要素が最初に削除されることを意味します。つまり、要素は挿入された順序で削除されます。キューは、Front (要素が削除される前部) と Back (要素が挿入される後部) の 2 つの部分で構成されます。 一般的なキュー操作: 次の操作はキューでよく使用されます。- エンキュー- キューの最後から要素を追加します。
- デキュー- キューの先頭から要素を削除します。
- Front/Peek - キューから要素を除外 (削除) せずに、キューの前の要素の値を返します。
- IsEmpty - キューが空かどうかを確認します。
- IsFull - キューがいっぱいかどうかを確認します。
- 表示- キュー内のすべてのアイテムを印刷します。
コードの実装:
public class Example {
public static void main(String[] args) {
Queue myQueue = new Queue();
myQueue.enQueue(3);
myQueue.enQueue(2);
myQueue.enQueue(1);
myQueue.display();
myQueue.deQueue();
myQueue.peak();
}
}
class Queue {
int queueLength = 3;
int items[] = new int[queueLength];
int front = -1;
int back = -1;
boolean isFull(){
if(back == queueLength - 1){
return true;
} else {
return false;
}
}
boolean isEmpty(){
if(front == -1 && back == -1){
return true;
} else {
return false;
}
}
void enQueue(int itemValue) {
if(isFull()){
System.out.println("Queue is full");
} else if(front == -1 && back == -1){
front = back = 0;
items[back] = itemValue;
} else{
back++;
items[back] = itemValue;
}
}
void deQueue(){
if(isEmpty()){
System.out.println("Queue is empty. Nothing to dequeue");
} else if (front == back){
front = back = -1;
} else {
front++;
}
}
void display(){
int i;
if(isEmpty()){
System.out.println("Queue is empty");
} else {
for(i = front; i <= back; i++){
System.out.println(items[i]);
}
}
}
void peak(){
System.out.println("Front value is: " + items[front]);
}
}
説明:
-
まず、変数とそのパラメータを作成しました。配列内でキューに入れることができる要素の最大数として 3 を使用します。前面 (Front) と背面 (Back) の初期インデックスを -1 に設定します。
-
次に、 isEmptyとisFullの機能を定義します。
-
isEmpty()メソッドは非常に単純です。isFull()メソッドの場合、配列内で許可される要素の最大数は 3 ですが、最初のインデックスが 0 であるため、配列内の 3 つの要素はインデックス 3 ではなく 2 で示されます。最大長はマイナス 1 なので、インデックス 2、つまり配列の 3 番目のセルが得られます。3 番目のセルまでのすべてのセルが値とともにキューに入れられると、配列はいっぱいになります。
-
enQueue - 配列がいっぱいの場合、それがいっぱいであるというメッセージを受け取ります。フロント部分とバック部分が -1 の場合、要素はインデックス 0 の最初のセルに割り当てられます。それ以外の場合、値が挿入され、バック位置が増分されます。
-
deQueue - 配列が空の場合、対応するメッセージを受け取ります。フロント部分がバック部分と接触する場合、それらのインデックスを -1 にリセットします。最後の 2 つの条件が当てはまらない場合、Front が増加します。
-
表示- 配列が空でない場合は、すべての要素を反復して出力します。
-
ピーク- これは単に先頭の要素の値を出力します。
GO TO FULL VERSION