Java je jeden z najpopulárnejších programovacích jazykov na svete, známy svojou všestrannosťou, prenosnosťou a širokou škálou aplikácií. Java je najpoužívanejším jazykom v popredných spoločnostiach, ako sú Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon a mnohých ďalších, a to vďaka svojim funkciám a výkonu.
V tomto článku vám poskytneme 200+ základných otázok na pohovor Java prispôsobené pre osviežovačov aj skúsených profesionálov s 3, 5 a 8-ročnými skúsenosťami. Tu sa zaoberáme všetkým, vrátane základných konceptov Java, objektovo orientovaného programovania (OOP), multithreadingu, spracovania výnimiek, návrhových vzorov, kolekcií Java a ďalších, čo vám určite pomôže prelomiť rozhovory v jazyku Java.

Obsah
- Otázky Java Interview pre Freshers
- Otázky na pohovor v jazyku Java
- Otázky na pohovor Java pre skúsených
- Otázky týkajúce sa rozdielového pohovoru v jazyku Java
Otázky Java Interview pre Freshers
1. Je platforma Java nezávislá, ak potom ako?
Áno, Java je platformovo nezávislý jazyk. Na rozdiel od mnohých programovacích jazykov kompilátor javac kompiluje program tak, aby vytvoril bajtový kód alebo súbor .class. Tento súbor je nezávislý od spusteného softvéru alebo hardvéru, ale na ďalšie spustenie bajtového kódu potrebuje v operačnom systéme predinštalovaný súbor JVM (Java Virtual Machine).
Hoci JVM je závislé od platformy , bajtový kód môže byť vytvorený na akomkoľvek systéme a môže byť spustený v akomkoľvek inom systéme napriek tomu, že sa používa hardvér alebo softvér, vďaka čomu je platforma Java nezávislá.
2. Aké sú hlavné funkcie Java?
Java je jedným z najznámejších a najpoužívanejších jazykov v reálnom svete, v Jave je veľa funkcií, vďaka ktorým je lepšia ako ktorýkoľvek iný jazyk, niektoré z nich sú uvedené nižšie:

- Jednoduché : Java je pomerne jednoduchá na pochopenie a syntax
- Nezávislé od platformy: Java je nezávislá na platforme, čo znamená, že môžeme spustiť rovnaký program v akomkoľvek softvéri a hardvéri a dosiahneme rovnaký výsledok.
- Vykladané : Java je interpretovaná rovnako ako jazyk založený na kompilátore.
- Robustný : funkcie ako zber odpadu, spracovanie výnimiek atď., ktoré robia jazyk robustným.
- Objektovo orientovaný : Java je objektovo orientovaný jazyk, ktorý podporuje koncepty triedy, objektov, štyroch pilierov OOPS atď.
- Zabezpečené : Keďže môžeme priamo zdieľať aplikáciu s používateľom bez zdieľania skutočného programu, Java je bezpečný jazyk.
- Vysoký výkon: rýchlejšie ako iné tradičné interpretované programovacie jazyky.
- Dynamický : podporuje dynamické načítanie tried a rozhraní.
- Distribuované : funkcia Java nám umožňuje pristupovať k súborom volaním metód z akéhokoľvek pripojeného počítača.
- Viacvláknové : zaoberať sa viacerými úlohami naraz definovaním viacerých vlákien
- Neutrálna architektúra : nezávisí od architektúry.
3. Čo je JVM?

JVM je skratka pre Java Virtual Machine, je to interpret Java. Je zodpovedný za načítanie, overenie a spustenie bajtkódu vytvoreného v jazyku Java.
Aj keď je závislý od platformy, čo znamená, že softvér JVM je odlišný pre rôzne operačné systémy, zohráva dôležitú úlohu pri vytváraní nezávislosti platformy Java.
Ak sa chcete dozvedieť viac o téme, pozrite si JVM v jazyku Java .
4. Čo je JIT?

JIT je skratka pre (Just-in-Time) kompilátor je súčasťou JRE (Java Runtime Environment), používa sa na lepší výkon Java aplikácií počas behu. Použitie JIT je uvedené v procese krok za krokom, ktorý je uvedený nižšie:
- Zdrojový kód je kompilovaný s javac kompilátor na vytvorenie bajtkódu
- Bytekód je ďalej odovzdaný JVM
- JIT je súčasťou JVM, JIT je zodpovedný za kompiláciu bajtkódu do natívneho strojového kódu za behu.
- Kompilátor JIT je povolený v celom rozsahu, pričom sa aktivuje pri vyvolaní metódy. V prípade skompilovanej metódy JVM priamo volá skompilovaný kód namiesto toho, aby ho interpretoval.
- Ako JVM nazýva kompilovaný kód, ktorý zvyšuje výkon a rýchlosť vykonávania.
Ak sa chcete dozvedieť viac o téme, pozrite si JIT v Jave .
5. Aké úložiská pamäte sú dostupné s JVM?

JVM pozostáva z niekoľkých pamäťových úložísk, ako je uvedené nižšie:
- Oblasť triedy (metódy): ukladá údaje na úrovni triedy každej triedy, ako sú napríklad súbor konštantných oblastí, údaje polí a metód a kód pre metódy.
- Halda: Vytvárajú sa objekty alebo sa ukladajú objekty. Používa sa na prideľovanie pamäte objektom počas spustenia.
- Zásobník: ukladá údaje a čiastkové výsledky, ktoré budú potrebné pri vrátení hodnoty pre metódu a pri vykonávaní dynamického prepojenia
- Register počítadla programov: ukladá adresu aktuálne vykonávanej inštrukcie virtuálneho stroja Java.
- Zásobník natívnych metód: ukladá všetky natívne metódy používané v aplikácii.
Ak sa chcete dozvedieť viac o téme, pozrite si Pamäťové úložiská JVM .
6. Čo je to classloader?
Classloader je súčasťou JRE (Java Runtime Environment), počas vykonávania bajtkódu alebo vytvoreného súboru .class classloader zodpovedá za dynamické načítanie java tried a rozhraní do JVM (Java Virtual Machine). Kvôli classloaderom Java run time systém nemusí vedieť o súboroch a súborových systémoch.
Ak sa chcete dozvedieť viac o téme, pozrite si ClassLoader v jazyku Java.
7. Rozdiel medzi JVM, JRE a JDK.
JVM : JVM, tiež známy ako Java Virtual Machine, je súčasťou JRE. JVM je typ tlmočníka zodpovedného za konverziu bajtkódu na strojovo čitateľný kód. Samotné JVM je závislé od platformy, ale interpretuje bajtový kód, čo je dôvod nezávislý od platformy, prečo je Java nezávislá od platformy.
JRE : JRE je skratka pre Java Runtime Environment, je to inštalačný balík, ktorý poskytuje prostredie na spustenie programu alebo aplikácie Java na akomkoľvek počítači.
JDK : JDK znamená Java Development Kit, ktorý poskytuje prostredie na vývoj a spúšťanie programov Java. JDK je balík, ktorý obsahuje dve veci Vývojové nástroje, ktoré poskytujú prostredie na vývoj vašich programov Java a JRE na spúšťanie programov alebo aplikácií Java.
Ak sa chcete dozvedieť viac o téme, pozrite si Rozdiely medzi JVM, JRE a JDK .
8. Aké sú rozdiely medzi Java a C++?
Základ | C++ | Java |
|---|---|---|
Plošina | C++ je závislý od platformy | Java je nezávislá na platforme |
Aplikácia | C++ sa používa hlavne na systémové programovanie | Java sa používa hlavne na programovanie aplikácií |
Hardvér | C++ je bližšie k hardvéru | Java nie je taká interaktívna s hardvérom |
Globálny rozsah | C++ podporuje globálny rozsah a rozsah názvov. | Java nepodporuje globálny rozsah. |
Nepodporujem | Funkcie podporované v Jave, ale nie v C++ sú:
| Funkcie podporované v C++, ale nie v Jave sú:
|
OOPS | C++ je objektovo orientovaný jazyk. Nie je to jediná koreňová hierarchia. | Java je tiež objektovo orientovaný jazyk. Je to jediná koreňová hierarchia, pretože všetko je odvodené z jednej triedy (java.lang.Object). |
Strom dedičstva | C++ vždy vytvorí nový strom dedičnosti. | Java používa jednoduchý strom dedičnosti, pretože triedy v Jave sú potomkami objektových tried v Jave. |
9. Vysvetlite public static void main(String args[]) v jazyku Java.

Na rozdiel od akéhokoľvek iného programovacieho jazyka ako C, C++ atď. V Jave sme funkciu main deklarovali ako verejný statický void main (String args[]). Význam pojmov je uvedený nižšie:
- verejnosti : public je modifikátor prístupu zodpovedný za uvedenie toho, kto môže pristupovať k prvku alebo metóde a aký je limit. Je zodpovedný za globálne sprístupnenie hlavnej funkcie. Zverejní sa, aby ho JVM mohol vyvolať zvonku triedy, pretože nie je prítomný v aktuálnej triede.
- statické : static je kľúčové slovo, ktoré sa používa na to, aby sme mohli použiť prvok bez spustenia triedy, aby sme sa vyhli zbytočnému prideľovaniu pamäte.
- neplatné : void je kľúčové slovo a používa sa na určenie, že metóda nevracia nič. Keďže hlavná funkcia nevracia nič, používame void.
- Hlavná : main predstavuje, že deklarovaná funkcia je hlavnou funkciou. Pomáha JVM identifikovať, že deklarovaná funkcia je hlavnou funkciou.
- Argumenty reťazcov[] : Ukladá argumenty príkazového riadka Java a je to pole typu java.lang.String triedy.
10. Čo je Java String Pool?
Java String Pool je miesto v pamäti haldy, kde sú uložené všetky reťazce definované v programe. Samostatné miesto v zásobníku je miesto, kde je uložená premenná uchovávajúca reťazec. Kedykoľvek vytvoríme nový objekt typu reťazec, JVM skontroluje prítomnosť objektu v oblasti reťazcov. Ak je reťazec dostupný v oblasti, rovnaký odkaz na objekt sa zdieľa s premennou, inak sa vytvorí nový objekt.

Príklad:
String str1='Hello'; // 'Hello' will be stored in String Pool // str1 will be stored in stack memory>
11. Čo sa stane, ak vyhlásime, že hlavný kanál nevyhlásime za statický?
Môžeme deklarovať hlavnú metódu bez použitia statiky a bez akýchkoľvek chýb. Ale hlavná metóda sa nebude považovať za vstupný bod do aplikácie alebo programu.
12. Čo sú balíky v jazyku Java?
Balíky v jazyku Java možno definovať ako zoskupenie súvisiacich typov tried, rozhraní atď., ktoré poskytujú prístup k ochrane a správe menného priestoru.
13. Prečo sa používajú balíčky?
Balíky sa používajú v jazyku Java, aby sa predišlo konfliktom názvov, kontrolovali prístup a uľahčili vyhľadávanie/umiestnenie a používanie tried, rozhraní atď.
14. Aké sú výhody balíkov v jazyku Java?
Definovanie balíkov v Jave má rôzne výhody.
- Balíčky sa vyhýbajú konfliktom mien.
- Balík poskytuje jednoduchšiu kontrolu prístupu.
- Môžeme mať aj skryté triedy, ktoré nie sú viditeľné vonku a používa ich balík.
- Je ľahšie nájsť súvisiace triedy.
15. Koľko typov balíkov je v Jave?
V Jave existujú dva typy balíkov
- Užívateľsky definované balíky
- Vstavané balíčky
16. Vysvetlite rôzne typy údajov v jazyku Java.
V Jave existujú 2 typy dátových typov, ako je uvedené nižšie:
- Primitívny typ údajov
- Neprimitívny dátový typ alebo objektový dátový typ
Typ primitívnych údajov: Primitívne údaje sú jednotlivé hodnoty bez špeciálnych funkcií. Existuje 8 primitívnych dátových typov:
- boolovská hodnota : ukladá hodnotu true alebo false
- byte : ukladá 8-bitové celé číslo so znamienkom dvojky
- char : ukladá jeden 16-bitový znak Unicode
- krátky : ukladá 16-bitové celé číslo so znamienkom dvojky
- int : ukladá 32-bitové celé číslo so znamienkom dvojky
- dlhý : ukladá 64-bitové celé číslo s dvojkovým doplnkom
- plavák : ukladá 32-bitovú IEEE 754 s pohyblivou rádovou čiarkou s jednoduchou presnosťou
- dvojitý : ukladá 64-bitový IEEE 754 s pohyblivou rádovou čiarkou s dvojitou presnosťou
Neprimitívny typ údajov: Referenčné typy údajov budú obsahovať pamäťovú adresu hodnôt premennej, pretože nie je schopná priamo uložiť hodnoty do pamäte. Typy neprimitívnych sú uvedené nižšie:
- Struny
- Pole
- Trieda
- Objekt
- Rozhranie
17. Kedy sa používa bajtový dátový typ?
Bajt je 8-bitové celé číslo s dvoma doplnkami so znamienkom. Minimálna hodnota podporovaná bajtmi je -128 a 127 je maximálna hodnota. Používa sa v podmienkach, keď potrebujeme šetriť pamäť a limit potrebných čísel je medzi -128 až 127.
18. Môžeme deklarovať Pointer v Jave?
Nie, Java neposkytuje podporu pre Pointer. Keďže Java musela byť bezpečnejšia, pretože ktorá funkcia ukazovateľa nie je v jazyku Java k dispozícii.
19. Aká je predvolená hodnota dátového typu byte v jazyku Java?
Predvolená hodnota dátového typu byte v jazyku Java je 0.
20. Aká je predvolená hodnota dátového typu float a double v Jave?
Predvolená hodnota float je 0.0f a double je 0.0d v jazyku Java.
21. Čo je trieda Wrapper v Jave?
Wrapper sa vo všeobecnosti označuje ako väčšia entita, ktorá zapuzdruje menšiu entitu. Tu v Jave je obalová trieda triedou objektov, ktorá zapuzdruje primitívne dátové typy.
Primitívne dátové typy sú tie, z ktorých je možné vytvárať ďalšie dátové typy. Napríklad celé čísla môžu ďalej viesť ku konštrukcii long, byte, short, atď. Na druhej strane reťazec nemôže, preto nie je primitívny.
Vráťme sa k triede obalu, Java obsahuje 8 tried obalu. Sú to Boolean, Byte, Short, Integer, Character, Long, Float a Double. Ďalej je možné vytvoriť vlastné obalové triedy v jazyku Java, ktorý je podobný konceptu štruktúry v programovacom jazyku C. Vytvárame vlastnú obalovú triedu s požadovanými dátovými typmi.
22. Prečo potrebujeme obalové triedy?
Trieda wrapper je trieda objektov, ktorá zapuzdruje primitívne dátové typy a potrebujeme ich z nasledujúcich dôvodov:
- Triedy Wrapper sú konečné a nemenné
- Poskytuje metódy ako valueOf(), parseInt() atď.
- Poskytuje funkciu autoboxing a unboxing.
23. Rozlišujte medzi inštanciami a lokálnymi premennými.
Premenná inštancie | Miestna premenná |
|---|---|
Deklarované mimo metódy, priamo vyvolané metódou. | Deklarované v rámci metódy. |
Má predvolenú hodnotu. | Žiadna predvolená hodnota |
Dá sa použiť počas celej triedy. | Rozsah je obmedzený na metódu. |
24. Aké sú predvolené hodnoty priradené premenným a inštanciám v jazyku Java?
V Jave Keď sme neinicializovali premenné inštancie, kompilátor ich inicializuje s predvolenými hodnotami. Predvolené hodnoty pre inštancie a premenné závisia od ich typov údajov. Niektoré bežné typy predvolených dátových typov sú:
- Predvolená hodnota pre číselné typy (byte, short, int, long, float a double) je 0.
- Predvolená hodnota pre booleovský typ je false.
- Predvolená hodnota pre typy objektov (triedy, rozhrania a polia) je null.
- Znak null, u0000, je predvolená hodnota pre typ znaku.
Príklad:
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); } }> Výkon
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. Čo je to premenná triedy?
V jazyku Java je premenná triedy (známa aj ako statická premenná) premenná, ktorá je deklarovaná v rámci triedy, ale mimo akejkoľvek metódy, konštruktora alebo bloku. Premenné triedy sú deklarované pomocou kľúčového slova static a zdieľajú ich všetky inštancie (objekty) triedy, ako aj samotná trieda. Bez ohľadu na to, koľko objektov je odvodených z triedy, každá premenná triedy by existovala iba raz.
Príklad:
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); } }> Výkon
Number of objects created are 3>
26. Aká je predvolená hodnota uložená v lokálnych premenných?
S lokálnymi premennými nie je uložená žiadna predvolená hodnota. Primitívne premenné a objekty tiež nemajú žiadne predvolené hodnoty.
27. Vysvetlite rozdiel medzi premennou inštancie a premennou triedy.
Premenná inštancie: Premenná triedy bez statického modifikátora známeho ako premenná inštancie je zvyčajne zdieľaná všetkými inštanciami triedy. Tieto premenné môžu mať odlišné hodnoty medzi niekoľkými objektmi. Obsah premennej inštancie je úplne nezávislý od jednej inštancie objektu od inej, pretože súvisí s konkrétnou inštanciou objektu triedy.
Príklad:
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()); } }> Výkon
Name John>
Premenná triedy: Premenná Class Variable môže byť deklarovaná kdekoľvek na úrovni triedy pomocou kľúčového slova static. Tieto premenné môžu mať pri aplikácii na rôzne objekty iba jednu hodnotu. Tieto premenné môžu zdieľať všetci členovia triedy, pretože nie sú spojené so žiadnym konkrétnym objektom triedy.
Príklad:
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()); } }> Výkon
Area of circle: 78.53975>
28. Čo je to statická premenná?
Kľúčové slovo statické sa používa na zdieľanie rovnakej premennej alebo metódy danej triedy. Statické premenné sú premenné, ktoré sa po deklarovaní vytvoria a potom sa vytvorí jedna kópia premennej a zdieľa sa medzi všetkými objektmi na úrovni triedy.
29. Aký je rozdiel medzi System.out, System.err a System.in?
System.out – Je to PrintStream, ktorý sa používa na písanie znakov alebo možno povedať, že môže vydávať údaje, ktoré chceme zapísať, na konzolu/terminál rozhrania príkazového riadka.
Príklad:
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 – Používa sa na zobrazenie chybových hlásení.
Príklad:
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'); } }> Výkon:
This is how we throw error with System.err>
Hoci System.err má veľa podobností, oba majú tiež dosť rozdielov, poďme si ich skontrolovať.
| System.out | System.err |
|---|---|
Vytlačí sa štandardne zo systému. | Vytlačí sa so štandardnou chybou. |
Väčšinou sa používa na zobrazenie výsledkov na konzole. | Väčšinou sa používa na výstup chybových textov. |
Poskytuje výstup na konzole s predvolenou (čiernou) farbou. | Poskytuje tiež výstup na konzole, ale väčšina IDE mu dáva červenú farbu na rozlíšenie. |
System.in – Je to InputStream, ktorý sa používa na čítanie vstupu z okna terminálu. Nemôžeme použiť System.in priamo, takže používame triedu Scanner na prijímanie vstupov so system.in.
Príklad:
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); } }> Výkon:
3 4 Addition: 7>
30. Čo rozumiete pod IO streamom?

