Fragen und Antworten zum Vorstellungsgespräch zur Java-Serialisierung [Für Anfänger und Fortgeschrittene]

Veröffentlicht: 2020-09-25

Java ist eine der besseren Programmiersprachen der Welt. Wir hatten das Glück zu sehen, wie sich Java im Laufe der Zeit weiterentwickelte und zu der äußerst beliebten Sprache wurde, als die wir sie heute kennen. Diese Verbesserungen, die in Java vorgenommen wurden, führten zur Aufnahme einiger wirklich entscheidender Funktionen, die bestimmen, wie wir heute Programme schreiben. Eine dieser Funktionen ist die Serialisierung.

Im Wesentlichen ist die Serialisierung nur ein Mechanismus, der verwendet wird, um ein Objekt im Speicher zu speichern. Wenn wir also sagen, dass wir ein Objekt serialisieren, meinen wir, dass wir das fragliche Objekt aus dem Zustand, in dem es war, in einen Strom von Bytes konvertieren. Diese Umwandlung von seinem nativen Zustand in den Bytestrom macht das Schreiben dieses Objekts in eine Datei zum Kinderspiel.

Diese Datei kann dann überall hin transportiert werden, wo wir wollen, und um auf das Objekt und seine Funktionen zuzugreifen, müssen wir das Objekt nur deserialisieren. Deserialisierung ist, wie der Name schon sagt, das Gegenteil von Serialisierung. Hier konvertieren wir den Stream des Bytes in den nativen Zustand des Objekts, um das Objekt zu verwenden.

Die Serialisierung ermöglicht es Entwicklern, ihren Code mit einem gewissen Grad an Flexibilität zu schreiben. Die Fähigkeit, das Objekt zu nehmen und es mit seinen nativen Eigenschaften an anderer Stelle zu verwenden, ist im heutigen Arbeitsablauf von entscheidender Bedeutung. Kein Wunder, dass Personalvermittler möchten, dass ihre potenziellen Mitarbeiter mehr über Objektserialisierung in Java erfahren.

Unabhängig davon, ob Sie die Serialisierung in Ihren Projekten verwendet haben oder nicht, können Sie deren Bedeutung nicht einfach beiseite lassen. Um Sie bei Ihrem Bestreben, ein professioneller Java-Entwickler zu werden, zu unterstützen, haben wir einige faszinierende Interviewfragen zur Java-Serialisierung zusammengestellt, die Sie unten finden.

Fragen in Vorstellungsgesprächen zur Java-Serialisierung

Q1. Was meinen Sie mit Serialisierung im Kontext der Programmiersprache Java?

Ans. Die Definition der Serialisierung ist vielleicht die grundlegendste und dennoch eine der am häufigsten gestellten Fragen im Zusammenhang mit der Java-Serialisierung. Sie müssen diese Frage in fast allen Interviews beantworten. Daher müssen Sie eine gute Definition der Java-Serialisierung im Kopf haben. Serialisierung ist also nichts anderes als die Umwandlung eines in Java geschriebenen Objekts in einen Bytestrom.

Das Hauptziel dabei ist es zu ermöglichen, das Objekt auf eine andere Maschine zu übertragen oder den Zustand des Objekts in einer Datei zu speichern oder den Zustand des Objekts in einer Datenbank zu speichern. Sobald das Objekt erfolgreich serialisiert wurde, könnten wir das Objekt schnell wieder in seinen früheren Glanz zurückversetzen, indem wir das Objekt lediglich deserialisieren.

Q2. Wie können wir ein Objekt in Java serialisieren? Schreiben Sie ein Programm zum Serialisieren und Deserialisieren des Objekts.

Ans. Wenn Sie in einem Vorstellungsgespräch Ihr theoretisches Wissen um die Fähigkeit zum Schreiben eines Programms erweitern können, steigen automatisch die Chancen auf Ihre Auswahl. Es wird auch vorausgesetzt, dass Sie in jedem Interview beauftragt werden, ein grundlegendes Programm (zumindest ein grundlegendes Programm) zu schreiben, das zeigt, wie Serialisierung und Deserialisierung erfolgt. Bevor Sie dieses Programm selbst schreiben, müssen Sie sich an eine wichtige Sache bei der Objektserialisierung in Java erinnern.

