Domande e risposte sull'intervista sulla serializzazione Java [per principianti ed esperti]
Pubblicato: 2020-09-25Java è uno dei migliori linguaggi di programmazione al mondo. Abbiamo avuto la fortuna di vedere Java svilupparsi nel tempo e diventare il linguaggio estremamente popolare che conosciamo come oggi. Questi miglioramenti, che sono stati fatti in Java, hanno portato all'inclusione di alcune caratteristiche davvero cruciali che definiscono il modo in cui scriviamo programmi oggi. Una di queste funzionalità è la serializzazione.
Nella sua essenza, la serializzazione è solo un meccanismo utilizzato per archiviare un oggetto nella memoria. Quindi, quando diciamo che stiamo serializzando un oggetto, intendiamo che stiamo convertendo l'oggetto in questione dallo stato che era in un flusso di byte. Questa conversione dal suo stato nativo al flusso di byte rende la scrittura di questo oggetto su un file un gioco da ragazzi.
Questo file può quindi essere trasportato ovunque desideriamo e per accedere all'oggetto e alle sue caratteristiche, tutto ciò che dobbiamo fare è de-serializzare l'oggetto. La deserializzazione, come suggerisce il nome, è l'opposto della serializzazione. Qui, convertiamo il flusso del byte nello stato nativo dell'oggetto per utilizzare l'oggetto.
La serializzazione consente agli sviluppatori di scrivere il proprio codice con un certo livello di flessibilità. La capacità di prendere l'oggetto e usarlo con la sua proprietà nativa altrove è fondamentale nel flusso di lavoro odierno. Non c'è da stupirsi se i reclutatori vogliono che i loro potenziali dipendenti sappiano di più sulla serializzazione degli oggetti in Java.
Indipendentemente dal fatto che tu abbia utilizzato o meno la serializzazione nei tuoi progetti, non puoi semplicemente lasciarne scorrere l'importanza. Quindi, per aiutarti nel tuo sforzo di diventare uno sviluppatore java professionista, abbiamo raccolto alcune affascinanti domande di intervista sulla serializzazione di java, che troverai di seguito.
Domande di intervista sulla serializzazione Java
Q1. Cosa intendi per serializzazione nel contesto del linguaggio di programmazione Java?