Java prináša rôzne prúdy so svojím I/O balíkom, ktorý pomáha používateľovi vykonávať všetky vstupno-výstupné operácie. Tieto prúdy podporujú všetky typy objektov, dátových typov, znakov, súborov atď., aby plne vykonávali I/O operácie.
31. Aký je rozdiel medzi hierarchiou tried Reader/Writer a hierarchiou tried InputStream/OutputStream?
Kľúčový rozdiel medzi nimi je v tom, že údaje bajtového toku sa čítajú a zapisujú triedami vstupných/výstupných tokov. Postavy majú na starosti triedy Reader a Writer. Na rozdiel od tried Reader/Writer, ktoré akceptujú polia znakov ako parametre, metódy tried vstupného/výstupného toku akceptujú bajtové polia. V porovnaní so vstupnými/výstupnými prúdmi sú triedy Reader/Writer efektívnejšie, zvládajú všetky znaky Unicode a sú užitočné na internalizáciu. Ak tak neurobíte, použite triedy Reader/Writer namiesto binárnych údajov, ako sú obrázky.
Príklad:
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(); } } }> Výkon
-32 79 -48 32 -22>
32. Aké sú super najviac triedy pre všetky streamy?
Všetky triedy prúdov možno rozdeliť do dvoch typov tried, ktorými sú triedy ByteStream a triedy CharacterStream. Triedy ByteStream sa ďalej delia na triedy InputStream a OutputStream. Triedy CharacterStream sa tiež delia na triedy Reader a Writer. Trieda SuperMost pre všetky triedy InputStream je java.io.InputStream a pre všetky triedy výstupného prúdu je java.io.OutPutStream. Podobne pre všetky triedy čitateľov je najvyššou triedou java.io.Reader a pre všetky triedy spisovateľov je to java.io.Writer.
33. Čo sú FileInputStream a FileOutputStream?
Na čítanie a zápis údajov ponúka Java I/O streamy. Stream predstavuje vstupný zdroj alebo výstupný cieľ, ktorým môže byť súbor, vstupno/výstupné zariadenie, iný program atď. FileInputStream v jazyku Java sa používa na čítanie údajov zo súboru ako prúd bajtov. Väčšinou sa používa na čítanie binárnych údajov, ako sú obrázky, zvukové súbory alebo serializované objekty.
Príklad:
File file = new File('path_of_the_file'); FileInputStream inputStream = new FileInputStream(file);>V Jave, FileOutputStream Funkcia sa používa na zapisovanie dát bajt po byte do daného súboru alebo deskriptora súboru. Zvyčajne sa nespracované bajtové údaje, ako sú obrázky, zapisujú do súboru pomocou FileOutputStream.
Príklad:
File file = new File('path_of_the_file'); FileOutputStream outputStream = new FileOutputStream(file);>34. Aký je účel používania tried BufferedInputStream a BufferedOutputStream?
Keď pracujeme so súbormi alebo streamom, na zvýšenie vstupného/výstupného výkonu programu musíme použiť triedy BufferedInputStream a BufferedOutputStream. Obidve tieto triedy poskytujú schopnosť ukladania do vyrovnávacej pamäte, čo znamená, že údaje sa pred zápisom do súboru alebo ich čítaním z prúdu uložia do vyrovnávacej pamäte. Znižuje tiež počet interakcií nášho operačného systému so sieťou alebo diskom. Ukladanie do vyrovnávacej pamäte umožňuje programom zapisovať veľké množstvo údajov namiesto ich zapisovania po malých častiach. To tiež znižuje réžiu prístupu k sieti alebo k disku.
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. Čo sú to FilterStreams?
Filter streamu alebo Filter streamov vráti prúd pozostávajúci z prvkov tohto prúdu, ktoré sa zhodujú s daným predikátom. Počas práce filter() v skutočnosti nevykonáva filtrovanie, ale namiesto toho vytvára nový prúd, ktorý pri prechode obsahuje prvky počiatočných prúdov, ktoré zodpovedajú danému predikátu.
Príklad:
FileInputStream fis =new FileInoutStream('file_path'); FilterInputStream = new BufferedInputStream(fis);>
36. Čo je to I/O filter?
I/O filter definovaný aj ako vstupný výstupný filter je objekt, ktorý číta z jedného prúdu a zapisuje údaje do vstupných a výstupných zdrojov. Na použitie tohto filtra sa použil balík java.io.
37. Koľkými spôsobmi môžete prijímať vstupy z konzoly?
Existujú dva spôsoby, ako prevziať vstup z konzoly v jazyku Java, ktoré sú uvedené nižšie:
- Použitie argumentu príkazového riadka
- Používanie triedy čítačky s vyrovnávacou pamäťou
- Použitie triedy konzoly
- Použitie triedy skenera
Program demonštrujúci použitie každej metódy je uvedený nižšie.
Príklad:
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); } }> Výkon:
techcodeview.com>
38. Rozdiel v používaní print, println a printf.
print, println a printf sa používajú na tlač prvkov, ale print vytlačí všetky prvky a kurzor zostane v rovnakom riadku. println posunie kurzor na ďalší riadok. A s printf môžeme použiť aj identifikátory formátu.
39. Čo sú operátori?
Operátory sú špeciálne typy symbolov, ktoré sa používajú na vykonávanie niektorých operácií nad premennými a hodnotami.
40. Koľko typov operátorov je dostupných v Jave?
Všetky typy operátorov v jazyku Java sú uvedené nižšie:
- Aritmetické operátory
- Unární operátori
- Operátor pridelenia
- Vzťahoví operátori
- Logické operátory
- Ternárny operátor
- Bitové operátory
- Zmenoví operátori
- inštancia operátora
Postfixové operátory sa považujú za najvyššiu prioritu podľa priority operátorov Java.
41. Vysvetlite rozdiel medzi operátormi>> a>>>.
Operátori ako>> a>>> sa zdajú byť rovnakí, ale konajú trochu inak. Operátor>> posúva znamienkové bity a operátor>>> sa používa na posúvanie bitov vyplnených nulou.
Príklad:
Java // Java Program to demostrate //>> a>>> operátori importujú java.io.*; // Trieda ovládača GFG { public static void main(String[] args) { int a = -16, b = 1; // Použitie>> System.out.println(a >> b); a = -17; b = 1; // Použitie>>> System.out.println(a >>> b); } }> Výkon
-8 2147483639>
42. Ktorý operátor Java je správne asociatívny?
Existuje iba jeden operátor, ktorý je asociatívny vpravo, a to operátor =.
43. Čo je to bodový operátor?
Operátor Dot v jazyku Java sa používa na prístup k premenným inštancie a metódam objektov triedy. Používa sa tiež na prístup k triedam a podbalíkom z balíka.
44. Čo je to kovariantný návratový typ?
Kovariantný návratový typ určuje, že návratový typ sa môže meniť v rovnakom smere ako podtrieda. Je možné mať rôzne návratové typy pre prepisujúcu metódu v podradenej triede, ale návratový typ potomka by mal byť podtypom rodičovského návratového typu a kvôli tejto prepisovacej metóde sa stáva variantom vzhľadom na návratový typ.
Používame kovariantný návratový typ z nasledujúcich dôvodov:
- Zabraňuje mätúcemu typovému pretypovaniu prítomnému v hierarchii tried a robí kód čitateľným, použiteľným a udržiavateľným.
- Umožňuje mať pri prepisovaní metód špecifickejšie typy návratov.
- Pomáha pri predchádzaní výnimkám ClassCastExceptions pri návratoch.
45. Čo je to prechodné kľúčové slovo?
Prechodné kľúčové slovo sa používa v čase serializácie, ak nechceme uložiť hodnotu konkrétnej premennej do súboru. Keď JVM narazí na prechodné kľúčové slovo, ignoruje pôvodnú hodnotu premennej a uloží predvolenú hodnotu tohto typu údajov premennej.
46. Aký je rozdiel medzi metódami sleep() a wait()?
spánok () | počkaj() |
|---|---|
Metóda sleep() patrí do triedy vlákien. | Metóda Wait() patrí do triedy objektov. |
Režim spánku neuvoľní zámok, ktorý drží aktuálne vlákno. | wait() uvoľní zámok, ktorý umožní iným vláknam získať ho. |
Táto metóda je statická metóda. | Táto metóda nie je statická metóda. |
| Sleep() nevyhodí InterruptedException. | InterruptedException sa zobrazí, ak sa vlákno počas čakania preruší. |
Používa sa hlavne na oneskorenie vlákna na určitý konkrétny čas. | Používa sa hlavne na pozastavenie vlákna, kým ho iné vlákno neoznámi. |
Režim spánku () má dve preťažené metódy:
| Wait() má tri preťažené metódy:
|
47. Aké sú rozdiely medzi String a StringBuffer?
Reťazec | StringBuffer |
|---|---|
| Uloženie postupnosti znakov. | Poskytuje funkčnosť pre prácu s reťazcami. |
| Je to nemenné. | Je meniteľný (dá sa upraviť a možno s ním vykonávať iné operácie s reťazcami.) |
| Žiadne operácie s vláknami v reťazci. | Je bezpečný pre vlákna (dve vlákna nemôžu súčasne volať metódy StringBuffer) |
48. Aké sú rozdiely medzi StringBuffer a StringBuilder?
StringBuffer eol v pythone | StringBuilder |
|---|---|
| StringBuffer poskytuje funkcie na prácu s reťazcami. | StringBuilder je trieda používaná na vytvorenie meniteľného reťazca. |
| Je bezpečný pre vlákna (dve vlákna nemôžu súčasne volať metódy StringBuffer) | Nie je bezpečný pre vlákna (dve vlákna môžu volať metódy súčasne) |
| Pomerne pomalý, pretože je synchronizovaný. | Keďže nie je synchronizovaný, implementácia je rýchlejšia |
49. Ktoré z String alebo String Buffer by sa mali uprednostniť, keď je potrebné vykonať veľa aktualizácií v údajoch?
Reťazec je uprednostňovaný pred StringBuffer, pretože StringBuilder je rýchlejší ako StringBuffer, ale objekty StringBuffer sú uprednostňované, pretože poskytuje väčšiu bezpečnosť vlákien.
50. Prečo sa StringBuffer nazýva premenlivý?
Trieda StringBuffer v jazyku Java sa používa na reprezentáciu meniteľného reťazca znakov. Ponúka alternatívu k nemennej triede String tým, že vám umožňuje meniť obsah reťazca bez neustáleho vytvárania nových objektov. Meniteľné (modifikovateľné) reťazce sa vytvárajú pomocou triedy StringBuffer. Trieda StringBuffer v jazyku Java je identická s triedou String okrem toho, že je meniteľná.
Príklad:
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); } }> Výkon
techcodeview.com>
51. Ako sa líši vytvorenie reťazca pomocou new() od vytvorenia doslovného?
Reťazec používajúci new() sa líši od doslovného, pretože keď deklarujeme reťazec, ukladá prvky do pamäte zásobníka, zatiaľ čo keď je deklarovaný pomocou new(), alokuje dynamickú pamäť v haldovej pamäti. Objekt sa vytvorí v pamäti haldy, aj keď je prítomný rovnaký objekt obsahu.
Syntax:
String x = new String('ABC');>

52. Čo je pole v Jave?
Pole v jazyku Java je dátová štruktúra, ktorá sa používa na uloženie sekvencie prvkov rovnakého typu s pevnou veľkosťou. K prvkom poľa je možné pristupovať podľa ich indexu, ktorý začína od 0 do dĺžky mínus 1. Deklarácia poľa v Jave sa robí pomocou hranatých zátvoriek a pri deklarácii sa špecifikuje aj veľkosť.
Syntax:
int[] Arr = new int[5];>
53. Na ktorých pamäťových poliach sa v Jave vytvárajú?
Polia v jazyku Java sa vytvárajú v pamäti haldy. Keď sa pole vytvorí pomocou nového kľúčového slova, v halde sa pridelí pamäť na uloženie prvkov poľa. V jazyku Java je pamäť haldy riadená virtuálnym strojom Java (JVM) a je tiež zdieľaná medzi všetkými vláknami programu Java. Pamäť, ktorú program už nepoužíva, JVM používa zberač odpadu na opätovné získanie pamäte. Polia v jazyku Java sa vytvárajú dynamicky, čo znamená, že veľkosť poľa sa určuje počas behu programu. Veľkosť poľa je špecifikovaná počas deklarácie poľa a po vytvorení poľa sa nedá zmeniť.
54. Aké sú typy poľa?
Existujú dva typy polí, t. j. primitívne polia a referenčné polia.
- Jednorozmerné polia: Polia, ktoré majú iba jeden rozmer, t. j. pole celých čísel alebo pole reťazcov, sú známe ako jednorozmerné polia.

