Întrebări și răspunsuri la interviu de serializare Java [Pentru începători și cu experiență]

Publicat: 2020-09-25

Java este unul dintre cele mai bune limbaje de programare din lume. Am fost destul de norocoși să vedem că Java se dezvoltă de-a lungul timpului și devine limbajul foarte popular pe care îl cunoaștem astăzi. Aceste îmbunătățiri, care au fost făcute în Java, au condus la includerea unor caracteristici cu adevărat cruciale care definesc modul în care scriem programele astăzi. Una dintre aceste caracteristici este Serializarea.

În esența sa, serializarea este doar un mecanism folosit pentru a stoca un obiect în memorie. Deci, când spunem că serializăm un obiect, ne referim la conversia obiectului în cauză din starea care era într-un flux de octeți. Această conversie din starea sa nativă în fluxul de octeți face ca scrierea acestui obiect într-un fișier să fie o ușoară.

Acest fișier poate fi apoi transportat oriunde dorim și pentru a accesa obiectul și caracteristicile acestuia, tot ce trebuie să facem este să deserializăm obiectul. Deserializarea, după cum sugerează și numele, este opusul serializării. Aici, convertim fluxul octetului în starea nativă a obiectului pentru a utiliza obiectul.

Serializarea le permite dezvoltatorilor să-și scrie codul cu un anumit nivel de flexibilitate. Capacitatea de a lua obiectul și de a-l folosi cu proprietățile sale native în altă parte este crucială în fluxul de lucru actual. Nu e de mirare că recrutorii doresc ca potențialii lor angajați să afle mai multe despre serializarea obiectelor în java.

Indiferent dacă ați folosit serializarea în proiectele dvs. sau nu, nu puteți pur și simplu lăsa importanța acesteia să alunece. Așadar, pentru a vă ajuta în efortul dvs. de a deveni un dezvoltator java profesionist, am adunat câteva întrebări fascinante de interviu de serializare java, pe care le veți găsi mai jos.

Întrebări de interviu de serializare Java

Î1. Ce înțelegeți prin serializare în contextul limbajului de programare Java?

Ans. Definiția serializării este poate cea mai elementară, dar și una dintre cele mai frecvente întrebări în contextul serializării Java. Va trebui să răspundeți la această întrebare este aproape la toate interviurile. Prin urmare, trebuie să aveți o definiție bună a serializării Java insuflată în minte. Deci, serializarea nu este altceva decât modul în care un obiect scris în Java este convertit într-un flux de octeți.

Obiectivul principal este de a permite transferul obiectului pe o altă mașină sau de a salva starea obiectului într-un fișier sau de a salva starea obiectului într-o bază de date. Odată ce obiectul este serializat cu succes, atunci am putea obține rapid obiectul înapoi în strălucirea anterioară prin simpla deserializare a obiectului.

Q2. Care este modul în care putem serializa un obiect în Java? Scrieți un program pentru a serializa și a deserializa obiectul.

Ans. Într-un interviu, dacă ești capabil să-ți sporești cunoștințele teoretice cu capacitatea de a scrie un program, șansele selecției tale cresc automat. De asemenea, este dat că, în orice interviu, vi se va cere să scrieți un program de bază (cel puțin un program de bază), care demonstrează cum se produce serializarea și deserializarea. Înainte de a scrie singur acest program, trebuie să vă amintiți un lucru cheie despre serializarea obiectelor în java.

Pentru a serializa un obiect, ar trebui să scrieți obiectul care utilizează interfața de clasă java.io.Serializable. Trebuie să vă asigurați că utilizați o interfață Marker pentru obiectul clasei, pe care doriți să-l serializați. Înseamnă că clasa în cauză nu ar trebui să aibă nicio metodă scrisă în clasă. Această clasă trebuie, de asemenea, să spună Mașinii Virtuale Java că obiectul care urmează va trebui să schimbe formele și să modeleze un flux de octeți.

Codul pentru serializare este scris mai jos.

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

ObjectOutput oout = nou ObjectOutputStream(fout);

Sistem. out .println(„Procesul de serializare a început, serializarea obiectelor angajaților…”);

oout.writeObject(obiect1);

Codul pentru deserializare este scris mai jos.

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

ObjectInput oin= nou ObjectInputStream(fin);

Sistem. out .println(„Procesul de deserializare a început, se afișează obiectele angajaților…”);

Angajat emp;

emp=(Angajat) oin.readObject();

Aflați: Alocarea memoriei în Java: Tot ce trebuie să știți

