logo

Întrebări și răspunsuri la interviu Java

Java este unul dintre cele mai populare limbaje de programare din lume, cunoscut pentru versatilitatea, portabilitatea și gama largă de aplicații. Java este cel mai folosit limbaj de companii de top precum Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon și multe altele datorită caracteristicilor și performanței sale.

În acest articol, vă vom oferi Peste 200 de întrebări de interviu Java de bază personalizat atât pentru cei proaspăt, cât și pentru profesioniști cu experiență, cu 3, 5 și 8 ani de experiență. Aici, acoperim totul, inclusiv conceptele de bază Java, programarea orientată pe obiecte (OOP), multithreading, gestionarea excepțiilor, modele de design, colecții Java și multe altele, care vă vor ajuta cu siguranță să rezolvați interviurile Java.



Core-Java-Interviu-Întrebări

Cuprins

Întrebări de interviu Java pentru Freshers

1. Este independentă platforma Java, dacă atunci cum?

Da, Java este un limbaj independent de platformă. Spre deosebire de multe limbaje de programare, javac compiler compilează programul pentru a forma un bytecode sau un fișier .class. Acest fișier este independent de software-ul sau hardware-ul care rulează, dar are nevoie de un fișier JVM (Java Virtual Machine) preinstalat în sistemul de operare pentru execuția ulterioară a bytecode.



Cu toate că JVM depinde de platformă , bytecode poate fi creat pe orice sistem și poate fi executat în orice alt sistem, în ciuda utilizării hardware sau software care face platforma Java independentă.

2. Care sunt principalele caracteristici Java?

Java este unul dintre cele mai faimoase și mai folosite limbi din lumea reală, există multe caracteristici în Java care îl fac mai bun decât orice altă limbă, unele dintre ele sunt menționate mai jos:

Caracteristicile-Java-768



  • Simplu : Java este destul de simplu de înțeles și sintaxa
  • Platforma independenta: Java este independent de platformă înseamnă că putem rula același program în orice software și hardware și vom obține același rezultat.
  • Interpretat : Java este interpretat la fel ca un limbaj bazat pe compilator.
  • Robust : caracteristici precum colectarea gunoiului, gestionarea excepțiilor etc. care fac limbajul robust.
  • Orientat pe obiecte : Java este un limbaj orientat pe obiecte care suportă conceptele de clasă, obiecte, patru piloni ai OOPS etc.
  • Securizat : Deoarece putem partaja direct o aplicație cu utilizatorul fără a partaja programul propriu-zis, Java este un limbaj sigur.
  • Performanta ridicata: mai rapid decât alte limbaje tradiționale de programare interpretate.
  • Dinamic : acceptă încărcarea dinamică a claselor și interfețelor.
  • Distribuit : caracteristica Java ne face capabili să accesăm fișiere apelând metodele de la orice mașină conectată.
  • Multithread : rezolvați mai multe sarcini simultan prin definirea mai multor fire
  • Arhitectură neutră : nu depinde de arhitectura.

3. Ce este JVM?

JVM-768

JVM înseamnă Java Virtual Machine, este un interpret Java. Este responsabil pentru încărcarea, verificarea și executarea bytecode-ului creat în Java.

Deși depinde de platformă, ceea ce înseamnă că software-ul JVM este diferit pentru diferite sisteme de operare, acesta joacă un rol vital în a face platforma Java independentă.

Pentru a afla mai multe despre subiect, consultați JVM în Java .

4. Ce este JIT?

JIT-768

JIT înseamnă (Just-in-Time) compilatorul este o parte a JRE (Java Runtime Environment), este folosit pentru o performanță mai bună a aplicațiilor Java în timpul rulării. Utilizarea JIT este menționată în procesul pas cu pas menționat mai jos:

  1. Codul sursă este compilat cu javac compilator pentru a forma bytecode
  2. Bytecode este transmis mai departe către JVM
  3. JIT este o parte a JVM, JIT este responsabil pentru compilarea bytecode în codul mașină nativ în timpul rulării.
  4. Compilatorul JIT este activat pe tot parcursul, în timp ce este activat atunci când o metodă este invocată. Pentru o metodă compilată, JVM apelează direct codul compilat, în loc să îl interpreteze.
  5. Pe măsură ce JVM apelează codul compilat, care crește performanța și viteza de execuție.

Pentru a afla mai multe despre subiect, consultați JIT în Java .

5. Ce sunt stocările de memorie disponibile cu JVM?

JVM-Zone-768

JVM constă din câteva stocări de memorie, după cum este menționat mai jos:

  1. Zona Clasă (Metodă): stochează date la nivel de clasă ale fiecărei clase, cum ar fi pool-ul de constante de rulare, câmpul și datele metodei și codul pentru metode.
  2. Heap: obiectele sunt create sau obiectele sunt stocate. Este folosit pentru a aloca memorie obiectelor în timpul rulării.
  3. Stivă: stochează datele și rezultatele parțiale care vor fi necesare în timp ce returnează valoarea pentru metodă și realizează legături dinamice
  4. Program Counter Register: stochează adresa instrucțiunii mașinii virtuale Java în curs de executare.
  5. Native Method Stack: stochează toate metodele native utilizate în aplicație.

Pentru a afla mai multe despre subiect, consultați Stocare de memorie JVM .

6. Ce este un classloader?

Classloader face parte din JRE (Java Runtime Environment), în timpul execuției bytecode-ului sau a fișierului .class creat, classloader-ul este responsabil pentru încărcarea dinamică a claselor și interfețelor java în JVM (Java Virtual Machine). Din cauza classloaders, sistemul de rulare Java nu trebuie să știe despre fișiere și sisteme de fișiere.

Pentru a afla mai multe despre subiect, consultați ClassLoader în Java.

7. Diferența dintre JVM, JRE și JDK.

JVM : JVM cunoscut și ca Java Virtual Machine face parte din JRE. JVM este un tip de interpret responsabil pentru conversia bytecode în cod citibil de mașină. JVM în sine este dependent de platformă, dar interpretează bytecode, care este motivul independent de platformă pentru care Java este independent de platformă.

JRE : JRE înseamnă Java Runtime Environment, este un pachet de instalare care oferă un mediu pentru a rula programul sau aplicația Java pe orice mașină.

JDK : JDK înseamnă Java Development Kit, care oferă mediul pentru a dezvolta și executa programe Java. JDK este un pachet care include două instrumente de dezvoltare pentru a oferi un mediu pentru a vă dezvolta programele Java și, JRE pentru a executa programe sau aplicații Java.

Pentru a afla mai multe despre subiect, consultați Diferențele dintre JVM, JRE și JDK .

8. Care sunt diferențele dintre Java și C++?

Bază

C++

Java

Platformă

C++ este dependent de platformă

Java este independent de platformă

Aplicație

C++ este folosit în principal pentru programarea sistemului

Java este folosit în principal pentru programarea aplicațiilor

Hardware

C++ este mai aproape de hardware

Java nu este atât de interactiv cu hardware-ul

Domeniul de aplicare global

C++ acceptă domeniul global și al spațiului de nume.

Java nu acceptă domeniul global.

Nu suportă

Funcționalitățile acceptate în Java, dar nu în C++ sunt:

  • suport de fir
  • comentariu de documentare
  • schimbare dreapta nesemnată(>>>)

Funcționalitățile acceptate în C++, dar nu și în Java sunt:

  • mergi la
  • Indicatori
  • Sună prin referință
  • Structuri și Uniri
  • Moștenirea multiplă
  • Funcții virtuale

OPA

C++ este un limbaj orientat pe obiecte. Nu este o singură ierarhie rădăcină.

Java este, de asemenea, un limbaj orientat pe obiecte. Este o singură ierarhie rădăcină, deoarece totul este derivat dintr-o singură clasă (java.lang.Object).

Arborele Moștenirii

C++ creează întotdeauna un nou arbore de moștenire.

Java folosește un singur arbore de moștenire, deoarece clasele în Java sunt copii ale claselor de obiecte în Java.

9. Explicați public static void main(String args[]) în Java.

Functie principala

Spre deosebire de orice alt limbaj de programare, cum ar fi C, C++, etc. În Java, am declarat funcția principală ca principal public static void (String args[]). Semnificațiile termenilor sunt menționate mai jos:

  1. public : publicul este modificatorul de acces responsabil pentru mențiunea cine poate accesa elementul sau metoda și care este limita. Acesta este responsabil pentru punerea la dispoziție globală a funcției principale. Este făcută publică, astfel încât JVM să-l poată invoca din afara clasei, deoarece nu este prezent în clasa curentă.
  2. static : static este un cuvânt cheie folosit astfel încât să putem folosi elementul fără a iniția clasa pentru a evita alocarea inutilă a memoriei.
  3. gol : void este un cuvânt cheie și este folosit pentru a specifica faptul că o metodă nu returnează nimic. Deoarece funcția principală nu returnează nimic, folosim void.
  4. principal : main reprezintă că funcția declarată este funcția principală. Ajută JVM să identifice că funcția declarată este funcția principală.
  5. Argumente șir[] : Stochează argumente din linia de comandă Java și este o matrice de tipul clasei java.lang.String.

10. Ce este Java String Pool?

Un pool de șiruri Java este un loc în memoria heap în care sunt stocate toate șirurile definite în program. Un loc separat într-o stivă este acolo unde este stocată variabila care stochează șirul. Ori de câte ori creăm un nou obiect șir, JVM verifică prezența obiectului în pool-ul String, dacă String este disponibil în pool, aceeași referință la obiect este partajată cu variabila, altfel este creat un nou obiect.

Java-String-Pool-768

Exemplu:

String str1='Hello'; // 'Hello' will be stored in String Pool // str1 will be stored in stack memory>

11. Ce se va întâmpla dacă declarăm nu declarăm principalul ca static?

Putem declara metoda principală fără a folosi static și fără a primi erori. Dar, metoda principală nu va fi tratată ca punct de intrare în aplicație sau program.

12. Ce sunt pachetele în Java?

Pachetele în Java pot fi definite ca gruparea de tipuri înrudite de clase, interfețe etc. care oferă acces la protecție și managementul spațiului de nume.

13. De ce sunt folosite pachetele?

Pachetele sunt folosite în Java pentru a preveni conflictele de denumire, pentru a controla accesul și pentru a face căutarea/localizarea și utilizarea claselor, interfețelor etc.

14. Care sunt avantajele pachetelor în Java?

Există diverse avantaje ale definirii pachetelor în Java.

  • Pachetele evită ciocnirile de nume.
  • Pachetul oferă un control al accesului mai ușor.
  • Putem avea și clasele ascunse care nu sunt vizibile în exterior și sunt folosite de pachet.
  • Este mai ușor să localizați clasele aferente.

15. Câte tipuri de pachete există în Java?

Există două tipuri de pachete în Java

  • Pachete definite de utilizator
  • Pachete integrate

16. Explicați diferite tipuri de date în Java.

Există 2 tipuri de tipuri de date în Java, după cum este menționat mai jos:

  1. Tip de date primitive
  2. Tip de date non-primitive sau tip de date obiect

Tip de date primitive: Datele primitive sunt valori unice, fără capacități speciale. Există 8 tipuri de date primitive:

  • boolean : stochează valoarea adevărată sau falsă
  • octet : stochează un întreg de complement a doi cu semn pe 8 biți
  • char : stochează un singur caracter Unicode pe 16 biți
  • mic de statura : stochează un întreg de complement a doi cu semn pe 16 biți
  • int : stochează un întreg de complement a doi cu semn pe 32 de biți
  • lung : stochează un întreg de complement doi pe 64 de biți
  • pluti : stochează un punct mobil IEEE 754 cu precizie unică pe 32 de biți
  • dubla : stochează un punct mobil IEEE 754 cu precizie dublă pe 64 de biți

Tip de date non-primitive: Tipurile de date de referință vor conține o adresă de memorie a valorilor variabilei, deoarece nu este capabilă să stocheze direct valorile în memorie. Tipurile de non-primitive sunt menționate mai jos:

  • Siruri de caractere
  • Matrice
  • Clasă
  • Obiect
  • Interfață

17. Când se utilizează un tip de date octet?

Un octet este un număr întreg cu două complemente semnat pe 8 biți. Valoarea minimă acceptată de octeți este -128 și 127 este valoarea maximă. Este folosit în condițiile în care trebuie să economisim memorie, iar limita de numere necesare este între -128 și 127.

18. Putem declara Pointer în Java?

Nu, Java nu oferă suport pentru Pointer. Deoarece Java trebuia să fie mai sigur, deoarece caracteristica indicatorului nu este furnizată în Java.

19. Care este valoarea implicită a tipului de date octet în Java?

Valoarea implicită a tipului de date octet în Java este 0.

20. Care este valoarea implicită a tipului de date float și double în Java?

Valoarea implicită a float-ului este 0.0f și a double este 0.0d în Java.

21. Ce este clasa Wrapper în Java?

Wrapper, în general, se referă la o entitate mai mare care încapsulează o entitate mai mică. Aici, în Java, clasa wrapper este o clasă de obiecte care încapsulează tipurile de date primitive.

Tipurile de date primitive sunt cele din care pot fi create alte tipuri de date. De exemplu, numerele întregi pot duce în continuare la construcția de lung, octet, scurt etc. Pe de altă parte, șirul nu poate, prin urmare nu este primitiv.

Revenind la clasa wrapper, Java conține 8 clase wrapper. Acestea sunt Boolean, Byte, Short, Integer, Character, Long, Float și Double. În plus, clasele de wrapper personalizate pot fi create și în Java, care este similar cu conceptul de Structură din limbajul de programare C. Ne creăm propria clasă wrapper cu tipurile de date necesare.

22. De ce avem nevoie de cursuri de wrapper?

Clasa wrapper este o clasă de obiecte care încapsulează tipurile de date primitive și avem nevoie de ele din următoarele motive:

  1. Clasele Wrapper sunt finale și imuabile
  2. Oferă metode precum valueOf(), parseInt(), etc.
  3. Oferă funcția de autoboxing și unboxing.

23. Faceți diferența între variabilele de instanță și variabilele locale.

Variabila de instanta

Variabila locala

Declarat în afara metodei, invocat direct de metodă.

Declarat în cadrul metodei.

Are o valoare implicită.

Nicio valoare implicită

Poate fi folosit pe tot parcursul clasei.

Domeniul de aplicare este limitat la metodă.

24. Care sunt valorile implicite atribuite variabilelor și instanțelor în Java?

În Java Când nu am inițializat variabilele de instanță, compilatorul le inițializează cu valori implicite. Valorile implicite pentru instanțe și variabile depind de tipurile de date ale acestora. Unele tipuri comune de tipuri de date implicite sunt:

  • Valoarea implicită pentru tipurile numerice (byte, short, int, long, float și double) este 0.
  • Valoarea implicită pentru tipul boolean este false.
  • Valoarea implicită pentru tipurile de obiecte (clase, interfețe și matrice) este nulă.
  • Caracterul nul, u0000, este valoarea implicită pentru tipul char.

Exemplu:

Java
// Java Program to demonstrate use of default values import java.io.*; class GFG {  // static values  static byte b;  static int i;  static long l;  static short s;  static boolean bool;  static char c;  static String str;  static Object object;  static float f;  static double d;  static int[] Arr;  public static void main(String[] args)  {  // byte value  System.out.println('byte value' + b);  // short value  System.out.println('short value' + s);  // int value  System.out.println('int value' + i);  // long value  System.out.println('long value' + l);  System.out.println('boolean value' + bool);  System.out.println('char value' + c);  System.out.println('float value' + f);  System.out.println('double value' + d);  System.out.println('string value' + str);  System.out.println('object value' + object);  System.out.println('Array value' + Arr);  } }>

Ieșire
byte value0 short value0 int value0 long value0 boolean valuefalse char value float value0.0 double value0.0 string valuenull object valuenull Array valuenull>

25. Ce este o variabilă de clasă?

În Java, o variabilă de clasă (cunoscută și ca variabilă statică) este o variabilă care este declarată în interiorul unei clase, dar în afara oricărei metode, constructor sau bloc. Variabilele de clasă sunt declarate cu cuvântul cheie static și sunt partajate de toate instanțele (obiectele) clasei, precum și de clasa în sine. Indiferent câte obiecte sunt derivate dintr-o clasă, fiecare variabilă de clasă ar exista o singură dată.

Exemplu:

Java
// Java program to demonstrate use of Clas Variable class GFG {  public static int ctr = 0;  public GFG() { ctr++; }  public static void main(String[] args)  {  GFG obj1 = new GFG();  GFG obj2 = new GFG();  GFG obj3 = new GFG();  System.out.println('Number of objects created are '  + GFG.ctr);  } }>

Ieșire
Number of objects created are 3>

26. Care este valoarea implicită stocată în Variabile locale?

Nu există o valoare implicită stocată cu variabilele locale. De asemenea, variabilele și obiectele primitive nu au valori implicite.

27. Explicați diferența dintre variabila de instanță și o variabilă de clasă.