Syntax:
data_type[] Array_Name = new data_type[ArraySize];>
- Viacrozmerné polia: Polia, ktoré majú dva alebo viac rozmerov, ako sú dvojrozmerné alebo trojrozmerné polia.
55. Prečo index poľa Java začína 0?
Index poľa označuje vzdialenosť od začiatku poľa. Prvý prvok má teda vzdialenosť 0, preto je počiatočný index 0.
Syntax:
[Base Address + (index * no_of_bytes)]>
56. Aký je rozdiel medzi poľami int[] a poľami int[]?
Pole int[] aj pole int[] sa používajú na deklaráciu poľa celých čísel v jazyku Java. Jediný rozdiel medzi nimi je v ich syntaxi, nie je medzi nimi rozdiel vo funkciách.
int arr[] is a C-Style syntax to declare an Array.>
int[] arr is a Java-Style syntax to declare an Array.>
Vo všeobecnosti sa však na deklarovanie poľa odporúča použiť syntax v štýle Java. Keďže je ľahko čitateľný a zrozumiteľný, je tiež konzistentnejší s inými konštrukciami jazyka Java.
57. Ako skopírovať pole v Jave?
V jazyku Java existuje niekoľko spôsobov, ako skopírovať pole na základe požiadaviek.
- metóda clone() v jazyku Java: Táto metóda v jazyku Java sa používa na vytvorenie plytkej kópie daného poľa, čo znamená, že nové pole bude zdieľať rovnakú pamäť ako pôvodné pole.
int[] Arr = { 1, 2, 3, 5, 0}; int[] tempArr = Arr.clone();>- metóda arraycopy(): Na vytvorenie hlbokej kópie poľa môžeme použiť túto metódu, ktorá vytvorí nové pole s rovnakými hodnotami ako pôvodné pole.
int[] Arr = {1, 2, 7, 9, 8}; int[] tempArr = new int[Arr.length]; System.arraycopy(Arr, 0, tempArr, 0, Arr.length);>- metóda copyOf(): Táto metóda sa používa na vytvorenie nového poľa so špecifickou dĺžkou a skopíruje obsah pôvodného poľa do nového poľa.
int[] Arr = {1, 2, 4, 8}; int[] tempArr = Arrays.copyOf(Arr, Arr.length);>- metóda copyOfRange(): Táto metóda je veľmi podobná metóde copyOf() v Jave, ale táto metóda nám tiež umožňuje určiť rozsah prvkov, ktoré sa majú skopírovať z pôvodného poľa.
int[] Arr = {1, 2, 4, 8}; int[] temArr = Arrays.copyOfRange(Arr, 0, Arr.length);>58. Čo rozumiete pod pojmom zubaté pole?
Zubaté pole v jazyku Java je len dvojrozmerné pole, v ktorom môže mať každý riadok poľa inú dĺžku. Pretože všetky riadky v 2-d poli majú rovnakú dĺžku, ale zubaté pole umožňuje väčšiu flexibilitu vo veľkosti každého riadku. Táto funkcia je veľmi užitočná v podmienkach, keď majú dáta rôznu dĺžku alebo keď je potrebné optimalizovať využitie pamäte.
Syntax:
int[][] Arr = new int[][] { {1, 2, 8}, {7, 5}, {6, 7, 2, 6} };>59. Je možné nastaviť pole ako nestále?
V Jave nie je možné vytvoriť volatile. Nestále kľúčové slová v jazyku Java možno použiť iba na jednotlivé premenné, ale nie na polia alebo kolekcie. Hodnota premennej sa vždy číta a zapisuje do hlavnej pamäte, keď je definovaná ako nestála a nie je ukladaná do vyrovnávacej pamäte v lokálnej pamäti vlákna. To uľahčuje zabezpečenie toho, že všetky vlákna, ktoré pristupujú k premennej, môžu vidieť zmeny, ktoré sa v nej vykonali.
60. Aké sú výhody a nevýhody poľa?

Výhody polí sú:
- Priamy a efektívny prístup k akémukoľvek prvku v kolekcii umožňujú polia. K prvkom poľa je možné pristupovať pomocou operácie O(1), čo znamená, že čas potrebný na to je konštantný a nezávislý od veľkosti poľa.
- Údaje možno efektívne ukladať do pamäte pomocou polí. Veľkosť poľa je známa v čase kompilácie, pretože jeho prvky sú uložené v súvislých pamäťových oblastiach.
- Vzhľadom na skutočnosť, že údaje sú uložené v súvislých pamäťových oblastiach, polia umožňujú rýchle vyhľadávanie údajov.
- Polia sa dajú ľahko implementovať a pochopiť, vďaka čomu sú ideálnou voľbou pre začiatočníkov, ktorí sa učia počítačové programovanie.
Nevýhody polí sú:
- Polia sú vytvorené s vopred určenou veľkosťou, ktorá je zvolená v danom momente. To znamená, že ak je potrebné rozšíriť veľkosť poľa, bude potrebné vytvoriť nové pole a údaje skopírovať zo starého poľa do nového poľa, čo môže zabrať veľa času a pamäte.
- V pamäťovom priestore poľa môže byť nevyužitý pamäťový priestor, ak pole nie je úplne obsadené. Ak si zle pamätáte, môže to byť problém.
- V porovnaní s inými dátovými štruktúrami, ako sú prepojené zoznamy a stromy, môžu byť polia nepružné kvôli ich pevnej veľkosti a obmedzenej podpore sofistikovaných dátových typov.
- Pretože všetky prvky poľa musia byť rovnakého typu údajov, nepodporuje komplexné typy údajov, ako sú objekty a štruktúry.
61. Čo je to objektovo orientovaná paradigma?
Paradigma doslova znamená vzor alebo metódu. Programovacie paradigmy sú metódy na riešenie programu, ktorý je štyroch typov, a to imperatívne, logické, funkčné a objektovo orientované. Keď sa objekty používajú ako základné entity, na ktoré sa aplikujú metódy, vykonávajú sa funkcie zapuzdrenia alebo dedičnosti, je to známe ako objektovo orientovaná paradigma.
62. Aké sú hlavné koncepty OOP v Jave?
Hlavné koncepty OOP v Jave sú uvedené nižšie:
- Dedičnosť
- Polymorfizmus
- Abstrakcia
- Zapuzdrenie
63. Aký je rozdiel medzi objektovo orientovaným programovacím jazykom a objektovo orientovaným programovacím jazykom?
Objektovo orientovaný programovací jazyk | Objektovo založený programovací jazyk |
|---|---|
| Objektovo orientovaný programovací jazyk pokrýva rozsiahlejšie pojmy, ako je dedičnosť, polymorfizmus, abstrakcia atď. | Rozsah objektovo orientovaného programovania je obmedzený na použitie objektov a zapuzdrenie. |
| Podporuje všetky vstavané objekty | Nepodporuje všetky vstavané objekty |
| Príklady: Java, C# atď. | Príklady: Java skript, vizuálne základy atď. |
64. Ako sa operátor „new“ líši od operátora „newInstance()“ v jazyku Java?
operátor new sa používa na vytváranie objektov, ale ak chceme rozhodnúť o type objektu, ktorý sa má vytvoriť za behu, nie je možné použiť operátor new. V tomto prípade musíme použiť metóda newInstance(). .
65. Čo sú triedy v jazyku Java?
V jazyku Java sú triedy kolekciou objektov zdieľajúcich podobné vlastnosti a atribúty. Triedy predstavujú plán alebo šablónu, z ktorej sa vytvárajú objekty. Triedy nie sú entity skutočného sveta, ale pomáhajú nám vytvárať objekty, ktoré sú entitami skutočného sveta.
66. Aký je rozdiel medzi statickou (triednou) metódou a inštanciou?
Statická (trieda) metóda | Metóda inštancie |
|---|---|
Statická metóda je spojená skôr s triedou ako s objektom. | Metóda inštancie je spojená skôr s objektom ako s triedou. |
Statické metódy možno volať iba pomocou názvu triedy bez vytvorenia inštancie triedy. | Metódu inštancie možno volať na konkrétnu inštanciu triedy pomocou odkazu na objekt. |
Statické metódy nemajú prístup k toto kľúčové slovo . | Metódy inštancie majú prístup k toto kľúčové slovo . |
Táto metóda môže pristupovať iba k statickým členom triedy | Táto metóda môže pristupovať k statickým aj nestatickým metódam triedy. |
67. Čo je toto kľúčové slovo v jazyku Java?

„toto“ je kľúčové slovo, ktoré sa používa na odkazovanie na premennú, ktorá odkazuje na aktuálny objekt.
68. Čo sú špecifikátory krátkeho prístupu a typy špecifikátorov prístupu?

Špecifikátory prístupu v jazyku Java pomáhajú obmedziť rozsah triedy, konštruktora, premennej, metódy alebo údajového člena. V jazyku Java sú uvedené štyri typy špecifikátorov prístupu:
- Verejné
- Súkromné
- Chránené
- Predvolené
69. Aká bude počiatočná hodnota odkazu na objekt, ktorý je definovaný ako premenná inštancie?
Počiatočná hodnota odkazu na objekt, ktorý je definovaný ako premenná inštancie, je hodnota NULL.
70. Čo je predmet?
Objekt je reálna entita, ktorá má s ňou spojené určité vlastnosti a metódy. Objekt je tiež definovaný ako inštancia triedy. Objekt možno deklarovať pomocou nového kľúčového slova.
71. Aké sú rôzne spôsoby vytvárania objektov v Jave?
Metódy na vytváranie objektov v jazyku Java sú uvedené nižšie:
- Použitie nového kľúčového slova
- Použitie novej inštancie
- Použitie metódy clone().
- Použitie deserializácie
- Pomocou metódy newInstance() triedy Constructor
Ak sa chcete dozvedieť viac o metódach vytvárania objektov v jazyku Java, pozrite si tento článok .
72. Aké sú výhody a nevýhody klonovania objektov?
Existuje mnoho výhod a nevýhod použitia klonovania objektov, ako je uvedené nižšie:
Výhody:
- V jazyku Java nemožno na klonovanie použiť operátor priradenia „=“, pretože jednoducho vytvára kópiu referenčných premenných. Na prekonanie takéhoto rozporu možno použiť metódu clone() triedy Object nad operátorom priradenia.
- Metóda clone() je chránená metóda triedy Object, čo znamená, že iba trieda Employee môže klonovať objekty Employee. To znamená, že žiadna iná trieda ako Zamestnanec nemôže klonovať objekty Zamestnanec, pretože nepozná atribúty triedy Zamestnanec.
- Veľkosť kódu sa zmenšuje so znižovaním počtu opakovaní.
- Umožňuje replikáciu (niečo ako vzor prototypu), ručná inicializácia každého poľa vytvára veľký kód, ak je objekt zložitý, s klonovaním je rýchlejší.
Nevýhody:
- Keďže metóda Object.clone() je chránená, je potrebné poskytnúť náš vlastný clone() a nepriamo z neho volať Object.clone().
- Ak nemáme žiadne metódy, musíme poskytnúť klonovateľné rozhranie, pretože potrebujeme poskytnúť informácie o JVM, aby sme mohli vykonať klonovanie () na našom objekte. Ak nie, nemôžeme klonovať klonovať plytké kópie polí, ak stačí vrátiť super.clone() z metódy klonovania, čo môže byť problematické.
73. Aké sú výhody odovzdania tohto do metódy namiesto samotného objektu aktuálnej triedy?
Prenesenie tohto do metódy namiesto samotného objektu aktuálnej triedy má niekoľko výhod:
- toto je konečná premenná, kvôli ktorej nemôže byť priradená žiadnej novej hodnote, zatiaľ čo aktuálny objekt triedy nemusí byť konečný a možno ho zmeniť.
- toto je možné použiť v synchronizovanom bloku.
74. Čo je to konštruktér?
Konštruktor je špeciálna metóda, ktorá sa používa na inicializáciu objektov. Konštruktor sa volá pri vytváraní objektu. Názov konštruktora je rovnaký ako názov triedy.
Príklad:
// Class Created class XYZ{ private int val; // Constructor XYZ(){ val=0; } };>75. Čo sa stane, ak v triede neposkytnete konštruktor?
Ak v triede v jazyku Java nezadáte konštruktor, kompilátor automaticky vygeneruje predvolený konštruktor bez argumentov a bez operácie, ktorý je predvoleným konštruktorom.
76. Koľko typov konštruktorov sa používa v Jave?
V Jave existujú dva typy konštruktorov, ako je uvedené nižšie:
- Predvolený konštruktor
- Parametrizovaný konštruktor
Predvolený konštruktor: Je to typ, ktorý neprijíma žiadnu hodnotu parametra. Používa sa na nastavenie počiatočných hodnôt atribútov objektu.
class_Name(); // Default constructor called>
Parametrizovaný konštruktor: Je to typ konštruktora, ktorý akceptuje parametre ako argumenty. Používajú sa na priradenie hodnôt premenným inštancie počas inicializácie objektov.
class_Name(parameter1, parameter2......); // All the values passed as parameter will be // allocated accordingly>
77. Aký je účel predvoleného konštruktora?
Konštruktory pomáhajú vytvárať inštancie triedy alebo možno povedať, že vytvárajú objekty triedy. Konštruktor sa volá počas inicializácie objektov. Predvolený konštruktor je typ konštruktora, ktorý neakceptuje žiadny parameter, takže akákoľvek hodnota priradená vlastnostiam objektov sa považuje za predvolené hodnoty.
78. Čo rozumiete pod pojmom kopírovací konštruktor v jazyku Java?
Kopírovací konštruktor je typ konštruktora, v ktorom odovzdávame iný objekt ako parameter, pretože ktoré vlastnosti oboch objektov sa zdajú rovnaké, preto sa zdá, že konštruktory vytvárajú kópiu objektu.
79. Kde a ako môžete použiť súkromného konštruktéra?
Súkromný konštruktor sa používa, ak nechcete, aby iná trieda vytvorila inštanciu objektu, aby ste sa vyhli podtriede. Použitie súkromného konštruktora je možné vidieť ako implementovaný v príklade.
Príklad:
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); } }> Výkon
Value of a.x = 20 Value of b.x = 20>
80. Aké sú rozdiely medzi konštruktormi a metódami?
Konštruktory Java sa používajú na inicializáciu objektov. Počas vytvárania sú konštruktéri povolaní na nastavenie atribútov pre objekty, okrem týchto niekoľkých základných rozdielov medzi nimi:
- Konštruktory sa volajú iba vtedy, keď je objekt vytvorený, ale iné metódy možno volať viackrát počas životnosti objektu.
- Konštruktory nevracajú nič, zatiaľ čo iné metódy môžu vrátiť čokoľvek.
- Konštruktory sa používajú na nastavenie počiatočného stavu, ale metódy sa používajú na vykonávanie špecifických akcií.
81. Čo je to rozhranie?
Rozhranie v jazyku Java je zbierka statických konečných premenných a abstraktných metód, ktoré definujú zmluvu alebo dohodu pre množinu prepojených tried. Každá trieda, ktorá implementuje rozhranie, je potrebná na implementáciu špecifickej sady metód. Špecifikuje správanie, ktoré musí trieda vykazovať, ale nie špecifiká toho, ako by mala byť implementovaná.
Syntax:
interface { // constant fields // methds that are abstract by default }>Príklad:
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()); } }> Výkon
Area of circle is 78.53981633974483 Perimeter of circle is31.41592653589793>
82. Uveďte niektoré funkcie rozhrania.
Rozhranie v programovacom jazyku Java je definované ako abstraktný typ používaný na špecifikáciu správania triedy. Rozhranie v Jave je návrhom správania. Rozhranie Java obsahuje statické konštanty a abstraktné metódy.
Vlastnosti rozhrania sú uvedené nižšie:
- Rozhranie môže pomôcť dosiahnuť úplnú abstrakciu.
- Umožňuje nám používať viacnásobnú dedičnosť v jazyku Java.
- Každá trieda môže implementovať viacero rozhraní, aj keď jedna trieda môže rozšíriť iba jednu triedu.
- Používa sa tiež na dosiahnutie voľného spojenia.
83. Čo je rozhranie markerov?
Rozhranie je rozpoznané ako prázdne rozhranie (bez poľa alebo metód), nazýva sa rozhranie markerov. Príklady rozhraní markerov sú serializovateľné, klonovateľné a vzdialené rozhrania.
84. Aké sú rozdiely medzi abstraktnou triedou a rozhraním?

Abstraktná trieda | Trieda rozhrania |
|---|---|
V abstraktnej triede možno nájsť abstraktné aj neabstraktné metódy. | Rozhranie obsahuje iba abstraktné metódy. |
Abstract Class podporuje Final metódy. | Trieda rozhrania nepodporuje Final metódy. |
Trieda Abstract nepodporuje viacnásobné dedenie. | Trieda rozhrania podporuje viacnásobnú dedičnosť. |
Abstraktné kľúčové slovo sa používa na deklarovanie abstraktnej triedy. | Kľúčové slovo rozhrania sa používa na deklarovanie triedy rozhrania. |
| predĺžiť kľúčové slovo sa používa na rozšírenie abstraktnej triedy. | náradia Kľúčové slovo sa používa na implementáciu rozhrania. |
Abstraktná trieda má členov ako chránených, súkromných atď. | Všetci členovia triedy sú štandardne verejní. |
85. Čo rozumiete pod pojmom zapuzdrenie údajov?