Um ein Objekt zu serialisieren, müssten Sie das Objekt schreiben, das die Klasse java.io.Serializable-Schnittstelle verwendet. Sie müssen sicherstellen, dass Sie eine Marker-Schnittstelle für das Objekt der Klasse verwenden, das Sie serialisieren möchten. Das heißt, die betreffende Klasse sollte keine geschriebenen Methoden in der Klasse haben. Diese Klasse muss der Java Virtual Machine auch mitteilen, dass das nachfolgende Objekt seine Form ändern und einen Bytestrom formen muss.

Der Code für die Serialisierung ist unten geschrieben.

OutputStream fout = new FileOutputStream("ser.txt");

ObjectOutput oout = new ObjectOutputStream(fout);

System. out .println(„Serialisierungsprozess hat begonnen, Mitarbeiterobjekte werden serialisiert…“);

oout.writeObject (Objekt1);

Der Code für die Deserialisierung ist unten geschrieben.

InputStream fin= new FileInputStream("ser.txt");

ObjectInput oin= new ObjectInputStream(fin);

System. out .println(“DeSerialization-Prozess hat begonnen, Mitarbeiterobjekte werden angezeigt…”);

Angestellter;

emp=(Mitarbeiter) oin.readObject();

Lernen: Speicherzuweisung in Java: Alles, was Sie wissen müssen

Q3. Was ist der Unterschied zwischen den Schnittstellen für Serialisierung und Externalisierbar?

Ans. Diese Frage könnte den Unterschied bedeuten, ob Sie für die Stelle ausgewählt werden oder nicht. Angenommen, es gelingt Ihnen, diese Frage sehr umfassend zu beantworten. In diesem Fall wird der Interviewer bestimmt von Ihrem Wissen über dieses Thema beeindruckt sein, und die Chancen, dass Sie für die Stelle ausgewählt werden, steigen automatisch in die Höhe. Alle entscheidenden Unterschiede finden Sie in der folgenden Tabelle:

Die Eigenschaften, auf denen wir diese beiden Methoden vergleichen.
SERIALISIERBAR
EXTERNALISIERBAR
Methoden, die in den Klassen dieser beiden unterschiedlichen Schnittstellen vorhanden sind Dies ist zufällig eine Marker-Schnittstelle. Markierungsschnittstellen können keine Mitgliedsfunktionen haben. Sie müssen leer sein, außer dass sie eine Anweisung enthalten müssen, die der Java Virtual Machine mitteilt, dass das Objekt dieser Klasse in einen Bytestrom umgewandelt werden muss. Dies ist keine Maker-Schnittstelle, was bedeutet, dass sie einige Member-Methoden hat.

Es hat Methoden namens writeExternal() und readExternal()