Q3. Care este diferența dintre interfețele pentru Serializare și Externalizabil?

Ans. Această întrebare ar putea însemna diferența între a fi selectat pentru job sau nu. Să presupunem că reușiți să răspundeți la această întrebare într-un mod foarte cuprinzător. În acest caz, intervievatorul va fi neapărat impresionat de cunoștințele dumneavoastră despre acest subiect, iar șansele selecției dvs. pentru job vor crește automat. Veți găsi toate diferențele critice în tabelul de mai jos:

Proprietățile pe care le comparăm ambele metode.
SERIALIZABIL
EXTERNALIZABIL
Metode care sunt prezente în clasele acestor două interfețe diferite Aceasta se întâmplă să fie o interfață de marcare. Interfețele de marcare nu pot avea nicio funcție de membru. Ele trebuie să fie goale, cu excepția faptului că trebuie să aibă o instrucțiune prezentă în ele, care spune mașinii virtuale Java că obiectul acestei clase trebuie convertit într-un flux de octeți. Aceasta nu este o interfață de producție, ceea ce înseamnă că are unele metode membre.

Are metoda numită writeExternal() și readExternal()

Care este modul lor implicit de serializare? Pentru serializabil, veți găsi o modalitate implicită în care puteți serializa obiectele pe care le scrieți. Tot ce ar trebui să faci ca programator ar fi să găsești o modalitate prin care să poți integra această interfață în programul tău. Nu veți găsi o modalitate implicită în care puteți implementa serializarea. Va trebui să scrieți propriile metode sau să le înlocuiți pe cele existente.
Care este modul în care implementează procesul de serializare? Puteți personaliza modul în care serializarea este implementată în această interfață. Cu toate acestea, nu puteți trece peste metodele existente. Va trebui să implementați aceste metode în propria clasă pentru a obține gradul de libertate pe care îl doriți. În această metodă, ar trebui să înlocuiți metodele implicite. Deci, dacă doriți să implementați o modalitate personalizată de a serializa obiectul, ar trebui să alegeți această interfață în locul modului implicit de Serializable.
Care este gradul de control pe care îl oferă în procesul de serializare, Veți găsi un spațiu mic de mișcare atunci când utilizați această interfață. De asemenea, trebuie să scrieți funcțiile implicite în clasa dvs. pentru a profita la maximum de această metodă. Cu toate acestea, nu este obligatoriu să faceți acest lucru, ceea ce înseamnă că veți putea în continuare să serializați obiecte cu această interfață fără a scrie funcțiile implicite în clasa dvs. personalizată. Această interfață oferă un control excelent asupra întregului proces. Numai din acest motiv, dacă utilizați această interfață, va fi obligatoriu să scrieți cele două metode în clasa dvs. personalizată.
Care este constructorul folosit în timpul utilizării deserializării, Nu există niciun constructor care să fie apelat în timpul procesului de serializare. Există un apel către antreprenor la serializarea obiectelor folosind această interfață.

Î4. Scrieți un program în care implementați procesul personalizat de serializare și deserializare.

Ans. Aici vine partea dificilă. Aceasta este întrebarea prin care puteți arăta toate cunoștințele anterioare ale întrebării printr-un scenariu practic de utilizare. Capacitatea dvs. de a putea scrie aceste programe vă va demonstra în mod clar expertiza și vă va ajuta să obțineți jobul dorit.

Scris mai jos veți găsi modul personalizat de a scrie metoda writeObject().

private void writeObject(ObjectOutputStream os) {

Sistem. out .println(„In, metoda writeObject().”);

incearca {

os.writeInt( acest .id);

os.writeObject( acest .nume);

} prinde (Excepția e) {

e.printStackTrace();

}

}

Mai jos veți găsi implementarea personalizată a deserliazării.

private void readObject(ObjectInputStream ois) {

Sistem. out .println(„In, metoda readObject().”);

incearca {

id=ois.readInt();

nume=(String)ois.readObject();

} prinde (Excepția e) {

e.printStackTrace();

}

}

Î5. Cum veți implementa serializarea și deserializarea folosind interfața Externalizable?

Ans. Pentru a implementa serializarea și deserializarea folosind interfața externalizabilă, va trebui să scrieți funcția writeExternal() și readExternal() pe cont propriu. Veți găsi codul pentru ambele scris mai jos.

Personalizarea metodei writeExternal().

public gol writeExternal (ObjectOutput oo) aruncă IOException {

Sistem. out .println(„în scrieExternal()”);

oo.writeInt(id);

oo.writeObject(nume);

}

