Javaシリアル化インタビューの質問と回答[初心者と経験者向け]

公開: 2020-09-25

Javaは、世界で最も優れたプログラミング言語の1つです。 幸運なことに、Javaが時間の経過とともに発展し、今日のように非常に人気のある言語になりました。 Javaで行われたこれらの改善により、今日のプログラムの作成方法を定義するいくつかの非常に重要な機能が含まれるようになりました。 それらの機能の1つはシリアル化です。

本質的に、シリアル化はオブジェクトをメモリに格納するために使用されるメカニズムにすぎません。 したがって、オブジェクトをシリアル化するとは、問題のオブジェクトを、それがあった状態からバイトのストリームに変換していることを意味します。 ネイティブ状態からバイトストリームへのこの変換により、このオブジェクトをファイルに簡単に書き込むことができます。

このファイルは、必要な場所に転送できます。オブジェクトとその機能にアクセスするには、オブジェクトを逆シリアル化するだけです。 名前が示すように、逆シリアル化はシリアル化の反対です。 ここでは、バイトのストリームをオブジェクトのネイティブ状態に変換して、オブジェクトを使用します。

シリアル化により、開発者はある程度の柔軟性を持ってコードを記述できます。 オブジェクトを取得し、他の場所でそのネイティブプロパティとともに使用する機能は、今日のワークフローで非常に重要です。 採用担当者が潜在的な従業員にJavaでのオブジェクトのシリアル化についてもっと知ってもらいたいのも不思議ではありません。

プロジェクトでシリアル化を使用したかどうかに関係なく、シリアル化の重要性を単純にスライドさせることはできません。 そこで、プロのJava開発者になるための取り組みを支援するために、いくつかの魅力的なJavaシリアル化インタビューの質問を集めました。これを以下に示します。

Javaシリアル化インタビューの質問

Q1。 Javaプログラミング言語のコンテキストでのシリアル化とはどういう意味ですか?

回答シリアル化の定義は、おそらく最も基本的ですが、Javaシリアル化のコンテキストで最もよくある質問の1つです。 あなたはこの質問に答えなければならないでしょうほとんどすべてのインタビューです。 したがって、Javaシリアル化の適切な定義を頭に入れておく必要があります。 したがって、シリアル化は、Javaで記述されたオブジェクトがバイトストリームに変換される方法に他なりません。

これの主な目的は、オブジェクトを別のマシンに転送したり、オブジェクトの状態をファイルに保存したり、オブジェクトの状態をデータベースに保存したりできるようにすることです。 オブジェクトが正常にシリアル化されると、オブジェクトを逆シリアル化するだけで、オブジェクトを元の栄光にすばやく戻すことができます。

Q2。 Javaでオブジェクトをシリアル化する方法は何ですか? オブジェクトをシリアル化および逆シリアル化するプログラムを作成します。

回答面接では、理論的な知識をプログラムを書く能力で補強することができれば、選択の可能性は自動的に高まります。 また、どのインタビューでも、シリアル化と逆シリアル化がどのように行われるかを示す基本的なプログラム(少なくとも基本的なプログラム)を作成する必要があります。 このプログラムを自分で作成する前に、Javaでのオブジェクトのシリアル化に関する重要なことを1つ覚えておく必要があります。

オブジェクトをシリアル化するには、クラスjava.io.Serializableインターフェイスを使用するオブジェクトを作成する必要があります。 シリアル化するクラスのオブジェクトにマーカーインターフェイスを使用していることを確認する必要があります。 つまり、問題のクラスには、クラス内に記述されたメソッドがあってはなりません。 このクラスは、後続のオブジェクトがフォームを変更し、バイトのストリームを形成する必要があることをJava仮想マシンに通知する必要もあります。

シリアル化のコードは以下のとおりです。

OutputStream fout = new FileOutputStream(“ ser.txt”);

ObjectOutput oout = new ObjectOutputStream(fout);

システム。 out .println( "シリアル化プロセスが開始されました。従業員オブジェクトをシリアル化しています…");

oout.writeObject(object1);

デシリアライズのコードは以下のとおりです。

InputStream fin = new FileInputStream(“ ser.txt”);

ObjectInput oin = new ObjectInputStream(fin);