Was ist ihre Standardmethode der Serialisierung? Für serialisierbar finden Sie eine Standardmethode, mit der Sie die von Ihnen geschriebenen Objekte serialisieren können. Alles, was Sie als Programmierer tun müssten, wäre, einen Weg zu finden, wie Sie diese Schnittstelle in Ihr Programm integrieren können. Sie werden keine Standardmethode finden, mit der Sie die Serialisierung implementieren können. Sie müssen Ihre eigenen Methoden schreiben oder die vorhandenen überschreiben.
Wie setzen sie den Prozess der Serialisierung um? Sie können die Implementierung der Serialisierung in dieser Schnittstelle anpassen. Sie können die vorhandenen Methoden jedoch nicht überschreiben. Sie müssen diese Methoden in Ihrer eigenen Klasse implementieren, um den gewünschten Freiheitsgrad zu erhalten. Bei dieser Methode müssten Sie die Standardmethoden überschreiben. Wenn Sie also eine benutzerdefinierte Methode zum Serialisieren des Objekts implementieren möchten, sollten Sie diese Schnittstelle der Standardmethode von Serializable vorziehen.
Welchen Grad an Kontrolle bieten sie im Prozess der Serialisierung, Sie werden einen winzigen Spielraum finden, wenn Sie diese Schnittstelle verwenden. Sie müssen auch die Standardfunktionen in Ihre Klasse schreiben, um das Beste aus dieser Methode herauszuholen. Dies ist jedoch nicht zwingend erforderlich, sodass Sie weiterhin Objekte mit dieser Schnittstelle serialisieren können, ohne die Standardfunktionen in Ihre benutzerdefinierte Klasse zu schreiben. Diese Schnittstelle bietet eine hervorragende Kontrolle über den gesamten Prozess. Allein aus diesem Grund müssen Sie bei Verwendung dieser Schnittstelle die beiden Methoden in Ihre benutzerdefinierte Klasse schreiben.
Welcher Konstruktor wird bei der Deserialisierung verwendet? Es gibt keinen Konstruktor, der während des Serialisierungsprozesses aufgerufen wird. Bei der Serialisierung der Objekte über diese Schnittstelle erfolgt ein Aufruf an den Auftragnehmer.

Q4. Schreiben Sie ein Programm, in dem Sie den benutzerdefinierten Prozess der Serialisierung und Deserialisierung implementieren.

Ans. Hier kommt der heikle Teil. Dies ist die Frage, durch die Sie das gesamte vorherige Fragenwissen durch ein praktisches Anwendungsfall-Szenario zeigen können. Die Fähigkeit, diese Programme schreiben zu können, wird Ihr Fachwissen deutlich demonstrieren und Ihnen helfen, den Job zu bekommen, den Sie wollen.

Nachfolgend finden Sie die benutzerdefinierte Art, die Methode writeObject() zu schreiben.

private void writeObject(ObjectOutputStream os) {

System. out .println(“In, Methode writeObject().”);

versuche {

os.writeInt ( diese .id);

os.writeObject ( dieser .name);

} catch (Ausnahme e) {

e.printStackTrace();

}

}

Nachfolgend finden Sie die benutzerdefinierte Implementierung der Deserliasierung.

private void readObject(ObjectInputStream ois) {

System. out .println("In, readObject()-Methode.");

versuche {

id=ois.readInt();

name=(String)ois.readObject();

} catch (Ausnahme e) {

e.printStackTrace();

}

}

Q5. Wie implementieren Sie die Serialisierung und Deserialisierung mit der Externalizable-Schnittstelle?

Ans. Um die Serialisierung und Deserialisierung mit der externalisierbaren Schnittstelle zu implementieren, müssen Sie die Funktionen writeExternal() und readExternal() selbst schreiben. Sie finden den Code für beide unten geschrieben.

Anpassen der Methode writeExternal()

öffentlich zugänglich Leere writeExternal (ObjectOutput oo) wirft IOException {

System. out .println("in writeExternal()");

oo.writeInt(id);

oo.writeObject(Name);

}

Anpassen der Methode readExternal()

öffentlich zugänglich Leere readExternal (ObjectInput in) wirft IOException, ClassNotFoundException {

System. out .println("in readExternal()");

diese .id=in.readInt();

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

}

Lesen Sie mehr über: Python vs. Java im Jahr 2020: Welches sollten Sie wählen?

F6. Angenommen, Sie möchten nicht, dass eine bestimmte Variable serialisiert wird. Was werden Sie tun, um zu verhindern, dass die Member-Variablen serialisiert werden, die Sie nicht möchten?

Ans. Es ist eine sehr konzeptionelle Frage. Sie müssen Kenntnisse über statische und nicht statische Variablen haben, um diese Frage schnell beantworten zu können. Angenommen, Sie möchten, dass eine bestimmte Variable nicht serialisiert wird. In diesem Fall müssen Sie sie statisch machen, da der Wert einer statischen Variable nicht geändert werden kann und sie aus diesem Grund auch nicht serialisiert werden.