Zapuzdrenie údajov je koncept vlastností OOPS a charakteristík tried, ktoré je rozhranie navzájom spojené. V podstate spája údaje a metódy, ktoré s týmito údajmi pracujú, v rámci jednej jednotky. Zapuzdrenie sa dosiahne deklarovaním premenných inštancií triedy ako súkromných, čo znamená, že k nim možno pristupovať iba v rámci triedy.
86. Aké sú výhody Encapsulation v Jave?
Výhody zapuzdrenia v jazyku Java sú uvedené nižšie:
- Skrytie údajov: je to spôsob, ako obmedziť prístup našich členov údajov skrytím podrobností implementácie. Zapuzdrenie tiež poskytuje spôsob skrytia údajov. Používateľ nebude mať žiadnu predstavu o vnútornej implementácii triedy.
- Zvýšená flexibilita: Premenné triedy môžeme nastaviť len na čítanie alebo len na zápis v závislosti od našich požiadaviek.
- Opätovná použiteľnosť: Zapuzdrenie tiež zlepšuje opätovnú použiteľnosť a ľahko sa mení podľa nových požiadaviek.
- Testovanie kódu je jednoduché: Testovanie kódu je jednoduché na testovanie jednotiek.
87. Aký je hlavný prínos enkapsulácie?
Hlavnou výhodou Encapsulation v Jave je jeho schopnosť chrániť vnútorný stav objektu pred vonkajšími úpravami alebo prístupom. Je to spôsob, ako skryť detaily implementácie triedy pred vonkajším prístupom a odhaliť iba verejné rozhranie, ktoré možno použiť na interakciu s triedou. Hlavnou výhodou je poskytnutie spôsobu kontroly a riadenia stavu a správania objektu a zároveň jeho ochrana pred modifikáciami a neoprávneným prístupom.
Príklad:
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()); } }> Výkon
Name is Rohan Age is 29>
88. Čo rozumiete pod pojmom agregácia?

Agregácia je pojem súvisiaci so vzťahom medzi dvoma triedami, ktorý je najlepšie opísať ako vzťah má-a. Tento druh je najšpecializovanejšou verziou asociácie. Je to jednosmerná asociácia, čo znamená, že ide o jednosmerný vzťah. Obsahuje odkaz na inú triedu a hovorí sa, že vlastní túto triedu.
89. Aký je vzťah „IS-A“ v OOPs Java?
„IS-A“ je typ vzťahu v OOPs Java, kde jedna trieda zdedí inú triedu.
90. Definujte dedičstvo.
Keď objekt, ktorý patrí do podtriedy, získa všetky vlastnosti a správanie nadradeného objektu, ktorý je z nadtriedy, nazýva sa to dedičnosť. Trieda v rámci triedy sa nazýva podtrieda a podtrieda sa označuje ako nadtrieda. Podtrieda alebo podradená trieda sa považuje za špecifickú, zatiaľ čo nadtrieda alebo nadradená trieda je všeobecná. Dedičnosť poskytuje opätovnú použiteľnosť kódu.
91. Aké sú rôzne typy dedenia v Jave?
Dedičnosť je metóda, pomocou ktorej môže trieda Child zdediť vlastnosti triedy Super alebo Parent. V Jave má dedičnosť štyri typy:
- Jediné dedičstvo: Keď potomok alebo podtrieda rozširuje iba jednu nadtriedu, je známe, že ide o jediné dedičstvo. Vlastnosti triedy s jedným rodičom sa odovzdávajú podradenej triede.
- Viacúrovňová dedičnosť: Keď potomok alebo podtrieda rozširuje akúkoľvek inú podtriedu, vytvorí sa hierarchia dedičnosti, ktorá je známa ako viacúrovňová dedičnosť. Inými slovami, jedna podtrieda sa stáva rodičovskou triedou inej.
- Hierarchická dedičnosť: Keď viaceré podtriedy pochádzajú z rovnakej nadradenej triedy, nazýva sa to hierarchická dedičnosť. Inými slovami, trieda, ktorá má jedného rodiča, má veľa podtried.
- Viacnásobné dedičstvo: Keď podradená trieda dedí z viacerých rodičovských tried, nazýva sa to viacnásobná dedičnosť. V jazyku Java podporuje iba viacnásobné dedenie rozhraní, nie tried.
92. Čo je viacnásobné dedičstvo? Podporuje to Java?
Komponent objektovo orientovaného pojmu známy ako viacnásobná dedičnosť umožňuje triede zdediť vlastnosti z mnohých rodičovských tried. Keď sú metódy s rovnakým podpisom prítomné v nadtriedach aj podtriedach, vzniká problém. Volač metódy nemôže kompilátoru určiť, ktorá metóda triedy by sa mala volať alebo dokonca, ktorá metóda triedy by mala mať prednosť.
Poznámka: Java nepodporuje viacnásobnú dedičnosť
Príklad:
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(); } }> Výkon
Eating Drinking Barking>
93. Ako sa líši dedičnosť v C++ od Javy?
Dedičnosť v C++ | Dedičnosť v Jave |
|---|---|
| C++ umožňuje užívateľovi dediť viacero tried. | Java nepodporuje viacnásobné dedičstvo. |
| Keď je trieda vytvorená v C++, nededí z triedy objektov, ale existuje sama o sebe. | O Jave sa vždy hovorí, že má jedinú dedičnosť, pretože všetky triedy dedia jedným alebo druhým spôsobom z triedy objektov. |
94. Existuje nejaké obmedzenie pri používaní dedičnosti?
Áno, existuje obmedzenie používania dedičnosti v jazyku Java, pretože vďaka dedičnosti je možné zdediť všetko zo super triedy a rozhrania, pretože podtrieda je príliš zoskupená a niekedy náchylná na chyby, keď sa v určitých situáciách vykonáva dynamické prepisovanie alebo dynamické preťaženie.
95. Hoci je dedičstvo populárnou koncepciou OOP, je menej výhodné ako zloženie. Vysvetlite.
Dedičnosť je populárny koncept objektovo orientovaného programovania (OOP), v ktorom trieda môže zdediť vlastnosti a metódy z akejkoľvek inej triedy, ktorá sa označuje ako nadradená alebo nadradená trieda. Na druhej strane v Composition môže trieda obsahovať inštanciu inej triedy ako členskú premennú, ktorá sa často označuje ako časť alebo komponent. Nižšie uvádzame niekoľko dôvodov, prečo je zloženie výhodnejšie ako dedičstvo:
- Tesné spojenie: Vždy, keď sa v nadtriede vykonajú nejaké zmeny, tieto zmeny môžu ovplyvniť správanie všetkých jej potomkov alebo podtried. Tento problém spôsobuje, že kód je menej flexibilný a tiež spôsobuje problémy počas údržby. Tento problém tiež vedie k tesnému spojeniu medzi triedami.
- Problém krehkej základnej triedy: Keď zmeny základnej triedy môžu narušiť funkčnosť jej odvodených tried. Tento problém môže sťažiť pridávanie nových funkcií alebo úpravu existujúcich. Tento problém je známy ako problém triedy Fragile Base.
- Obmedzené opätovné použitie: Dedičnosť v jazyku Java môže viesť k obmedzenému opätovnému použitiu kódu a tiež k duplikácii kódu. Keďže podtrieda zdedí všetky vlastnosti a metódy svojej nadtriedy, niekedy môže skončiť so zbytočným kódom, ktorý nie je potrebný. To vedie k menej udržiavateľnej kódovej základni.
96. Čo je to združenie?
Asociácia je vzťah medzi dvoma samostatnými triedami vytvorenými prostredníctvom ich objektov. Predstavuje vzťah Has-A.
97. Čo rozumiete pod pojmom agregácia?
Zloženie je obmedzená forma agregácie, v ktorej sú dve entity na sebe veľmi závislé. To reprezentuje časť vzťah.
98. Aké je zloženie Java?
Zloženie implikuje vzťah, kde dieťa nemôže existovať samostatne rodiča. Napríklad ľudské srdce, srdce neexistuje oddelene od človeka.
99. Uveďte rozdiel medzi zložením a agregáciou.
Agregácia | Zloženie |
|---|---|
Definuje vzťah medzi objektmi | Predstavuje časť vzťahu |
Objekty sú na sebe nezávislé. | Objekty sú na sebe závislé. |
Znázornite ho pomocou vyplneného diamantu. | Znázornite ho pomocou prázdneho diamantu. |
Detské predmety nemajú životnosť. | Detské predmety majú celý život. |
100. Dá sa konštruktor zdediť?
Nie, nemôžeme zdediť konštruktora.
101. Čo je to polymorfizmus?
Polymorfizmus je definovaný ako schopnosť mať viac ako jednu formu. Ide o dva typy, a to polymorfizmus v čase kompilácie alebo preťaženie metódy – funkcia volaná počas kompilácie. Vezmite napríklad triedu „oblasť“. Na základe počtu parametrov môže vypočítať plochu štvorca, trojuholníka alebo kruhu. Polymorfizmus doby spustenia alebo prepojenia na prepísanie metódy počas doby spustenia. Metóda vnútri triedy prepíše metódu nadradenej triedy.
102. Čo je to runtime polymorfizmus alebo odosielanie dynamickej metódy?
Dynamické odosielanie metód je riešiacim mechanizmom na prepísanie metódy počas doby chodu. Prepísanie metódy je to, kde metóda v podtriede má rovnaký názov, parametre a návratový typ ako metóda v nadtriede. Keď je prepísaná metóda volaná cez odkaz na nadtriedu, java určí, ktorá verzia (nadtrieda alebo podtrieda) tejto metódy sa má vykonať na základe typu objektu, na ktorý sa odkazuje v čase, keď dôjde k volaniu. Rozhodnutie sa teda robí za behu. Toto sa označuje ako odosielanie dynamickej metódy.
103. Čo znamená prednosť metódy?
Prepísanie metódy, známe tiež ako polymorfizmus v čase spustenia, je také, keď podradená trieda obsahuje rovnakú metódu ako rodičovská trieda. Napríklad v rodičovskej triede máme metódu s názvom „gfg()“. V podtriede je opäť definovaná metóda gfg(). Keď sa teda v podtriede zavolá gfg(), vykoná sa metóda v rámci triedy id. Tu gfg() v rámci triedy prepíše metódu vonku.
104. Čo je preťaženie metódy?

Prepísanie metódy je metóda na dosiahnutie polymorfizmu za behu v jazyku Java. Prepísanie metódy je funkcia, ktorá umožňuje podradenej triede poskytnúť špecifickú implementáciu metódy, ktorú už poskytuje jedna z jej rodičovských tried. Keď má metóda v podradenej triede rovnaký názov, rovnaké parametre alebo podpis a rovnaký návratový typ (alebo podtyp) ako metóda v jej rodičovskej triede, potom sa hovorí, že metóda v podtriede prepíše metódu v supertrieda.
105. Môžeme prepísať statickú metódu?
Nie, pretože statické metódy sú súčasťou triedy a nie objektu, takže ich nemôžeme prepísať.
106. Môžeme prepísať preťaženú metódu?
Áno, pretože preťažená metóda je v očiach kompilátora úplne iná metóda. Prepisovanie nie je vôbec to isté. Rozhodnutie o tom, ktorú metódu zavolať, je odložené na runtime.
107. Môžeme preťažiť metódu main()?
Áno, v jazyku Java môžeme preťažiť hlavnú metódu na volanie hlavnej metódy pomocou jej preddefinovanej metódy volania.
108. Čo je preťaženie metódy a prepísanie metódy?
Preťaženie metódy: Je tiež známy ako polymorfizmus času kompilácie. Pri preťažení metódy sú dve alebo viac metód zdieľaných v rovnakej triede s rôznym podpisom.
Príklad:
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)); } }> Výkon
multiply() with 2 parameters 20 multiply() with 3 parameters 24 multiply() with 4 parameters 24>
Prepísanie metódy: Prepísanie metódy nastane, keď podtrieda môže poskytnúť implementáciu metódy, ktorá je už definovaná v nadradenej triede alebo nadtriede. Návratový typ, názov a argumenty musia byť podobné metódam v nadtriede.
Príklad:
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(); } }> Výkon
drive() method of derived class Car is driving. drive() method of base class driving the Car. drive() method of derived class Car is driving.>
Preťaženie metódy | Prepísanie metódy |
|---|---|
Keď sú dve alebo viaceré metódy v rovnakej triede s rôznymi parametrami, ale rovnakým názvom. | Keď podtrieda poskytuje svoju vlastnú implementáciu metódy, ktorá je už definovaná v rodičovskej triede. |
Preťaženie metódy sa môže vyskytnúť iba v rovnakej triede alebo medzi podtriedou alebo nadradenou triedou. | Prepísanie metódy môže nastať iba v podtriede. |
Keď sa vyskytne chyba, zachytí sa v čase kompilácie programu. | Keď sa vyskytne chyba, zachytí sa pri spustení programu. |
Príklad polymorfizmu času kompilácie. | Príklad polymorfizmu doby chodu. |
Metóda Preťaženie môže alebo nemusí vyžadovať dedičnosť. | Prepísanie metódy vždy vyžaduje dedičnosť. |
Vyskytuje sa v rámci triedy. | Vykonáva sa v dvoch triedach s dedičským vzťahom. |
109. Môžeme prepísať súkromné metódy?
V Jave nie je možné prepísať súkromné metódy. Prepísanie metódy je tam, kde je implementovaná metóda v podtriede namiesto metódy z nadradenej triedy. Súkromné metódy sú prístupné iba v rámci triedy, v ktorej sú deklarované. Keďže táto metóda nie je viditeľná pre iné triedy a nedá sa k nej pristupovať, nemožno ju prepísať.
110. Môžeme zmeniť rozsah prepísanej metódy v podtriede?
V jazyku Java nie je možné upraviť rozsah prepísanej metódy. Rozsah metódy podtriedy musí byť rovnaký alebo širší ako rozsah prepísanej metódy metódy Superclass. Prepísaná metóda v podtriede môže mať napríklad verejný rozsah alebo prístupnejší rozsah, ako je chránený alebo predvolený, ak má prepísaná metóda v nadtriede verejný rozsah. Nemôže však mať exkluzívnejší rozsah ako súkromný.
111. Môžeme upraviť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede?
Môžeme upraviť klauzulu throws metódy Superclass s určitými obmedzeniami, môžeme zmeniť klauzulu throws metódy nadtriedy a zároveň ju prepísať v podtriede. Metóda prepísania podtriedy môže špecifikovať nekontrolované výnimky len vtedy, ak metóda nadtriedy nedeklaruje žiadne výnimky. Ak metóda nadtriedy deklaruje výnimku, metóda podtriedy môže deklarovať rovnakú výnimku, výnimku podtriedy alebo žiadnu výnimku. Metóda podtriedy však nemôže deklarovať nadradenú výnimku, ktorá je širšia ako tie, ktoré sú deklarované v metóde nadtriedy.
112. Môžete mať virtuálne funkcie v Jave?
Áno, Java podporuje virtuálne funkcie. Funkcie sú v predvolenom nastavení virtuálne a pomocou kľúčového slova final ich možno zmeniť na nevirtuálne.
113. Čo je abstrakcia?
Abstrakcia sa vzťahuje na akt reprezentácie základných prvkov bez zahrnutia detailov pozadia. Podrobné informácie alebo implementácia sú skryté. Najbežnejším príkladom abstrakcie je auto, vieme, ako zapnúť motor, zrýchliť a pohybovať sa, avšak spôsob fungovania motora a jeho vnútorných komponentov je zložitá logika skrytá pred bežnými používateľmi. Zvyčajne sa to robí na zvládnutie zložitosti.
114. Čo je abstraktná trieda?
Trieda deklarovaná ako abstraktná nemôže byť inštancia, tj objekt nemôže byť vytvorený. Môže alebo nemusí obsahovať abstraktné metódy, ale ak má trieda aspoň jednu abstraktnú metódu, musí byť vyhlásená za abstraktnú.
Príklad abstraktnej triedy s abstraktnou metódou:
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. Kedy sa používajú abstraktné metódy?
Abstraktná metóda sa používa, keď chceme použiť metódu, ale chceme, aby o implementácii rozhodovali podriadené triedy, v takom prípade používame abstraktné metódy s nadradenými triedami.
116. Ako sa môžete vyhnúť serializácii v podradenej triede, ak základná trieda implementuje rozhranie Serializable?
Serializácia v podradenej triede, ak základná trieda implementuje rozhranie Serializable, potom sa jej môžeme vyhnúť definovaním metódy writeObject() a vyvolaním NotSerializableException().
117. Čo je Collection Framework v jazyku Java?
Kolekcie sú jednotky objektov v jazyku Java. Kolekčný rámec je sada rozhraní a tried v jazyku Java, ktoré sa používajú na reprezentáciu a manipuláciu s kolekciami objektov rôznymi spôsobmi. Rámec kolekcie obsahuje triedy (ArrayList, Vector, LinkedList, PriorityQueue, TreeSet) a viaceré rozhrania (Set, List, Queue, Deque), kde sa každé rozhranie používa na ukladanie špecifického typu údajov.
118. Vysvetlite rôzne rozhrania používané v rámci Collection.
Implementuje rámec kolekcie
- Rozhranie kolekcie
- Rozhranie zoznamu
- Nastaviť rozhranie
- Rozhranie fronty
- A rozhranie
- Rozhranie mapy
Rozhranie zbierky: Collection je primárne dostupné rozhranie, ktoré je možné importovať pomocou java.util.Collection.
Syntax:
public interface Collection extends iterable>
119. Ako môžete synchronizovať ArrayList v Jave?
ArrayList je možné synchronizovať pomocou dvoch metód uvedených nižšie:
- Použitie Collections.synchronizedList()
- Pomocou CopyOnWriteArrayList
Pomocou Collections.synchronizedList():
public static List synchronizedList(List list)>
Použitie CopyOnWriteArrayList:
- Vytvorte prázdny zoznam.
- Implementuje rozhranie Zoznam
- Ide o variant ArrayList bezpečný pre vlákna
- T predstavuje generický
120. Prečo potrebujeme synchronizovaný ArrayList, keď máme vektory (ktoré sú synchronizované) v Jave?
ArrayList je potrebný, aj keď máme vektory z určitých dôvodov:
- ArrayList je rýchlejší ako Vectors.
- ArrayList podporuje multithreading, zatiaľ čo Vectors podporuje iba jednovláknové použitie.
- Použitie ArrayList je bezpečnejšie, pretože Vectors podporuje jednotlivé vlákna a jednotlivé operácie sú menej bezpečné a synchronizácia trvá dlhšie.
- Vektory sú v Jave považované za zastarané kvôli ich synchronizovanej povahe.
121. Prečo nemôžeme vytvoriť generické pole?
Všeobecné polia nie je možné vytvoriť, pretože pole nesie informácie o type svojich prvkov za behu, kvôli čomu počas behu vyhodí „ArrayStoreException“, ak typ prvkov nie je podobný. Keďže informácie o generickom type sú vymazané v čase kompilácie pomocou Type Erasure, kontrola úložiska poľa by prešla tam, kde mala zlyhať.
122. Súvislé pamäťové miesta sa zvyčajne používajú na ukladanie skutočných hodnôt v poli, ale nie v ArrayList. Vysvetlite.
Prvky poľa sú uložené v súvislých pamäťových miestach, čo znamená, že každý prvok je uložený v samostatnom bloku na základe toho, ktorý sa nachádza v poli. Keďže prvky poľa sú uložené na súvislých miestach, môže byť relatívne jednoduchý prístup k akémukoľvek prvku podľa jeho indexu, pretože adresu prvku možno vypočítať na základe umiestnenia prvku. Java však implementuje ArrayLists ako dynamické polia, čo znamená, že veľkosť sa môže meniť pri odstraňovaní alebo pridávaní prvkov. Prvky ArrayList nie sú uložené v súvislých pamäťových miestach, aby sa prispôsobili tejto dynamickej povahe. Namiesto toho ArrayList využíva metódu známu ako rozšíriteľné pole, v ktorej sa základné pole podľa potreby rozšíri na väčšiu veľkosť a prvky sa potom skopírujú na nové miesto. Na rozdiel od ArrayListu, ktorý má dynamickú veľkosť a neukladá svoje prvky do súvislých pamäťových miest, pole má pevnú veľkosť a jeho prvky sú uložené tam.
123. Vysvetlite metódu konverzie ArrayList na Array a Array na ArrayList.
Konverzia zoznamu na ArrayList
Existuje niekoľko metód na konverziu zoznamu na ArrayList

