top 50 core java interview questions
Cele mai frecvente întrebări și răspunsuri la interviurile Java cu exemple:
În acest tutorial, am acoperit aproape 50 de întrebări importante de bază despre interviurile Java pentru cei mai noi și candidații cu experiență.
Această postare pe JAVA Interview Questions este pregătită pentru a vă ajuta să înțelegeți conceptele de bază ale programării Java în scopuri de interviu. Toate conceptele importante JAVA sunt explicate aici cu exemple pentru înțelegerea dvs. ușoară.
Acest tutorial acoperă subiecte JAVA precum definiții Java de bază, concepte OOP, specificatori de acces, colecții, excepții, fire, serializare etc., cu exemple pentru a vă pregăti perfect pentru a face față oricărui interviu JAVA cu încredere.
Cele mai populare întrebări și răspunsuri la interviurile Java
Mai jos este prezentată o listă cuprinzătoare a celor mai importante și mai frecvente întrebări de bază și avansate de interviuri de programare Java cu răspunsuri detaliate.
Q # 1) Ce este JAVA?
Răspuns: Java este un limbaj de programare la nivel înalt și este independent de platformă.
Java este o colecție de obiecte. A fost dezvoltat de Sun Microsystems. Există o mulțime de aplicații, site-uri web și jocuri care sunt dezvoltate folosind Java.
Q # 2) Care sunt caracteristicile JAVA?
Răspuns: Caracteristicile Java sunt următoarele:
- Concepte OOP
- Orientat pe obiecte
- Moştenire
- Incapsularea
- Polimorfism
- Abstracție
- Platforma independenta: Un singur program funcționează pe diferite platforme fără nicio modificare.
- Performanta ridicata: JIT (compilatorul Just In Time) permite performanțe ridicate în Java. JIT convertește codul de octet în limbajul mașinii și apoi JVM începe executarea.
- Multi-threaded: Un flux de execuție este cunoscut sub numele de Thread. JVM creează un thread care se numește thread principal. Utilizatorul poate crea mai multe fire prin extinderea clasei de fire sau prin implementarea interfeței Runnable.
Î # 3) Cum permite Java să permită performanțe ridicate?
Răspuns: Java folosește compilatorul Just In Time pentru a permite performanțe ridicate. Este folosit pentru a converti instrucțiunile în bytecodes.
Q # 4) Denumiți IDE-urile Java?
Răspuns: Eclipse și NetBeans sunt IDE-urile JAVA.
Q # 5) Ce vrei să spui prin constructor?
Răspuns: Constructorul poate fi explicat în detaliu cu puncte înrolate:
- Când se creează un obiect nou într-un program, este invocat un constructor corespunzător clasei.
- Constructorul este o metodă care are același nume ca și numele clasei.
- Dacă un utilizator nu creează implicit un constructor, va fi creat un constructor implicit.
- Constructorul poate fi suprasolicitat.
- Dacă utilizatorul a creat un constructor cu un parametru, atunci ar trebui să creeze un alt constructor în mod explicit fără un parametru.
Q # 6) Ce se înțelege prin variabila locală și variabila instanță?
Răspuns:
Variabile locale sunt definite în metoda și sfera variabilelor care există în interiorul metodei în sine.
Variabila de instanta este definit în interiorul clasei și în afara metodei, iar sfera variabilelor există în întreaga clasă.
Q # 7) Ce este o clasă?
Răspuns: Toate codurile Java sunt definite într-o clasă. Are variabile și metode.
Variabile sunt atribute care definesc starea unei clase.
Metode sunt locul unde trebuie realizată logica exactă a afacerii. Conține un set de instrucțiuni (sau) instrucțiuni pentru a satisface cerința specială.
Exemplu:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
Q # 8) Ce este un obiect?
Răspuns: O instanță a unei clase se numește obiect. Obiectul are stare și comportament.
Ori de câte ori JVM citește cuvântul cheie „new ()”, atunci va crea o instanță a acelei clase.
Exemplu:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
Codul de mai sus creează obiectul pentru clasa Addition.
Q # 9) Care sunt conceptele OOPs?
Răspuns: Conceptele OOP includ:
- Moştenire
- Incapsularea
- Polimorfism
- Abstracție
- Interfață
Citire sugerată = >> Întrebări de top ale interviurilor OOP
Q # 10) Ce este Moștenirea?
Răspuns: Moștenirea înseamnă că o clasă se poate extinde la o altă clasă. Astfel, codurile pot fi refolosite de la o clasă la alta. Clasa existentă este cunoscută sub numele de clasa Super, în timp ce clasa derivată este cunoscută ca o subclasă.
Exemplu:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
Moștenirea se aplică numai publicului și membrilor protejați. Membrii privați nu pot fi moșteniți.
Q # 11) Ce este încapsularea?
Răspuns: Scopul încapsulării:
- Protejează codul de alte persoane.
- Mentenabilitatea codului.
Exemplu:
Declarăm „a” ca o variabilă întreagă și nu ar trebui să fie negativă.
public class Addition(){ int a=5; }
Dacă cineva schimbă variabila exactă ca „ a = -5 ' atunci este rău.
Pentru a depăși problema, trebuie să urmăm pașii de mai jos:
- Putem face variabila privată sau protejată.
- Folosiți metode de acces public precum set și get.
Astfel, codul de mai sus poate fi modificat ca:
public class Addition(){ private int a = 5; //Here the variable is marked as private }
Codul de mai jos arată getter și setter.
Condițiile pot fi furnizate în timpul setării variabilei.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
Pentru încapsulare, trebuie să facem private toate variabilele de instanță și să creăm setter și getter pentru acele variabile. Ceea ce, la rândul său, îi va forța pe alții să cheme seterii, mai degrabă decât să acceseze datele direct.
Q # 12) Ce este polimorfismul?
Răspuns: Polimorfismul înseamnă multe forme.
Un singur obiect se poate referi la super-clasă sau subclasă în funcție de tipul de referință care se numește polimorfism.
Exemplu:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
Folosind tipul de referință de manipulare putem apela metoda „add ()” a clasei Addition. Această abilitate este cunoscută sub numele de Polimorfism. Polimorfismul este aplicabil pentru primordial și nu pentru supraîncărcare .
Q # 13) Ce se înțelege prin metoda suprascriere?
Răspuns: Metoda de suprascriere se întâmplă dacă metoda subclasei îndeplinește condițiile de mai jos cu metoda Superclasă:
- Numele metodei trebuie să fie același
- Argumentul ar trebui să fie același
- Tipul de returnare ar trebui să fie, de asemenea, același
Avantajul cheie al suprascrierii este că Subclasa poate furniza unele informații specifice despre acel tip de subclasă decât superclasa.
Exemplu:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
addition.add () metoda apelează metoda add () din clasa secundară și nu clasa părinte. Deci, acesta suprascrie metoda Super-class și este cunoscut sub numele de Method Overriding.
Q # 14) Ce se înțelege prin supraîncărcare?
Răspuns: Supraîncărcarea metodelor se întâmplă pentru clase diferite sau în cadrul aceleiași clase.
Pentru supraîncărcarea metodei, metoda sub-clasă ar trebui să îndeplinească condițiile de mai jos cu metoda super-clasă (sau) metode din aceeași clasă:
- Același nume de metodă
- Diferite tipuri de argumente
- Pot exista diferite tipuri de returnare
Exemplu:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
Aici metoda add () are parametri diferiți în clasa Addition este supraîncărcată în aceeași clasă ca și super-clasa.
Notă: Polimorfismul nu se aplică pentru supraîncărcarea metodei.
Q # 15) Ce se înțelege prin interfață?
Răspuns: Mai multe moșteniri nu pot fi realizate în java. Pentru a depăși această problemă, este introdus conceptul de interfață.
O interfață este un șablon care are doar declarații de metodă și nu implementarea metodei.
Exemplu:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- Toate metodele din interfață sunt interne vid public abstract .
- Toate variabilele din interfață sunt interne public static final adică constante.
- Clasele pot implementa interfața și nu se extind.
- Clasa care implementează interfața ar trebui să ofere o implementare pentru toate metodele declarate în interfață.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
Q # 16) Ce se înțelege prin clasa Abstract?
Răspuns: Putem crea clasa Abstract utilizând cuvântul cheie „Abstract” înainte de numele clasei. O clasă abstractă poate avea atât metode „Abstracte”, cât și metode „Non-abstracte” care sunt o clasă concretă.
Metoda abstractă:
Metoda care are doar declarația și nu implementarea se numește metoda abstractă și are cuvântul cheie numit „abstract”. Declarațiile se încheie cu punct și virgulă.
Exemplu:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- O clasă abstractă poate avea și o metodă non-abstractă.
- Subclasa concretă care extinde clasa Abstract ar trebui să asigure implementarea metodelor abstracte.
Q # 17) Diferența dintre Array și Array List.
Răspuns: Diferența dintre Array și Array List poate fi înțeleasă din tabelul de mai jos:
Matrice | Lista matrice |
---|---|
Dimensiunea trebuie indicată în momentul declarației matricei. Șir () nume = șir nou (2) | Este posibil ca dimensiunea să nu fie necesară. Schimbă dimensiunea dinamic. Numele ArrayList = ArrayList nou |
Pentru a pune un obiect în matrice trebuie să specificăm indexul. nume (1) = „carte” | Nu este necesar un index. name.add („carte”) |
Array nu este parametrizat de tip | ArrayList în java 5.0 sunt parametrizate. De exemplu: această paranteză unghiulară este un parametru de tip care înseamnă o listă de șiruri. |
Q # 18) Diferența dintre String, String Builder și String Buffer.
Răspuns:
Şir: Variabilele șir sunt stocate într-un „pool de șiruri constante”. Odată ce referința șirului modifică vechea valoare care există în „pool-ul constant de șiruri”, nu poate fi ștearsă.
Exemplu:
Numele șirului = „carte”;
Grup de șiruri constante
.
Dacă valoarea-nume s-a schimbat din „carte” în „stilou”.
Grup de șiruri constante
Apoi, valoarea mai veche rămâne în șirul constant de șiruri.
String Buffer:
- Aici valorile șirurilor sunt stocate într-o stivă. Dacă valorile sunt modificate, atunci noua valoare înlocuiește valoarea mai veche.
- Bufferul șirului este sincronizat, care este sigur pentru fire.
- Performanța este mai lentă decât String Builder.
Exemplu:
String Buffer name = ”carte”;
Odată ce valoarea numelui a fost schimbată în „stilou”, „cartea” este ștearsă în stivă.
String Builder:
Acesta este același lucru cu bufferul de șiruri, cu excepția constructorului de șiruri care nu este filetat în siguranță, care nu este sincronizat. Deci, evident, performanța este rapidă.
Q # 19) Explicați despre specificatorii de acces public și privat.
Răspuns: Metodele și variabilele de instanță sunt cunoscute ca membri.
Public:
Membrii publici sunt vizibili în același pachet, precum și în pachetul exterior care este pentru alte pachete.
Membrii publici ai clasei A sunt vizibili pentru clasa B (același pachet), precum și pentru clasa C (pachete diferite).
Privat:
Membrii privați sunt vizibili numai în aceeași clasă și nu pentru celelalte clase din același pachet, precum și pentru clasele din pachetele exterioare.
Membrii privați din clasa A sunt vizibili numai în acea clasă. Este invizibil atât pentru clasa B, cât și pentru clasa C.
Q # 20) Diferența dintre specificatorii de acces implicit și protejat.
Răspuns:
Mod implicit: Metodele și variabilele declarate într-o clasă fără specificatori de acces sunt numite implicite.
Membrii impliciți din clasa A sunt vizibili pentru celelalte clase din interiorul pachetului și invizibili pentru clasele din afara pachetului.
Deci, membrii clasei A sunt vizibili pentru clasa B și invizibili pentru clasa C.
Protejat:
.
Protejat este același ca Default, dar dacă o clasă se extinde, atunci este vizibilă chiar dacă este în afara pachetului.
Membrii clasei A sunt vizibili pentru clasa B, deoarece se află în pachet. Pentru Clasa C este invizibil, dar dacă Clasa C extinde Clasa A, atunci membrii sunt vizibili pentru Clasa C, chiar dacă este în afara pachetului.
Q # 21) Diferența dintre HashMap și HashTable.
Răspuns: Diferența dintre HashMap și HashTable poate fi văzută mai jos:
HashMap | HashTable |
---|---|
Metodele nu sunt sincronizate | Metodele cheie sunt sincronizate |
Nu siguranța firului | Siguranța firului |
Iteratorul este folosit pentru a itera valorile | Enumerator este folosit pentru a itera valorile |
Permite o cheie nulă și mai multe valori nule | Nu permite nimic nul |
Performanța este mare decât HashTable | Performanța este lentă |
Q # 22) Diferența dintre HashSet și TreeSet.
Răspuns: Diferența dintre HashSet și TreeSet poate fi văzută mai jos:
HashSet | TreeSet |
---|---|
Elementele inserate sunt în ordine aleatorie | Menține elementele în ordinea sortată |
Poate stoca obiecte nule | Nu s-au putut stoca obiecte nule |
Performanța este rapidă | Performanța este lentă |
Q # 23) Diferența dintre clasa abstractă și interfață.
Răspuns: Diferențele dintre clasa abstractă și interfață sunt după cum urmează:
Clasa abstractă:
- Clasele abstracte au un constructor implicit și se numește ori de câte ori este instanțiată subclasa concretă.
- Conține metode abstracte, precum și metode non-abstracte.
- Clasa care extinde clasa Abstract nu ar trebui să necesite implementarea tuturor metodelor, doar metodele Abstract trebuie implementate în subclasa concretă.
- Clasa Abstract conține variabile de instanță.
Interfață:
- Nu are niciun constructor și nu a putut fi instanțiat.
- Trebuie declarată singura metodă abstractă.
- Clasele care implementează interfața ar trebui să asigure implementarea tuturor metodelor.
- Interfața conține doar constante.
Î # 24) Care este semnificația colecțiilor în Java?
întrebări și răspunsuri la interviuri
Răspuns: Colecția este un cadru care este conceput pentru a stoca obiectele și pentru a manipula designul pentru a stoca obiectele.
Colecțiile sunt utilizate pentru a efectua următoarele operațiuni:
- In cautarea
- Triere
- Manipulare
- Inserare
- Ștergere
Un grup de obiecte este cunoscut sub numele de colecții. Toate clasele și interfețele pentru colectare sunt disponibile în pachetul Java util.
Q # 25) Care sunt toate clasele și interfețele disponibile în colecții?
Răspuns: Mai jos sunt clasele și interfețele disponibile în colecții:
Interfețe:
- Colectie
- Listă
- A stabilit
- Hartă
- Set sortat
- Harta sortată
- Coadă
Clase:
- Liste:
- Lista matrice
- Vector
- Listă legată
Seturi:
- Hash set
- Set Hash conectat
- Set de copaci
Hărți:
- Hash Hash
- Hash Table
- TreeMap
- Hashed Link conectat
Coadă:
- Coadă prioritară
Q # 26) Ce se înțelege prin ordonat și sortat în colecții?
Răspuns:
Ordonat: Înseamnă că valorile stocate într-o colecție se bazează pe valorile care sunt adăugate la colecție. Deci, putem itera valorile din colecție într-o anumită ordine.
Sortate: Mecanismele de sortare pot fi aplicate intern sau extern, astfel încât grupul de obiecte sortate într-o anumită colecție să se bazeze pe proprietățile obiectelor.
Q # 27) Explicați diferitele liste disponibile în colecție.
Răspuns: Valorile adăugate la listă se bazează pe poziția indexului și este ordonată după poziția indexului. Sunt permise duplicate.
Tipurile de liste sunt:
a) Lista matrice:
- Iterație rapidă și acces aleatoriu rapid.
- Este o colecție ordonată (după index) și nu sortată.
- Implementează interfața de acces aleatoriu.
Exemplu:
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
Ieșire:
(Măr, cireș, kiwi, banană, cireș)
Din ieșire, Array List menține ordinea de inserare și acceptă duplicatele. Dar nu este sortat.
b) Vector:
Este la fel ca Lista de matrice.
- Metodele vectoriale sunt sincronizate.
- Siguranța firului.
- De asemenea, implementează acces aleatoriu.
- Siguranța firelor provoacă de obicei o performanță.
Exemplu:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
Ieșire:
(cireș, măr, banană, kiwi, măr)
Vector menține, de asemenea, ordinea de inserare și acceptă duplicatele.
c) Lista legată:
- Elementele sunt dublu legate între ele.
- Performanța este mai lentă decât lista Array.
- O alegere bună pentru inserare și ștergere.
- În Java 5.0 acceptă metode de coadă obișnuite peek (), Pool (), Offer () etc.
Exemplu:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ieșire:
(banană, cireș, măr, kiwi, banană)
Menține ordinea de inserare și acceptă duplicatele.
Q # 28) Explicați despre Set și tipurile lor într-o colecție.
Răspuns: Setului îi pasă de unicitate. Nu permite duplicări. Aici metoda „egal ()” este utilizată pentru a determina dacă două obiecte sunt identice sau nu.
a) Set Hash:
- Neordonate și neordonate.
- Folosește codul hash al obiectului pentru a insera valorile.
- Utilizați acest lucru atunci când cerința este „fără duplicate și nu vă pasă de comandă”.
Exemplu:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ieșire:
(banane, cireșe, kiwi, măr)
Nu respectă nicio ordine de inserare. Duplicatele nu sunt permise.
b) Set Hash conectat:
- O versiune ordonată a setului de hash este cunoscută sub numele de Linked Hash Set.
- Menține o listă dublă legată a tuturor elementelor.
- Utilizați acest lucru atunci când este necesară o comandă de iterație.
Exemplu:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Ieșire:
(banane, cireșe, măr, kiwi)
Menține ordinea de inserare în care au fost adăugate la set. Duplicatele nu sunt permise.
c) Set de arbori:
- Este una dintre cele două colecții sortate.
- Folosește structura arborelui „Read-Black” și garantează că elementele vor fi în ordine crescătoare.
- Putem construi un set de arbori cu constructorul folosind un comparator comparabil (sau).
Exemplu:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
Ieșire:
(măr, banană, cireș, kiwi)
TreeSet sortează elementele în ordine crescătoare. Și duplicatele nu sunt permise.
Q # 29) Explicați despre hartă și tipurile sale.
Răspuns: hartă îi pasă de identificatorul unic. Putem asocia o cheie unică la o anumită valoare. Este o pereche cheie / valoare. Putem căuta o valoare, pe baza cheii. La fel ca setul, harta folosește și metoda „equals ()” pentru a determina dacă două taste sunt aceleași sau diferite.
Harta este de următoarele tipuri:
a) Harta Hash:
- Harta neordonată și neordonată.
- Hashmap este o alegere bună atunci când nu ne pasă de comandă.
- Permite o cheie nulă și mai multe valori nule.
Exemplu:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
Ieșire:
{cheie2 = banană, cheie1 = cireș, cheie4 = kiwi, cheie3 = măr}
Cheile duplicate nu sunt permise în hartă.
Nu menține nicio ordine de inserare și este nesortat.
b) Hash Table:
- La fel ca cheia vector, metodele clasei sunt sincronizate.
- Siguranța firului și, prin urmare, încetinește performanța.
- Nu permite nimic care este nul.
Exemplu:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ieșire:
{cheie2 = măr, cheie1 = cireș, cheie4 = kiwi, cheie3 = banană}
Cheile duplicate nu sunt permise.
c) Hash Link conectat:
- Menține ordinea de inserare.
- Mai lent decât harta Hash.
- Mă pot aștepta la o iterație mai rapidă.
Exemplu:
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ieșire:
{cheie2 = măr, cheie1 = cireș, cheie4 = kiwi, cheie3 = banană}
Cheile duplicate nu sunt permise.
d) TreeMap:
- Harta sortată.
- Ca și setul de arbori, putem construi o ordine de sortare cu constructorul.
Exemplu:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Ieșire:
{cheie1 = cireș, cheie2 = banană, cheie3 = măr, cheie4 = kiwi}
Este sortat în ordine crescătoare pe baza cheii. Cheile duplicate nu sunt permise.
Q # 30) Explicați coada prioritară.
Răspuns: Interfață coadă
Coadă prioritară: Clasa listei conectate a fost îmbunătățită pentru a implementa interfața cozii. Cozile pot fi tratate cu o listă legată. Scopul unei cozi este „Priority-in, Priority-out”.
Prin urmare, elementele sunt ordonate fie în mod natural, fie în conformitate cu comparatorul. Ordinea elementelor reprezintă prioritatea lor relativă.
Q # 31) Ce se înțelege prin Excepție?
Răspuns: O excepție este o problemă care poate apărea în timpul fluxului normal de execuție. O metodă poate arunca o excepție atunci când ceva se lamentează în timpul rulării. Dacă această excepție nu a putut fi gestionată, atunci executarea se încheie înainte de a finaliza sarcina.
Dacă am gestionat excepția, atunci fluxul normal este continuat. Excepțiile sunt o subclasă a java.lang.Exception.
Exemplu de manipulare Excepție:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
Q # 32) Care sunt tipurile de excepții?
Răspuns: Există două tipuri de excepții. Acestea sunt explicate mai jos în detaliu.
a) Excepție bifată:
Aceste excepții sunt verificate de compilator în momentul compilării. Clasele care extind clasa Throwable, cu excepția excepției Runtime și Error sunt numite Excepție bifată.
Excepțiile bifate trebuie să declare excepția folosind cuvântul cheie throws (sau) înconjurat de try / catch adecvat.
De exemplu, Excepție ClassNotFound
b) Excepție nebifată:
Aceste excepții nu sunt verificate în timpul compilării de către compilator. Compilatorul nu forțează să gestioneze aceste excepții. Include:
- Excepție aritmetică
- Indicele matricei este în afara limitelor
Q # 33) Care sunt diferitele moduri de a gestiona excepțiile?
Răspuns: Două moduri diferite de a gestiona excepțiile sunt explicate mai jos:
a) Folosind try / catch:
Codul riscant este înconjurat de blocul try. Dacă apare o excepție, atunci este prinsă de blocul de captură care este urmat de blocul de încercare.
Exemplu:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
b) Prin declararea cuvintelor cheie:
La sfârșitul metodei, putem declara excepția folosind cuvântul cheie throws.
Exemplu:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
Q # 34) Care sunt avantajele manipulării excepțiilor?
Răspuns: Avantajele sunt următoarele:
- Fluxul normal al execuției nu va fi încheiat dacă se tratează o excepție
- Putem identifica problema folosind declarația de captură
Q # 35) Care sunt excepțiile care tratează cuvintele cheie în Java?
Răspuns: Înscrise mai jos sunt cele două cuvinte cheie pentru gestionarea excepțiilor:
o incercare:
Când un cod riscant este înconjurat de un bloc de încercare. O excepție care apare în blocul de încercare este surprinsă de un bloc de captură. Încercați poate fi urmat fie de captură (sau) în cele din urmă (sau) de ambele. Dar oricare dintre blocuri este obligatoriu.
b) prinde:
Acesta este urmat de un bloc de încercare. Excepții sunt surprinse aici.
c) în cele din urmă:
Aceasta este urmată fie de blocul de încercare (sau) bloc de captură. Acest bloc este executat indiferent de o excepție. Deci, în general, codurile de curățare sunt furnizate aici.
Q # 36) Explicați despre propagarea excepției.
Răspuns: Excepția este aruncată mai întâi de la metoda care se află în partea de sus a stivei. Dacă nu prinde, atunci apare metoda și trece la metoda anterioară și așa mai departe până când sunt obținute.
Aceasta se numește propagare de excepție.
Exemplu:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
Din exemplul de mai sus, stiva arată așa cum se arată mai jos:
Dacă apare o excepție în plus() metoda nu este prinsă, apoi trece la metodă adăuga() . Apoi este mutat la principal() metoda și apoi va opri fluxul de execuție. Se numește propagare de excepție.
Q # 37) Care este cuvântul cheie final în Java?
Răspuns:
Final variabil: Odată ce o variabilă este declarată finală, atunci valoarea variabilei nu a putut fi modificată. Este ca o constantă.
Exemplu:
int final = 12;
Metoda finală: Un cuvânt cheie final într-o metodă nu a putut fi suprascris. Dacă o metodă este marcată ca finală, atunci aceasta nu poate fi anulată de subclasă.
Clasa finală: Dacă o clasă este declarată definitivă, atunci clasa nu poate fi subclasată. Nicio clasă nu poate prelungi clasa finală.
Q # 38) Ce este un fir?
Răspuns: În Java, fluxul de execuție se numește Thread. Fiecare program java are cel puțin un thread numit thread principal, firul principal este creat de JVM. Utilizatorul își poate defini propriile fire extinzând clasa Thread (sau) prin implementarea interfeței Runnable. Subiectele sunt executate simultan.
Exemplu:
public static void main(String() args){//main thread starts here }
Q # 39) Cum creați un fir în Java?
Răspuns: Există două modalități disponibile pentru a crea un fir.
a) Extindeți clasa Thread: Extinderea unei clase Thread și suprascrierea metodei run. Firul este disponibil în java.lang.thread.
Exemplu:
Public class Addition extends Thread { public void run () { } }
Dezavantajul utilizării unei clase de fire este că nu putem extinde alte clase deoarece am extins deja clasa de fire. Putem supraîncărca metoda run () din clasa noastră.
b) Implementați interfața Runnable: O altă modalitate este prin implementarea interfeței rulabile. Pentru aceasta, ar trebui să oferim implementarea metodei run () care este definită în interfață.
Exemplu:
Public class Addition implements Runnable { public void run () { } }
Q # 40) Explicați despre metoda join ().
Răspuns: Metoda Join () este utilizată pentru a uni un fir cu sfârșitul firului în curs de executare.
Exemplu:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
Pe baza codului de mai sus, firul principal a început execuția. Când ajunge la cod t.start () apoi „thread t” pornește propria stivă pentru execuție. JVM comută între firul principal și „firul t”.
Odată ce ajunge la cod t.join () atunci se execută singur „firul t” și își finalizează sarcina, apoi doar firul principal începe executarea.
Este o metodă nestatică. Metoda Join () are o versiune supraîncărcată. Deci, putem menționa durata timpului în metoda join () și „.s”.
Q # 41) Ce face metoda randamentului clasei Thread?
Răspuns: O metodă yield () mută firul care rulează curent într-o stare rulabilă și permite executarea celorlalte fire. Astfel, firele cu prioritate egală au șansa de a rula. Este o metodă statică. Nu eliberează nicio blocare.
Metoda Yield () mută firul înapoi numai la starea Runnable și nu firul pentru a dormi (), aștepta () (sau) bloc.
Exemplu:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
Q # 42) Explicați despre metoda wait ().
Răspuns: wait () metoda este utilizată pentru a face firul să aștepte în piscina de așteptare. Când metoda wait () este executată în timpul unei execuții de fire, imediat firul renunță la blocarea obiectului și merge la piscina de așteptare. Metoda Wait () îi spune firului să aștepte o anumită perioadă de timp.
Apoi firul se va trezi după ce se apelează metoda notification () (sau) notification all ().
Wait () și celelalte metode menționate mai sus nu blochează obiectul imediat până când firul de executare curent finalizează codul sincronizat. Este folosit mai ales în sincronizare.
Exemplu:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
Q # 43) Diferența dintre metoda notificare () și metoda notificareAll () în Java.
Răspuns: Diferențele dintre metoda notificare () și metoda notificare (toate) sunt prezentate mai jos:
notifica () | notificationAll () |
---|---|
Această metodă este utilizată pentru a trimite un semnal pentru a trezi un singur fir în piscina de așteptare. | Această metodă trimite semnalul pentru a trezi toate firele într-o bobină de așteptare. |
Q # 44) Cum se oprește un fir în java? Explicați despre metoda sleep () într-un fir?
Răspuns: Putem opri un thread utilizând următoarele metode de thread:
- Dormit
- Aşteptare
- Blocat
Dormi: Metoda Sleep () este utilizată pentru a suspenda firul de executare curent pentru perioada de timp dată. Odată ce firul este trezit, acesta poate trece la starea rulabilă. Deci metoda sleep () este utilizată pentru a întârzia execuția pentru o anumită perioadă.
Este o metodă statică.
Exemplu:
Fir. Sleep (2000)
Deci, întârzie firul să adoarmă cu 2 milisecunde. Metoda Sleep () aruncă o excepție neîntreruptă, de aceea trebuie să înconjurăm blocul cu try / catch.
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
Q # 45) Când se folosește interfața Runnable Vs clasa Thread în Java?
Răspuns: Dacă avem nevoie de clasa noastră pentru a extinde alte clase, altele decât firul, putem merge cu interfața rulabilă, deoarece în java putem extinde o singură clasă.
Dacă nu vom extinde nicio clasă, atunci putem extinde clasa de fire.
Q # 46) Diferența dintre metoda start () și run () a clasei de fire.
Răspuns: Metoda Start () creează un fir nou și codul din metoda run () este executat în noul fir. Dacă am apelat direct la metoda run (), atunci nu se creează un fir nou și firul de executare curent va continua să execute metoda run ().
Q # 47) Ce este multi-threading?
Răspuns: Mai multe fire sunt executate simultan. Fiecare fir începe propria stivă pe baza fluxului (sau) priorității firelor.
Program de exemplu:
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
La prima linie de execuție, JVM apelează metoda principală, iar teancul de fire principale arată așa cum se arată mai jos.
Odată ce executarea a ajuns, t.start () linie, apoi se creează un fir nou și se creează și noua stivă pentru fir. Acum JVM trece la noul fir, iar firul principal revine la starea rulabilă.
Cele două stive arată așa cum se arată mai jos.
Acum, firul de utilizator a executat codul în interiorul metodei run ().
Odată ce metoda run () s-a finalizat, atunci JVM revine la firul principal și firul utilizatorului a finalizat sarcina și stiva a dispărut.
JVM comută între fiecare fir până când ambele fire sunt finalizate. Aceasta se numește Multi-threading.
Q # 48) Explicați ciclul de viață al firului în Java.
Răspuns: Firul are următoarele stări:
- Nou
- Runable
- Alergare
- Non-runnable (blocat)
- Încetat
- Nou: În starea nouă, a fost creată o instanță Thread, dar metoda start () nu este încă invocată. Acum firul nu este considerat viu.
- Runable : Firul este în starea runnable după invocarea metodei start (), dar înainte de a fi invocată metoda run (). Dar un fir poate reveni, de asemenea, la starea rulabilă din așteptare / somn. În această stare, firul este considerat viu.
- Alergare : Firul se află într-o stare de rulare după ce apelează metoda run (). Acum firul începe execuția.
- Non-Runnable (Blocat): firul este viu, dar nu este eligibil să ruleze. Nu se află în starea runnable, dar, de asemenea, va reveni la starea runnable după ceva timp. Exemplu: așteptați, dormiți, blocați.
- Încetat : Odată ce metoda de rulare este finalizată, aceasta este terminată. Acum firul nu este viu.
Q # 49) Ce este sincronizarea?
Răspuns: Sincronizarea face doar un singur fir pentru a accesa un bloc de cod la un moment dat. Dacă mai multe fire de acces accesează blocul de cod, atunci există șansa unor rezultate inexacte la sfârșit. Pentru a evita această problemă, putem oferi sincronizare pentru blocul sensibil de coduri.
Cuvântul cheie sincronizat înseamnă că un fir are nevoie de o cheie pentru a accesa codul sincronizat.
Încuietorile sunt pentru fiecare obiect. Fiecare obiect Java are o blocare. O încuietoare are o singură cheie. Un fir poate accesa o metodă sincronizată numai dacă firul poate obține cheia obiectelor de blocat.
Pentru aceasta, folosim cuvântul cheie „Sincronizat”.
Exemplu:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
Q # 50) Care este dezavantajul sincronizării?
Ani: Sincronizarea nu este recomandată pentru a implementa toate metodele. Pentru că, dacă un fir de acces accesează codul sincronizat, următorul fir ar trebui să aștepte. Deci, are o performanță lentă la celălalt capăt.
Î # 51) Ce se înțelege prin serializare?
Răspuns: Conversia unui fișier într-un flux de octeți este cunoscută sub numele de Serializare. Obiectele din fișier sunt convertite în octeți din motive de securitate. Pentru aceasta, trebuie să implementăm o interfață java.io.Serializable. Nu are nicio metodă de definit.
Variabilele marcate ca tranzitorii nu vor face parte din serializare. Deci, putem sări peste serializarea variabilelor din fișier utilizând un cuvânt cheie tranzitoriu.
Aflați mai multe = >> Serializabil și clonabil
Q # 52) Care este scopul unei variabile tranzitorii?
Răspuns: Variabilele tranzitorii nu fac parte din procesul de serializare. În timpul deserializării, valorile variabilelor tranzitorii sunt setate la valoarea implicită. Nu este utilizat cu variabile statice.
Exemplu:
numere int tranzitorii;
Q # 53) Ce metode sunt utilizate în timpul procesului de serializare și deserializare?
Răspuns: Clasele ObjectOutputStream și ObjectInputStream sunt de nivel superior java.io. pachet. Le vom folosi cu clase de nivel inferior FileOutputStream și FileInputStream.
ObjectOutputStream.writeObject —-> Serializați obiectul și scrieți obiectul serializat într-un fișier.
ObjectInputStream.readObject -> Citește fișierul și deserializează obiectul.
Pentru a fi serializat, un obiect trebuie să implementeze interfața serializabilă. Dacă superclasa implementează Serializabil, atunci subclasa va fi automat serializabilă.
Q # 54) Care este scopul unei variabile volatile?
Răspuns: Valorile variabile volatile sunt întotdeauna citite din memoria principală și nu din memoria cache a firului. Acesta este utilizat în principal în timpul sincronizării. Se aplică numai pentru variabile.
Exemplu:
număr int volatil;
Q # 55) Diferența dintre serializare și deserializare în Java.
Răspuns: Acestea sunt diferențele dintre serializare și deserializare în java:
Serializare | Deserializarea |
---|---|
Serializarea este procesul care este utilizat pentru a converti obiectele în flux de octeți | Deserializarea este procesul opus al serializării în care putem recupera obiectele din fluxul de octeți. |
Un obiect este serializat scriindu-l în ObjectOutputStream. | Un obiect este deserializat citindu-l dintr-un ObjectInputStream. |
Q # 56) Ce este SerialVersionUID?
Răspuns: Ori de câte ori un obiect este serializat, obiectul este ștampilat cu un număr de ID de versiune pentru clasa de obiect. Acest ID se numește SerialVersionUID. Acesta este utilizat în timpul deserializării pentru a verifica dacă expeditorul și receptorul sunt compatibili cu serializarea.
Concluzie
Acestea sunt câteva dintre întrebările de bază ale interviului JAVA care acoperă atât conceptele Java de bază, cât și cele avansate pentru programare, precum și interviul pentru dezvoltatori, iar acestea sunt răspunsuri la care au răspuns experții noștri JAVA.
Sper că acest tutorial vă va oferi o perspectivă excelentă asupra conceptelor de codare JAVA de bază în detaliu. Explicațiile date mai sus vă vor îmbogăți cu adevărat cunoștințele și vă vor spori înțelegerea programării JAVA.
Pregătește-te să creezi cu încredere un interviu JAVA.