Variabila de instanta: O variabilă de clasă fără un modificator static cunoscut ca variabilă de instanță este de obicei partajată de toate instanțele clasei. Aceste variabile pot avea valori distincte între mai multe obiecte. Conținutul unei variabile de instanță este complet independent de o instanță de obiect de alta, deoarece este legat de o instanță de obiect specifică a clasei.

Exemplu:

Java
// Java Program to demonstrate Instance Variable import java.io.*; class GFG {  private String name;  public void setName(String name) { this.name = name; }  public String getName() { return name; }  public static void main(String[] args)  {  GFG obj = new GFG();  obj.setName('John');  System.out.println('Name ' + obj.getName());  } }>

Ieșire
Name John>

Variabila de clasa: Variabila de clasă poate fi declarată oriunde la nivel de clasă folosind cuvântul cheie static. Aceste variabile pot avea o singură valoare atunci când sunt aplicate diferitelor obiecte. Aceste variabile pot fi partajate de toți membrii clasei, deoarece nu sunt conectate la niciun obiect specific al clasei.

Exemplu:

Java
// Java Program to demonstrate Class Variable import java.io.*; class GFG {  // class variable  private static final double PI = 3.14159;  private double radius;  public GFG(double radius) { this.radius = radius; }  public double getArea() { return PI * radius * radius; }  public static void main(String[] args)  {  GFG obj = new GFG(5.0);  System.out.println('Area of circle: '  + obj.getArea());  } }>

Ieșire
Area of circle: 78.53975>

28. Ce este o variabilă statică?

Cuvântul cheie static este folosit pentru a partaja aceeași variabilă sau metodă a unei clase date. Variabilele statice sunt variabilele care, odată declarate, o singură copie a variabilei este creată și partajată între toate obiectele la nivel de clasă.

29. Care este diferența dintre System.out, System.err și System.in?

System.out – Este un PrintStream care este folosit pentru scrierea caracterelor sau se poate spune că poate scoate datele pe care dorim să le scriem pe consola/terminalul Interfeței de comandă.

Exemplu:

Java
// Java Program to implement // System.out import java.io.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // Use of System.out  System.out.println('');  } }>


System.err – Este folosit pentru a afișa mesaje de eroare.

Exemplu:

Java
// Java program to demonstrate // System.err import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  // Printing error  System.err.println(  'This is how we throw error with System.err');  } }>

Ieșire:

This is how we throw error with System.err>

Deși, System.err are multe asemănări, ambele au și destul de multe diferențe, haideți să le verificăm.

System.out System.err

Se va imprima la standardul din sistem.

Se va imprima la eroarea standard.

Este folosit mai ales pentru a afișa rezultatele pe consolă.

Este folosit mai ales pentru a afișa texte de eroare.

Oferă ieșire pe consolă cu culoarea implicită (neagră).

Oferă și ieșire pe consolă, dar majoritatea IDE-urilor îi dau o culoare roșie pentru a se diferenția.

System.in – Este un InputStream folosit pentru a citi intrarea din fereastra terminalului. Nu putem folosi System.in direct, așa că folosim clasa Scanner pentru a prelua intrarea cu system.in.

Exemplu:

Java
// Java Program to demonstrate // System.in import java.util.*; // Driver Class class Main {  // Main Function  public static void main(String[] args)  {  // Scanner class with System.in  Scanner sc = new Scanner(System.in);  // Taking input from the user  int x = sc.nextInt();  int y = sc.nextInt();  // Printing the output  System.out.printf('Addition: %d', x + y);  } }>

Ieșire:

3 4 Addition: 7>

30. Ce înțelegeți prin flux IO?

2-768

Java aduce diverse fluxuri cu pachetul său I/O care ajută utilizatorul să efectueze toate operațiunile de intrare-ieșire. Aceste fluxuri acceptă toate tipurile de obiecte, tipuri de date, caractere, fișiere etc. pentru a executa pe deplin operațiunile I/O.

31. Care este diferența dintre ierarhia clasei Reader/Writer și ierarhia clasei InputStream/OutputStream?

Diferența cheie dintre ele este că datele fluxului de octeți sunt citite și scrise de clase de flux de intrare/ieșire. Caracterele sunt gestionate de clasele Reader și Writer. Spre deosebire de clasele Reader/Writer, care acceptă matrice de caractere ca parametri, metodele claselor de flux de intrare/ieșire acceptă matrice de octeți. În comparație cu fluxurile de intrare/ieșire, clasele Reader/Writer sunt mai eficiente, gestionează toate caracterele Unicode și sunt utile pentru internalizare. Folosiți clase Reader/Writer în loc de date binare, cum ar fi imagini, dacă nu faceți acest lucru.

Exemplu:

Java
// Java Program to demonstrate Reading Writing Binary Data // with InputStream/OutputStream import java.io.*; class GFG {  public static void main(String[] args) {  try {  // Writing binary data to a file using OutputStream  byte[] data = {(byte) 0xe0, 0x4f, (byte) 0xd0, 0x20, (byte) 0xea};  OutputStream os = new FileOutputStream('data.bin');  os.write(data);  os.close();  // Reading binary data from a file using InputStream  InputStream is = new FileInputStream('data.bin');  byte[] newData = new byte[5];  is.read(newData);  is.close();  // Printing the read data  for (byte b : newData) {  System.out.println(b);  }  } catch (IOException e) {  e.printStackTrace();  }  } }>

Ieșire
-32 79 -48 32 -22>

32. Care sunt cele mai multe clase pentru toate fluxurile?

Toate clasele de flux pot fi împărțite în două tipuri de clase care sunt clase ByteStream și Clase CharacterStream. Clasele ByteStream sunt împărțite în continuare în clase InputStream și clase OutputStream. Clasele CharacterStream sunt, de asemenea, împărțite în clase Reader și clase Writer. Clasele SuperMost pentru toate clasele InputStream este java.io.InputStream și pentru toate clasele de flux de ieșire este java.io.OutPutStream. În mod similar, pentru toate clasele de cititor, cea mai mare clasă este java.io.Reader, iar pentru toate clasele de scriitor, este java.io.Writer.

33. Ce sunt FileInputStream și FileOutputStream?

Pentru a citi și scrie date, Java oferă fluxuri I/O. Un Stream reprezintă o sursă de intrare sau o destinație de ieșire, care ar putea fi un fișier, un dispozitiv de intrare/ieșire, un alt program etc. FileInputStream în Java este folosit pentru a citi datele dintr-un fișier ca un flux de octeți. Este folosit mai ales pentru citirea datelor binare, cum ar fi imagini, fișiere audio sau obiecte seriate.

Exemplu:

File file = new File('path_of_the_file'); FileInputStream inputStream = new FileInputStream(file);>

În Java, FileOutputStream funcția este folosită pentru a scrie date octet cu octet într-un anumit fișier sau descriptor de fișier. De obicei, datele brute de octeți, cum ar fi imaginile, sunt scrise într-un fișier folosind FileOutputStream.

Exemplu:

File file = new File('path_of_the_file'); FileOutputStream outputStream = new FileOutputStream(file);>

34. Care este scopul utilizării claselor BufferedInputStream și BufferedOutputStream?

Când lucrăm cu fișierele sau fluxul, pentru a crește performanța de intrare/ieșire a programului, trebuie să folosim clasele BufferedInputStream și BufferedOutputStream. Aceste ambele clase oferă capacitatea de stocare în tampon, ceea ce înseamnă că datele vor fi stocate într-un tampon înainte de a scrie într-un fișier sau de a le citi dintr-un flux. De asemenea, reduce numărul de ori în care sistemul nostru de operare trebuie să interacționeze cu rețeaua sau discul. Buffering permite programelor să scrie o cantitate mare de date în loc să le scrie în bucăți mici. Acest lucru reduce, de asemenea, suprasarcina de acces la rețea sau disc.

BufferedInputStream(InputStream inp); // used to create the bufferinput stream and save the arguments.>
BufferedOutputStream(OutputStream output); // used to create a new buffer with the default size.>

35. Ce sunt FilterStreams?

Filtru de flux sau Filtre de fluxuri returnează un flux format din elementele acestui flux care se potrivesc cu predicatul dat. În timp ce funcționează filter(), nu efectuează de fapt filtrarea, ci creează un nou flux care, atunci când este traversat, conține elementele fluxurilor inițiale care se potrivesc cu predicatul dat.

Exemplu:

FileInputStream fis =new FileInoutStream('file_path');  FilterInputStream = new BufferedInputStream(fis);>


36. Ce este un filtru I/O?

Un filtru I/O definit și ca un filtru de intrare și ieșire este un obiect care citește dintr-un flux și scrie date în sursele de intrare și de ieșire. A folosit pachetul java.io pentru a folosi acest filtru.

program numere prime în java

37. Câte moduri puteți prelua intrare de la consolă?

Există două metode de a prelua intrarea din consola în Java menționată mai jos:

  1. Folosind argumentul liniei de comandă
  2. Utilizarea clasei Buffered Reader
  3. Utilizarea clasei consolei
  4. Utilizarea Scanner Class

Programul care demonstrează utilizarea fiecărei metode este prezentat mai jos.

Exemplu:

Java
// Java Program to implement input // using Command line argument import java.io.*; class GFG {  public static void main(String[] args)  {  // check if length of args array is  // greater than 0  if (args.length > 0) {  System.out.println(  'The command line arguments are:');  // iterating the args array and printing  // the command line arguments  for (String val : args)  System.out.println(val);  }  else  System.out.println('No command line '  + 'arguments found.');  } } // Use below commands to run the code // javac GFG.java // java Main techcodeview.com>
Java
// Java Program to implement // Buffer Reader Class import java.io.*; class GFG {  public static void main(String[] args)  throws IOException  {  // Enter data using BufferReader  BufferedReader read = new BufferedReader(  new InputStreamReader(System.in));  // Reading data using readLine  String x = read.readLine();  // Printing the read line  System.out.println(x);  } }>
Java
// Java program to implement input // Using Console Class public class GfG {  public static void main(String[] args)  {  // Using Console to input data from user  String x = System.console().readLine();  System.out.println('You entered string ' + x);  } }>
Java
// Java program to demonstrate // working of Scanner in Java import java.util.Scanner; class GfG {  public static void main(String args[])  {  // Using Scanner for Getting Input from User  Scanner in = new Scanner(System.in);  String str = in.nextLine();  System.out.println('You entered string ' + str);  } }>

Ieșire:

techcodeview.com>

38. Diferența în utilizarea print, println și printf.

print, println și printf toate sunt folosite pentru tipărirea elementelor, dar print tipărește toate elementele, iar cursorul rămâne pe aceeași linie. println mută cursorul pe linia următoare. Și cu printf putem folosi și identificatori de format.

39. Ce sunt operatorii?

Operatorii sunt tipurile speciale de simboluri utilizate pentru efectuarea unor operații asupra variabilelor și valorilor.

40. Câte tipuri de operatori sunt disponibili în Java?

Toate tipurile de operatori în Java sunt menționate mai jos:

  1. Operatori aritmetici
  2. Operatori unari
  3. Operator de atribuire
  4. Operatori Relaționali
  5. Operatori logici
  6. Operator ternar
  7. Operatori pe biți
  8. Operatori în schimburi
  9. instanță de operator

Operatorii Postfix sunt considerați ca fiind cea mai mare prioritate conform priorității operatorului Java.

41. Explicați diferența dintre operatorii>> și>>>.

Operatorii ca>> și>>> par să fie la fel, dar acționează puțin diferit. Operatorul>> deplasează biții de semn și operatorul>>> este folosit la mutarea biților cu zero.

Exemplu:

Java
// Java Program to demostrate //>> și>>> operatori import java.io.*; // Clasa driver GFG { public static void main(String[] args) { int a = -16, b = 1;  // Utilizarea>> System.out.println(a >> b);  a = -17;  b = 1;  // Utilizarea>>> System.out.println(a >>> b);  } }>>>  
Ieșire
-8 2147483639>

42. Care operator Java este asociativ corect?

Există un singur operator care este asociativ drept care este operator =.

43. Ce este operatorul punct?

Operatorul Dot din Java este folosit pentru a accesa variabilele de instanță și metodele obiectelor de clasă. De asemenea, este folosit pentru a accesa clase și sub-pachete din pachet.

44. Ce este tipul de returnare covariant?

Tipul de returnare covariant specifică faptul că tipul de returnare poate varia în aceeași direcție cu subclasa. Este posibil să existe diferite tipuri de returnare pentru o metodă de suprascriere în clasa copil, dar tipul de returnare al copilului ar trebui să fie un subtip al tipului de returnare al părintelui și, din această cauză, metoda de suprascriere devine o variantă în raport cu tipul de returnare.

Folosim tipul de returnare covariant din următoarele motive:

  • Evită turnările de tip confuze prezente în ierarhia clasei și face codul lizibil, utilizabil și întreținut.
  • Oferă libertatea de a avea tipuri de returnări mai specifice atunci când se suprascriu metode.
  • Ajută la prevenirea ClassCastExceptions în timpul rulării la returnări.

45. Care este cuvântul cheie tranzitoriu?

Cuvântul cheie tranzitoriu este folosit în momentul serializării dacă nu dorim să salvăm valoarea unei anumite variabile într-un fișier. Când JVM întâlnește un cuvânt cheie tranzitoriu, ignoră valoarea inițială a variabilei și salvează valoarea implicită a acelui tip de date variabile.

46. ​​Care este diferența dintre metodele sleep() și wait()?

Dormi()

Aștepta()

Metoda sleep() aparține clasei thread.

Metoda Wait() aparține clasei obiect.

Sleep nu eliberează blocarea pe care o deține firul curent.

wait() eliberează blocarea care permite altor fire de execuție să-l obțină.

Această metodă este o metodă statică.

Această metodă nu este o metodă statică.

Sleep() nu lansează o excepție întreruptă.InterruptedException este afișată dacă firul de execuție este întrerupt în timpul așteptării.

Folosit în principal pentru a întârzia un fir pentru o anumită perioadă de timp.

Folosit în principal pentru a întrerupe un thread până când este notificat de un alt thread.

Sleep() are două metode supraîncărcate:

  • sleep(long millis)millis: milisecunde
  • somn (mili lungi, int nanos) nanos: nanosecunde

Wait() are trei metode supraîncărcate:

  • aștepta()
  • așteptați (temporizare lungă)
  • așteptați (timeout lung, int nanos)

47. Care sunt diferențele dintre String și StringBuffer?

Şir

StringBuffer

Stocarea unei secvențe de caractere.Oferă funcționalitate pentru a lucra cu șirurile.
Este imuabil.Este mutabil (poate fi modificat și alte operațiuni cu șir pot fi efectuate asupra lor.)
Fără operații de fir într-un șir.Este sigur pentru fire (două fire nu pot apela simultan metodele StringBuffer)

48. Care sunt diferențele dintre StringBuffer și StringBuilder?

StringBuffer

StringBuilder

StringBuffer oferă funcționalitate pentru a lucra cu șirurile.StringBuilder este o clasă folosită pentru a construi un șir mutabil.
Este sigur pentru fire (două fire nu pot apela simultan metodele StringBuffer)Nu este sigur pentru fire (două fire pot apela metodele simultan)
Comparativ lent deoarece este sincronizat.Fiind nesincronizat, implementarea este mai rapidă

49. Care dintre String sau String Buffer ar trebui să fie preferat atunci când sunt necesare multe actualizări pentru date?

Șirul este preferat față de StringBuffer, deoarece StringBuilder este mai rapid decât StringBuffer, dar obiectele StringBuffer sunt preferate deoarece oferă mai multă siguranță pentru fire.


50. De ce este StringBuffer numit mutabil?

Clasa StringBuffer în Java este folosită pentru a reprezenta un șir de caractere modificabil. Oferă o alternativă la clasa imuabilă String, permițându-vă să modificați conținutul unui șir fără a crea în mod constant obiecte noi. Șirurile modificabile (modificabile) sunt create cu ajutorul clasei StringBuffer. Clasa StringBuffer din Java este identică cu clasa String, cu excepția faptului că este modificabilă.

Exemplu:

Java
// Java Program to demonstrate use of stringbuffer public class StringBufferExample {  public static void main(String[] args)  {  StringBuffer s = new StringBuffer();  s.append('Geeks');  s.append('for');  s.append('Geeks');  String message = s.toString();  System.out.println(message);  } }>

Ieșire String folosind new() este diferit de literal, deoarece atunci când declarăm șir stochează elementele în memoria stivei, în timp ce atunci când este declarat folosind new() alocă o memorie dinamică în memoria heap. Obiectul este creat în memoria heap chiar dacă același obiect de conținut este prezent.

Sintaxă:

String x = new String('ABC');>


3-768

52. Ce este o matrice în Java?

O matrice în Java este o structură de date care este utilizată pentru a stoca o secvență de dimensiuni fixe de elemente de același tip. Elementele unui tablou pot fi accesate prin indexul lor, care începe de la 0 și urcă până la o lungime de minus 1. Declarația tabloului în Java se face cu ajutorul parantezelor drepte, iar dimensiunea este de asemenea specificată în timpul declarației.

Sintaxă:

int[] Arr = new int[5];>