Programátori môžu konvertovať pole na ArrayList pomocou metódy asList() triedy Arrays. Je to statická metóda triedy Arrays, ktorá akceptuje objekt List.
Syntax:
Arrays.asList(item)>
Príklad:
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); } }> Výkon
[Abc, Def, Ghi, Jkl]>
Konverzia ArrayList na Array

Programátori Java môžu previesť ArrayList na
Syntax:
List_object.toArray(new String[List_object.size()])>
Príklad:
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 + ' '); } }> Výkon
1 2 3 2 1>
124. Ako dynamicky rastie veľkosť ArrayList? A tiež uveďte, ako sa to interne implementuje.
Vďaka povahe ArrayLists založenej na poli dynamicky rastie čo do veľkosti, čím zabezpečuje, že je vždy dostatok miesta pre prvky. Pri prvom vytvorení prvku ArrayList je predvolená kapacita približne 10-16 prvkov, čo v podstate závisí od verzie Java. Prvky ArrayList sa skopírujú z pôvodného poľa do nového poľa, keď je kapacita pôvodného poľa plná. Keď sa veľkosť ArrayList dynamicky zvyšuje, trieda vytvorí nové pole väčších veľkostí a skopíruje všetky prvky zo starého poľa do nového poľa. Teraz sa referencia nového poľa používa interne. Tento proces dynamického rastu poľa je známy ako zmena veľkosti.
125. Čo je to vektor v Jave?
Vektory v Jave sú podobné a môžu do nich uložiť viacero prvkov. Vektory sa riadia určitými pravidlami uvedenými nižšie:
- Vektor je možné importovať pomocou Java.util.Vector.
- Vektor je implementovaný pomocou dynamického poľa, keď sa veľkosť vektora zväčšuje a zmenšuje v závislosti od prvkov doň vložených.
- Prvky vektora pomocou indexových čísel.
- Vektory sú svojou povahou synchronizované, čo znamená, že používajú iba jedno vlákno (v určitom čase sa vykonáva iba jeden proces).
- Vektor obsahuje mnoho metód, ktoré nie sú súčasťou rámca kolekcií.
Syntax:
Vector gfg = new Vector(size, increment);>
126. Ako urobiť Java ArrayList len na čítanie?
ArrayList môže byť pripravený iba pomocou metódy poskytovanej Collections pomocou metódy Collections.unmodifiableList().
Syntax:
array_readonly = Collections.unmodifiableList(ArrayList);>
Príklad:
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); } } }> Výkon
Initial list: [X, Y, Z] ReadOnly ArrayList: [X, Y, Z] If add element in the ReadOnly ArrayList Exception is thrown : java.lang.UnsupportedOperationException>
127. Čo je prioritný front v jazyku Java?

Prioritný front je abstraktný dátový typ podobný bežnej dátovej štruktúre frontu alebo zásobníka. Prvky uložené v prvkoch závisia od priority definovanej od nízkej po vysokú. PriorityQueue je založený na prioritnej halde.
Syntax:
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()); } }> Výkon
10>
128. Vysvetlite triedu LinkedList.
Trieda LinkedList je Java, ktorá používa na ukladanie prvkov dvojito prepojený zoznam. Zdedí triedu AbstractList a implementuje rozhrania List a Deque. Vlastnosti triedy LinkedList sú uvedené nižšie:
- Triedy LinkedList nie sú synchronizované.
- Udržuje poradie vloženia.
- Môže byť použitý ako zoznam, zásobník alebo front.
Syntax:
LinkedList list_name=new LinkedList();>
129. Čo je trieda Stack v jazyku Java a aké rôzne metódy poskytuje?
Trieda Stack v jazyku Java je dátová štruktúra LIFO, ktorá implementuje dátovú štruktúru Last In First Out. Je odvodená od triedy Vector, ale má funkcie špecifické pre zásobníky. Trieda Stack v jazyku Java poskytuje nasledujúce metódy:
- nahliadnuť (): vráti vrchnú položku zo stohu bez toho, aby ju odstránil
- prázdne(): vráti hodnotu true, ak je zásobník prázdny, a v opačnom prípade vráti hodnotu false
- TAM(): posunie položku na vrch stohu
- pop(): odstráni a vráti vrchnú položku zo stohu
- Vyhľadávanie(): vráti 1, založenú pozíciu objektu z hornej časti zásobníka. Ak objekt nie je v zásobníku, vráti -1
130. Čo je nastavené v rámci Java Collections a zoznam jeho rôznych implementácií?
Sady sú kolekcie, ktoré neukladajú duplicitné prvky. Nezachovávajú žiadne poradie prvkov. Rámec Java Collections poskytuje niekoľko implementácií rozhrania Set, vrátane:
- HashSet: HashSet v jazyku Java ukladá prvky do tabuľky has, ktorá poskytuje rýchlejšie vyhľadávanie a rýchlejšie vkladanie. HashSet nie je objednaný.
- LinkedHashSet: LinkedHashSet je implementácia HashSet, ktorá zachováva poradie vkladania prvkov.
- Sada stromov: TreeSet ukladá prvky v zoradenom poradí, ktoré je určené prirodzeným usporiadaním prvkov alebo vlastným porovnávačom poskytnutým v čase vytvorenia.
131. Čo je trieda HashSet v Jave a ako ukladá prvky?
Trieda HashSet implementuje rozhranie Set v rámci Java Collections Framework a je členom triedy HashSet. Na rozdiel od duplicitných hodnôt ukladá kolekciu odlišných prvkov. V tejto implementácii je každý prvok mapovaný na index v poli pomocou hašovacej funkcie a index sa používa na rýchly prístup k prvku. Vytvára index pre prvok v poli, kde je uložený na základe vstupného prvku. Za predpokladu, že hašovacia funkcia vhodne rozdeľuje prvky medzi segmenty, trieda HashSet poskytuje výkon v konštantnom čase pre základné operácie (pridanie, odstránenie, obsah a veľkosť).
132. Čo je LinkedHashSet v rámci Java Collections Framework?
LinkedHashSet je usporiadaná verzia Hashset udržiavaná dvojito prepojeným zoznamom naprieč všetkými prvkami. Je to veľmi užitočné, keď je potrebné poradie iterácií. Počas iterácie v LinkedHashSet sa prvky vracajú v rovnakom poradí, v akom sú vložené.
Syntax:
LinkedHashSet hs = new LinkedHashSet();>
Príklad:
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); } }> Výkon
Values:[1, 2, 5, 3]>
133. Čo je rozhranie mapy v jazyku Java?

Mapové rozhranie je prítomné v kolekcii Java a možno ho použiť s balíkom Java.util. Mapové rozhranie sa používa na mapovanie hodnôt vo forme formulára kľúč – hodnota. Mapa obsahuje všetky jedinečné kľúče. Poskytuje tiež metódy, ktoré sú s ním spojené, ako napríklad obsahuje kľúč (), obsahuje hodnotu () atď.
V mapovom rozhraní je viacero typov máp, ako je uvedené nižšie:
- SortedMap
- Stromová mapa
- HashMap
- LinkedHashMap
134. Vysvetlite Treemap v jazyku Java
TreeMap je typ mapy, ktorá ukladá údaje vo forme páru kľúč – hodnota. Realizuje sa pomocou červeno-čierneho stromu. Funkcie TreeMap sú:
- Obsahuje iba jedinečné prvky.
- Nemôže mať kľúč NULL
- Môže mať viacero hodnôt NULL.
- Je nesynchronizovaná.
- Udržiava vzostupné poradie.
135. Čo je EnumSet?
EnumSet je špecializovaná implementácia rozhrania Set na použitie s typom enumerácie. Niektoré funkcie EnumSet sú:
- Je nesynchronizovaná.
- Rýchlejšie ako HashSet.
- Všetky prvky v EnumSet musia pochádzať z jedného typu enumerácie.
- Nepovoľuje nulové objekty a pre výnimky vyvoláva výnimku NullPointerException.
- Používa iterátor odolný voči poruchám.
Syntax:
public abstract class EnumSet>
Parameter: E špecifikuje prvky.
136. Čo je BlockingQueue?

Blokovací front je front, ktorý podporuje operácie, ktoré čakajú, kým sa front pri načítavaní a odstraňovaní prvku nevyprázdni, a čakajú, kým sa pri pridávaní prvku uvoľní miesto vo fronte.
Syntax:
public interface BlockingQueue extends Queue>
Parametre: E je typ prvkov uložených v kolekcii
137. Čo je ConcurrentHashMap v Jave a implementujete ju?
ConcurrentHashMap je implementovaný pomocou Hashtable.
Syntax:
public class ConcurrentHashMap extends AbstractMap implements ConcurrentMap, Serializable>
Parametre : K je kľúč Typ objektu a V je hodnota Typ objektu
138. Môžete použiť akúkoľvek triedu ako kľúč mapy?
Áno, ako kľúč mapy môžeme použiť akúkoľvek triedu, ak spĺňa určité vopred definované pravidlá uvedené nižšie:
- Trieda prepisujúca metódu equals() musí prepísať aj metódu hashCode().
- Trieda concurrentHashMap je bezpečná pre vlákna.
- Predvolená úroveň súbežnosti ConcurrentHashMap je 16.
- Vloženie nulových objektov do ConcurrentHashMap nie je možné ako kľúč ani ako hodnotu.
139. Čo je to iterátor?