システム。 out .println( "DeSerializationプロセスが開始され、従業員オブジェクトが表示されています…");

従業員従業員;

emp =(従業員) oin.readObject();

学ぶ: Javaでのメモリ割り当て:知っておくべきことすべて

Q3。 SerializationとExternalizableのインターフェースの違いは何ですか?

回答この質問は、あなたがその仕事に選ばれるかどうかの違いを意味するかもしれません。 この質問に非常に包括的な方法で答えることができたとします。 その場合、面接官はこの主題についてのあなたの知識に感銘を受けるはずであり、あなたがその仕事を選ぶ可能性は自動的に急上昇します。 以下の表に、すべての重要な違いがあります。

これらの方法の両方を比較しているプロパティ。
シリアル化可能
EXTERNALIZABLE
これら2つの異なるインターフェースのクラスに存在するメソッドこれはたまたまマーカーインターフェースです。 マーカーインターフェイスにメンバー関数を含めることはできません。 これらは、このクラスのオブジェクトをバイトのストリームに変換する必要があることをJava仮想マシンに通知する命令が存在する必要があることを除いて、空である必要があります。 これはメーカーインターフェイスではないため、いくつかのメンバーメソッドがあります。

writeExternal()およびreadExternal( )と呼ばれるメソッドがあります

シリアル化のデフォルトの方法は何ですか? シリアル化可能の場合、作成したオブジェクトをシリアル化できるデフォルトの方法があります。 プログラマーとして行う必要があるのは、このインターフェースをプログラムに統合する方法を見つけることだけです。 シリアル化を実装できるデフォルトの方法は見つかりません。 独自のメソッドを作成するか、既存のメソッドをオーバーライドする必要があります。
彼らがシリアル化のプロセスを実装する方法は何ですか? このインターフェースでシリアル化を実装する方法をカスタマイズできます。 ただし、既存のメソッドをオーバーライドすることはできません。 希望する自由度を取得するには、これらのメソッドを独自のクラスに実装する必要があります。 このメソッドでは、デフォルトのメソッドをオーバーライドする必要があります。 したがって、オブジェクトをシリアル化するためのカスタマイズされた方法を実装する場合は、Serializableのデフォルトの方法よりもこのインターフェースを選択する必要があります。
シリアル化の過程で彼らが提供する制御の程度はどれくらいですか、 このインターフェースを使用しているときは、小さな小刻みに動く部屋があります。 また、このメソッドを最大限に活用するには、デフォルトの関数をクラスに書き込む必要があります。 ただし、これは必須ではありません。つまり、デフォルトの関数をカスタムクラスに書き込まなくても、このインターフェイスを使用してオブジェクトをシリアル化できます。 このインターフェースは、プロセス全体に対する優れた制御を提供します。 その理由だけで、このインターフェイスを使用している場合は、2つのメソッドをカスタムクラスに書き込む必要があります。
デシリアライズの使用中に使用されるコンストラクターは何ですか? シリアル化のプロセス中に呼び出されるコンストラクターはありません。 このインターフェースを使用してオブジェクトをシリアル化するときに、請負業者に呼び出しが行われます。

Q4。 シリアル化と逆シリアル化のカスタムプロセスを実装するプログラムを作成します。

回答ここに注意が必要な部分があります。 これは、実際のユースケースシナリオを通じて、これまでのすべての質問の知識を示すことができる質問です。 あなたがこれらのプログラムを書くことができる能力は、あなたの専門知識を明確に示し、あなたが望む仕事を得るのを助けます。

以下に、writeObject()メソッドを作成するカスタムの方法を示します。

private void writeObject(ObjectOutputStream os){

システム。 out .println( "In、writeObject()メソッド。");

{を試してください

os.writeInt( this .id);

os.writeObject( this .name);

} catch (例外e){

e.printStackTrace();

}

}

以下に書かれているのは、デセリア化のカスタム実装です。

private void readObject(ObjectInputStream ois){

システム。 out .println( "In、readObject()メソッド。");

{を試してください

id = ois.readInt();

name =(String)ois.readObject();

} catch (例外e){

e.printStackTrace();

}

}