Personalizarea metodei readExternal().

public gol readExternal (ObjectInput in) aruncă IOException, ClassNotFoundException {

Sistem. out .println(„în readExternal()”);

acest .id=in.readInt();

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

}

Citește despre: Python vs Java în 2020: pe care ar trebui să-l alegi?

Î6. Să spunem că nu doriți ca o anumită variabilă să fie serializată. Ce veți face pentru a preveni variabilele membre pe care nu doriți să fie serializate?

Ans. Este o întrebare extrem de conceptuală. Trebuie să aveți cunoștințe despre variabile statice și non-statice pentru a putea răspunde rapid la această întrebare. Să presupunem că doriți ca o anumită variabilă să nu fie serializată. În acest caz, va trebui să le faceți statice, deoarece valoarea oricărei variabile statice nu poate fi modificată și, prin urmare, din acest motiv, nu vor fi serializate.

Î7. Ce vrei să spui prin serialVersionUID?

Ans. Pentru fiecare clasă pe care dorim să fie serializată, li se va da un număr de clasă. Acest număr, care este dat fiecărei clase, care urmează să fie serializată, se numește serialVersionUID. Acest ID este esențial deoarece, în momentul recuperării obiectului în forma sa nativă, Java Virtual Machine caută ID-ul, care este asociat cu obiectul.

Apoi se referă rapid la ID-ul claselor care ar fi trebuit să fie serializate. Când găsește clasa corespunzătoare căreia îi aparține acest obiect, începe procesul de deserializare.

Î8. Să spunem că am uitat să menționăm sau să definim serialVersionUID. Care va fi impactul acestei acțiuni asupra programului pe care l-am scris?

Ans. Această întrebare este o altă întrebare fundamentală. Ai nevoie de cunoștințe solide pentru a putea răspunde corect la această întrebare. Primul lucru pe care trebuie să-l clarificăm este că serialVersionUID este folosit pentru a controla versiunea obiectului din întrebare. Să presupunem că nu există niciun ID definit pentru clasă, astfel încât compilatorul Java nu ar ști cărei clasă îi aparține obiectul. În timpul rulării sau când serializați obiectul, nu vor exista erori, deoarece nu este nevoie în sine de definire a vreunui ID.

Cu toate acestea, atunci când dorim ca fluxul de date să fie convertit în obiect, atunci compilatorul Java va arunca o eroare. Compilatorul nu va ști cărei clase îi aparține obiectul și, prin urmare, nu va putea găsi și conecta toate funcțiile membre și variabilele care sunt asociate cu acest obiect. Deoarece compilatorul va fi blocat în acest pas, va genera o eroare de nepotrivire serialVersionUID (java.io.InvalidClassException).

Q9. În cazul în care nu putem serializa, sau metoda de serializare nu este disponibilă, există vreo altă metodă prin care am putea transfera obiectul pe care l-am scris într-o rețea?

Ans. Există câteva metode prin care am putea transfera obiectul pe care l-am scris într-o rețea. Veți găsi câteva dintre ele enumerate mai jos.

  1. Puteți încerca să convertiți obiectul într-un fișier JSON. Nu este atât de dificil să convertiți obiectul într-un șir JSON și, atunci când ați scris fișierul JSON, conversia acestuia în fișierul de cod nu este, de asemenea, foarte dificilă. Deci, puteți transfera șirul JSON, pe care l-ați scris prin rețea.
  2. De asemenea, puteți utiliza instrumentul Hibernare (acesta este un instrument ORM). Acest instrument permite obiectului să persistă în baza de date. Apoi, obiectul care este scris poate fi citit foarte ușor mai târziu.
  3. De asemenea, puteți utiliza tehnologia XML. Puteți încerca să convertiți obiectul într-un fișier XML și apoi puteți transfera rapid acel fișier prin rețea.

Trebuie citit: Top 24 de întrebări și răspunsuri la interviu Java

Încheierea

Dacă sunteți interesat să aflați mai multe despre Java, POO și dezvoltarea de software full-stack, consultați Diploma PG de upGrad și IIIT-B în Dezvoltare de software Full-stack, care este concepută pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, 9 + proiecte și sarcini, statutul de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Pregătiți-vă pentru o carieră a viitorului

ÎNVĂȚARE DE ÎNCREDERE ÎN INDUSTRIE - CERTIFICARE RECUNOSCĂ ÎN INDUSTRIE.
Înscrie-te azi