Rozhranie Iterator poskytuje metódy na iteráciu akejkoľvek kolekcie v jazyku Java. Iterator je náhrada Enumeration v Java Collections Framework. Môže získať inštanciu iterátora z kolekcie pomocou metódy _iterator()_. Umožňuje tiež volajúcemu odstrániť prvky zo základnej kolekcie počas iterácie.
140. Čo je to enumerácia?
Enumerácia je typ údajov definovaný používateľom. Používa sa hlavne na priraďovanie mien integrálnym konštantám, vďaka názvom je program ľahko čitateľný a udržiavaný. Hlavným cieľom enum je definovať užívateľom definované dátové typy.
Príklad:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }>141. Aký je rozdiel medzi Collection a Collections?
Zbierka | zbierky |
|---|---|
Zbierka je rozhranie. | Zbierka je trieda. |
Poskytuje štandardnú funkcionalitu dátovej štruktúry. 1 miliarda až milión | Ide o triedenie a synchronizáciu prvkov kolekcie. |
Poskytuje metódy, ktoré možno použiť pre štruktúru údajov. | Poskytuje statické metódy, ktoré možno použiť na rôzne operácie. |
142. Rozlišujte medzi Array a ArrayList v Jave.
Pole | ArrayList |
|---|---|
Jednorozmerné alebo viacrozmerné | Jednorozmerné |
Pre a pre každú použitú na iteráciu | Tu sa iterátor používa na prechádzanie riverArrayList |
Dĺžka kľúčového slova vráti veľkosť poľa. | Na výpočet veľkosti ArrayList sa používa metóda size(). |
Pole má pevnú veľkosť. | Veľkosť ArrayList je dynamická a v prípade potreby sa dá zväčšiť alebo zmenšiť. |
Je rýchlejší, ako ho vidíme v pevnej veľkosti | Je relatívne pomalší kvôli svojej dynamickej povahe |
Primitívne dátové typy môžu byť uložené priamo v nepravdepodobných objektoch. | Primitívne dátové typy sa nepridávajú priamo do nepravdepodobných polí, pridávajú sa nepriamo pomocou autoboxing a unboxing |
Nemožno ich sem pridať, preto je tento typ nebezpečný. | Môžu byť pridané sem, čím je ArrayList typovo bezpečný. |
Operátor priradenia slúži len na tento účel | Tu sa používa špeciálna metóda známa ako metóda add(). |
143. Aký je rozdiel medzi Array a Collection v Jave?
Pole | zbierky |
|---|---|
Pole v jazyku Java má pevnú veľkosť. | Kolekcie v jazyku Java majú dynamické veľkosti. |
V poli sú prvky uložené v súvislých pamäťových miestach. | V kolekciách nie sú prvky nevyhnutne uložené v súvislých pamäťových miestach. |
Objekty a primitívne dátové typy môžu byť uložené v poli. | Predmety môžeme ukladať len do zbierok. |
Na zmenu veľkosti poľa je potrebná ručná manipulácia. | Zmena veľkosti v kolekciách sa vykonáva automaticky. |
Pole má základné metódy manipulácie. | Kolekcie majú pokročilé metódy manipulácie a opakovania. |
Pole je dostupné od začiatku Java. | Kolekcie boli predstavené v Jave 1.2. |
144. Rozdiel medzi ArrayList a LinkedList.
ArrayList | LinkedList |
|---|---|
ArrayList je implementovaný ako rozšíriteľné pole. | LinkedList je implementovaný ako dvojito prepojený zoznam. |
V ArrayList sú prvky uložené v súvislých pamäťových miestach | Prvky LinkedList sú uložené v nesúvislých pamäťových miestach, pretože každý prvok má odkaz na nasledujúci a predchádzajúci prvok. |
ArrayLists sú rýchlejšie pre náhodný prístup. | LinkedLists sú rýchlejšie pre operácie vkladania a odstraňovania |
ArrayLists sú pamäťovo efektívnejšie. | LinkedList je menej pamäťovo efektívny |
ArrayLists Používajú viac pamäte kvôli zachovaniu veľkosti poľa. | LinkedList Používa menej pamäte, pretože obsahuje iba odkazy na prvky |
Operácia vyhľadávania je rýchlejšia v ArrayList. | Operácia vyhľadávania je v LinkedList pomalšia |
145. Rozlišujte medzi ArrayList a Vector v Jave.
ArrayList | Vektor python uložte json do súboru |
|---|---|
ArrayLists sú implementované ako rozšíriteľné pole. | Vektor je implementovaný ako pestovateľné pole. |
ArrayList nie je synchronizovaný. | Vektor je synchronizovaný. |
ArrayLists sú rýchlejšie pre nesúbežné operácie. | Vektor je pomalší pre nesúbežné operácie kvôli zvýšenej réžii synchronizácie. |
ArrayLists boli predstavené v Java 1.2. | Vektor bol zavedený v JDK 1.0. |
Odporúča sa na použitie v jednovláknovom prostredí. | Vektory sa odporúčajú na použitie vo viacvláknovom prostredí. |
Predvolená počiatočná kapacita ArrayLists je 10. | Vo vektoroch je predvolená počiatočná kapacita 10, ale predvolený prírastok je dvojnásobný. |
Výkon ArrayList je vysoký. | Výkon vektora je nízky. |
146. Aký je rozdiel medzi Iteratorom a ListIteratorom?
Iterátor | ListIterator |
|---|---|
Prvky prítomné v kolekcii môže prechádzať iba smerom dopredu. | Dokáže prechádzať prvkami prítomnými v kolekcii v smere dopredu aj dozadu. |
Používa sa na prechádzanie cez mapu, zoznam a súpravu. | Môže prejsť iba cez zoznam a nie cez ostatné dva. |
Indexy nie je možné získať pomocou Iterátora | Má metódy ako nextIndex() a previousIndex() na získanie indexov prvkov kedykoľvek počas prechádzania zoznamu. |
Nie je možné upraviť ani nahradiť prvky prítomné v zbierke | Môže upraviť alebo nahradiť prvky pomocou sady (E e) |
Nie je možné pridať prvky a tiež vyvolá výnimku ConcurrentModificationException. | Môžete jednoducho kedykoľvek pridať prvky do zbierky. |
Niektoré metódy iterátora sú next(), remove() a hasNext(). | Niektoré metódy ListIterator sú next(), previous(), hasNext(), hasPrevious(), add(E e). |
147. Rozlišujte medzi HashMap a HashTable.
HashMap | HashTable |
|---|---|
HashMap nie je synchronizovaná | HashTable je synchronizovaná |
Jeden kľúč môže mať hodnotu NULL | Hodnoty NULL nie sú povolené |
Iterátor sa používa na prechádzanie cez HashMap. | Je možné použiť Iterator aj Enumertar |
HashMap je rýchlejší. | HashTable je pomalšia v porovnaní s HashMap. |
148. Aký je rozdiel medzi Iterátorom a Enumeráciou?
Iterátor | Enumerácia |
|---|---|
Iterátor môže prechádzať ako dedičstvo, tak aj nestaršie prvky. | Enumerácia môže prechádzať iba staršími prvkami. |
Iterátor je rýchly. | Enumerácia nie je rýchla. |
Iterátory sú pomalšie. | Enumerácia je rýchlejšia. |
Iterátor môže pri prechádzaní kolekciou vykonať operáciu odstránenia. | Enumerácia môže vykonávať iba prechodové operácie s kolekciou. |
149. Aký je rozdiel medzi porovnateľným a porovnateľným?
Porovnateľné | Porovnávač |
|---|---|
Rozhranie sa nachádza v balíku java.lang. | Rozhranie sa nachádza v balíku java.util. |
Poskytuje metódu CompareTo() na triedenie prvkov. | Poskytuje metódu Compare() na triedenie prvkov. |
Poskytuje jednotlivé triediace sekvencie. | Poskytuje viacero triediacich sekvencií. |
Logika triedenia musí byť v rovnakej triede, ktorej objekt budete triediť. | Logika triedenia by mala byť v samostatnej triede, aby bolo možné písať rôzne triedenie na základe rôznych atribútov objektov. |
Metóda triedi údaje podľa pevného poradia. | Metóda triedi údaje podľa prispôsobeného poradia triedenia. |
Ovplyvňuje pôvodnú triedu. | Nemá to vplyv na pôvodnú triedu. |
Často implementované v rozhraní API podľa kalendára, tried Wrapper, dátumu a reťazca. | Je implementovaný na triedenie inštancií tried tretích strán. |
150. Aký je rozdiel medzi Set a Map?
Set | Mapa |
|---|---|
Rozhranie Set je implementované pomocou balíka java.util. | Mapa je implementovaná pomocou balíka java.util. |
Môže rozšíriť zberné rozhranie. | Nerozširuje zberné rozhranie. |
Nepovoľuje duplicitné hodnoty. | Umožňuje duplicitné hodnoty. |
Sada môže zoradiť iba jednu hodnotu null. | Mapa môže zoradiť viacero hodnôt null. |
Otázky na pohovor v jazyku Java
151. Vysvetlite iterátor FailFast a iterátor FailSafe spolu s príkladmi pre každý z nich.
Iterátor FailFast je iterátor, ktorý vyvoláva a ConcurrentModificationException ak zistí, že podkladová kolekcia bola upravená počas používania iterátora. Toto je predvolené správanie iterátorov v rámci Java Collections Framework. Napríklad iterátor pre HashMap je FailFast.
Príklad:
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); } } } }> Výkon:
Exception in thread 'main' java.util.ConcurrentModificationException>
Iterátor FailSafe nevyhodí a ConcurrentModificationException ak sa podkladová kolekcia upraví počas používania iterátora. Alternatívne vytvorí snímku kolekcie v čase vytvorenia iterátora a iteruje cez snímku. Napríklad iterátor pre ConcurrentHashMap je FailSafe.
Príklad:
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. Čo je to spracovanie výnimiek?
An Výnimka je udalosť, ktorá preruší normálny priebeh programu a vyžaduje špeciálne spracovanie. Počas vykonávania programu je možné chyby a neplánované udalosti riešiť pomocou mechanizmu spracovania výnimiek Java. Nižšie sú uvedené niektoré dôvody, prečo sa v jazyku Java vyskytujú výnimky:
- Porucha zariadenia
- Strata sieťového pripojenia
- Chyby kódu
- Otváranie nedostupného súboru
- Neplatný vstup používateľa
- Fyzické obmedzenia (nedostatok pamäte na disku)
153. Koľko typov výnimiek sa môže vyskytnúť v programe Java?

V Jave sú vo všeobecnosti dva typy výnimiek:
- Vstavané výnimky: Vstavané výnimky v jazyku Java poskytujú knižnice Java. Tieto výnimky možno ďalej rozdeliť do dvoch podkategórií, t. j. začiarknuté a nezačiarknuté výnimky. Nižšie sú uvedené niektoré zo vstavaných výnimiek v jazyku Java:
- ArrayIndexOutOfBoundsExceptions
- ClassNotFoundException
- FileNotFoundException
- IOException
- Výnimka NullPointerException
- Aritmetická výnimka
- InterruptedException
- RuntimeException
- Výnimky definované používateľom: Používateľom definované výnimky sú definované samotnými programátormi, aby zvládli niektoré špecifické situácie alebo chyby, ktoré nepokrývajú vstavané výnimky. Na definovanie užívateľom definovaných výnimiek musí byť definovaná nová trieda, ktorá rozširuje príslušnú triedu výnimiek. Používateľom definované výnimky v jazyku Java sa používajú, keď sú vstavané výnimky v jazyku Java.
154. Rozdiel medzi chybou a výnimkou.
Chyby | Výnimky |
|---|---|
Obnova z chýb nie je možná. | Obnovte sa z výnimiek buď pomocou bloku try-catch alebo vrátením výnimiek späť volajúcemu. |
Všetky chyby sú v jazyku Java nekontrolované. | Zahŕňa kontrolované aj nekontrolované typy, ktoré sa vyskytujú. |
Chyby sú väčšinou spôsobené prostredím, v ktorom program beží. | Program je väčšinou zodpovedný za spôsobenie výnimiek. |
Chyby sa môžu vyskytnúť v čase kompilácie, ako aj v čase spustenia. Čas kompilácie: Syntax Error, Run Time: Logical Error. | Všetky výnimky sa vyskytujú za behu, ale začiarknuté výnimky sú kompilátoru známe, zatiaľ čo nezačiarknuté nie. |
Sú definované v balíku java.lang.Error. | Sú definované v balíku java.lang.Exception |
Príklady : java.lang.StackOverflowError, java.lang.OutOfMemoryError | Príklady : Začiarknuté výnimky: SQLException, IOException Nezačiarknuté výnimky: ArrayIndexOutOfBoundException, NullPointerException, ArithmeticException. |
155. Vysvetlite hierarchiu tried Java Exception.

Všetky typy výnimiek a chýb v jazyku Java sú podtriedy triedy throwable, ktorá je základnou triedou hierarchie. Táto trieda sa potom používa pre výnimočné stavy, ktoré by mali užívateľské programy zachytiť. NullPointerException je príkladom takejto výnimky. Ďalšia vetva, chyba, ktorú používa run-time systém Java na označenie chýb, ktoré súvisia s JRE. StackOverflowError je príkladom jednej z takýchto chýb.
156. Vysvetlite výnimky za behu.
Runtime Exceptions sú výnimky, ktoré sa vyskytujú počas vykonávania kódu, na rozdiel od výnimiek počas kompilácie, ktoré sa vyskytujú počas kompilácie. Výnimky spustenia sú nezačiarknuté výnimky, pretože JVM ich nezohľadňuje.
Príklady výnimiek runtime v jazyku Java zahŕňajú:
- Výnimka NullPointerException: Nastane, keď sa aplikácia pokúsi použiť odkaz na nulový objekt.
- ArrayIndexOutOfBoundsException: K tomu dochádza, keď sa aplikácia pokúsi o prístup k indexu poľa, ktorý je mimo hraníc.
- ArithmeticException: K tomu dochádza, keď sa aplikácia pokúsi deliť nulou.
- IllegalArgumentException: Táto výnimka nastane, keď sa metóde odovzdá nezákonný alebo nevhodný argument.
Na rozdiel od skontrolovaných výnimiek, výnimky v režime runtime nevyžadujú deklaráciu v klauzule throws alebo zachytávanie v bloku try-catch. Spracovanie výnimiek runtime sa však odporúča, aby sa zobrazovali zmysluplné chybové správy a zabránilo sa zlyhaniu systému. Keďže výnimky v režime runtime poskytujú špecifickejšie informácie o probléme ako kontrolované výnimky, umožňujú vývojárom ľahšie a rýchlejšie odhaliť a opraviť chyby programovania.
157. Čo je výnimka NullPointerException?
Je to typ výnimky spustenia, ktorá sa vyvolá, keď sa program pokúsi použiť odkaz na objekt, ktorý má nulovú hodnotu. Hlavné použitie NullPointerException je na označenie toho, že referenčnej premennej nie je priradená žiadna hodnota, používa sa tiež na implementáciu dátových štruktúr, ako sú prepojené zoznamy a stromy.
158. Kedy sa vyvolá výnimka ArrayStore?
Výnimka ArrayStore sa vyvolá pri pokuse o uloženie nesprávneho typu objektu do poľa objektov.
Príklad:
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); } }> Príklad:
Exception in thread 'main' java.lang.ArrayStoreException: java.lang.Integer at GFG.main(GFG.java:6)>
159. Aký je rozdiel medzi začiarknutou výnimkou a nezačiarknutou výnimkou?
Začiarknutá výnimka:
Kontrolované výnimky sú výnimky, ktoré sa kontrolujú počas kompilácie programu. Ak v programe nejaký kód v rámci metódy vyvolá začiarknutú výnimku, potom metóda musí výnimku buď spracovať, alebo ju musí špecifikovať pomocou kľúčového slova throws.
Skontrolované výnimky sú dvoch typov:
- Úplne skontrolované výnimky: skontrolujú sa aj všetky jeho podradené triedy, ako napríklad IOException a InterruptedException.
- Čiastočne skontrolované výnimky: niektoré z jej podradených tried sú nezačiarknuté, napríklad výnimka.
Nezačiarknutá výnimka:
Nezačiarknuté sú výnimky, ktoré nie sú kontrolované v čase kompilácie programu. Výnimky v triedach Error a RuntimeException sú nezačiarknuté výnimky, všetko ostatné v rámci throwable je zaškrtnuté.
160. Aká je základná trieda pre Error and Exception?