Q5。 Externalizableインターフェースを使用してシリアル化と逆シリアル化をどのように実装しますか?

回答外部化可能なインターフェイスを使用してシリアル化と逆シリアル化を実装するには、関数writeExternal()とreadExternal()を独自に作成する必要があります。 以下に両方のコードを記述します。

writeExternal()メソッドのカスタマイズ

公衆 空所 writeExternal (ObjectOutput oo)IOException{をスローします

システム。 out .println( "in writeExternal()");

oo.writeInt(id);

oo.writeObject(name);

}

readExternal()メソッドのカスタマイズ

公衆 空所 readExternal (ObjectInput in)IOException、ClassNotFoundException{をスローします

システム。 out .println( "in readExternal()");

this .id = in.readInt();

this .name =(String)in.readObject();

}

について読む: 2020年のPythonとJava:どちらを選択する必要がありますか?

Q6。 特定の変数をシリアル化したくないとしましょう。 シリアル化されたくないメンバー変数を防ぐために何をしますか?

回答それは非常に概念的な質問です。 この質問にすばやく答えられるようにするには、静的変数と非静的変数の知識が必要です。 特定の変数がシリアル化されないようにしたいとします。 その場合、静的変数の値は変更できないため、静的にする必要があります。そのため、これらもシリアル化されません。

Q7。 serialVersionUIDとはどういう意味ですか?

回答シリアル化するクラスごとに、クラス番号が付けられます。 シリアル化されるすべてのクラスに付けられるこの番号は、serialVersionUIDと呼ばれます。 このIDは、オブジェクトをネイティブ形式で戻すときに、Java仮想マシンがオブジェクトに関連付けられているIDを探すために不可欠です。

次に、シリアル化されるはずのクラスのIDをすばやく参照します。 このオブジェクトが属する対応するクラスが見つかると、逆シリアル化プロセスが開始されます。

Q8。 serialVersionUIDについて言及または定義するのを忘れたとしましょう。 このアクションは、私たちが作成したプログラムにどのような影響を与えますか?

回答この質問はもう1つの基本的な質問です。 この質問に正しく答えるためには、確かな知識が必要です。 最初に明確にする必要があるのは、serialVersionUIDを使用して問題のオブジェクトのバージョン管理を行うことです。 クラスにIDが定義されていないため、Javaコンパイラはオブジェクトがどのクラスに属しているかを認識しないとしましょう。 実行時またはオブジェクトをシリアル化するときは、ID自体を定義する必要がないため、エラーは発生しません。

ただし、データストリームをオブジェクトに変換する場合、Javaコンパイラはエラーをスローします。 コンパイラーは、オブジェクトがどのクラスに属しているかを認識しないため、このオブジェクトに関連付けられているすべてのメンバー関数と変数を見つけて接続することはできません。 コンパイラはこのステップでスタックするため、serialVersionUIDの不一致(java.io.InvalidClassException)のエラーがスローされます。

Q9。 シリアル化できない場合、またはシリアル化の方法が利用できない場合、ネットワークを介して作成したオブジェクトを転送できる他の方法はありますか?

回答作成したオブジェクトをネットワーク経由で転送できる方法はいくつかあります。 それらのいくつかを以下にリストします。

  1. オブジェクトをJSONファイルに変換してみることができます。 オブジェクトをJSON文字列に変換することはそれほど難しくありません。また、JSONファイルを作成した場合、それをコードファイルに変換することもそれほど難しくありません。 そのため、ネットワーク経由で書き込んだJSON文字列を転送できます。
  2. Hibernateツール(これはORMツールです)を使用することもできます。 このツールを使用すると、オブジェクトをデータベースに保持できます。 そうすれば、書かれたオブジェクトも後で非常に簡単に読み取ることができます。
  3. XMLのテクノロジーを使用することもできます。 オブジェクトをXMLファイルに変換してみると、そのファイルをネットワーク経由ですばやく転送できます。

必読: Javaインタビューの質問と回答トップ24

まとめ

Java、OOP、フルスタックソフトウェア開発について詳しく知りたい場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のPGディプロマをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニングを提供します。9 +プロジェクト、割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。

未来のキャリアに備える

業界で信頼されている学習-業界で認められた認定。
今すぐ登録