53. Pe ce matrice de memorie sunt create în Java?

Matricele în Java sunt create în memoria heap. Când o matrice este creată cu ajutorul unui nou cuvânt cheie, memoria este alocată în heap pentru a stoca elementele matricei. În Java, memoria heap este gestionată de Java Virtual Machine (JVM) și este, de asemenea, partajată între toate firele de execuție ale programului Java. Memoria care nu mai este utilizată de program, JVM folosește un colector de gunoi pentru a recupera memoria. Matricele în Java sunt create dinamic, ceea ce înseamnă că dimensiunea matricei este determinată în timpul rulării programului. Mărimea matricei este specificată în timpul declarației matricei și nu poate fi modificată odată ce matricea este creată.

54. Care sunt tipurile de matrice?

Există două tipuri de matrice, adică matrice primitive și matrice de referințe.

  • Rețele unidimensionale: Matricele care au o singură dimensiune, adică o matrice de numere întregi sau o matrice de șiruri de caractere sunt cunoscute ca șiruri unidimensionale.

4-768

Sintaxă:

data_type[] Array_Name = new data_type[ArraySize];>
  • Rețele multidimensionale: Matrice care au două sau mai multe dimensiuni, cum ar fi matrice bidimensionale sau tridimensionale.

55. De ce indexul matricei Java începe cu 0?

Indicele unui tablou semnifică distanța de la începutul matricei. Deci, primul element are 0 distanță, prin urmare indicele de pornire este 0.

Sintaxă:

[Base Address + (index * no_of_bytes)]>

56. Care este diferența dintre int array[] și int[] array?

Atât int array[] cât și int[] array sunt folosite pentru a declara o matrice de numere întregi în java. Singura diferență dintre ele este că în sintaxa lor nu există nicio diferență de funcționalitate între ele.

int arr[] is a C-Style syntax to declare an Array.>
int[] arr is a Java-Style syntax to declare an Array.>

Cu toate acestea, se recomandă, în general, să utilizați sintaxa în stil Java pentru a declara un Array. Deoarece este ușor de citit și de înțeles, este mai în concordanță cu alte constructe ale limbajului Java.

57. Cum se copiază o matrice în Java?

În Java există mai multe moduri de a copia un Array în funcție de cerințe.

  • metoda clone() în Java: Această metodă în Java este folosită pentru a crea o copie superficială a matricei date, ceea ce înseamnă că noua matrice va partaja aceeași memorie ca și matricea originală.
int[] Arr = { 1, 2, 3, 5, 0}; int[] tempArr = Arr.clone();>
  • metoda arraycopy(): Pentru a crea o copie profundă a matricei, putem folosi această metodă care creează o nouă matrice cu aceleași valori ca și matricea originală.
int[] Arr = {1, 2, 7, 9, 8}; int[] tempArr = new int[Arr.length]; System.arraycopy(Arr, 0, tempArr, 0, Arr.length);>
  • metoda copyOf(): Această metodă este folosită pentru a crea o nouă matrice cu o anumită lungime și pentru a copia conținutul matricei originale în noua matrice.
int[] Arr = {1, 2, 4, 8}; int[] tempArr = Arrays.copyOf(Arr, Arr.length);>
  • metoda copyOfRange(): Această metodă este foarte asemănătoare cu metoda copyOf() din Java, dar această metodă ne permite, de asemenea, să specificăm intervalul elementelor de copiat din tabloul original.
int[] Arr = {1, 2, 4, 8}; int[] temArr = Arrays.copyOfRange(Arr, 0, Arr.length);>

58. Ce înțelegeți prin matrice zimțată?

O matrice zimțată în Java este doar o matrice bidimensională în care fiecare rând al matricei poate avea o lungime diferită. Deoarece toate rândurile dintr-o matrice 2-d au aceeași lungime, dar o matrice zimțată permite mai multă flexibilitate în dimensiunea fiecărui rând. Această caracteristică este foarte utilă în condițiile în care datele au lungimi diferite sau când utilizarea memoriei trebuie optimizată.

Sintaxă:

int[][] Arr = new int[][] {  {1, 2, 8},   {7, 5},   {6, 7, 2, 6} };>

59. Este posibil să faci o matrice volatilă?

În Java, nu este posibil să faci un volatil. Cuvintele cheie volatile din Java pot fi aplicate numai variabilelor individuale, dar nu și matricelor sau colecțiilor. Valoarea variabilei este întotdeauna citită și scrisă în memoria principală atunci când este definită ca volatilă, mai degrabă decât să fie stocată în cache în memoria locală a unui fir. Acest lucru face mai ușor să vă asigurați că toate firele de execuție care accesează variabila pot vedea modificările aduse acesteia.

60. Care sunt avantajele și dezavantajele unei matrice?

5-768

Avantajele Arrays sunt:

  • Accesul direct și eficient la orice element din colecție este posibil de matrice. Elementele unei matrice pot fi accesate folosind o operație O(1), ceea ce înseamnă că timpul necesar pentru a face acest lucru este constant și independent de dimensiunea matricei.
  • Datele pot fi stocate eficient în memorie folosind matrice. Mărimea unui tablou este cunoscută la momentul compilării, deoarece elementele sale sunt stocate în regiuni de memorie contigue.
  • Datorită faptului că datele sunt stocate în zone de memorie adiacente, matricele oferă o recuperare rapidă a datelor.
  • Matricele sunt ușor de implementat și de înțeles, ceea ce le face o alegere ideală pentru începătorii care învață programarea pe computer.

Dezavantajele Arrays sunt:

  • Matricele sunt create cu o dimensiune predeterminată care este aleasă în acel moment. Aceasta înseamnă că, dacă dimensiunea matricei trebuie extinsă, va trebui creată o nouă matrice, iar datele vor trebui copiate din vechea matrice în noua matrice, ceea ce poate dura mult timp și memorie.
  • Este posibil să existe spațiu de memorie neutilizat în spațiul de memorie al unei matrice dacă matricea nu este complet ocupată. Dacă vă amintiți slab, aceasta poate fi o problemă.
  • În comparație cu alte structuri de date, cum ar fi listele legate și arbori, matricele pot fi rigide datorită dimensiunii lor fixe și a suportului limitat pentru tipurile de date sofisticate.
  • Deoarece elementele unei matrice trebuie să fie toate de același tip de date, aceasta nu acceptă tipuri de date complexe, cum ar fi obiectele și structurile.

61. Ce este o paradigmă orientată pe obiecte?

Paradigma înseamnă literalmente un model sau o metodă. Paradigmele de programare sunt metodele de rezolvare a unui program care este de patru tipuri și anume, imperativ, logic, funcțional și orientat pe obiecte. Atunci când obiectele sunt utilizate ca entități de bază asupra cărora sunt aplicate metodele, sunt efectuate funcționalități de încapsulare sau moștenire, aceasta este cunoscută ca paradigmă orientată pe obiecte.

62. Care sunt principalele concepte de POO în Java?

Principalele concepte de POO în Java sunt menționate mai jos:

  • Moştenire
  • Polimorfism
  • Abstracția
  • Încapsulare

63. Care este diferența dintre un limbaj de programare orientat pe obiecte și un limbaj de programare bazat pe obiecte?

Limbajul de programare orientat pe obiecte

Limbajul de programare bazat pe obiecte

Limbajul de programare orientat pe obiecte acoperă concepte mai mari precum moștenirea, polimorfismul, abstracția etc.Sfera de aplicare a programării bazate pe obiecte este limitată la utilizarea obiectelor și a încapsulării.
Suportă toate obiectele încorporateNu acceptă toate obiectele încorporate
Exemple: Java, C# etc.Exemple: script Java, elemente de bază vizuale etc.

64. Prin ce este diferit operatorul „nou” de operatorul „newInstance()” în Java?

noul operator este folosit pentru a crea obiecte, dar dacă dorim să decidem tipul de obiect care urmează să fie creat în timpul execuției, nu există nicio modalitate de a folosi noul operator. În acest caz, trebuie să folosim metoda newInstance(). .

65. Ce sunt clasele în Java?

În Java, Clasele sunt o colecție de obiecte care împărtășesc caracteristici și atribute similare. Clasele reprezintă modelul sau șablonul din care sunt create obiectele. Clasele nu sunt entități din lumea reală, dar ne ajută să creăm obiecte care sunt entități din lumea reală.

66. Care este diferența dintre metoda statică (clasă) și metoda instanței?

Metoda statică (clasă).

Metoda de instanță

Metoda statică este asociată mai degrabă cu o clasă decât cu un obiect.

Metoda instanței este asociată mai degrabă cu un obiect decât cu o clasă.

Metodele statice pot fi apelate folosind numele clasei numai fără a crea o instanță a unei clase.

Metoda instanței poate fi apelată pe o anumită instanță a unei clase folosind referința la obiect.

Metodele statice nu au acces la acest cuvânt cheie .

Metodele de instanță au acces la acest cuvânt cheie .

Această metodă poate accesa numai membri statici ai clasei

Această metodă poate accesa atât metode statice, cât și non-statice ale clasei.

67. Ce este acest cuvânt cheie în Java?

6

„acest” este un cuvânt cheie folosit pentru a face referire la o variabilă care se referă la obiectul curent.

68. Ce sunt specificatorii de acces scurt și tipurile de specificatori de acces?

Access_modifiers_in_java-768

Specificatorii de acces în Java ajută la restricționarea domeniului unei clase, constructor, variabilă, metodă sau membru de date. Există patru tipuri de specificatori de acces în Java menționate mai jos:

  1. Public
  2. Privat
  3. Protejat
  4. Mod implicit

69. Care va fi valoarea inițială a unei referințe de obiect care este definită ca o variabilă de instanță?

Valoarea inițială a unei referințe de obiect care este definită ca o variabilă de instanță este o valoare NULL.

70. Ce este un obiect?

Obiectul este o entitate din viața reală care are anumite proprietăți și metode asociate cu acesta. Obiectul este, de asemenea, definit ca instanță a unei clase. Un obiect poate fi declarat folosind un nou cuvânt cheie.

71. Care sunt diferitele moduri de a crea obiecte în Java?

Metodele de creare a obiectelor în Java sunt menționate mai jos:

  1. Folosind un cuvânt cheie nou
  2. Utilizarea unei noi instanțe
  3. Folosind metoda clone().
  4. Utilizarea deserializării
  5. Folosind metoda newInstance() a clasei Constructor

Pentru a afla mai multe despre metodele de creare a obiectelor în Java, consultați Acest articol .

72. Care sunt avantajele și dezavantajele clonării obiectelor?

Există multe avantaje și dezavantaje ale utilizării clonării obiectelor, așa cum este menționat mai jos:

Avantaje:

  • În Java, operatorul de atribuire „=” nu poate fi folosit pentru clonare, deoarece pur și simplu creează o copie a variabilelor de referință. Pentru a depăși o astfel de discrepanță, metoda clone() a clasei Object poate fi utilizată peste operatorul de atribuire.
  • Metoda clone() este o metodă protejată a clasei Object, ceea ce înseamnă că numai clasa Employee poate clona obiecte Employee. Aceasta înseamnă că nicio clasă, în afară de Employee, nu poate clona obiecte Employee, deoarece nu cunoaște atributele clasei Employee.
  • Dimensiunea codului scade pe măsură ce repetarea scade.
  • Permite replicarea (un fel ca modelul prototipului) inițializarea manuală a fiecărui câmp creează cod mare dacă obiectul este complex, este mai rapid cu clonarea.

Dezavantaje:

  • Deoarece metoda Object.clone() este protejată, trebuie să furnizăm propriul nostru clone() și să apelăm indirect Object.clone() din aceasta.
  • Dacă nu avem nicio metodă, atunci trebuie să furnizăm o interfață care poate fi clonată, deoarece trebuie să furnizăm informații JVM, astfel încât să putem efectua un clone() pe obiectul nostru. Dacă nu, nu putem clona clonarea face o copie superficială a câmpurilor dacă nu avem doar returnați super.clone() din metoda clonării care poate fi problematică.

73. Care sunt avantajele trecerii acestui lucru într-o metodă în locul obiectului de clasă curent în sine?

Există câteva avantaje de a trece acest lucru într-o metodă în locul obiectului de clasă curent în sine, acestea sunt:

  • aceasta este variabila finală din cauza căreia aceasta nu poate fi atribuită unei noi valori, în timp ce obiectul de clasă curent ar putea să nu fie final și poate fi modificat.
  • aceasta poate fi folosită în blocul sincronizat.

74. Ce este constructorul?

Constructorul este o metodă specială care este folosită pentru a inițializa obiecte. Constructorul este apelat atunci când este creat un obiect. Numele constructorului este același ca al clasei.

Exemplu:

// Class Created class XYZ{  private int val;    // Constructor  XYZ(){  val=0;  } };>

75. Ce se întâmplă dacă nu furnizați un constructor într-o clasă?

Dacă nu furnizați un constructor într-o clasă în Java, compilatorul generează automat un constructor implicit fără argumente și fără operație care este un constructor implicit.

76. Câte tipuri de constructori sunt folosiți în Java?

Există două tipuri de constructori în Java, după cum este menționat mai jos:

  1. Constructor implicit
  2. Constructor parametrizat

Constructor implicit: este tipul care nu acceptă nicio valoare a parametrului. Este folosit pentru a seta valorile inițiale pentru atributele obiectului.

class_Name(); // Default constructor called>

Constructor parametrizat: este tipul de constructor care acceptă parametrii ca argumente. Acestea sunt folosite pentru a atribui valori variabilelor de instanță în timpul inițializării obiectelor.

class_Name(parameter1, parameter2......); // All the values passed as parameter will be // allocated accordingly>

77. Care este scopul unui constructor implicit?

Constructorii ajută la crearea instanțelor unei clase sau se poate spune că creează obiecte ale unei clase. Constructorul este apelat în timpul inițializării obiectelor. Un constructor implicit este un tip de constructor care nu acceptă niciun parametru, deci orice valoare este atribuită proprietăților obiectelor este considerată valori implicite.

78. Ce înțelegeți prin constructor de copiere în Java?

Constructorul de copiere este tipul de constructor în care trecem un alt obiect ca parametru deoarece proprietățile ambelor obiecte par aceleași, de aceea se pare că constructorii creează o copie a unui obiect.

79. Unde și cum poți folosi un constructor privat?

Un constructor privat este folosit dacă nu doriți ca nicio altă clasă să instanțieze obiectul pentru a evita subclasarea. Constructorul de utilizare privat poate fi văzut ca implementat în exemplu.

Exemplu:

Java
// Java program to demonstrate implementation of Singleton // pattern using private constructors. import java.io.*; class GFG {  static GFG instance = null;  public int x = 10;  // private constructor can't be accessed outside the  // class  private GFG() {}  // Factory method to provide the users with instances  static public GFG getInstance()  {  if (instance == null)  instance = new GFG();  return instance;  } } // Driver Class class Main {  public static void main(String args[])  {  GFG a = GFG.getInstance();  GFG b = GFG.getInstance();  a.x = a.x + 10;  System.out.println('Value of a.x = ' + a.x);  System.out.println('Value of b.x = ' + b.x);  } }>

Ieșire
Value of a.x = 20 Value of b.x = 20>

80. Care sunt diferențele dintre constructori și metode?

Constructorii Java sunt utilizați pentru inițializarea obiectelor. În timpul creării, constructorii sunt chemați să seteze atribute pentru obiecte în afară de aceste câteva diferențe de bază dintre ele sunt:

  1. Constructorii sunt apelați numai atunci când obiectul este creat, dar alte metode pot fi apelate de mai multe ori în timpul vieții unui obiect.
  2. Constructorii nu returnează nimic, în timp ce alte metode pot returna orice.
  3. Constructorii sunt folosiți pentru a configura starea inițială, dar metodele sunt folosite pentru a efectua acțiuni specifice.

81. Ce este o interfață?

O interfață în Java este o colecție de variabile finale statice și metode abstracte care definesc contractul sau acordul pentru un set de clase legate. Orice clasă care implementează o interfață este necesară pentru a implementa un set specific de metode. Specifică comportamentul pe care trebuie să-l manifeste o clasă, dar nu specificul modului în care ar trebui să fie implementată.

Sintaxă:

interface  {  // constant fields  // methds that are abstract by default }>

Exemplu:

Java
// Java Program to demonstrate Interface import java.io.*; interface Shape {  double getArea();  double getPerimeter(); } class Circle implements Shape {  private double radius;  public Circle(double radius) { this.radius = radius; }  public double getArea()  {  return Math.PI * radius * radius;  }  public double getPerimeter()  {  return 2 * Math.PI * radius;  } } class GFG {  public static void main(String[] args)  {  Circle circle = new Circle(5.0);  System.out.println('Area of circle is '  + circle.getArea());  System.out.println('Perimeter of circle is'  + circle.getPerimeter());  } }>

Ieșire
Area of circle is 78.53981633974483 Perimeter of circle is31.41592653589793>

82. Dați câteva caracteristici ale Interfeței.

O interfață în limbajul de programare Java este definită ca un tip abstract folosit pentru a specifica comportamentul unei clase. O interfață în Java este un model al unui comportament. O interfață Java conține constante statice și metode abstracte.

Caracteristicile interfeței sunt menționate mai jos:

  • Interfața poate ajuta la obținerea unei abstractizări totale.
  • Ne permite să folosim mai multe moșteniri în Java.
  • Orice clasă poate implementa mai multe interfețe chiar și atunci când o clasă poate extinde o singură clasă.
  • Este, de asemenea, utilizat pentru a obține cuplajul liber.

83. Ce este o interfață de marcare?

O interfață este recunoscută ca o interfață goală (fără câmp sau metode) se numește interfață marker. Exemple de interfețe de marcare sunt interfețele serializabile, clonabile și la distanță.

84. Care sunt diferențele dintre clasa abstractă și interfață?

Clasa-și-interfață-abstractă-768

Clasa abstracte

Clasa de interfață

Atât metodele abstracte, cât și cele non-abstracte pot fi găsite într-o clasă abstractă.

Interfața conține doar metode abstracte.

Clasa Abstract acceptă metodele finale.

Clasa de interfață nu acceptă metodele Final.

Moștenirea multiplă nu este acceptată de clasa Abstract.

Moștenirile multiple sunt acceptate de Interface Class.

Cuvânt cheie abstract este folosit pentru a declara clasa Abstract.

Cuvântul cheie de interfață este utilizat pentru a declara clasa interfeței.

extinde cuvântul cheie este folosit pentru a extinde o clasă abstractă. unelte Cuvântul cheie este folosit pentru a implementa interfața.

Clasa abstractă are membri precum protejați, private etc.

Toți membrii clasei sunt publici în mod implicit.

85. Ce înțelegeți prin încapsularea datelor?

Încapsulare-în-Java-300

Încapsularea datelor este conceptul de proprietăți OOPS și caracteristicile claselor pe care interfața este legată împreună. Practic, grupează date și metode care operează pe acele date într-o singură unitate. Încapsularea se realizează prin declararea variabilelor de instanță ale unei clase ca fiind private, ceea ce înseamnă că pot fi accesate numai în cadrul clasei.

86. Care sunt avantajele încapsulării în Java?

Avantajele încapsulării în Java sunt menționate mai jos:

  1. Ascunderea datelor: este o modalitate de a restricționa accesul membrilor noștri la date prin ascunderea detaliilor de implementare. Încapsularea oferă, de asemenea, o modalitate de ascunderea datelor. Utilizatorul nu va avea idee despre implementarea interioară a clasei.
  2. Flexibilitate sporită: putem face variabilele clasei doar în citire sau doar în scris, în funcție de cerințele noastre.
  3. Reutilizabilitate: Încapsularea îmbunătățește, de asemenea, reutilizarea și este ușor de schimbat cu noile cerințe.
  4. Testarea codului este ușoară: codul este ușor de testat pentru testarea unitară.

87. Care este beneficiul principal al încapsulării?

Principalul avantaj al încapsulării în Java este capacitatea sa de a proteja starea internă a unui obiect de modificări externe sau acces. Este o modalitate de a ascunde detaliile de implementare ale unei clase de accesul din exterior și de a expune doar o interfață publică care poate fi utilizată pentru a interacționa cu clasa. Principalul beneficiu este de a oferi o modalitate de a controla și gestiona starea și comportamentul unui obiect și, de asemenea, protejarea acestuia de modificări și acces neautorizat în același timp.

Exemplu:

Java
// Java Program to demonstrate use of Encapsulation import java.io.*; class Person {  private String Name;  private int age;  public String getName() { return Name; }  public void setName(String Name) { this.Name = Name; }  public int getAge() { return age; }  public void setAge(int age) { this.age = age; } } // Driver class class GFG {  // main function  public static void main(String[] args)  {  Person p = new Person();  p.setName('Rohan');  p.setAge(29);  System.out.println('Name is ' + p.getName());  System.out.println('Age is ' + p.getAge());  } }>

Ieșire
Name is Rohan Age is 29>

88. Ce înțelegi prin agregare?

Agregare-în-Java

Agregarea este un termen legat de relația dintre două clase cel mai bine descrisă ca o relație are-a. Acest tip este cea mai specializată versiune de asociere. Este o asociere unidirecțională înseamnă că este o relație unidirecțională. Conține referința la o altă clasă și se spune că are dreptul de proprietate asupra acelei clase.

89. Care este relația „IS-A” în OOPs Java?

„IS-A” este un tip de relație în Java OOP în care o clasă moștenește o altă clasă.

90. Definiți Moștenirea.

Când un obiect care aparține unei subclase dobândește toate proprietățile și comportamentul unui obiect părinte care provine din superclasă, acesta este cunoscut sub numele de moștenire. O clasă din cadrul unei clase este numită subclasă, iar aceasta din urmă este denumită superclasă. Se spune că subclasa sau clasa copil este specifică, în timp ce superclasa sau clasa părinte este generică. Moștenirea asigură reutilizarea codului.

91. Care sunt diferitele tipuri de moștenire în Java?

Moștenirea este metoda prin care clasa Child poate moșteni caracteristicile clasei Super sau Parent. În Java, moștenirea este de patru tipuri:

  • Moștenire unică: Când un copil sau o subclasă extinde o singură superclasă, se știe că este o moștenire unică. Proprietățile clasei monoparentale sunt transmise clasei fii.
  • Moștenire pe mai multe niveluri: Când un copil sau o subclasă extinde orice altă subclasă, este creată o ierarhie de moștenire care este cunoscută sub numele de moștenire pe mai multe niveluri. Cu alte cuvinte, o subclasă devine clasa părinte a alteia.
  • Moștenirea ierarhică: Atunci când mai multe subclase derivă din aceeași clasă părinte este cunoscută sub numele de moștenire ierarhică. Cu alte cuvinte, o clasă care are un singur părinte are multe subclase.
  • Moștenire multiplă: Când o clasă copil moștenește de la mai multe clase părinte este cunoscută sub denumirea de Moștenire multiplă. În Java, acceptă doar moștenirea multiplă de interfețe, nu clase.

92. Ce este moștenirea multiplă? Este suportat de Java?

O componentă a noțiunii orientate pe obiecte cunoscută sub numele de moșteniri multiple permite unei clase să moștenească proprietăți de la multe clase părinte. Când metode cu aceeași semnătură sunt prezente atât în ​​superclase, cât și în subclase, apare o problemă. Apelantul metodei nu poate specifica compilatorului care metodă de clasă trebuie apelată sau chiar cărei metode de clasă trebuie să primească prioritate.

Notă: Java nu acceptă moștenirea multiplă

Exemplu:

Java
// Java Program to show multiple Inheritance import java.io.*; interface Animal {  void eat(); } interface Mammal {  void drink(); } class Dog implements Animal, Mammal {  public void eat() { System.out.println('Eating'); }  public void drink() { System.out.println('Drinking'); }  void bark() { System.out.println('Barking'); } } class GFG {  public static void main(String[] args)  {  Dog d = new Dog();  d.eat();  d.drink();  d.bark();  } }>

Ieșire
Eating Drinking Barking>

93. Cum este moștenirea în C++ diferită de Java?

Moștenirea în C++

Moștenirea în Java

C++ permite utilizatorului să moștenească mai multe clase.Java nu acceptă moșteniri multiple.
Când o clasă este creată în C++, ea nu moștenește din clasa obiect, ci există de la sine.Se spune întotdeauna că Java are o singură moștenire, deoarece toate clasele moștenesc într-unul sau altul de la clasa obiect.

94. Există vreo limitare în utilizarea Moștenirii?

Da, există o limitare a utilizării Moștenirii în Java, deoarece din cauza moștenirii se poate moșteni totul, de la super clasă și interfață, din cauza cărora subclasa este prea grupată și uneori predispusă la erori atunci când suprascrierea dinamică sau supraîncărcarea dinamică se face în anumite situații.

95. Deși moștenirea este un concept popular de POO, este mai puțin avantajos decât compoziția. Explica.

Moștenirea este un concept popular de programare orientată pe obiecte (OOP), în care o clasă poate moșteni proprietățile și metodele de la orice altă clasă, care este denumită Parent sau superclasă. Pe de altă parte, în Compoziție, o clasă poate conține o instanță a unei alte clase ca variabilă membru, care este adesea denumită parte sau componentă. Mai jos sunt câteva motive pentru care compoziția este mai avantajoasă decât moștenirea:

  • Cuplaje strânse: Ori de câte ori sunt aduse modificări superclasei, aceste modificări pot afecta comportamentul tuturor copiilor sau subclaselor sale. Această problemă face codul mai puțin flexibil și, de asemenea, creează probleme în timpul întreținerii. Această problemă duce și la o cuplare strânsă între clase.
  • Problema clasei de bază fragile: Când modificările aduse clasei de bază pot rupe funcționalitatea claselor sale derivate. Această problemă poate face dificilă adăugarea de noi funcții sau modificarea celor existente. Această problemă este cunoscută sub numele de problema clasei de bază fragilă.
  • Reutilizare limitată: Moștenirea în Java poate duce la reutilizarea limitată a codului și, de asemenea, la duplicarea codului. Deoarece o subclasă moștenește toate proprietățile și metodele superclasei sale, uneori poate ajunge la un cod inutil care nu este necesar. Acest lucru duce la o bază de cod mai puțin întreținută.

96. Ce este o asociație?

Asocierea este o relație între două clase separate stabilite prin Obiectele lor. Reprezintă relația lui Has-A.

97. Ce înțelegi prin agregare?

Compoziția este o formă restrânsă de agregare în care două entități sunt foarte dependente una de cealaltă. Reprezinta parte din relația.

98. Care este compoziția Java?

Compoziția presupune o relație în care copilul nu poate exista independent a parintelui. De exemplu, inima umană, inima nu există separat de un om.

99. Precizați diferența dintre Compoziție și Agregare.

Agregare

Compoziţie

Definește o relație între obiecte

Reprezintă partea din relație

Obiectele sunt independente unele de altele.

Obiectele sunt dependente unele de altele.

Reprezentați-l folosind diamantul umplut.

Reprezentați-l folosind diamantul gol.

Obiectele copiilor nu au o viață întreagă.

Obiectele copiilor au o viață întreagă.

100. Constructorul poate fi moștenit?

Nu, nu putem moșteni un constructor.


101. Ce este polimorfismul?

Polimorfismul este definit ca abilitatea de a lua mai mult de o formă. Este de două tipuri și anume, polimorfismul în timpul compilării sau supraîncărcarea metodei - o funcție numită în timpul compilării. De exemplu, luați o „zonă” de clasă. Pe baza numărului de parametri, poate calcula aria unui pătrat, triunghi sau cerc. Polimorfismul timpului de rulare sau suprascrierea metodei - legături în timpul rulării. Metoda din interiorul unei clase suprascrie metoda clasei părinte.

102. Ce este polimorfismul runtime sau metoda dinamică de expediere?

Trimiterea dinamică a metodei este un mecanism de rezolvare pentru înlocuirea metodei în timpul rulării. Suprascrierea metodei este aceea în care metoda dintr-o subclasă are același nume, parametri și tip de returnare ca o metodă din superclasă. Când metoda supraîncărcată este apelată printr-o referință de superclasă, java determină ce versiune (superclasă sau subclasă) a acelei metode va fi executată pe baza tipului de obiect la care se face referire în momentul în care are loc apelul. Astfel, decizia este luată în timpul executării. Aceasta este denumită trimiterea metodei dinamice.

103. Ce este anularea metodei?

Suprascrierea metodei, cunoscută și sub numele de polimorfism în timpul execuției, este una în care clasa copil conține aceeași metodă ca și clasa părinte. De exemplu, avem o metodă numită „gfg()” în clasa părinte. O metodă gfg() este din nou definită în subclasă. Astfel, atunci când gfg() este apelat în subclasă, metoda din id-ul clasei este executată. Aici, gfg() din cadrul clasei a suprascris metoda din afara.

104. Ce este supraîncărcarea metodei?

Supraîncărcare-în-Java-768

Suprascrierea metodei este o metodă de a obține polimorfismul în timp de execuție în Java. Suprascrierea metodei este o caracteristică care permite unei clase copil să ofere o implementare specifică a unei metode care este deja furnizată de una dintre clasele sale părinte. Când o metodă dintr-o clasă copil are același nume, aceiași parametri sau semnătură și același tip de returnare (sau subtip) ca o metodă din clasa sa părinte, atunci se spune că metoda din subclasă înlocuiește metoda din superclasa.

105. Putem suprascrie metoda statică?

Nu, deoarece metodele statice fac parte mai degrabă din clasă decât din obiect, așa că nu le putem suprascrie.

106. Putem suprascrie metoda supraîncărcată?

Da, deoarece metoda supraîncărcată este o metodă complet diferită în ochii compilatorului. Suprascrierea nu este deloc același lucru. Decizia cu privire la metoda de apelat este amânată timpului de execuție.

107. Putem supraîncărca metoda main()?

Da, în Java, putem supraîncărca metoda principală pentru a apela metoda principală cu ajutorul metodei sale de apelare predefinite.

108. Ce sunt supraîncărcarea metodei și suprascrierea metodei?

Supraîncărcarea metodei: Este cunoscut și sub numele de polimorfism în timp de compilare. În supraîncărcarea metodelor, două sau mai multe metode sunt partajate în aceeași clasă cu o semnătură diferită.

Exemplu:

Java
// Java Program to demonstrate use of Method Overloading import java.io.*; class GFG {  static int multiply(int a, int b) { return a * b; }  static int multiply(int a, int b, int c)  {  return a * b * c;  }  static int multiply(int a, int b, int c, int d)  {  return a * b * c * d;  }  public static void main(String[] args)  {  System.out.println('multiply() with 2 parameters');  System.out.println(multiply(4, 5));  System.out.println('multiply() with 3 parameters');  System.out.println(multiply(2, 3, 4));  System.out.println('multiply() with 4 parameters');  System.out.println(multiply(2, 3, 4, 1));  } }>

Ieșire
multiply() with 2 parameters 20 multiply() with 3 parameters 24 multiply() with 4 parameters 24>

Suprascrierea metodei: Suprascrierea metodei apare atunci când o subclasă poate furniza implementarea unei metode care este deja definită în clasa părinte sau superclasa. Tipul de returnare, numele și argumentele trebuie să fie similare cu metodele din superclasă.

Exemplu:

Java
// Java Program to demonstrate use of Method Overriding import java.io.*; class Vehicle {  void drive()  {  System.out.println('drive() method of base class');  System.out.println('driving the Car.');  } } class Car extends Vehicle {  void drive()  {  System.out.println(  'drive() method of derived class');  System.out.println('Car is driving.');  } } class GFG {  public static void main(String[] args)  {  Car c1 = new Car();  Vehicle v1 = new Vehicle();  c1.drive();  v1.drive();  Vehicle vehicle = new Car();  // drive() method of Vehicle class is overridden by  // Car class drive()  vehicle.drive();  } }>

Ieșire
drive() method of derived class Car is driving. drive() method of base class driving the Car. drive() method of derived class Car is driving.>

Supraîncărcarea metodei

Anularea metodei

Când două sau mai multe metode sunt în aceeași clasă cu parametri diferiți, dar cu același nume.

Când o subclasă oferă propria sa implementare a unei metode care este deja definită în clasa părinte.

Supraîncărcarea metodei se poate întâmpla numai în aceeași clasă sau între o subclasă sau o clasă părinte.

Suprascrierea metodei se poate întâmpla numai în subclasă.

Când apare o eroare, aceasta este prinsă la momentul compilarii programului.

Când apare o eroare, aceasta este prinsă în timpul de execuție a programului.

Exemplu de polimorfism în timp de compilare.

Exemplu de polimorfism de rulare.

Supraîncărcarea metodei poate necesita sau nu moștenire.

Anularea metodei necesită întotdeauna moștenire.

Se întâmplă în cadrul clasei.

Se desfășoară în două clase cu relație de moștenire.

109. Putem trece peste metodele private?

Nu este posibil să suprascrieți metodele private în Java. Suprascrierea metodei este în cazul în care metoda din subclasă este implementată în loc de metoda din clasa părinte. Metodele private sunt accesibile numai în cadrul clasei în care este declarată. Deoarece această metodă nu este vizibilă pentru alte clase și nu poate fi accesată, nu poate fi suprascrisă.

110. Putem schimba domeniul de aplicare al metodei suprascrise în subclasă?

În Java, nu este posibil să se modifice domeniul de aplicare al metodei suprascrise. Domeniul de aplicare al metodei subclaselor trebuie să fie egal sau mai larg decât domeniul de aplicare al metodei suprascrise a metodei Superclass. Metoda suprascrisă din subclasă, de exemplu, poate avea un domeniu public sau un domeniu mai accesibil, cum ar fi protejat sau implicit, dacă metoda înlocuită din superclasă are un domeniu public. Cu toate acestea, nu poate avea un domeniu de aplicare mai exclusiv precum privat.

111. Putem modifica clauza throws a metodei superclasei în timp ce o suprascriem în subclasă?

Putem modifica clauza throws a metodei Superclass cu unele limitări, putem modifica clauza throws a metodei superclass în timp ce o suprascriem în subclasă. Metoda suprascrisă subclasă poate specifica excepții neverificate numai dacă metoda superclasă nu declară nicio excepție. Dacă metoda superclasei declară o excepție, metoda subclasei poate declara aceeași excepție, o excepție de subclasă sau nicio excepție. Cu toate acestea, metoda subclaselor nu poate declara o excepție părinte care este mai largă decât cele declarate în metoda superclasei.

112. Poti avea functii virtuale in Java?

Da, Java acceptă funcții virtuale. Funcțiile sunt implicit virtuale și pot fi făcute non-virtuale folosind cuvântul cheie final.

113. Ce este abstracția?

Abstracția se referă la actul de a reprezenta trăsături esențiale fără a include detalii de fundal. Informațiile detaliate sau implementarea sunt ascunse. Cel mai comun exemplu de abstractizare este o mașină, știm să pornim motorul, să accelerăm și să ne mișcăm, totuși, modul în care funcționează motorul, iar componentele sale interne sunt o logică complexă ascunsă utilizatorilor generali. Acest lucru se face de obicei pentru a gestiona complexitatea.

114. Ce este clasa Abstract?

O clasă declarată abstractă, nu poate fi instanțiată, adică obiectul nu poate fi creat. Poate conține sau nu metode abstracte, dar dacă o clasă are cel puțin o metodă abstractă, aceasta trebuie declarată abstractă.

Exemplu de clasă abstractă cu metodă abstractă:

Java
// Java Program to implement // abstract method import java.io.*; // Abstract class abstract class Fruits {  abstract void run(); } // Driver Class class Apple extends Fruits {  void run()  {  System.out.println('Abstract class example');  }  // main method  public static void main(String args[])  {  Fruits obj = new Apple();  obj.run();  } }>

115. Când se folosesc metode abstracte?

O metodă abstractă este folosită atunci când dorim să folosim o metodă, dar dorim să folosim clasele copil pentru a decide implementarea în acest caz, folosim metode abstracte cu clasele părinte.

116. Cum puteți evita serializarea în clasa copil dacă clasa de bază implementează interfața Serializable?

Serializarea în clasa copil dacă clasa de bază implementează interfața Serializable, atunci o putem evita prin definirea metodei writeObject() și aruncând NotSerializableException().

117. Ce este Collection Framework în Java?

Colecțiile sunt unități de obiecte în Java. Cadrul de colecție este un set de interfețe și clase în Java care sunt utilizate pentru a reprezenta și manipula colecții de obiecte într-o varietate de moduri. Cadrul de colectare conține clase (ArrayList, Vector, LinkedList, PriorityQueue, TreeSet) și mai multe interfețe (Set, List, Queue, Deque) în care fiecare interfață este utilizată pentru a stoca un anumit tip de date.

118. Explicați diferitele interfețe utilizate în cadrul Collection.

Cadrul de colectare implementează