Chyba je nezákonná operácia vykonaná používateľom, ktorá spôsobuje abnormality v programe. Výnimky sú neočakávané udalosti alebo podmienky, ktoré nastanú počas spustenia programu, výnimka naruší normálny tok inštrukcií programu.
Chyby a výnimky majú spoločnú nadradenú triedu, ktorou je trieda java.lang.Throwable.
161. Je potrebné, aby po každom bloku pokusu nasledoval blok catch?
Nie, nie je potrebné použiť catch block po try block v Jave, pretože môžeme vytvoriť inú kombináciu s finálnym blokom. Nakoniec je blok, ktorý beží napriek tomu, že výnimka je vyvolaná alebo nie.
162. Čo je šírenie výnimiek?
Šírenie výnimiek je proces, pri ktorom sa výnimka ruší zhora nadol. Ak sa výnimka nezachytí raz, opäť klesne na predchádzajúcu metódu a tak ďalej, kým sa nezachytí alebo kým nedosiahne úplné dno zásobníka hovorov.
163. Čo sa stane, ak vložíte System.exit(0) do bloku try or catch? Spustí sa konečne blokovanie?
System.exit(int) má schopnosť vyvolať SecurityException. Ak je teda v prípade bezpečnosti vyvolaná výnimka, potom sa nakoniec vykoná blokovanie, inak sa JVM zatvorí počas volania System. exit(0), kvôli čomu sa blok nakoniec nevykoná.
164. Čo rozumiete pod pojmom Object Cloning a ako to dosiahnete v Jave?
Je to proces vytvárania presnej kópie akéhokoľvek objektu. Aby to bolo možné podporiť, trieda java musí implementovať rozhranie Cloneable balíka java.lang a prepísať metódu clone() poskytovanú triedou Object, ktorej syntax je:
Chránený objekt clone() vyvolá CloneNotSupportedException{ return (Object)super.clone();}V prípade, že rozhranie Cloneable nie je implementované a je prepísaná iba metóda, výsledkom je CloneNotSupportedException v jazyku Java.
165. Ako ovplyvnia výnimky program, ak ich nespracúva?
Výnimky sú zodpovedné za náhle ukončenie behu programu počas vykonávania a kód napísaný po výskyte výnimky sa nevykoná.
166. Aké je použitie posledného kľúčového slova?
Posledné kľúčové slovo sa používa na to, aby sa funkcie stali nevirtuálnymi. V predvolenom nastavení sú všetky funkcie virtuálne, takže na to, aby boli nevirtuálne, používame posledné kľúčové slovo.
167. Aký účel plnia konečné, konečné a finalizované kľúčové slová?
i). Konečný:
final je kľúčové slovo, ktoré sa používa s premennou, metódou alebo triedou, takže ich nemožno prepísať.
Príklad:
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; } }> Výkon:
./GFG.java:6: error: cannot assign a value to final variable x x=50; ^ 1 error>
ii). konečne
nakoniec je blok kódu používaný s try-catch pri spracovaní výnimiek. Kód napísaný v bloku konečne beží napriek skutočnosti, že výnimka je vyvolaná alebo nie.
Príklad:
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'); } } }> Výkon
Try block Always runs even without exceptions>
iii). dokončiť
Je to metóda, ktorá sa volá tesne pred odstránením/zničením objektov, ktoré sú vhodné na zbieranie odpadu na vykonanie činnosti čistenia.
Príklad:
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'); } }> Výkon
Main function running>
168. Aký je rozdiel medzi this() a super() v Jave?
toto ( ) | Super( ) |
|---|---|
Predstavuje aktuálnu inštanciu triedy. | Predstavuje aktuálnu inštanciu nadradenej triedy. |
Volá predvolený konštruktor rovnakej triedy. | Volá predvolený konštruktor základnej triedy. |
Prístup k metódam rovnakej triedy. | Prístup k metódam nadradenej triedy. |
Boduje aktuálnu inštanciu triedy. | Ukazuje inštanciu nadtriedy. |
169. Čo je to multitasking?
Multitasking v jazyku Java označuje schopnosť programu vykonávať niekoľko úloh naraz. Vlákna, čo sú rýchle operácie obsiahnuté v jednom programe, to dokážu. Vykonávanie viacerých vecí naraz je známe ako multitasking.
Príklad:
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. Čo rozumiete pod viacvláknovým programom?
Viacvláknové programy v jazyku Java obsahujú vlákna, ktoré bežia súbežne namiesto toho, aby sa spúšťali sekvenčne. Počítač dokáže efektívnejšie využívať svoje zdroje spojením viacerých úloh naraz. Akýkoľvek program s multithreadingom umožňuje viac ako jednému používateľovi súčasne používať program bez spúšťania viacerých kópií. Viacvláknový program je navrhnutý na spustenie viacerých procesov súčasne, čo môže zlepšiť výkon programu a umožňuje programu využívať viacero procesorov a zlepšuje celkovú priepustnosť.
171. Aké sú výhody multithreadingu?
Používanie multithreadingu má viacero výhod, ktoré sú nasledovné:
- Odozva: Odozva užívateľa sa zvyšuje, pretože interaktívna aplikácia s viacerými vláknami umožňuje spustenie kódu, aj keď je sekcia zablokovaná alebo vykonáva zdĺhavý proces.
- Zdieľanie zdrojov: Proces môže vykonávať odovzdávanie správ a zdieľanú pamäť vďaka multithreadingu.
- Ekonomika: Sme schopní zdieľať pamäť, vďaka čomu sú procesy ekonomické.
- Škálovateľnosť: Multithreading na viacerých CPU strojoch zvyšuje paralelizmus.
- Lepšia komunikácia: Funkcie synchronizácie vlákien zlepšujú komunikáciu medzi procesmi.
- Využitie multiprocesorovej architektúry
- Minimálne využitie systémových prostriedkov
172. Aké sú dva spôsoby, ktorými možno vytvoriť vlákno?
Multithreading je funkcia Java, ktorá umožňuje súčasné vykonávanie dvoch alebo viacerých častí programu pre maximálne využitie CPU. Vo všeobecnosti sú vlákna malé, ľahké procesy s oddelenými cestami vykonávania. Tieto vlákna používajú zdieľanú pamäť, ale konajú nezávisle, takže ak jedno vlákno zlyhá, neovplyvní to ostatné vlákna. Existujú dva spôsoby vytvorenia vlákna:
- Rozšírením triedy Thread
- Implementáciou rozhrania Runnable.
Rozšírením triedy Thread
Vytvárame triedu, ktorá rozširuje java.lang.Trieda vlákien . Táto trieda prepíše metódu run() dostupnú v triede Thread. Vlákno začína svoj život v metóde run().
Syntax:
public class MyThread extends Thread { public void run() { // thread code goes here } }>Implementáciou rozhrania Runnable
Vytvoríme novú triedu, ktorá implementuje java.lang.Runnable rozhranie a prepísať metódu run(). Potom vytvoríme inštanciu objektu Thread a na tomto objekte zavoláme metódu start().
Syntax:
public class MyRunnable implements Runnable { public void run() { // thread code goes here } }>173. Čo je to vlákno?
Vlákna v Jave sú odľahčené podprocesy s najmenšou jednotkou procesov a majú tiež samostatné cesty vykonávania. Tieto vlákna používajú zdieľanú pamäť, ale konajú nezávisle, teda ak existuje výnimka vo vláknach, ktoré neovplyvňujú fungovanie iných vlákien napriek tomu, že zdieľajú rovnakú pamäť. Vlákno má svoj vlastný programový počítadlo, zásobník vykonávania a lokálne premenné, ale zdieľa rovnaký pamäťový priestor s inými vláknami v rovnakom procese. Java poskytuje vstavanú podporu pre multithreading prostredníctvom Spustiteľné rozhranie a Trieda nití .
174. Rozdiel medzi procesom a vláknom?
Proces aj vlákno sú jednotky vykonávania v počítačovom systéme, ale líšia sa niekoľkými spôsobmi:
Proces | Niť |
|---|---|
Proces je vykonávaný program. | Vlákno je jedna sekvencia inštrukcií v rámci procesu. |
Ukončenie procesu trvá dlhšie. | Ukončenie vlákna trvá menej času. |
Tento proces si vyžaduje viac času na prepínanie kontextu. | Vlákno trvá menej času na prepínanie kontextu. |
Proces je menej efektívny z hľadiska komunikácie. | Vlákno je z hľadiska komunikácie efektívnejšie. |
Proces je izolovaný. | Vlákna zdieľajú pamäť. |
Proces má svoj vlastný riadiaci blok procesu, zásobník a priestor adries. | Vlákno má rodičovskú PCB, vlastný blok riadenia vlákien a zásobník a spoločný adresný priestor. |
Proces nezdieľa údaje medzi sebou. | Vlákna medzi sebou zdieľajú údaje. |
175. Opíšte životný cyklus vlákna?

A niť v Jave kedykoľvek existuje v ktoromkoľvek z nasledujúcich stavov. Vlákno sa v každom okamihu nachádza iba v jednom zo zobrazených stavov:
- Nový: Vlákno bolo vytvorené, ale ešte sa nezačalo.
- Spustiteľné: Vlákno je spustené, vykonáva svoju úlohu alebo je pripravené na spustenie, ak neexistujú žiadne iné vlákna s vyššou prioritou.
- Blokované: Vlákno je dočasne pozastavené a čaká na zdroj alebo udalosť.
- Čakanie: Vlákno čaká, kým iné vlákno vykoná úlohu alebo uplynie určitý čas.
- Ukončené: Vlákno dokončilo svoju úlohu alebo bolo ukončené iným vláknom.
176. Vysvetlite metódu suspend() v triede Thread.
Metóda suspend() triedy Thread v jazyku Java dočasne pozastaví vykonávanie vlákna. Keď je vlákno pozastavené, prejde do zablokovaného stavu a operačný systém ho nenaplánuje, čo znamená, že nebude môcť vykonať svoju úlohu, kým nebude obnovená. V modernom programovacom jazyku java existujú bezpečnejšie a flexibilnejšie alternatívy k metódam suspend(). Táto metóda nevracia žiadnu hodnotu.
Syntax:
public final void suspend();>
Príklad:
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'); } }> Výkon:
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. Vysvetlite hlavné vlákno pod vykonávaním triedy Thread.
Java poskytuje vstavanú podporu pre viacvláknové programovanie. Hlavné vlákno sa považuje za nadradené vlákno všetkých ostatných vlákien, ktoré sú vytvorené počas vykonávania programu. Hlavné vlákno sa automaticky vytvorí pri spustení programu. Toto vlákno vykonáva hlavnú metódu programu. Je zodpovedný za vykonávanie hlavnej logiky programu Java, ako aj za obsluhu operácií vstupu používateľa. Hlavné vlákno slúži ako základné vlákno, z ktorého sa vytvárajú všetky ostatné podradené vlákna.

178. Čo je to vlákno démona?
Vlákno démona v jazyku Java je vlákno s nízkou prioritou, ktoré sa používa na vykonávanie operácií na pozadí alebo úloh, ktoré sa vykonávajú nepretržite. ako napríklad zhromažďovanie odpadkov, odoslania signálov, poslucháčov akcií atď. Vlákna démonov v jazyku Java majú nižšiu prioritu ako používateľské vlákna, čo znamená, že sa môžu spustiť len vtedy, keď nie sú spustené žiadne používateľské vlákna. Vlákna démonov v jazyku Java sú užitočné funkcie, ktoré sa vyžadujú pre úlohy na pozadí, ktoré nevyžadujú explicitné vypnutie alebo finalizáciu. Umožňuje efektívnejšie využitie systémových prostriedkov a používa sa na zjednodušenie zdrojov a môže zjednodušiť dlhotrvajúce úlohy.
179. Aké sú spôsoby, ktorými môže vlákno prejsť do stavu čakania?
Vlákno je ľahký proces, ktorý beží súbežne s druhým vláknom v rámci jedného procesu. Každé vlákno môže vykonávať inú úlohu a zdieľať zdroje v rámci jedného procesu. Vlákno v jazyku Java môže vstúpiť do stavu čakania mnohými rôznymi spôsobmi:
- Volanie metódy Sleep(): spánok () metóda sa používa na pozastavenie vykonávania vlákna na určitý čas. Kým je vlákno pozastavené, prejde do stavu čakania.
- Wait() metóda: Táto metóda sa používa na čakanie vlákna, kým mu druhé vlákno signalizuje, že sa má prebudiť. Vlákno prejde do stavu čakania, kým nedostane upozornenie od iného vlákna.
- Metóda Join(): Metódu Join() možno použiť na čakanie, kým vlákno dokončí vykonávanie. Volanie vlákna prejde do stavu čakania, kým sa nedokončí cieľové vlákno.
- Čaká sa na I/O operácie: Ak vlákno čaká na dokončenie operácie Input/Output, prejde do stavu čakania, kým sa operácia nedokončí.
- Problémy so synchronizáciou: Ak sa vyskytnú nejaké problémy so synchronizáciou vo viacvláknovej aplikácii, vlákna môžu prejsť do stavu čakania, kým sa nevyriešia problémy so synchronizáciou.
180. Ako prebieha multi-threading na počítači s jedným procesorom?
Java používa techniku nazývanú zdieľanie času, bežne označovanú ako časové delenie, na implementáciu multi-threadingu na počítačoch s jedným CPU. Vzhľad paralelného vykonávania je vytvorený prepínaním CPU medzi aktívnymi vláknami. Operačný systém má na starosti postupné prideľovanie času CPU každému vláknu a plánovanie vlákien.
Aby sa zabránilo vzájomnej interakcii vlákien a vytváraniu rasových situácií alebo iných problémov, Java má niekoľko spôsobov, ako riadiť správanie vlákien, vrátane synchronizácie a zamykania. Je možné vytvoriť viacvláknové programátory, ktoré fungujú správne a efektívne na stroji s jedným CPU reguláciou interakcie medzi vláknami a zabezpečením synchronizácie kľúčových častí kódu. Na rozdiel od spustenia toho istého programu na počítači s viacerými CPU alebo jadrami môže multi-threading na jednom CPU len vyvolať dojem paralelizmu a skutočné zvýšenie výkonu môže byť skromné. Operačný systém rozdeľuje čas CPU, ktorý je k dispozícii, keď na jednom CPU beží viacero vlákien, na malé časové úseky a každému vláknu prideľuje časový úsek na vykonanie. Rýchle prepínanie medzi vláknami operačným systémom vytvára dojem paralelného vykonávania. Prepínanie medzi vláknami sa zdá byť okamžité, pretože časové úseky sú často veľmi malé, rádovo milisekúnd alebo mikrosekúnd.
Otázky na pohovor Java pre skúsených
181. Aké sú rôzne typy priorít vlákien v jazyku Java? A aká je predvolená priorita vlákna prideleného JVM?
Priority vo vláknach je koncept, v ktorom má každé vlákno svoju prioritu, o ktorej sa dá laicky povedať, že tu má prioritu každý objekt, ktorý je reprezentovaný číslami od 1 do 10. V Jave sú rôzne typy vlastností vlákna, ktoré sú uvedené nižšie:
- MIN_PRIORITY
- MAX_PRIORITY
- NORM_PRIORITY
V predvolenom nastavení je vlákno priradené NORM_PRIORITY.
182. Prečo je v Jave potrebný Garbage Collection?
Pre Java je zber odpadu nevyhnutný, aby sa predišlo únikom pamäte, ktoré môžu spôsobiť zlyhanie programu a stať sa nestabilným. V Jave sa nedá vyhnúť zberu odpadu. Na rozdiel od C++, Garbage collection v Jave pomáha programátorom sústrediť sa na vývoj aplikácie namiesto správy pamäťových zdrojov a obáv z úniku pamäte. Java Virtual Machine (JVM) automaticky pravidelne spravuje pamäť spustením zberača odpadu, ktorý uvoľní nevyužitú pamäť v aplikácii. Zhromažďovanie odpadu zefektívňuje pamäť Java, pretože odstraňuje nereferencované objekty z pamäte haldy.
183. Čo je nevýhodou Garbage Collection?
Okrem mnohých výhod má Garbage Collector určité nevýhody uvedené nižšie:
- Hlavnou nevýhodou zberu odpadu je to, že môže spôsobiť prestávky vo vykonávaní aplikácie, pretože sa snaží vyčistiť pamäť, čo spomaľuje výkon aplikácie.
- Proces zhromažďovania odpadu je nedeterministický, čo sťažuje predpovedanie, kedy dôjde k zhromažďovaniu odpadu, čo spôsobuje nepredvídateľné správanie v aplikáciách. Napríklad, ak napíšeme akýkoľvek program, potom je pre programátorov ťažké rozhodnúť, či je problém spôsobený zberom odpadu alebo inými faktormi v programe.
- Zber odpadu môže tiež zvýšiť využitie pamäte, ak program vytvorí a zahodí veľa objektov s krátkou životnosťou.
184. Vysvetlite rozdiel medzi malým, väčším a úplným zberom odpadu.
Java Virtual Machine (JVM) odstraňuje objekty, ktoré sa už nepoužívajú, pomocou zberača odpadu, ktorý tieto objekty pravidelne kontroluje a odstraňuje. V JVM existujú rôzne typy zberu odpadu, z ktorých každý má iné charakteristiky a vplyv na výkon. Hlavné typy zberu odpadu sú:
- Odvoz drobného odpadu: Tento typ zberu odpadu, známy aj ako zber odpadu mladej generácie, sa používa na zhromažďovanie a získavanie pamäte, ktorú používajú objekty s krátkou životnosťou (objekty, ktoré sa rýchlo vytvárajú a zahadzujú).
- Veľký zber odpadu: Tento typ zberu odpadkov, známy aj ako zber odpadu starej generácie, sa používa na zhromažďovanie a opätovné získavanie pamäte, ktorú používajú objekty s dlhou životnosťou (objekty, ktoré prežijú viaceré menšie zbery odpadu a sú povýšené na starú generáciu).
- Kompletný zber odpadu: Počas úplného zberu odpadu sa zbierajú a regenerujú spomienky všetkých generácií, vrátane spomienok mladých i starých. Úplné zbieranie odpadu zvyčajne trvá dlhšie ako zbieranie menšieho alebo väčšieho odpadu, čo spôsobuje dočasné pozastavenie aplikácie.
185. Ako identifikujete hlavné a menšie zbery odpadu v Jave?
Veľký zber odpadu funguje v priestore prežitia a zber malého odpadu funguje v priestore Eden, aby vykonal rutinu označenia a zametania. A obe môžeme identifikovať na základe výstupu, kde menšia zbierka vytlačí GC, zatiaľ čo hlavná zbierka vytlačí úplnú GC pre prípad, keď je protokolovanie zberu odpadu povolené pomocou -XX:PrintGCDetails alebo verbose:gc.
186. Čo je únik pamäte a ako ovplyvňuje zbieranie odpadu?
V jazyku Java môžu byť úniky pamäte spôsobené rôznymi faktormi, ako napríklad nesprávne zatvorenie zdrojov, držanie odkazov na objekty dlhšie, ako je potrebné, alebo zbytočné vytváranie príliš veľkého množstva objektov. Existujú situácie, v ktorých zberač odpadu nezbiera predmety, pretože na tieto objekty existuje odkaz. V týchto situáciách, keď aplikácia vytvára veľa objektov a nepoužíva ich a každý objekt má nejaké platné referencie, zberač odpadu v Jave nemôže objekty zničiť. Tieto zbytočné objekty, ktoré neposkytujú programu žiadnu hodnotu, sú známe ako úniky pamäte. Úniky pamäte môžu negatívne ovplyvniť zhromažďovanie odpadu tým, že bránia zberateľovi odpadu získať späť nevyužitú pamäť. Toto správanie povedie k spomaleniu výkonu alebo niekedy k zlyhaniu systému. V programe je dôležité vyhnúť sa úniku pamäte správnym riadením zdrojov a odkazov na objekty.
Príklad:
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'); } }> Výkon:
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. Vymenujte niektoré triedy prítomné v balíku java.util.regex.
Regular Expressions alebo Regex v Jave je API používané na vyhľadávanie a manipuláciu s reťazcami v Jave. Vytvára vzory reťazcov, ktoré môžu extrahovať potrebné údaje z reťazcov alebo môžu zovšeobecniť vzor.
V java.util.regex sú uvedené 3 triedy:
- Trieda vzoru: Môže definovať vzory
- Matcher Class: Dokáže vykonávať operácie priraďovania textu pomocou vzorov
- Trieda PatternSyntaxException: Môže indikovať chybu syntaxe vo vzore regulárneho výrazu.
Okrem balíka 3 tried obsahuje aj jedno rozhranie MatchResult Interface, ktoré možno použiť na zobrazenie výsledku operácie zhody.
188. Napíšte regulárny výraz na overenie hesla. Heslo musí začínať abecedou a za ňou nasledujú alfanumerické znaky; Jeho dĺžka musí byť v rozmedzí 8 až 20.
regex = ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&-+=()])(?=S+$).{8, 20}$>Vysvetlenie:
- ^ používa sa ako počiatočný znak reťazca.
- (?=.*[0-9]) použitý pre číslicu sa musí vyskytnúť aspoň raz.
- (?=.*[a-z]) používané pre malé písmená sa musia vyskytnúť aspoň raz.
- (?=.*[A-Z]) používa sa pre veľké písmená abecedy, ktoré sa musia vyskytovať aspoň raz v podreťazci.
- (?=.*[@#$%^&-+=()] používa sa pre špeciálny znak, ktorý sa musí vyskytovať aspoň raz.
- (?=S+$) medzery v celom reťazci nepovoľujú.
- .{8, 20} používa sa na minimálne 8 a maximálne 20 znakov.
- $ sa používa na koniec reťazca.
189. Čo je JDBC?
JDBC štandardné API sa používa na prepojenie Java aplikácií a relačných databáz. Poskytuje kolekciu tried a rozhraní, ktoré umožňujú programátorom používať programovací jazyk Java na komunikáciu s databázou. Triedy a rozhranie JDBC umožňujú aplikácii odosielať požiadavky používateľov do špecifikovanej databázy. Vo všeobecnosti existujú štyri komponenty JDBC, pomocou ktorých interaguje s databázou:
- JDBC API
- Správca ovládačov JDBC
- Testovacia sada JDBC
- Ovládače mosta JDBC-ODBC

190. Čo je ovládač JDBC?
Ovládač JDBC je softvérový komponent, ktorý sa používa na umožnenie interakcie aplikácie Java s databázou. JDBC poskytuje implementáciu JDBC API pre špecifický systém správy databáz, čo mu umožňuje pripojiť databázu, vykonávať príkazy SQL a získavať údaje. Existujú štyri typy ovládačov JDBC:
- Ovládač JDBC-ODBC Bridge
- Ovládač natívneho rozhrania API
- Ovládač sieťového protokolu
- Tenký vodič

191. Aké sú kroky na pripojenie k databáze v jazyku Java?
Existujú určité kroky na pripojenie databázy a programu Java, ako je uvedené nižšie:
- Importujte balíčky
- Načítajte ovládače pomocou metódy forName().
- Zaregistrujte ovládače pomocou DriverManager
- Vytvorte spojenie pomocou objektu triedy Connection
- Vytvorte vyhlásenie
- Vykonajte dotaz
- Zatvorte pripojenia
192. Čo sú komponenty JDBC API?
Komponenty JDBC API poskytujú rôzne metódy a rozhrania pre ľahkú komunikáciu s databázami a taktiež poskytujú balíky ako java Se a java EE, ktoré poskytujú možnosť zápisu po spustení kdekoľvek (WORA).
Syntax:
java.sql.*;>
193. Čo je rozhranie pripojenia JDBC?
Java Database Connectivity Interface (JDBC) je softvérový komponent, ktorý umožňuje aplikáciám Java interagovať s databázami. Na zlepšenie pripojenia vyžaduje JDBC ovládače pre každú databázu.
194. Čo tvorí rozhranie JDBC ResultSet?
Rozhranie JDBC ResultSet sa používa na ukladanie údajov z databázy a ich použitie v našom programe Java. Môžeme tiež použiť ResultSet na aktualizáciu údajov pomocou metód updateXXX(). Objekt ResultSet ukazuje kurzor pred prvý riadok výsledkových údajov. Pomocou metódy next() môžeme iterovať cez ResultSet.
195. Čo je JDBC Rowset?
JDBC RowSet poskytuje spôsob ukladania údajov v tabuľkovej forme. RowSet je rozhranie v jazyku Java, ktoré možno použiť v rámci balíka java.sql. Spojenie medzi objektom RowSet a zdrojom údajov je udržiavané počas celého životného cyklu. Sady riadkov sú rozdelené do piatich kategórií na základe implementácie uvedenej nižšie:
- JdbcRowSet
- CachedRowSet
- WebRowSet
- FilteredRowSet
- PripojiťRowSet
196. Aká je úloha triedy JDBC DriverManager?
Trieda JDBC DriverManager funguje ako rozhranie pre používateľov a ovládačov. Používa sa mnohými spôsobmi, ako je uvedené nižšie:
- Používa sa na vytvorenie spojenia medzi aplikáciou Java a databázou.
- Pomáha sledovať dostupné ovládače.
- Môže pomôcť vytvoriť spojenie medzi databázou a príslušnými ovládačmi.
- Obsahuje všetky metódy, ktoré môžu registrovať a zrušiť registráciu tried databázových ovládačov.
- Metóda DriverManager.registerDriver() môže udržiavať zoznam tried ovládačov, ktoré sa samy zaregistrovali.
Otázky týkajúce sa rozdielového pohovoru v jazyku Java
197. Rozlišujte medzi Iterovateľným a Iterátorom.
Iterovateľné | Iterátor |
|---|---|
Iterable poskytuje spôsob, ako iterovať cez sekvenciu prvkov. | Iterátor pomáha pri postupnom iterovaní kolekcie prvkov. |
| iterátor() metóda vracia Iterátor. | hasNext() a Ďalšie() sú potrebné metódy. |
| odstrániť () metóda je voliteľná. | odstrániť () v iterátore sa vyžaduje metóda. |
Príklady sú Zoznam, Poradie a Nastaviť. | Príklady sú ListIterator, Enumeration a ArrayIterator. |
198. Rozlišujte medzi zoznamom a súborom.
Zoznam | Set |
|---|---|
Objednané | Neusporiadané |
Zoznam povoľuje duplikáty. | Sada nepovoľuje duplicitné hodnoty. |
Zoznam je prístupný pomocou indexu. | Set je prístupný pomocou hashcode. |
Je možné uložiť viacero nulových prvkov. | Nulové prvky možno uložiť iba raz. |
Príkladmi sú ArrayList, LinkedList atď. | Príkladmi sú HashSet a TreeSet. LinkedHashSet atď. |
199. Rozlišujte medzi zoznamom a mapou.
Zoznam | Mapa |
|---|---|
Rozhranie zoznamu umožňuje duplicitné prvky. | Mapa nepovoľuje duplicitné prvky. |
Zoznam zachováva poradie vkladania. | Mapa neuchováva poradie vloženia. |
Je možné uložiť viacero nulových prvkov. | Mapa umožňuje maximálne jeden nulový kľúč a ľubovoľný počet nulových hodnôt. |
Zoznam poskytuje metódu get() na získanie prvku na zadanom indexe. | Mapa neposkytuje metódu get na získanie prvkov v zadanom indexe. |
Zoznam je implementovaný pomocou ArrayList atď. | Mapa je implementovaná pomocou HashMap, TreeMap, LinkedHashMap |
200. Rozlišujte medzi frontom a zásobníkom.
Fronta | Stoh |
|---|---|
Dátová štruktúra frontu sa používa na ukladanie prvkov a používa sa na vykonávanie operácií, ako je radenie, vyraďovanie zozadu alebo koniec radu. | Dátová štruktúra zásobníka sa používa na ukladanie prvkov a používa sa na vykonávanie operácií, ako je push, pop z vrchu zásobníka. |
Štruktúra údajov frontu Implementuje poradie FIFO. | Štruktúra dát zásobníka Implementuje objednávku LIFO. |
Vkladanie a mazanie vo frontoch prebieha z opačných koncov zoznamu. Vymazanie sa uskutoční z prednej časti zoznamu a vloženie sa uskutoční na konci zoznamu. | Vkladanie a mazanie v zásobníkoch prebieha iba z jedného konca zoznamu nazývaného vrchol. |
Operácia vloženia sa nazýva operácia frontu. | Operácia vloženia sa nazýva operácia Push. |
Front sa vo všeobecnosti používa na riešenie problémov súvisiacich so sekvenčným spracovaním. | Stack sa vo všeobecnosti používa na riešenie problémov súvisiacich s rekurziou. |
201. Rozlišujte medzi PriorityQueue a TreeSet.
Prioritný front | TreeSet |
|---|---|
Používa Queue ako základnú dátovú štruktúru. | Používa množinu ako základnú dátovú štruktúru. |
Táto dátová štruktúra umožňuje duplicitné prvky | Táto dátová štruktúra neumožňuje duplicitné prvky |
Prioritný front je implementovaný triedou PriorityQueue. | TreeSet je implementovaný triedou TreeSet. |
PriorityQueue prichádza v JDK 1.5. | TreeSet prichádza v JDK 1.4. |
PriorityQueue pq = new PriorityQueue(); | reeSet ts = new TreeSet (); |
202. Rozlišujte medzi zoznamom s jedným a dvojitým odkazom.
Samostatne prepojený zoznam | Dvojito prepojený zoznam |
|---|---|
Samostatne prepojený zoznam obsahuje iba dva segmenty, tj údaje a prepojenie. | Dvojito prepojený zoznam obsahuje tri segmenty, tj údaje, a dva ukazovatele. |
Prechádzanie v jednotlivo prepojenom zozname je možné iba v smere dopredu. | Prechádzanie v dvojito prepojenom zozname je možné len v oboch smeroch dopredu aj dozadu. |
Používa menej pamäte, pretože každý jeden uzol má iba jeden ukazovateľ. | Vyžaduje viac pamäte ako jednotlivo prepojený zoznam, pretože každý uzol má dva ukazovatele. |
Jednoduché použitie a vloženie uzlov na začiatok zoznamu. | O niečo zložitejšie na použitie a jednoduché vloženie na koniec zoznamu. |
Časová zložitosť vloženia a vymazania je O(n). | Časová zložitosť inzercie a delécie je O(1). |
| | |
203. Rozlišujte medzi Failfast a Failsafe.
FailFast | FailSafe |
|---|---|
Failsfast zlyhá okamžite, keď zistí súbežnú úpravu počas iterácie. | Failsafe pokračuje v iterácii pôvodnej kolekcie a tiež vytvára kópiu na úpravu. |
Failfast sa vo všeobecnosti používa v prostrediach s jedným vláknom. | Failsafe sa používa vo viacvláknových prostrediach. |
Failfast neumožňuje žiadne úpravy počas iterácie. | Failsafe umožňuje modifikáciu počas iterácie. |
Failfast je rýchly v porovnaní s Failfast, keďže nezahŕňa kopírovanie kolekcie. | Failsafe je vo všeobecnosti pomalý v porovnaní s Failfast. |
FailFast hádže ConcurrentModificationException ak sa kolekcia počas iterácie upraví. | FailSafe nevyvolá žiadnu výnimku, ale namiesto toho vytvorí kópiu kolekcie na iteráciu. |
204. Rozlišujte medzi HashMap a TreeMap.
HashMap | Stromová mapa |
|---|---|
Hasmap používa hašovaciu tabuľku na ukladanie párov kľúč – hodnota. | Treemap používa červeno-čierne stromy na uloženie páru kľúč-hodnota. |
Hashmap neudržiava žiadne konkrétne poradie pre páry kľúč – hodnota. | Stromová mapa zachováva prirodzené usporiadanie založené na kľúčoch. |
V hashmape nie je zaručené poradie iterácií. | Iterácia je zoradená podľa kľúčov. |
Hashmapy sú rýchlejšie na vyhľadávanie v porovnaní s Treemap. | Načítanie v stromovej mape je pomalšie, pretože na nájdenie kľúčov používa prechod cez strom. |
Hashmap je implementovaný pomocou poľa prepojených zoznamov. | TreeMap je implementovaný pomocou červeno-čierneho stromu. |
Hashmap používa metódu equals() triedy Object na porovnanie kľúčov. | TreeMap používa na porovnanie kľúčov metódu CompareTo(). |
205. Rozlišujte medzi Queue a Deque.
Fronta | O čom |
|---|---|
Front je lineárna dátová štruktúra, ktorá sa používa na uloženie kolekcie prvkov. | Deque, tiež známy ako dvojstranný front, je tiež lineárna dátová štruktúra, ktorá ukladá kolekciu prvkov s operáciami na odstránenie a pridanie z oboch koncov. |
Prvky vo fronte je možné vložiť len na koniec dátovej štruktúry. | Prvky možno vkladať z oboch koncov dátovej štruktúry. |
Front je možné implementovať pomocou Array alebo Linked List. | Dequeue je možné implementovať pomocou kruhového poľa alebo dvojitého prepojeného zoznamu. |
Fronty sa vo všeobecnosti používajú na implementáciu čakacieho zoznamu alebo frontu úloh. | Deque sa používa na implementáciu stohu alebo prvkov dequeuing z oboch koncov. |
| sts stiahnuť | |
206. Rozlišujte medzi HashSet a TreeSet.
HashSet | TreeSet |
|---|---|
HashSet nie je usporiadaný. | TreeSet je založený na prirodzenom usporiadaní. |
HashSet umožňuje nulové prvky. | TreeSet nepovoľuje nulové prvky. |
HashSet je implementovaný triedou HashSet. | TreeSet je implementovaný triedou TreeSet. |
HashSet hs = new HashSet (); | TreeSet ts = new TreeSet(); |
Otázky týkajúce sa Java rozhovoru – často kladené otázky
Q1. Aký je plat vývojára Java v Indii?
Podľa rôznych zdrojov je priemerný plat vývojára Java Backend viac ako 14 000 000 ročne, čo je o 30 % viac ako pri akejkoľvek inej developerskej úlohe . Tu si tiež môžete pozrieť náš najnovší kurz Praktický portál GeekforGeeks môže byť tiež nápomocný.
Q5. Ako môžem vyniknúť na pohovore v jazyku Java?
Ak chcete vyniknúť na pohovore v jazyku Java, ukážte hlboké pochopenie konceptov Java a praktických aplikácií. Predveďte svoje zručnosti pri riešení problémov vysvetlením svojho prístupu k zložitým scenárom a poskytnutím efektívnych riešení. Okrem toho zvýraznite všetky relevantné projekty alebo príspevky, ktoré ste poskytli komunite Java. Pozitívny dojem môže zanechať aj prejav nadšenia, dobrej komunikácie a ochoty učiť sa.