Ans. La definizione di serializzazione è forse la domanda più basilare ma una delle più frequenti nel contesto della serializzazione Java. Dovrai rispondere a questa domanda è quasi tutte le interviste. Quindi, devi avere una buona definizione di serializzazione Java instillata nella tua mente. Quindi, la serializzazione non è altro che il modo in cui un oggetto scritto in Java viene convertito in un flusso di byte.
L'obiettivo principale è consentire il trasferimento dell'oggetto su un'altra macchina o salvare lo stato dell'oggetto in un file o salvare lo stato dell'oggetto in un database. Una volta che l'oggetto è stato serializzato con successo, potremmo riportarlo rapidamente al suo antico splendore semplicemente deserializzando l'oggetto.
Q2. Qual è il modo in cui possiamo serializzare un oggetto in Java? Scrivere un programma per serializzare e deserializzare l'oggetto.
Ans. In un colloquio, se sei in grado di aumentare le tue conoscenze teoriche con la capacità di scrivere un programma, le possibilità della tua selezione aumentano automaticamente. È anche dato che in ogni colloquio ti verrà chiesto di scrivere un programma di base (almeno un programma di base), che dimostri come si verificano la serializzazione e la deserializzazione. Prima di scrivere tu stesso questo programma, devi ricordare una cosa fondamentale sulla serializzazione degli oggetti in Java.
Per serializzare un oggetto, è necessario scrivere l'oggetto che utilizza l'interfaccia java.io.Serializable della classe. Devi assicurarti di utilizzare un'interfaccia Marker per l'oggetto della classe, che vuoi serializzare. Ciò significa che la classe in questione non dovrebbe avere alcun metodo scritto nella classe. Questa classe deve anche dire alla Java Virtual Machine che l'oggetto successivo dovrà cambiare forma e modellare un flusso di byte.
Il codice per la serializzazione è scritto di seguito.
OutputStream fout = nuovo FileOutputStream(“ser.txt”);
ObjectOutput out = nuovo ObjectOutputStream(fout);
Sistema. out .println(“Processo di serializzazione avviato, serializzazione oggetti dipendenti…”);
out.writeObject(oggetto1);
Il codice per la deserializzazione è scritto di seguito.
InputStream fin= nuovo FileInputStream(“ser.txt”);
ObjectInput oin= nuovo ObjectInputStream(fin);
Sistema. out .println(“Processo di deserializzazione avviato, visualizzazione oggetti dipendente…”);
Impiegato dipendente;
emp=(Dipendente) oin.readObject();
Impara: allocazione della memoria in Java: tutto ciò che devi sapere
Q3. Qual è la differenza tra le interfacce per Serialization ed Externalizable?
Ans. Questa domanda potrebbe fare la differenza tra il fatto che tu venga selezionato per il lavoro o meno. Supponiamo che tu riesca a rispondere a questa domanda in modo molto esauriente. In tal caso, l'intervistatore è destinato a rimanere colpito dalla tua conoscenza di questo argomento e le possibilità della tua selezione per il lavoro aumenteranno automaticamente alle stelle. Troverai tutte le differenze critiche nella tabella seguente:
Le proprietà su cui stiamo confrontando entrambi questi metodi. | SERIALIZZABILE | ESTERNALIZZABILE |
Metodi che sono presenti nelle classi di queste due diverse interfacce | Questa sembra essere un'interfaccia marker. Le interfacce degli indicatori non possono avere alcuna funzione membro. Devono essere vuoti tranne per il fatto che devono avere un'istruzione presente in essi, che dice alla Java Virtual Machine che l'oggetto di questa classe deve essere convertito in un flusso di byte. | Questa non è un'interfaccia maker, il che significa che ha alcuni metodi membri. Ha un metodo chiamato writeExternal() e readExternal() |
Qual è il loro modo predefinito di serializzazione? | Per serializzabile, troverai un modo predefinito in cui puoi serializzare gli oggetti che scrivi. Tutto ciò che dovresti fare come programmatore sarebbe trovare un modo in cui puoi integrare questa interfaccia nel tuo programma. | Non troverai un modo predefinito in cui puoi implementare la serializzazione. Dovrai scrivere i tuoi metodi o sovrascrivere quelli esistenti. |
Qual è il modo in cui implementano il processo di serializzazione? | È possibile personalizzare il modo in cui viene implementata la serializzazione in questa interfaccia. Tuttavia, non è possibile ignorare i metodi esistenti. Dovrai implementare questi metodi nella tua classe per ottenere il grado di libertà che desideri. | In questo metodo, dovresti sovrascrivere i metodi predefiniti. Quindi, se desideri implementare un modo personalizzato per serializzare l'oggetto, dovresti scegliere questa interfaccia rispetto al modo predefinito di Serializable. |
Qual è il grado di controllo che offrono nel processo di serializzazione, | Troverai un piccolo spazio di manovra quando utilizzi questa interfaccia. Devi anche scrivere le funzioni predefinite nella tua classe per ottenere il massimo da questo metodo. Tuttavia, non è obbligatorio farlo, il che significa che sarai comunque in grado di serializzare oggetti con questa interfaccia senza scrivere le funzioni predefinite nella tua classe personalizzata. | Questa interfaccia fornisce un controllo eccellente sull'intero processo. Solo per questo motivo, se stai usando questa interfaccia, sarà obbligatorio per te scrivere i due metodi nella tua classe personalizzata. |
Qual è il costruttore utilizzato durante l'utilizzo della deserializzazione, | Non esiste un costruttore chiamato durante il processo di serializzazione. | C'è una chiamata effettuata al contraente durante la serializzazione degli oggetti utilizzando questa interfaccia. |
Q4. Scrivi un programma in cui implementi il processo personalizzato di serializzazione e deserializzazione.