Q7. Was meinst du mit serialVersionUID?

Ans. Für jede Klasse, die wir serialisieren möchten, würden sie eine Klassennummer erhalten. Diese Nummer, die jeder zu serialisierenden Klasse gegeben wird, heißt serialVersionUID. Diese ID ist wesentlich, da die Java Virtual Machine beim Zurückholen des Objekts in seiner nativen Form nach der ID Ausschau hält, die dem Objekt zugeordnet ist.

Dann verweist es schnell auf die ID der Klassen, die serialisiert werden sollten. Wenn es die entsprechende Klasse findet, zu der dieses Objekt gehört, beginnt der Deserialisierungsprozess.

Q8. Nehmen wir an, wir haben vergessen, die serialVersionUID zu erwähnen oder zu definieren. Welche Auswirkungen wird diese Aktion auf das Programm haben, das wir geschrieben haben?

Ans. Diese Frage ist eine weitere grundlegende Frage. Um diese Frage richtig beantworten zu können, bräuchten Sie ein fundiertes Wissen. Das erste, was wir klarstellen müssen, ist, dass serialVersionUID verwendet wird, um die Versionskontrolle des Objekts in der Frage durchzuführen. Angenommen, es ist keine ID für die Klasse definiert, sodass der Java-Compiler nicht weiß, zu welcher Klasse das Objekt gehört. Zur Laufzeit oder beim Serialisieren des Objekts treten keine Fehler auf, da per se keine ID definiert werden muss.

Wenn wir jedoch möchten, dass der Datenstrom in das Objekt konvertiert wird, gibt der Java-Compiler einen Fehler aus. Der Compiler weiß nicht, zu welcher Klasse das Objekt gehört, und kann daher nicht alle Elementfunktionen und Variablen, die diesem Objekt zugeordnet sind, finden und verbinden. Da der Compiler in diesem Schritt hängen bleibt, gibt er einen Fehler mit einer Nichtübereinstimmung von serialVersionUID (java.io.InvalidClassException) aus.

Q9. Falls wir nicht serialisieren können oder die Methode der Serialisierung nicht verfügbar ist, gibt es eine andere Methode, mit der wir das Objekt, das wir geschrieben haben, über ein Netzwerk übertragen können?

Ans. Es gibt einige Methoden, mit denen wir das Objekt, das wir geschrieben haben, über ein Netzwerk übertragen können. Einige davon finden Sie unten aufgelistet.

  1. Sie können versuchen, das Objekt in eine JSON-Datei zu konvertieren. Es ist nicht so schwierig, das Objekt in einen JSON-String zu konvertieren, und wenn Sie die JSON-Datei geschrieben haben, ist die Konvertierung davon in die Codedatei auch nicht sehr schwierig. So können Sie den JSON-String, den Sie geschrieben haben, über das Netzwerk übertragen.
  2. Sie können auch das Hibernate-Tool verwenden (dies ist ein ORM-Tool). Dieses Tool ermöglicht es dem Objekt, in der Datenbank zu bleiben. Dann kann das geschriebene Objekt später auch sehr gut gelesen werden.
  3. Sie können auch die Technologie von XML verwenden. Sie können versuchen, das Objekt in eine XML-Datei zu konvertieren, und diese Datei dann schnell über das Netzwerk übertragen.

Muss gelesen werden: Top 24 Fragen und Antworten zu Java-Interviews

Einpacken

Wenn Sie mehr über Java, OOPs und Full-Stack-Softwareentwicklung erfahren möchten, sehen Sie sich das PG-Diplom in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenges Training bietet, 9 + Projekte und Aufgaben, IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Bereiten Sie sich auf eine Karriere der Zukunft vor

BRANCHENVERTRAUENSWÜRDIGES LERNEN – BRANCHENANERKANNTE ZERTIFIZIERUNG.
Melden Sie sich noch heute an