  1. Interfață de colecție
  2. Interfață Listă
  3. Setați interfața
  4. Interfață coadă
  5. Și interfața
  6. Interfață de hartă

Interfață de colecție: Colecția este interfața principală disponibilă care poate fi importată folosind java.util.Collection.

Sintaxă:

public interface Collection extends iterable>

119. Cum puteți sincroniza o ArrayList în Java?

O ArrayList poate fi sincronizată folosind două metode menționate mai jos:

  1. Utilizarea Collections.synchronizedList()
  2. Folosind CopyOnWriteArrayList

Folosind Collections.synchronizedList():

public static List synchronizedList(List list)>

Folosind CopyOnWriteArrayList:

  1. Creați o listă goală.
  2. Implementează interfața Listă
  3. Este o variantă thread-safe a ArrayList
  4. T reprezintă generic

120. De ce avem nevoie de o ArrayList sincronizată când avem Vectori (care sunt sincronizați) în Java?

ArrayList are nevoie chiar și atunci când avem Vectori din anumite motive:

  1. ArrayList este mai rapid decât Vectors.
  2. ArrayList acceptă multithreading, în timp ce Vectors acceptă numai utilizarea unui singur thread.
  3. ArrayList este mai sigur de utilizat, deoarece Vectors acceptă fire unice, iar operațiunile individuale sunt mai puțin sigure și durează mai mult pentru sincronizare.
  4. Vectorii sunt considerați învechiți în Java datorită naturii lor sincronizate.

121. De ce nu putem crea o matrice generică?

Matricele generice nu pot fi create deoarece un matrice poartă tastați informații despre elementele sale în timpul execuției, din cauza căreia în timpul execuției se aruncă „ArrayStoreException” dacă tipul elementelor nu este similar. Deoarece informațiile de tip generic sunt șterse în timpul compilării de tipul de ștergere, verificarea depozitului de matrice ar fi fost trecută acolo unde ar fi trebuit să eșueze.

122. Locațiile de memorie contigue sunt de obicei folosite pentru stocarea valorilor reale într-o matrice, dar nu în ArrayList. Explica.

Elementele unei matrice sunt stocate în locații de memorie învecinate, ceea ce înseamnă că fiecare element este stocat într-un bloc separat pe baza acestuia situat în cadrul matricei. Deoarece elementele matricei sunt stocate în locații învecinate, poate fi relativ ușor să accesați orice element prin indexul său, deoarece adresa elementului poate fi calculată pe baza locației elementului. Dar Java implementează ArrayLists ca matrice dinamice, ceea ce înseamnă că dimensiunea se poate schimba pe măsură ce elementele sunt eliminate sau adăugate. Elementele ArrayList nu sunt stocate în locații de memorie adiacente pentru a se adapta acestei naturi dinamice. În schimb, ArrayList folosește o metodă cunoscută sub numele de matrice extensibilă în care matricea de bază este extinsă la o dimensiune mai mare, după cum este necesar, iar elementele sunt apoi copiate în noua locație. Spre deosebire de o ArrayList, care are o dimensiune dinamică și nu își stochează elementele în locații de memorie adiacente, o matrice are o dimensiune fixă ​​și elementele sale sunt stocate acolo.

123. Explicați metoda de a converti ArrayList în Array și Array în ArrayList.

Conversia Listă în ArrayList

Există mai multe metode de a converti List în ArrayList

Convertiți-Array-în-ArrayList-768

Programatorii pot converti un Array în ArrayList folosind metoda asList() din clasa Arrays. Este o metodă statică a clasei Arrays care acceptă obiectul List.

Sintaxă:

Arrays.asList(item)>

Exemplu:

Java
// Java program to demonstrate conversion of // Array to ArrayList of fixed-size. import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  String[] temp = { 'Abc', 'Def', 'Ghi', 'Jkl' };  // Conversion of array to ArrayList  // using Arrays.asList  List conv = Arrays.asList(temp);  System.out.println(conv);  } }>

Ieșire
[Abc, Def, Ghi, Jkl]>

Conversia ArrayList în Array

Convertiți-ArrayList-în-Array-768

Programatorii Java pot converti ArrayList în

Sintaxă:

List_object.toArray(new String[List_object.size()])>

Exemplu:

Java
// Java program to demonstrate working of // Objectp[] toArray() import java.io.*; import java.util.List; import java.util.ArrayList; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // List declared  List<Integer>  arr = new ArrayList<Integer>();  arr.add(1);  arr.add(2);  arr.add(3);  arr.add(2);  arr.add(1);  // Conversion  Object[] objects = arr.toArray();  // Printing array of objects  for (Object obj : objects)  System.out.print(obj + ' ');  } }>

Ieșire
1 2 3 2 1>

124. Cum crește dinamic dimensiunea ArrayList? Și, de asemenea, precizați cum este implementat intern.

Datorită naturii bazate pe matrice ArrayLists, acesta crește dinamic în dimensiune, asigurând întotdeauna suficient spațiu pentru elemente. Când un element ArrayList este creat pentru prima dată, capacitatea implicită este de aproximativ 10-16 elemente, care depinde practic de versiunea Java. Elementele ArrayList sunt copiate din matricea originală în noua matrice atunci când capacitatea matricei originale este plină. Pe măsură ce dimensiunea ArrayList crește dinamic, clasa creează o nouă matrice de dimensiuni mai mari și copiază toate elementele din vechea matrice în noua matrice. Acum, referința noii matrice este utilizată intern. Acest proces de creștere dinamică a unei matrice este cunoscut sub numele de redimensionare.

125. Ce este un vector în Java?

Vectorii din Java sunt similari și pot stoca mai multe elemente în interiorul lor. Vectorii respectă anumite reguli menționate mai jos:

  1. Vector poate fi importat folosind Java.util.Vector.
  2. Vector este implementat folosind o matrice dinamică pe măsură ce dimensiunea vectorului crește și scade în funcție de elementele inserate în el.
  3. Elemente ale Vectorului folosind numere de index.
  4. Vectorii sunt sincronizați în natură înseamnă că au folosit doar un singur fir (doar un proces este efectuat la un anumit moment).
  5. Vectorul conține multe metode care nu fac parte din cadrul colecțiilor.

Sintaxă:

Vector gfg = new Vector(size, increment);>

126. Cum se face ca Java ArrayList să fie doar citire?

Un ArrayList poate fi pregătit numai folosind metoda oferită de Collections folosind metoda Collections.unmodiableList().

Sintaxă:

array_readonly = Collections.unmodifiableList(ArrayList);>

Exemplu:

Java
// Java program to demonstrate // unmodifiableList() method import java.util.*; public class Main {  public static void main(String[] argv) throws Exception  {  try {  // creating object of ArrayList  <Character> ArrayList<Character>  temp  = new ArrayList<Character>();  // populate the list  temp.add('X');  temp.add('Y');  temp.add('Z');  // printing the list  System.out.println('Initial list: ' + temp);  // getting readonly list  // using unmodifiableList() method  List<Character>  new_array  = Collections.unmodifiableList(temp);  // printing the list  System.out.println('ReadOnly ArrayList: '  + new_array);  // Adding element to new Collection  System.out.println('
If add element in '  + ' the ReadOnly ArrayList');  new_array.add('A');  }  catch (UnsupportedOperationException e) {  System.out.println('Exception is thrown : '  + e);  }  } }>

Ieșire
Initial list: [X, Y, Z] ReadOnly ArrayList: [X, Y, Z] If add element in the ReadOnly ArrayList Exception is thrown : java.lang.UnsupportedOperationException>

127. Ce este o coadă de prioritate în Java?

Prioritate-Coada-768

O coadă prioritară este un tip de date abstract similar unei cozi obișnuite sau unei structuri de date stive. Elementele stocate în elemente depind de prioritatea definită de la scăzut la mare. PriorityQueue se bazează pe heap-ul prioritar.

Sintaxă:

Java
// Java program to demonstrate the // working of PriorityQueue import java.util.*; class PriorityQueueDemo {  // Main Method  public static void main(String args[])  {  // Creating empty priority queue  PriorityQueue<Integer>  var1  = new PriorityQueue<Integer>();  // Adding items to the pQueue using add()  var1.add(10);  var1.add(20);  var1.add(15);  // Printing the top element of PriorityQueue  System.out.println(var1.peek());  } }>

Ieșire
10>

128. Explicați clasa LinkedList.

Clasa LinkedList este Java care folosește o listă dublu legată pentru a stoca elemente. Moștenește clasa AbstractList și implementează interfețele List și Deque. Proprietățile clasei LinkedList sunt menționate mai jos:

  1. Clasele LinkedList sunt nesincronizate.
  2. Menține ordinea de inserare.
  3. Poate fi folosit ca listă, stivă sau coadă.

Sintaxă:

LinkedList list_name=new LinkedList();>

129. Ce este clasa Stack în Java și care sunt diferitele metode oferite de aceasta?

O clasă Stack în Java este o structură de date LIFO care implementează structura de date Last In First Out. Este derivat dintr-o clasă Vector, dar are funcții specifice stivelor. Clasa Stack în java oferă următoarele metode:

  • arunca o privire(): returnează elementul de sus din stivă fără a-l elimina
  • gol(): returnează adevărat dacă stiva este goală și fals în caz contrar
  • Apăsaţi(): împinge un articol în partea de sus a stivei
  • pop(): elimină și returnează elementul de sus din stivă
  • căutare(): returnează poziția bazată pe 1 a obiectului din partea de sus a stivei. Dacă obiectul nu este în stivă, returnează -1

130. Ce este Set în cadrul Java Collections și enumerați diferitele sale implementări?

Seturile sunt colecții care nu stochează elemente duplicat. Ei nu păstrează nicio ordine a elementelor. Cadrul Java Collections oferă mai multe implementări ale interfeței Set, inclusiv:

  • HashSet: HashSet în Java, stochează elementele într-un tabel has care oferă căutări mai rapide și inserare mai rapidă. HashSet nu este comandat.
  • LinkedHashSet: LinkedHashSet este o implementare a lui HashSet care menține ordinea de inserare a elementelor.
  • TreeSet: TreeSet stochează elementele într-o ordine sortată care este determinată de ordonarea naturală a elementelor sau de un comparator personalizat furnizat la momentul creării.

131. Ce este clasa HashSet în Java și cum stochează elementele?

Clasa HashSet implementează interfața Set în cadrul Java Collections Framework și este membru al clasei HashSet. Spre deosebire de valorile duplicate, acesta stochează o colecție de elemente distincte. În această implementare, fiecare element este mapat la un index dintr-o matrice folosind o funcție hash, iar indexul este utilizat pentru a accesa rapid elementul. Produce un index pentru elementul din matrice unde este stocat pe baza elementului de intrare. Presupunând că funcția hash distribuie elementele între găleți în mod corespunzător, clasa HashSet oferă performanță în timp constant pentru operațiunile de bază (adăugați, eliminați, conține și dimensiune).

132. Ce este LinkedHashSet în Java Collections Framework?

LinkedHashSet este o versiune ordonată a Hashset-ului menținută printr-o listă dublu legată de toate elementele. Este foarte util atunci când este nevoie de ordine de iterație. În timpul iterației în LinkedHashSet, elementele sunt returnate în aceeași ordine în care sunt inserate.

Sintaxă:

LinkedHashSet hs = new LinkedHashSet();>

Exemplu:

Java
// Java Program to implement // LinkedHashSet import java.io.*; import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // LinkedHashSet declared  LinkedHashSet<Integer>  hs = new LinkedHashSet<Integer>();  // Add elements in HashSet  hs.add(1);  hs.add(2);  hs.add(5);  hs.add(3);  // Print values  System.out.println('Values:' + hs);  } }>

Ieșire
Values:[1, 2, 5, 3]>

133. Ce este o interfață Map în Java?

Hartă-Interfață-în-Java-660

Interfața hărții este prezentă în colecția Java și poate fi utilizată cu pachetul Java.util. O interfață de hartă este utilizată pentru maparea valorilor sub forma unui formular cheie-valoare. Harta conține toate cheile unice. De asemenea, oferă metode asociate cu acesta, cum ar fi containsKey(), contains value (), etc.

Există mai multe tipuri de hărți în interfața hărții, așa cum este menționat mai jos:

  1. Harta sortată
  2. Harta copacului
  3. HashMap
  4. LinkedHashMap

134. Explicați Harta arborelui în Java

TreeMap este un tip de hartă care stochează date sub formă de pereche cheie-valoare. Este implementat folosind arborele roșu-negru. Caracteristicile TreeMap sunt:

  1. Conține doar elemente unice.
  2. Nu poate avea o cheie NULL
  3. Poate avea mai multe valori NULL.
  4. Este nesincronizat.
  5. Menține ordinea crescătoare.

135. Ce este EnumSet?

EnumSet este o implementare specializată a interfeței Set pentru utilizare cu tipul de enumerare. Câteva caracteristici ale EnumSet sunt:

  1. Este nesincronizat.
  2. Mai rapid decât HashSet.
  3. Toate elementele dintr-un EnumSet trebuie să provină dintr-un singur tip de enumerare.
  4. Nu permite obiecte nule și aruncă NullPointerException pentru excepții.
  5. Utilizează un iterator de siguranță.

Sintaxă:

public abstract class EnumSet>

Parametru: E specifică elementele.

136. Ce este BlockingQueue?

BlockingQueue-768

O coadă de blocare este o coadă care acceptă operațiunile care așteaptă ca coada să devină negoală în timp ce se preia și se elimină elementul și așteaptă ca spațiu să devină disponibil în coadă în timp ce se adaugă elementul.

sortare cu găleată

Sintaxă:

public interface BlockingQueue extends Queue>

Parametri: E este tipul de elemente stocate în Colecție

137. Ce este ConcurrentHashMap în Java și îl implementați?

ConcurrentHashMap este implementat folosind Hashtable.

Sintaxă:

public class ConcurrentHashMap  extends AbstractMap  implements ConcurrentMap, Serializable>

Parametrii : K este tipul obiectului cheie și V este valoarea tipului obiectului

138. Puteți folosi orice clasă ca cheie pentru hartă?

Da, putem folosi orice clasă ca cheie de hartă dacă respectă anumite reguli predefinite menționate mai jos:

  1. Clasa care suprascrie metoda equals() trebuie să suprascrie și metoda hashCode().
  2. Clasa concurrentHashMap este sigură pentru fire.
  3. Nivelul de concurență implicit al ConcurrentHashMap este 16.
  4. Inserarea obiectelor nule în ConcurrentHashMap nu este posibilă ca cheie sau ca valoare.

139. Ce este un Iterator?

Iterator-în-Java-768

Interfața Iterator oferă metode de iterare peste orice colecție în Java. Iteratorul este înlocuirea Enumerării în cadrul Java Collections Framework. Poate obține o instanță iterator dintr-o colecție folosind metoda _iterator()_. De asemenea, permite apelantului să elimine elemente din colecția de bază în timpul iterației.

140. Ce este o enumerare?

Enumerarea este un tip de date definit de utilizator. Este folosit în principal pentru a atribui nume constantelor integrale, numele fac un program ușor de citit și întreținut. Obiectivul principal al enumerarii este de a defini tipurile de date definite de utilizator.

Exemplu:

// A simple enum example where enum is declared  // outside any class (Note enum keyword instead of  // class keyword)  enum Color  {   RED, GREEN, BLUE;  }>

141. Care este diferența dintre Colecție și Colecții?

Colectie

Colecții

Colecția este o interfață.

Colecțiile sunt o clasă.

Oferă funcționalitatea standard a structurii de date.

Este de a sorta și sincroniza elementele de colecție.

Acesta oferă metodele care pot fi utilizate pentru structura datelor.

Oferă metode statice care pot fi utilizate pentru diferite operații.

142. Faceți diferența între Array și ArrayList în Java.

Matrice

ArrayList

Unidimensional sau multidimensional

Unidimensional

Pentru și pentru fiecare folosit pentru iterație

Aici iteratorul este folosit pentru a parcurge riverArrayList

cuvântul cheie length returnează dimensiunea matricei.

metoda size() este utilizată pentru a calcula dimensiunea ArrayList.

Matricea are dimensiune fixă.

Dimensiunea ArrayList este dinamică și poate fi mărită sau micșorată atunci când este necesar.

Este mai rapid ca mai sus îl vedem de dimensiune fixă

Este relativ mai lent din cauza naturii sale dinamice

Tipurile de date primitive pot fi stocate direct în obiecte improbabile.

Tipurile de date primitive nu sunt adăugate direct la matrice improbabile, ele sunt adăugate indirect cu ajutorul autoboxingului și unboxingului

Ele nu pot fi adăugate aici, prin urmare tipul este în pericol.

Acestea pot fi adăugate aici, astfel încât ArrayList să fie sigur de tip.

Operatorul de atribuire servește doar scopului

Aici este folosită o metodă specială cunoscută sub numele de metoda add().

143. Care este diferența dintre Array și Collection în Java?

Matrice

Colecții

Array în Java are o dimensiune fixă.

Colecțiile în Java au dimensiuni dinamice.

Într-o matrice, elementele sunt stocate în locații de memorie adiacente.

În Colecții, Elementele nu sunt neapărat stocate în locații de memorie adiacente.

Obiectele și tipurile de date primitive pot fi stocate într-o matrice.

Putem stoca doar obiecte în colecții.

Manipularea manuală este necesară pentru redimensionarea matricei.

Redimensionarea în colecții este gestionată automat.

Matricea are metode de bază pentru manipulare.

Colecțiile au metode avansate de manipulare și iterare.

Matricea este disponibilă de la începutul Java.

Colecțiile au fost introduse în Java 1.2.

144. Diferența dintre ArrayList și LinkedList.

ArrayList

ce este rom

LinkedList

ArrayList este implementat ca o matrice extensibilă.

LinkedList este implementat ca o listă dublu legată.

În ArrayList, elementele sunt stocate în locații de memorie adiacente

Elementele LinkedList sunt stocate în locații de memorie necontigue, deoarece fiecare element are o referință la elementele următoare și anterioare.

ArrayLists sunt mai rapide pentru acces aleatoriu.

LinkedLists sunt mai rapide pentru operațiunile de inserare și ștergere

ArrayLists sunt mai eficiente în memorie.

LinkedList este mai puțin eficient în memorie

ArrayLists Folosiți mai multă memorie datorită menținerii dimensiunii matricei.

LinkedList Utilizează mai puțină memorie deoarece are doar referințe la elemente

Operația de căutare este mai rapidă în ArrayList.

Operația de căutare este mai lentă în LinkedList

145. Faceți diferența între ArrayList și Vector în Java.

ArrayList

Vector

ArrayLists sunt implementate ca o matrice extensibilă.

Vector este implementat ca o matrice crescabilă.

ArrayList nu este sincronizat.

Vectorul este sincronizat.

ArrayLists sunt mai rapide pentru operațiuni neconcurente.

Vector este mai lent pentru operațiuni neconcurente datorită supraîncărcării adăugate de sincronizare.

ArrayLists au fost introduse în Java 1.2.

Vector a fost introdus în JDK 1.0.

Recomandat pentru utilizare într-un mediu cu un singur fir.

Vectorii sunt Recomandati pentru utilizare într-un mediu cu mai multe fire.

Capacitatea inițială implicită a ArrayLists este 10.

În Vectors, capacitatea inițială implicită este 10, dar incrementul implicit este de două ori mai mare.

Performanța ArrayList este ridicată.

Performanța vectorului este scăzută.

146. Care este diferența dintre Iterator și ListIterator?

Iterator

ListIterator

Poate traversa elementele prezente în Collection numai în direcția înainte.

Poate traversa elementele prezente în colecție atât în ​​direcția înainte, cât și în spate.

Folosit pentru a parcurge Hartă, Listă și Set.

Poate parcurge numai List și nu celelalte două.

Indexurile nu pot fi obținute folosind Iterator

Are metode precum nextIndex() și previousIndex() pentru a obține indici de elemente în orice moment în timp ce parcurgeți Lista.

Nu se pot modifica sau înlocui elementele prezente în colecție

Poate modifica sau înlocui elemente cu ajutorul setului (E e)

Nu se pot adăuga elemente și, de asemenea, aruncă ConcurrentModificationException.

Poate adăuga cu ușurință elemente la o colecție în orice moment.

Anumite metode de Iterator sunt next(), remove() și hasNext().

Anumite metode ale ListIterator sunt next(), previous(), hasNext(), hasPrevious(), add(E e).

147. Faceți diferența între HashMap și HashTable.

HashMap

HashTable

HashMap nu este sincronizat

HashTable este sincronizat

O cheie poate fi o valoare NULL

Valorile NULL nu sunt permise

Iteratorul este folosit pentru a parcurge HashMap.

Pot fi utilizate atât Iterator, cât și Enumertar

HashMap este mai rapid.

HashTable este mai lent în comparație cu HashMap.

148. Care este diferența dintre Iterator și Enumerare?

Iterator

Enumerare

Iteratorul poate traversa atât elementele moștenite, cât și elementele nelegate.

Enumerarea poate traversa doar elementele moștenite.

Iteratorul este rapid.

Enumerarea nu este rapidă.

Iteratoarele sunt mai lente.

Enumerarea este mai rapidă.

Iteratorul poate efectua o operație de eliminare în timp ce parcurge colecția.

Enumerarea poate efectua numai operații de traversare pe colecție.

149. Care este diferența dintre Comparabil și Comparator?

Comparabil

Comparator

Interfața este prezentă în pachetul java.lang.

Interfața este prezentă în pachetul java.util.

Oferă metoda compareTo() pentru sortarea elementelor.

Oferă metoda compare() pentru sortarea elementelor.

Oferă secvențe de sortare unice.

Oferă mai multe secvențe de sortare.

Logica sortării trebuie să fie în aceeași clasă al cărei obiect urmează să-l sortați.

Logica sortării ar trebui să fie într-o clasă separată pentru a scrie diferite sortări bazate pe diferite atribute ale obiectelor.

Metoda sortează datele în funcție de ordine fixă ​​de sortare.

Metoda sortează datele în funcție de ordinea de sortare personalizată.

Afectează clasa inițială.

Nu afectează clasa inițială.

Implementat frecvent în API prin Calendar, clase Wrapper, Date și String.

Este implementat pentru a sorta instanțe ale claselor terțe.

150. Care este diferența dintre Set și Map?

A stabilit

Hartă

Interfața Set este implementată folosind pachetul java.util.

Harta este implementată folosind pachetul java.util.

Poate extinde interfața de colecție.

Nu extinde interfața de colecție.

Nu permite valori duplicate.

Permite valori duplicate.

Setul poate sorta o singură valoare nulă.

Harta poate sorta mai multe valori nule.

Întrebări de interviu Java intermediar

151. Explicați iteratorul FailFast și iteratorul FailSafe împreună cu exemple pentru fiecare.

Un iterator FailFast este un iterator care aruncă a ConcurrentModificationException dacă detectează că colecția de bază a fost modificată în timp ce iteratorul este utilizat. Acesta este comportamentul implicit al iteratorilor din cadrul Java Collections Framework. De exemplu, iteratorul pentru un HashMap este FailFast.

Exemplu:

Java
// Java Program to demonstrate FailFast iterator import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; class GFG {  public static void main(String[] args)  {  HashMap<Integer, String> map = new HashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry  = iterator.next();  // this will throw a  // ConcurrentModificationException  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

Ieșire:

Exception in thread 'main' java.util.ConcurrentModificationException>

Un iterator FailSafe nu aruncă a ConcurrentModificationException dacă colecția de bază este modificată în timp ce iteratorul este utilizat. Alternativ, creează un instantaneu al colecției în momentul în care iteratorul este creat și iterează peste instantaneu. De exemplu, iteratorul pentru un ConcurrentHashMap este FailSafe.

Exemplu:

Java
// Java Program to demonstrate FailSafe import java.io.*; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; class GFG {  public static void main(String[] args)  {  ConcurrentHashMap<Integer, String> map  = new ConcurrentHashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry = iterator.next();  // this will not throw an exception  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

152. Ce este gestionarea excepțiilor?

Un Excepție este un Eveniment care întrerupe fluxul normal al programului și necesită o procesare specială. În timpul execuției unui program, erorile și aparițiile neplanificate pot fi tratate utilizând mecanismul Java Exception Handling. Mai jos sunt câteva motive pentru care apar excepții în Java:

  • Eroare dispozitiv
  • Pierderea conexiunii la rețea
  • Erori de cod
  • Deschiderea unui fișier Indisponibil
  • Intrare utilizator nevalidă
  • Limitări fizice (memorie lipsită de disc)

153. Câte tipuri de excepții pot apărea într-un program Java?

Tipuri-de-excepții-în-Java-660

În general, există două tipuri de excepții în Java:

  • Excepții încorporate: Excepțiile încorporate în Java sunt furnizate de Bibliotecile Java. Aceste excepții pot fi împărțite în două subcategorii, adică Excepții bifate și nebifate. Mai jos sunt câteva dintre excepțiile încorporate în Java:
    • ArrayIndexOutOfBoundsExceptions
    • ClassNotFoundException
    • FileNotFoundException
    • IOException
    • NullPointerException
    • ArithmeticException
    • InterruptedException
    • RuntimeException
  • Excepții definite de utilizator: Excepțiile definite de utilizator sunt definite de către programatori înșiși pentru a gestiona anumite situații sau erori specifice care nu sunt acoperite de excepțiile încorporate. Pentru a defini excepțiile definite de utilizator, trebuie definită o nouă clasă care extinde clasa de excepție corespunzătoare. Excepțiile definite de utilizator în Java sunt utilizate atunci când excepțiile încorporate sunt în Java.

154. Diferența dintre o eroare și o excepție.

Erori

Excepții

Recuperarea din erori nu este posibilă.

Recuperați de la excepții fie folosind un bloc try-catch, fie aruncând excepții înapoi apelantului.

Erorile sunt toate tipurile nebifate în Java.

Include atât tipurile verificate, cât și cele nebifate care apar.

Erorile sunt cauzate în principal de mediul în care rulează programul.

Programul este în principal responsabil pentru cauzarea excepțiilor.

Erorile pot apărea în timpul compilării, precum și în timpul executării. Timp de compilare: Eroare de sintaxă, Timp de execuție: Eroare logică.

Toate excepțiile apar în timpul execuției, dar excepțiile verificate sunt cunoscute de compilator, în timp ce nebifate nu sunt.

Sunt definite în pachetul java.lang.Error.

Sunt definite în pachetul java.lang.Exception

Exemple : java.lang.StackOverflowError, java.lang.OutOfMemoryError

Exemple : Excepții verificate: SQLException, IOException Excepții nebifate: ArrayIndexOutOfBoundException, NullPointerException, ArithmeticException.

155. Explicați ierarhia claselor Java Exception.

Excepție-Manipulare-768

Toate tipurile de excepții și erori din Java sunt subclase ale clasei throwable, care este clasa de bază a ierarhiei. Această clasă este apoi utilizată pentru condiții excepționale pe care programele utilizatorului ar trebui să le prindă. NullPointerException este un exemplu de astfel de excepție. O altă ramură, eroarea este folosită de sistemul de rulare Java pentru a indica erorile care au legătură cu JRE. StackOverflowError este un exemplu de astfel de erori.

156. Explicați excepțiile de rulare.

Excepțiile de rulare sunt excepții care apar în timpul execuției unui cod, spre deosebire de excepțiile de compilare care apar în timpul compilării. Excepțiile de rulare sunt excepții nebifate, deoarece nu sunt luate în considerare de JVM.

Exemple de excepții de rulare în Java includ:

  • NullPointerException: Aceasta apare atunci când o aplicație încearcă să utilizeze o referință de obiect nulă.
  • ArrayIndexOutOfBoundsException: Aceasta apare atunci când o aplicație încearcă să acceseze un index de matrice care este în afara limitelor.
  • ArithmeticException: Aceasta apare atunci când o aplicație încearcă să împartă la zero.
  • IllegalArgumentException: Aceasta apare atunci când o metodă este transmisă pe un argument ilegal sau nepotrivit.

Spre deosebire de excepțiile verificate, excepțiile de rulare nu necesită o declarație în clauza throws sau capturare într-un bloc try-catch. Cu toate acestea, este recomandată gestionarea excepțiilor de rulare pentru a furniza mesaje de eroare semnificative și pentru a preveni blocarea sistemului. Deoarece excepțiile de rulare oferă informații mai specifice despre problemă decât excepțiile verificate, ele permit dezvoltatorilor să detecteze și să corecteze erorile de programare mai ușor și mai rapid.

157. Ce este NullPointerException?

Este un tip de excepție de rulare care este lansată atunci când programul încearcă să folosească o referință de obiect care are o valoare nulă. Utilizarea principală a NullPointerException este de a indica faptul că nicio valoare nu este atribuită unei variabile de referință, de asemenea, este folosită pentru implementarea structurilor de date precum listele legate și arbori.

158. Când este lansată ArrayStoreException?

ArrayStoreException este lansată atunci când se încearcă stocarea unui tip greșit de obiect într-o matrice de obiecte.

Exemplu:

Java
// Java Program to implement // ArrayStoreException public class GFG {  public static void main(String args[])  {  // Since Double class extends Number class  // only Double type numbers  // can be stored in this array  Number[] a = new Double[2];  // Trying to store an integer value  // in this Double type array  a[0] = new Integer(4);  } }>

Exemplu:

Exception in thread 'main' java.lang.ArrayStoreException: java.lang.Integer  at GFG.main(GFG.java:6)>

159. Care este diferența dintre excepția bifată și excepția neverificată?

Excepție bifată:

Excepțiile verificate sunt excepțiile care sunt verificate în timpul compilării unui program. Într-un program, dacă un cod dintr-o metodă aruncă o excepție bifată, atunci metoda trebuie fie să gestioneze excepția, fie trebuie să specifice excepția folosind cuvântul cheie throws.

Excepțiile verificate sunt de două tipuri:

  • Excepții complet verificate: toate clasele sale copil sunt, de asemenea, verificate, cum ar fi IOException și InterruptedException.
  • Excepții parțial verificate: unele dintre clasele sale secundare sunt nebifate, ca o excepție.

Excepție nebifată:

Nebifate sunt excepțiile care nu sunt verificate în timpul compilării unui program. Excepțiile din clasele Error și RuntimeException sunt excepții nebifate, tot ce se află sub throwable este verificat.

160. Care este clasa de bază pentru Error și Exception?

Excepție-Manipulare-768

Eroarea este o operațiune ilegală efectuată de utilizator care provoacă o anomalie în program. Excepțiile sunt evenimentele sau condițiile neașteptate care apar în timpul rulării programului, excepția perturbă fluxul normal al instrucțiunilor programului.

Erorile și excepțiile au ambele o clasă părinte comună, care este clasa java.lang.Throwable.

161. Este necesar ca fiecare bloc de încercare să fie urmat de un bloc catch?

Nu, nu este necesar să folosim catch block după try block în Java, deoarece putem crea o altă combinație cu finally block. În cele din urmă este blocul care rulează în ciuda faptului că excepția este aruncată sau nu.

162. Ce este propagarea excepției?

Propagarea excepției este un proces în care excepția este aruncată de sus în jos a stivei. Dacă nu este prinsă o dată, excepția scade din nou la metoda anterioară și așa mai departe până când este prinsă sau până când ajunge la partea de jos a stivei de apeluri.

163. Ce se va întâmpla dacă puneți System.exit(0) în blocul try sau catch? Se va executa în sfârșit blocul?

System.exit(int) are capacitatea de a lansa SecurityException. Deci, dacă în caz de securitate, excepția este aruncată, atunci în cele din urmă blocul va fi executat, altfel JVM va fi închis în timpul apelării System. exit(0) din cauza căreia în final blocul nu va fi executat.

164. Ce înțelegeți prin Object Cloning și cum o obțineți în Java?

Este procesul de creare a unei copii exacte a oricărui obiect. Pentru a sprijini acest lucru, o clasă java trebuie să implementeze interfața Cloneable a pachetului java.lang și să suprascrie metoda clone() furnizată de clasa Object a cărei sintaxă este:

Protected Object clone() aruncă CloneNotSupportedException{ return (Object)super.clone();}În cazul în care interfața Cloneable nu este implementată și doar metoda este suprascrisă, rezultă CloneNotSupportedException în Java.

165. Cum afectează excepțiile programul dacă nu le gestionează?

Excepțiile sunt responsabile pentru întreruperea bruscă a rulării programului în timpul executării, iar codul scris după ce apare excepția nu este executat.

166. La ce folosește cuvântul cheie final?

Cuvântul cheie final este folosit pentru a face funcțiile non-virtuale. În mod implicit, toate funcțiile sunt virtuale, așa că pentru a le face non-virtuale folosim cuvântul cheie final.

167. Ce scop îndeplinesc cuvintele cheie final, final, și finalize?

i). final:

final este un cuvânt cheie folosit cu variabila, metoda sau clasa, astfel încât acestea să nu poată fi suprascrise.

Exemplu:

Java
// Java Program to use final // keyword import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  final int x = 100;  x = 50;  } }>

Ieșire:

./GFG.java:6: error: cannot assign a value to final variable x  x=50;  ^ 1 error>

ii). in cele din urma

în cele din urmă este un bloc de cod folosit cu try-catch în gestionarea excepțiilor. Codul scris în finalul bloc rulează, în ciuda faptului că excepția este aruncată sau nu.

Exemplu:

Java
// Java Program to implement finally import java.io.*; // Driver class class GFG {  // Main function  public static void main(String[] args)  {  int x = 10;  // try block  try {  System.out.println('Try block');  }  // finally block  finally {  System.out.println(  'Always runs even without exceptions');  }  } }>

Ieșire
Try block Always runs even without exceptions>

iii). finaliza

Este o metodă care este apelată chiar înainte de ștergerea/distrugerea obiectelor care sunt eligibile pentru colectarea gunoiului pentru a efectua activități de curățare.

Exemplu:

Java
/*package whatever // do not write package name here */ import java.io.*; class GFG {  public static void main(String[] args)  {  System.out.println('Main function running');  System.gc();  }  // Here overriding finalize method  public void finalize()  {  System.out.println('finalize method overridden');  } }>

Ieșire
Main function running>

168. Care este diferența dintre this() și super() în Java?

acest( )

super()

Reprezintă instanța curentă a clasei.

Reprezintă instanța curentă a clasei părinte.

Apelează constructorul implicit al aceleiași clase.

Apelează constructorul implicit al clasei de bază.

Accesați metodele aceleiași clase.

Accesați metodele clasei părinte.

Punctează instanța de clasă curentă.

Indică instanța superclasei.

169. Ce este multitasking?

Multitasking în Java se referă la capacitatea unui program de a îndeplini mai multe sarcini simultan. Threadurile, care sunt operațiuni rapide conținute într-un singur program, pot face acest lucru. Executarea a numeroase lucruri simultan este cunoscută sub numele de multitasking.

Exemplu:

Java
// Java program for multitasking import java.io.*; public class MyThread extends Thread {  public void run()  {  // Code to be executed in this thread  for (int i = 0; i < 10; i++) {  System.out.println(  'Thread ' + Thread.currentThread().getId()  + ': ' + i);  }  } } public class GFG {  public static void main(String[] args)  {  MyThread thread1 = new MyThread();  MyThread thread2 = new MyThread();  // Start the threads  thread1.start();  thread2.start();  } }>

170. Ce înțelegi prin program Multithreaded?

Programele cu mai multe fire în Java conțin fire care rulează concomitent în loc să ruleze secvenţial. Un computer își poate folosi resursele mai eficient combinând mai multe sarcini simultan. Orice program cu multithreading permite mai multor utilizatori să utilizeze simultan programul fără a rula mai multe copii. Un program cu mai multe fire este conceput pentru a rula mai multe procese în același timp, ceea ce poate îmbunătăți performanța unui program și permite programului să utilizeze mai multe procesoare și îmbunătățește debitul general.

171. Care sunt avantajele multithreading-ului?

Există mai multe avantaje ale utilizării multithreading-ului, care sunt următoarele:

  • Capacitatea de reacție: sensibilitatea utilizatorului crește, deoarece aplicația interactivă multithreading permite rularea codului chiar și atunci când secțiunea este blocată sau execută un proces îndelungat.
  • Partajarea resurselor: Procesul poate efectua transmiterea mesajelor și memorie partajată din cauza multithreading-ului.
  • Economie: Suntem capabili să împărtășim memorie din cauza căreia procesele sunt economice.
  • Scalabilitate: Multithreading pe mai multe mașini CPU crește paralelismul.
  • Comunicare mai bună: funcțiile de sincronizare a firelor îmbunătățesc comunicarea între procese.
  • Utilizarea arhitecturii multiprocesor
  • Utilizarea redusă a resurselor sistemului

172. Care sunt cele două moduri în care Thread poate fi creat?

Multithreading este o caracteristică Java care permite executarea concomitentă a două sau mai multe părți ale unui program pentru utilizarea maximă a procesorului. În general, firele de execuție sunt procese mici, ușoare, cu căi separate de execuție. Aceste fire folosesc memorie partajată, dar acționează independent, astfel încât dacă un fir de execuție eșuează, acesta nu afectează celelalte fire. Există două moduri de a crea un fir:

  • Prin extinderea clasei Thread
  • Prin implementarea unei interfețe Runnable.

Prin extinderea clasei Thread

Creăm o clasă care extinde java.lang.Clasa Thread . Această clasă suprascrie metoda run() disponibilă în clasa Thread. Un fir își începe viața în cadrul metodei run().

Sintaxă:

public class MyThread extends Thread { public void run() {  // thread code goes here  } }>

Prin implementarea interfeței Runnable

Creăm o nouă clasă care se implementează java.lang.Runnable interfață și metoda de suprascrie run(). Apoi instanțiem un obiect Thread și apelăm metoda start() pe acest obiect.

Sintaxă:

public class MyRunnable implements Runnable { public void run() {  // thread code goes here  } }>

173. Ce este un fir?

Firele în Java sunt subprocese cu greutate redusă, cu cea mai mică unitate de procese și, de asemenea, au căi separate de execuție. Aceste fire folosesc memoria partajată, dar acționează independent, prin urmare, dacă există o excepție în fire care nu afectează funcționarea altor fire, în ciuda faptului că acestea partajează aceeași memorie. Un fir de execuție are propriul contor de program, stivă de execuție și variabile locale, dar împarte același spațiu de memorie cu alte fire de execuție din același proces. Java oferă suport încorporat pentru multithreading prin intermediul Interfață rulabilă si Clasa de fire .

174. Faceți diferența între proces și fir?

Un proces și un fir de execuție sunt ambele unități de execuție într-un sistem informatic, dar sunt diferite în mai multe moduri:

Proces

Fir

Un proces este un program în execuție.

Un fir este o singură secvență de instrucțiuni în cadrul unui proces.

Procesul durează mai mult timp să se încheie.

Firul durează mai puțin să se încheie.

Procesul necesită mai mult timp pentru schimbarea contextului.

Firul durează mai puțin timp pentru schimbarea contextului.

Procesul este mai puțin eficient în ceea ce privește comunicarea.

Thread-ul este mai eficient în ceea ce privește comunicarea.

Procesul este izolat.

Firele partajează memoria.

Procesul are propriul bloc de control al procesului, stivă și spațiu de adrese.

Thread are PCB-ul părinților, propriul său bloc de control al firului și spațiu de adresă comun și stivă.

Procesul nu partajează date unul cu celălalt.

Firele partajează date între ele.

175. Descrieți ciclul de viață al firului?

Ciclul-firului-768

A fir în Java în orice moment există în oricare dintre următoarele stări. Un fir se află doar într-una dintre stările afișate în orice moment:

  1. Nou: Firul a fost creat, dar nu a început încă.
  2. Rugabil: Firul rulează, își execută sarcina sau este gata să ruleze dacă nu există alte fire cu prioritate mai mare.
  3. Blocat: Firul este suspendat temporar, așteaptă o resursă sau un eveniment.
  4. Aşteptare: Firul așteaptă ca un alt fir să efectueze o sarcină sau să treacă o anumită perioadă de timp.
  5. Terminat: Firul și-a încheiat sarcina sau a fost încheiat de un alt fir.

176. Explicați metoda suspend() din clasa Thread.

Metoda suspend() a clasei Thread din Java suspendă temporar execuția unui fir. Când un fir este suspendat, acesta intră într-o stare blocată și nu ar fi programat de sistemul de operare, ceea ce înseamnă că nu își va putea executa sarcina până când nu este reluat. Există alternative mai sigure și mai flexibile la metodele suspend() în limbajul de programare java modern. Această metodă nu returnează nicio valoare.

Sintaxă:

  public final void   suspend();>

Exemplu:

Java
// Java program to show thread suspend() method import java.io.*; class MyThread extends Thread {  public void run()  {  for (int i = 0; i < 10; i++) {  System.out.println(' Running thread : ' + i);  try {  Thread.sleep(1000);  }  catch (Interrupted_Exception e) {  e.printStackTrace();  }  }  } } class GFG {  public static void main(String[] args)  {  MyThread t1 = new MyThread();  t1.start();  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // suspend the execution of the thread  t1.suspend();  System.out.println('Suspended thread ');  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // resume the execution of the thread  t1.resume();  System.out.println('Resumed thread');  } }>

Ieșire:

Thread running: 0 Thread running: 1 Thread running: 2 Suspended thread Resumed thread Thread running: 3 Thread running: 4 Thread running: 5 Thread running: 6 Thread running: 7 Thread running: 8 Thread running: 9>

177. Explicați firul principal sub Execuția clasei Thread.

Java oferă suport încorporat pentru programarea cu mai multe fire. Firul principal este considerat firul părinte al tuturor celorlalte fire care sunt create în timpul execuției programului. Firul principal este creat automat când programul începe să ruleze. Acest thread execută metoda principală a programului. Este responsabil de executarea logicii principale a programului Java, precum și de gestionarea operațiunilor de introducere a utilizatorului. Firul principal servește ca fir de bază din care sunt generate toate celelalte fire de execuție copil.

Thread-Class-Execution-768

178. Ce este un fir de demon?

Un fir de execuție demon în Java este un fir de execuție cu prioritate scăzută care este utilizat pentru a efectua operațiuni de fundal sau sarcini care sunt utilizate pentru a efectua continuu. cum ar fi colectarea gunoiului, trimiterile de semnal, ascultătorii de acțiuni etc. Firele de execuție Daemon în Java au o prioritate mai mică decât firele de execuție, ceea ce înseamnă că se pot executa numai atunci când nu rulează fire de execuție. Firele Daemon în Java sunt caracteristici utile care sunt necesare pentru sarcinile de fundal care nu necesită închidere sau finalizare explicită. Permite o utilizare mai eficientă a resurselor sistemului și sunt utilizate pentru a simplifica resursele și poate simplifica sarcinile de lungă durată.

179. Care sunt modalitățile prin care un fir poate intra în starea de așteptare?

Thread este un proces ușor care rulează concomitent cu celălalt thread în interiorul unui singur proces. Fiecare fir poate executa o sarcină diferită și poate partaja resursele într-un singur proces. Thread-ul în Java poate intra în starea de așteptare în multe moduri diferite:

  • Metoda Sleep() Apel: Sleep () este folosită pentru a întrerupe execuția firului de execuție pentru o anumită perioadă de timp. În timp ce firul este întrerupt, acesta intră în starea de așteptare.
  • Metoda Wait(): Această metodă este folosită pentru a aștepta un fir până când celălalt fir îi semnalează să se trezească. Thread intră în starea de așteptare până când primește o notificare de la un alt thread.
  • Metoda Join(): Metoda Join() poate fi folosită pentru a aștepta ca firul să termine execuția. Firul de apelare intră în starea de așteptare până când firul țintă este finalizat.
  • În așteptarea operațiunilor I/O: Dacă firul de execuție așteaptă finalizarea operațiunii de intrare/ieșire, acesta intră în starea de așteptare până când operația este terminată.
  • Probleme de sincronizare: Dacă există probleme de sincronizare într-o aplicație cu mai multe fire, firele de execuție pot intra în starea de așteptare până când problemele de sincronizare sunt rezolvate.

180. Cum are loc multi-threading pe un computer cu un singur CPU?

Java folosește o tehnică numită time-sharing, denumită în mod obișnuit time-slicing, pentru a implementa multi-threading pe computere cu un singur CPU. Aspectul execuției paralele este creat de comutarea CPU între firele active. Sistemul de operare este responsabil de alocarea timpului CPU fiecărui thread în mod secvențial și de programarea firelor de execuție.

Pentru a împiedica firele de execuție să interacționeze între ele și să creeze situații de cursă sau alte probleme, Java are o serie de moduri de a guverna comportamentul firelor de execuție, inclusiv sincronizarea și blocarea. Este fezabil să se creeze programatori cu mai multe fire care să funcționeze corect și eficient pe o mașină cu un singur CPU, reglând interacțiunea dintre fire și asigurându-se că părțile cruciale ale codului sunt sincronizate. Spre deosebire de rularea aceluiași program pe un computer cu mai multe procesoare sau nuclee, multi-threading pe un singur procesor poate da doar aspectul de paralelism, iar câștigurile reale de performanță pot fi modeste. Sistemul de operare împarte timpul CPU care este disponibil atunci când rulează numeroase fire de execuție pe un singur CPU în secțiuni de timp mici și oferă fiecărui fir de execuție o porțiune de timp pentru a fi executat. Comutarea rapidă între fire de execuție de către sistemul de operare creează aspectul unei execuții paralele. Comutarea între fire pare a fi imediată, deoarece intervalele de timp sunt adesea foarte mici, de ordinul milisecundelor sau microsecundelor.

Întrebări de interviu Java pentru cei cu experiență

181. Care sunt diferitele tipuri de priorități de fir în Java? Și care este prioritatea implicită a unui fir atribuit de JVM?

Prioritățile în fire este un concept în care fiecare fir are o prioritate, care în limbajul profan se poate spune că fiecare obiect are prioritate aici, care este reprezentată de numere cuprinse între 1 și 10. Există diferite tipuri de proprietăți ale firului în Java menționate mai jos:

  • MIN_PRIORITY
  • MAX_PRIORITY
  • NORM_PRIORITY

În mod implicit, firului i se atribuie NORM_PRIORITY.

182. De ce este necesară Garbage Collection în Java?

Pentru Java, colectarea gunoiului este necesară pentru a evita scurgerile de memorie care pot duce la blocarea programului și la instabilitate. Nu există nicio modalitate de a evita colectarea gunoiului în Java. Spre deosebire de C++, Garbage Collection în Java îi ajută pe programatori să se concentreze asupra dezvoltării aplicației în loc să gestioneze resursele de memorie și să se îngrijoreze de pierderile de memorie. Java Virtual Machine (JVM) gestionează automat memoria periodic prin rularea unui colector de gunoi care eliberează memoria neutilizată din aplicație. Colectarea gunoiului face memoria Java eficientă, deoarece elimină obiectele fără referință din memoria heap.

183. Care este dezavantajul colectării gunoiului?

Pe lângă multe avantaje, Garbage Collector are anumite dezavantaje menționate mai jos:

  1. Principalul dezavantaj al colectării de gunoi este că poate provoca pauze în execuția unei aplicații, deoarece funcționează pentru a șterge memoria, ceea ce încetinește performanța aplicației.
  2. Procesul de colectare a gunoiului este nedeterminist, ceea ce face dificilă estimarea când are loc colectarea gunoiului, ceea ce provoacă un comportament imprevizibil în aplicații. De exemplu, dacă scriem orice program, atunci este greu pentru programatori să decidă dacă problema este cauzată de colectarea gunoiului sau de alți factori din program.
  3. Colectarea gunoiului poate crește, de asemenea, utilizarea memoriei dacă programul creează și aruncă o mulțime de obiecte de scurtă durată.

184. Explicați diferența dintre o colectare de gunoi minoră, majoră și completă.

Mașina virtuală Java (JVM) elimină obiectele care nu mai sunt utilizate folosind un colector de gunoi care verifică și elimină periodic aceste obiecte. Există diferite tipuri de colectare a gunoiului în JVM, fiecare cu caracteristici și implicații de performanță diferite. Principalele tipuri de colectare a gunoiului sunt:

  • Colectare minoră a gunoiului: Cunoscută și sub denumirea de colectare a gunoiului de generație tânără, acest tip de colectare a gunoiului este folosit pentru a colecta și recupera memoria care este utilizată de obiectele de scurtă durată (obiecte care sunt create și aruncate rapid).
  • Colectare majoră de gunoi: Cunoscut și sub denumirea de colectare a gunoiului de generație veche, acest tip de colectare a gunoiului este folosit pentru a colecta și recupera memoria care este utilizată de obiectele cu viață lungă (obiecte care supraviețuiesc mai multor colecții minore de gunoi și sunt promovate la vechea generație).
  • Colectare completă a gunoiului: În timpul colectării complete a gunoiului, amintirile din toate generațiile sunt adunate și recuperate, inclusiv amintiri ale tinerilor și bătrânilor. În mod normal, o colectare completă a gunoiului durează mai mult decât o colectare minoră sau majoră a gunoiului, ceea ce face ca aplicația să se întrerupă temporar.

185. Cum veți identifica colecțiile majore și minore de gunoi în Java?

Colectarea majoră a gunoiului lucrează în spațiul supraviețuitorului și Colectarea minoră a gunoiului lucrează în spațiul Eden pentru a efectua o rutină de marcare și măturare. Și le putem identifica pe ambele în funcție de rezultatul în care colecția minoră tipărește GC, în timp ce colecția majoră tipărește GC complet pentru cazul în care înregistrarea colectării de gunoi este activată cu -XX:PrintGCDetails sau verbose:gc.

186. Ce este o scurgere de memorie și cum afectează colectarea gunoiului?

În Java, scurgerile de memorie pot fi cauzate de o varietate de factori, cum ar fi neînchiderea corectă a resurselor, păstrarea referințelor la obiect mai mult decât este necesar sau crearea de prea multe obiecte în mod inutil. Există situații în care colectorul de gunoi nu colectează obiecte deoarece există o referire la acele obiecte. În aceste situații în care aplicația creează o mulțime de obiecte și nu le folosește și fiecare obiect are niște referințe valide, un Garbage collector în Java nu poate distruge obiectele. Aceste obiecte inutile care nu oferă nicio valoare programului sunt cunoscute sub numele de pierderi de memorie. Scurgerile de memorie pot avea un impact negativ asupra colectării gunoiului, împiedicând colectorul de gunoi să recupereze memoria neutilizată. Acest comportament va duce la performanță lentă sau uneori la defecțiunea sistemului. Într-un program, este important să se evite pierderile de memorie prin gestionarea adecvată a resurselor și a referințelor la obiect.

Exemplu:

Java
// Java Program to demonstrate memory leaks import java.io.*; import java.util.Vector; class GFG {  public static void main(String[] args)  {  Vector a = new Vector(21312312);  Vector b = new Vector(2147412344);  Vector c = new Vector(219944);  System.out.println('Memory Leak in Java');  } }>

Ieșire:

Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space  at java.base/java.util.Vector.(Vector.java:142)  at java.base/java.util.Vector.(Vector.java:155)  at GFG.main(GFG.java:9)>

187. Numiți câteva clase prezente în pachetul java.util.regex.

Expresii regulate sau Regex în Java este un API folosit pentru căutarea și manipularea șirurilor de caractere în Java. Acesta creează modele String care pot extrage datele necesare din șiruri sau pot generaliza un model.

Există 3 clase prezente în java.util.regex menționate mai jos:

  • Clasa de modele: poate defini modele
  • Clasa de potrivire: poate efectua operațiuni de potrivire pe text folosind modele
  • Clasa PatternSyntaxException: poate indica o eroare de sintaxă într-un model de expresie regulată.

De asemenea, în afară de pachetul de 3 clase, constă dintr-o singură interfață MatchResult Interface care poate fi folosită pentru a reprezenta rezultatul unei operațiuni de potrivire.

188. Scrieți o expresie regulată pentru a valida o parolă. O parolă trebuie să înceapă cu un alfabet și urmată de caractere alfanumerice; Lungimea sa trebuie să fie între 8 și 20.

regex = ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&-+=()])(?=S+$).{8, 20}$>

Explicaţie:

  • ^ folosit pentru caracterul de început al șirului.
  • (?=.*[0-9]) utilizat pentru o cifră trebuie să apară cel puțin o dată.
  • (?=.*[a-z]) folosit pentru un alfabet cu litere mici trebuie să apară cel puțin o dată.
  • (?=.*[A-Z]) folosit pentru un alfabet cu majuscule care trebuie să apară cel puțin o dată în subșir.
  • (?=.*[@#$%^&-+=()] folosit pentru un caracter special care trebuie să apară cel puțin o dată.
  • (?=S+$) spațiile albe nu permit în întregul șir.
  • .{8, 20} folosit pentru cel puțin 8 caractere și cel mult 20 de caractere.
  • $ folosit pentru sfârșitul șirului.

189. Ce este JDBC?

JDBC API-ul standard este folosit pentru a lega aplicațiile Java și bazele de date relaționale. Oferă o colecție de clase și interfețe care permit programatorilor să folosească limbajul de programare Java pentru a comunica cu baza de date. Clasele și interfața JDBC permit aplicației să trimită cereri care sunt făcute de utilizatori către baza de date specificată. Există, în general, patru componente ale JDBC prin care acesta interacționează cu baza de date:

  • API-ul JDBC
  • Manager de drivere JDBC
  • Suita de testare JDBC
  • Drivere JDBC-ODBC Bridge

JDBC-768

190. Ce este driverul JDBC?

Driver JDBC este o componentă software care este utilizată pentru a permite unei aplicații Java să interacționeze cu baza de date. JDBC oferă implementarea API-ului JDBC pentru un sistem specific de management al bazei de date, care îi permite să conecteze baza de date, să execute instrucțiuni SQL și să recupereze date. Există patru tipuri de drivere JDBC:

  • Driver JDBC-ODBC Bridge
  • Driver API nativ
  • Driver de protocol de rețea
  • Driver subțire

JDBC-Driver-660

191. Care sunt pașii pentru a vă conecta la baza de date în Java?

Există anumiți pași pentru a conecta baza de date și programul Java, așa cum este menționat mai jos:

  • Importați pachetele
  • Încărcați driverele folosind metoda forName().
  • Înregistrați driverele folosind DriverManager
  • Stabiliți o conexiune utilizând obiectul Clasa Connection
  • Creați o declarație
  • Executați interogarea
  • Închideți conexiunile

192. Care sunt componentele API-ului JDBC?

Componentele API JDBC oferă diverse metode și interfețe pentru o comunicare ușoară cu bazele de date, de asemenea, furnizează pachete precum java Se și java EE care oferă capacitatea de a scrie odată rulat oriunde (WORA).

Sintaxă:

java.sql.*;>

193. Ce este interfața JDBC Connection?

Interfața de conectivitate a bazelor de date Java (JDBC) este o componentă software care permite aplicațiilor Java să interacționeze cu bazele de date. Pentru a îmbunătăți conexiunea, JDBC necesită drivere pentru fiecare bază de date.

194. Ce face interfața JDBC ResultSet?

Interfața JDBC ResultSet este utilizată pentru a stoca datele din baza de date și a le utiliza în programul nostru Java. De asemenea, putem folosi ResultSet pentru a actualiza datele folosind metode updateXXX(). Obiectul ResultSet indică cursorul înaintea primului rând al datelor rezultate. Folosind metoda next(), putem itera prin ResultSet.

195. Ce este JDBC Rowset?

Un JDBC RowSet oferă o modalitate de a stoca datele în formă tabelară. RowSet este o interfață în Java care poate fi utilizată în pachetul java.sql. Conexiunea dintre obiectul RowSet și sursa de date este menținută pe tot parcursul ciclului său de viață. RowSets sunt clasificate în cinci categorii pe baza implementării menționate mai jos:

  1. JdbcRowSet
  2. CachedRowSet
  3. WebRowSet
  4. FilteredRowSet
  5. JoinRowSet

196. Care este rolul clasei JDBC DriverManager?

Clasa JDBC DriverManager acționează ca o interfață pentru utilizatori și șoferi. Este folosit în mai multe moduri, după cum este menționat mai jos:

  • Este folosit pentru a crea o conexiune între o aplicație Java și baza de date.
  • Ajută la urmărirea driverelor disponibile.
  • Poate ajuta la stabilirea unei conexiuni între o bază de date și driverele adecvate.
  • Conține toate metodele care pot înregistra și anula înregistrarea claselor de drivere de bază de date.
  • Metoda DriverManager.registerDriver() poate menține lista claselor de drivere care s-au înregistrat.

Întrebări de interviu Java Diferență

197. Faceți diferența între Iterable și Iterator.

Iterabil

Iterator

Iterable oferă o modalitate de a itera peste o secvență de elemente.

Iteratorul ajută la iterarea unei colecții de elemente secvenţial.

iterator() metoda returnează un Iterator. areNext() și Următorul() sunt necesare metode.
elimina() metoda este opțională. elimina() metoda este necesară în iterator.

Exemplele sunt Listă, coadă și set.

Exemplele sunt ListIterator, Enumeration și ArrayIterator.

198. Faceți diferența între Listă și Set.

Listă

A stabilit

Ordonat

Neordonat

Lista permite duplicate.

Setul nu permite valori duplicate.

Lista este accesată prin index.

Setul este accesat prin cod hash.

Pot fi stocate mai multe elemente nule.

Elementul nul poate stoca o singură dată.

Exemple sunt ArrayList, LinkedList etc.

Exemple sunt HashSet și TreeSet. LinkedHashSet etc.

199. Faceți diferența între Listă și Hartă.

Listă

Hartă

Interfața Listă permite elemente duplicate.

Harta nu permite elemente duplicate.

Lista menține ordinea de inserare.

Harta nu menține ordinea de inserare.

Pot fi stocate mai multe elemente nule.

Harta permite cel mult o singură cheie nulă și orice număr de valori nule.

Lista oferă metoda get() pentru a obține elementul la un index specificat.

Harta nu oferă o metodă get pentru a obține elementele la un index specificat.

Lista este implementată de ArrayList etc.

Harta este implementată de HashMap, TreeMap, LinkedHashMap

200. Faceți diferența între coadă și stivă.

Coadă

Grămadă

Structura de date a cozii este folosită pentru a stoca elemente și este utilizată pentru a efectua operațiuni precum punerea în coadă, scoaterea din coadă din spatele sau la sfârșitul cozii.

Structura de date a stivei este utilizată pentru a stoca elemente și este folosită pentru a efectua operațiuni precum push, pop din partea de sus a stivei.

Structura datelor cozii Implementează ordinea FIFO.

Structura de date a stivei Implementează ordinea LIFO.

Inserarea și ștergerea în cozi au loc de la capetele opuse ale listei. Ștergerea are loc din partea din față a listei și inserarea are loc în spatele listei.

Inserarea și ștergerea în stive au loc doar de la un capăt al listei numit vârf.

Operația de inserare se numește operație de coadă.

Operația de inserare se numește operație Push.

Coada este utilizată în general pentru a rezolva probleme legate de procesarea secvențială.

Stiva este utilizată în general pentru a rezolva probleme legate de recursivitate.

201. Faceți diferența între PriorityQueue și TreeSet.

Coada prioritară

TreeSet

Utilizează Queue ca structură de date de bază.

Utilizează un set ca structură de date subiacentă.

Această structură de date permite elemente duplicate

Această structură de date nu permite elemente duplicate

Priority Queue este implementată de clasa PriorityQueue.

TreeSet este implementat de clasa TreeSet.

PriorityQueue vine în JDK 1.5.

TreeSet vine în JDK 1.4.

PriorityQueue pq = new PriorityQueue();

reeSet ts = nou TreeSet();

202. Faceți diferența între Lista cu legături simple și Lista cu legături duble.

Lista legată individual

Listă dublu legată

Lista legată individual conține doar două segmente, adică Date și Link.

Lista dublu legată conține trei segmente, adică date și doi indicatori.

Traversarea într-o listă unică legată este posibilă numai în direcția înainte.

Traversarea într-o listă dublu legată este posibilă numai în ambele direcții înainte, precum și înapoi.

Utilizează mai puțină memorie deoarece fiecare nod are un singur indicator.

șir la număr întreg

Necesită mai multă memorie decât o listă unică, deoarece fiecare nod are doi pointeri.

Ușor de utilizat și inserați noduri la începutul listei.

Puțin mai complex de utilizat și ușor de inserat la sfârșitul listei.

Complexitatea de timp a inserării și ștergerii este O(n).

Complexitatea de timp a inserării și ștergerii este O(1).

Lista-legate-singly-660

Listă-dublu-legată-660

203. Faceți diferența între Failsafe și Failsafe.

FailFast

FailSafe

Failsfast eșuează imediat când detectează modificarea concomitentă în timpul iterației.

Failsafe continuă să itereze peste colecția originală și, de asemenea, creează o copie de modificat.

Failfast este utilizat în general în medii cu un singur thread.

Failsafe este utilizat în medii cu mai multe fire.

Failfast nu permite nicio modificare în timpul iterației.

Failsafe permite modificarea în timpul iterației.

Failfast este rapid în comparație cu failsafe, deoarece nu implică copierea colecției.

Failsafe este în general lent în comparație cu failfast.

FailFast aruncă ConcurrentModificationException dacă colecția este modificată în timpul iterației.


FailSafe nu aruncă nicio excepție, ci în schimb creează o copie a colecției pentru a repeta.

204. Faceți diferența între HashMap și TreeMap.

HashMap

Harta copacului

Hasmap folosește un hashtable pentru a stoca perechi cheie-valoare.

Harta arborelui folosește arbori roșu-negru pentru a stoca perechea cheie-valoare.

Hashmap nu menține nicio ordine specifică pentru perechile cheie-valoare.

Harta arborelui menține o ordine naturală bazată pe chei.

Ordinea iterației nu este garantată în hashmap.

Iterația este ordonată în funcție de chei.

Hashmaps-urile sunt mai rapide pentru recuperare în comparație cu Treemap.

Recuperarea în Treemap este mai lentă, deoarece folosește traversarea arborilor pentru a găsi cheile.

Hashmap este implementat prin utilizarea unui Array of linked list.

TreeMap este implementat folosind un arbore roșu-negru.

Hashmap folosește metoda equals() a clasei Object pentru a compara cheile.

TreeMap folosește metoda compareTo() pentru a compara cheile.

205. Faceți diferența între Queue și Deque.

Coadă

Despre ce

Coada este o structură de date liniară care este utilizată pentru a stoca o colecție de elemente.

Deque, cunoscută și sub numele de coadă cu două capete, este, de asemenea, o structură de date liniară care stochează o colecție de elemente cu operații pentru a elimina și a adăuga de la ambele capete.

Elementele din coadă pot fi inserate numai la sfârșitul structurii de date.

Elementele pot fi inserate de la ambele capete ale structurii de date.

Coada poate fi implementată folosind Array sau Linked List.

Decodarea poate fi implementată folosind Circular Array sau Double Linked List.

Cozile sunt în general folosite pentru a implementa o listă de așteptare sau o coadă de sarcini.

Deque este folosit pentru a implementa o stivă sau scoaterea din coadă a elementelor de la ambele capete.

coada-660

Coada-dublu-terminată-660

206. Faceți diferența între HashSet și TreeSet.

HashSet

TreeSet

HashSet este neordonat.

TreeSet se bazează pe ordonarea naturală.

HashSet permite elemente nule.

TreeSet nu permite elemente nule.

HashSet este implementat de clasa HashSet.

TreeSet este implementat de clasa TreeSet.

HashSet hs = new HashSet();

TreeSet ts = nou TreeSet();

Întrebări de interviu Java – Întrebări frecvente

Î1. Care este salariul unui dezvoltator Java în India?

Potrivit diverselor resurse, salariul mediu al unui dezvoltator Java Backend este mai mare decât 14 lakhs pe an, ceea ce este cu 30% mai mare decât orice alt rol de dezvoltator . Aici puteți verifica, de asemenea, ultimul nostru curs despre Portalul de practică GeekforGeeks poate fi de asemenea de ajutor.

Î5. Cum pot ieși în evidență într-un interviu Java?

Pentru a ieși în evidență într-un interviu Java, demonstrează o înțelegere profundă a conceptelor Java și a aplicațiilor practice. Prezintă-ți abilitățile de rezolvare a problemelor explicând abordarea ta față de scenarii complexe și oferind soluții eficiente. În plus, evidențiați orice proiecte sau contribuții relevante pe care le-ați făcut comunității Java. Arătarea entuziasmului, comunicarea bună și dorința de a învăța pot lăsa, de asemenea, o impresie pozitivă.