Ans. Qui arriva la parte difficile. Questa è la domanda attraverso la quale puoi mostrare tutta la conoscenza della domanda precedente attraverso uno scenario di caso d'uso pratico. La capacità per te di essere in grado di scrivere questi programmi dimostrerà chiaramente la tua esperienza e ti aiuterà a ottenere il lavoro che desideri.
Scritto di seguito troverai il modo personalizzato di scrivere il metodo writeObject().
private void writeObject (sistema operativo ObjectOutputStream) {
Sistema. out .println("In, metodo writeObject().");
prova {
os.writeInt( questo .id);
os.writeObject( questo .nome);
} cattura (Eccezione e) {
e.printStackTrace();
}
}
Scritta di seguito troverai l'implementazione personalizzata della deserializzazione.
privato void readObject(ObjectInputStream ois) {
Sistema. out .println("In, metodo readObject().");
prova {
id=ois.readInt();
nome=(Stringa)ois.readObject();
} cattura (Eccezione e) {
e.printStackTrace();
}
}
Q5. Come implementerai la serializzazione e la deserializzazione utilizzando l'interfaccia Externalizable?
Ans. Per implementare la serializzazione e la deserializzazione usando l'interfaccia externalizable, dovrai scrivere la funzione writeExternal() e readExternal() da solo. Troverai il codice per entrambi scritto di seguito.
Personalizzazione del metodo writeExternal()
pubblico vuoto writeExternal (ObjectOutput oo) genera IOException {
Sistema. out .println("in writeExternal()");
oo.writeInt(id);
oo.writeObject(nome);
}
Personalizzazione del metodo readExternal()
pubblico vuoto readExternal (ObjectInput in) genera IOException, ClassNotFoundException {
Sistema. out .println("in readExternal()");
questo .id=in.readInt();
questo .nome=(Stringa)in.readObject();
}
Leggi: Python vs Java nel 2020: quale dovresti scegliere?
Q6. Diciamo che non si desidera serializzare una variabile specifica. Cosa farai per impedire che le variabili membro che non desideri vengano serializzate?
Ans. È una domanda altamente concettuale. È necessario conoscere le variabili statiche e non statiche per poter rispondere rapidamente a questa domanda. Supponiamo di volere che una particolare variabile non venga serializzata. In tal caso, dovrai renderli statici poiché il valore di qualsiasi variabile statica non può essere modificato e quindi, per questo motivo, non verranno serializzati.
Q7. Cosa intendi per serialVersionUID?
Ans. Per ogni classe che vogliamo serializzare, verrà assegnato loro un numero di classe. Questo numero, assegnato a ogni classe da serializzare, è chiamato serialVersionUID. Questo ID è essenziale perché, al momento del ripristino dell'oggetto nella sua forma nativa, la Java Virtual Machine cerca l'ID, che è associato all'oggetto.
Quindi fa rapidamente riferimento all'ID delle classi che avrebbero dovuto essere serializzate. Quando trova la classe corrispondente a cui appartiene questo oggetto, inizia il processo di deserializzazione.
Q8. Diciamo che abbiamo dimenticato di menzionare o definire serialVersionUID. Quale sarà l'impatto di questa azione sul programma che abbiamo scritto?
Ans. Questa domanda è un'altra questione fondamentale. Avresti bisogno di una solida conoscenza per essere in grado di rispondere correttamente a questa domanda. La prima cosa che dobbiamo chiarire è che serialVersionUID viene utilizzato per eseguire il controllo della versione dell'oggetto nella domanda. Diciamo che non esiste un ID definito per la classe, quindi il compilatore Java non saprebbe a quale classe appartiene l'oggetto. In fase di esecuzione o durante la serializzazione dell'oggetto, non ci saranno errori perché non è necessario definire di per sé alcun ID.

Tuttavia, quando vogliamo che il flusso di dati venga convertito nell'oggetto, il compilatore Java genererà un errore. Il compilatore non saprà a quale classe appartiene l'oggetto e quindi non sarà in grado di trovare e collegare tutte le funzioni membro e le variabili associate a questo oggetto. Poiché il compilatore sarà bloccato in questo passaggio, genererà un errore di mancata corrispondenza serialVersionUID (java.io.InvalidClassException).
Q9. Nel caso in cui non possiamo serializzare, o il metodo di serializzazione non è disponibile, esiste un altro metodo con cui potremmo trasferire l'oggetto che abbiamo scritto su una rete?
Ans. Ci sono alcuni metodi in cui potremmo trasferire l'oggetto che abbiamo scritto su una rete. Ne troverai alcuni elencati di seguito.
- Puoi provare a convertire l'oggetto in un file JSON. Non è così difficile convertire l'oggetto in una stringa JSON e, dopo aver scritto il file JSON, anche la sua conversione nel file di codice non è molto difficile. Quindi, puoi trasferire la stringa JSON, che hai scritto sulla rete.
- Puoi anche usare lo strumento Ibernazione (questo è uno strumento ORM). Questo strumento consente all'oggetto di persistere nel database. Quindi l'oggetto che viene scritto può essere letto molto facilmente anche in seguito.
- Puoi anche usare la tecnologia di XML. Puoi provare a convertire l'oggetto in un file XML e quindi trasferire rapidamente quel file tramite la rete.
Da leggere: le 24 principali domande e risposte per le interviste Java
Avvolgendo
Se sei interessato a saperne di più su Java, OOP e sviluppo software full-stack, dai un'occhiata al Diploma PG di upGrad e IIIT-B in Sviluppo software full-stack, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, 9 + progetti e incarichi, stato di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.