top 50 core java interview questions
Най-често задаваните въпроси и отговори за интервю за Java с примери:
В този урок сме разгледали почти 50+ важни основни въпроса за интервю за Java за по-свежи и опитни кандидати.
Тази публикация на JAVA Interview Question е подготвена, за да ви помогне да разберете основните концепции на програмирането на Java за целите на интервюто. Всички важни концепции на JAVA са обяснени тук с примери за вашето лесно разбиране.
Този урок обхваща JAVA теми като основни дефиниции на Java, OOP концепции, спецификатори на достъп, колекции, изключения, нишки, сериализация и др., С примери, за да се подготвите перфектно да се изправи уверено на всяко интервю за JAVA.
Най-популярни въпроси и отговори за интервю за Java
По-долу е даден изчерпателен списък с най-важните и често задавани основни и усъвършенствани въпроси за интервю за програмиране на Java с подробни отговори.
В # 1) Какво е JAVA?
Отговор: Java е език за програмиране на високо ниво и е независим от платформата.
Java е колекция от обекти. Той е разработен от Sun Microsystems. Има много приложения, уебсайтове и игри, които са разработени с помощта на Java.
В # 2) Какви са характеристиките на JAVA?
Отговор: Характеристиките на Java са както следва:
- OOP концепции
- Обектно-ориентирана
- Наследяване
- Капсулиране
- Полиморфизъм
- Абстракция
- Независими от платформата: Една програма работи на различни платформи без никакви модификации.
- Висока производителност: JIT (Just In Time компилатор) позволява висока производителност в Java. JIT преобразува байт кода в машинен език и след това JVM започва изпълнението.
- Многонишкови: Поток на изпълнение е известен като нишка. JVM създава нишка, която се нарича основна нишка. Потребителят може да създаде множество нишки чрез разширяване на класа на нишките или чрез прилагане на интерфейса Runnable.
В # 3) Как Java позволява висока производителност?
Отговор: Java използва компилатор Just In Time, за да позволи висока производителност. Използва се за преобразуване на инструкциите в байт кодове.
В # 4) Име на Java IDE?
Отговор: Eclipse и NetBeans са IDE на JAVA.
В # 5) Какво имате предвид под конструктор?
Отговор: Конструкторът може да бъде обяснен подробно с включени точки:
- Когато се създаде нов обект в програма, конструкторът се извиква, съответстващ на класа.
- Конструкторът е метод, който има същото име като името на класа.
- Ако потребителят не създаде конструктор имплицитно, ще бъде създаден конструктор по подразбиране.
- Конструкторът може да бъде претоварен.
- Ако потребителят е създал конструктор с параметър, той трябва да създаде друг конструктор изрично без параметър.
В # 6) Какво се разбира под променливата Local и Instance?
Отговор:
Локални променливи са дефинирани в метода и обхвата на променливите, които съществуват вътре в самия метод.
Променлива на инстанцията се дефинира вътре в класа и извън метода и обхватът на променливите съществува в целия клас.
В # 7) Какво е клас?
Отговор: Всички Java кодове са дефинирани в клас. Той има променливи и методи.
Променливи са атрибути, които определят състоянието на клас.
Методи са мястото, където трябва да се направи точната бизнес логика. Той съдържа набор от инструкции (или) инструкции за задоволяване на конкретното изискване.
Пример:
public class Addition{ //Class name declaration int a = 5; //Variable declaration int b= 5; public void add(){ //Method declaration int c = a+b; } }
В # 8) Какво е обект?
Отговор: Екземпляр на клас се нарича обект. Обектът има състояние и поведение.
Винаги, когато JVM чете ключовата дума “new ()”, тя ще създаде екземпляр на този клас.
Пример:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
Горният код създава обекта за класа Addition.
В # 9) Какви са концепциите за ООП?
Отговор: Концепциите за ООП включват:
- Наследяване
- Капсулиране
- Полиморфизъм
- Абстракция
- Интерфейс
Предложено четене = >> Водещи въпроси за интервю за OOP
В # 10) Какво е наследяване?
Отговор: Наследяването означава, че един клас може да се разшири до друг клас. Така че кодовете могат да се използват повторно от един клас в друг клас. Съществуващият клас е известен като клас Super, докато производният клас е известен като подклас.
Пример:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
Наследяването е приложимо само за обществеността и защитените членове. Частните членове не могат да бъдат наследявани.
В # 11) Какво е капсулиране?
Отговор: Цел на капсулирането:
- Защитава кода от други.
- Поддържане на кода.
Пример:
Декларираме „a“ като цяло число променлива и тя не трябва да бъде отрицателна.
public class Addition(){ int a=5; }
Ако някой промени точната променлива като „ a = -5 ' тогава е лошо.
За да преодолеем проблема, трябва да следваме стъпките по-долу:
- Можем да направим променливата частна или защитена.
- Използвайте публични методи за достъп като set и get.
Така че горният код може да бъде модифициран като:
public class Addition(){ private int a = 5; //Here the variable is marked as private }
Кодът по-долу показва getter и setter.
Докато задавате променливата, могат да се предоставят условия.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
За капсулиране трябва да направим всички променливи на екземпляра частни и да създадем setter и getter за тези променливи. Което от своя страна ще принуди другите да се обадят на настройващите, вместо да имат директен достъп до данните.
В # 12) Какво е полиморфизъм?
Отговор: Полиморфизмът означава много форми.
Един обект може да се отнася към суперкласа или подкласа в зависимост от референтния тип, който се нарича полиморфизъм.
Пример:
Public class Manipulation(){ //Super class public void add(){ } } public class Addition extends Manipulation(){ // Sub class public void add(){ } public static void main(String args()){ Manipulation addition = new Addition();//Manipulation is reference type and Addition is reference type addition.add(); } }
Използвайки референтния тип „Манипулация“, можем да извикаме метода на класа „Добавяне“ „add ()“. Тази способност е известна като полиморфизъм. Полиморфизмът е приложим за заместващ а не за претоварване .
В # 13) Какво се има предвид под замяна на метода?
Отговор: Замяна на метода се случва, ако методът на подкласа удовлетворява следните условия с метода Super-class:
- Името на метода трябва да е същото
- Аргументът трябва да бъде същият
- Типът връщане също трябва да бъде същият
Основното предимство на заменянето е, че подкласът може да предостави някаква конкретна информация за този тип подклас, отколкото суперкласът.
Пример:
public class Manipulation{ //Super class public void add(){ ……………… } } Public class Addition extends Manipulation(){ Public void add(){ ……….. } Public static void main(String args()){ Manipulation addition = new Addition(); //Polimorphism is applied addition.add(); // It calls the Sub class add() method } }
add.add () метод извиква метода add () в подкласа, а не родителския клас. Така че той замества метода Super-class и е известен като метод за замяна.
В # 14) Какво се разбира под претоварване?
Отговор: Претоварването на метода се случва за различни класове или в рамките на един и същи клас.
За претоварване на метода методът на подкласа трябва да отговаря на следните условия с методите на Super-class (или) в същия клас:
- Същото име на метода
- Различни типове аргументи
- Възможно е да има различни типове връщане
Пример:
public class Manipulation{ //Super class public void add(String name){ //String parameter ……………… } } Public class Addition extends Manipulation(){ Public void add(){//No Parameter ……….. } Public void add(int a){ //integer parameter } Public static void main(String args()){ Addition addition = new Addition(); addition.add(); } }
Тук методът add () има различни параметри в класа Addition е претоварен в същия клас като при супер-класа.
Забележка: Полиморфизмът не е приложим за претоварване на метода.
В # 15) Какво се разбира под интерфейс?
Отговор: В java не могат да бъдат постигнати множество наследства. За преодоляване на този проблем се въвежда концепцията за интерфейс.
Интерфейсът е шаблон, който има само декларации на методи, но не и изпълнението на метода.
Пример:
Public abstract interface IManupulation{ //Interface declaration Public abstract void add();//method declaration public abstract void subtract(); }
- Всички методи в интерфейса са вътрешно публична абстрактна празнота .
- Всички променливи в интерфейса са вътрешно публичен статичен финал това са константи.
- Класовете могат да реализират интерфейса и да не се разширяват.
- Класът, който реализира интерфейса, трябва да осигури изпълнение за всички методи, декларирани в интерфейса.
public class Manupulation implements IManupulation{ //Manupulation class uses the interface Public void add(){ …………… } Public void subtract(){ ……………. } }
В # 16) Какво се разбира под абстрактен клас?
Отговор: Можем да създадем абстрактния клас, като използваме ключовата дума „Abstract“ преди името на класа. Абстрактният клас може да има както „абстрактни“ методи, така и „не абстрактни“ методи, които са конкретен клас.
Абстрактен метод:
Методът, който има само декларацията, но не и реализацията, се нарича абстрактен метод и има ключовата дума, наречена „абстрактно“. Декларациите завършват с точка и запетая.
Пример:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- Абстрактният клас може да има и не абстрактен метод.
- Конкретният подклас, който разширява класа Абстракт, трябва да осигури изпълнението на абстрактни методи.
Въпрос # 17) Разлика между Array и Array List.
Отговор: Разликата между Array и Array List може да се разбере от таблицата по-долу:
Масив | Списък с масиви |
---|---|
Размерът трябва да се посочва по време на декларацията на масива. Низ () име = нов низ (2) | Може да не се изисква размер. Променя динамично размера. ArrayList name = нов ArrayList |
За да поставим обект в масив, трябва да посочим индекса. име (1) = „книга“ | Не се изисква индекс. name.add („книга“) |
Масивът не е параметризиран по тип | ArrayList в java 5.0 са параметризирани. Например: Тази ъглова скоба е параметър на типа, което означава списък на String. |
В # 18) Разлика между String, String Builder и String Buffer.
Отговор:
Низ: Низовите променливи се съхраняват в „постоянен пул от низове“. След като препратката към низа промени старата стойност, която съществува в „постоянния пул от низове“, тя не може да бъде изтрита.
Пример:
Име на низ = „книга“;
Постоянен пул от низове
.
Ако името-стойност се е променило от „book“ в „pen“.
Постоянен пул от низове
Тогава по-старата стойност остава в постоянния пул от низове.
Струнен буфер:
- Тук низовите стойности се съхраняват в стек. Ако стойностите се променят, новата стойност замества по-старата.
- Низовият буфер се синхронизира, което е безопасно за нишки.
- Ефективността е по-бавна от String Builder.
Пример:
Име на буфер на низ = ”книга”;
След като стойността на името е променена на „писалка“, тогава „книгата“ се изтрива в стека.
String Builder:
Това е същото като String Buffer, с изключение на String Builder, който не е безопасно резбован и не е синхронизиран. Така че очевидно представянето е бързо.
Въпрос # 19) Обяснете за публичните и частните спецификатори за достъп.
Отговор: Методите и променливите на екземпляра са известни като членове.
Публично:
Публичните членове са видими в същия пакет, както и външния пакет, който е за други пакети.
Публичните членове на клас A са видими за клас B (същия пакет), както и клас C (различни пакети).
Частно:
Частните членове са видими само в същия клас, но не и за останалите класове в същия пакет, както и класовете във външните пакети.
Частните членове в клас А са видими само в този клас. Той е невидим за клас B, както и за клас C.
В # 20) Разлика между спецификаторите за достъп по подразбиране и защитените.
Отговор:
По подразбиране: Методите и променливите, декларирани в клас без никакви спецификатори за достъп, се наричат по подразбиране.
Членовете по подразбиране в клас А са видими за другите класове, които са вътре в пакета, и невидими за класовете, които са извън пакета.
Така членовете от клас A са видими за клас B и невидими за клас C.
Защитени:
.
Protected е същото като Default, но ако клас се разширява, той е видим, дори ако е извън пакета.
Членовете от клас A са видими за клас B, защото той е вътре в пакета. За клас C той е невидим, но ако клас C разширява клас A, тогава членовете са видими за клас C, дори ако той е извън пакета.
В # 21) Разлика между HashMap и HashTable.
Отговор: Разликата между HashMap и HashTable може да се види по-долу:
HashMap | HashTable |
---|---|
Методите не са синхронизирани | Ключовите методи се синхронизират |
Не безопасността на конеца | Безопасност на резбата |
Iterator се използва за итерация на стойностите | Преброителят се използва за итерация на стойностите |
Позволява един нулев ключ и множество нулеви стойности | Не допуска нищо, което е нищожно |
Ефективността е по-висока от HashTable | Изпълнението е бавно |
Въпрос # 22) Разлика между HashSet и TreeSet.
Отговор: Разликата между HashSet и TreeSet може да се види по-долу:
HashSet | TreeSet |
---|---|
Вмъкнатите елементи са в произволен ред | Поддържа елементите в сортиран ред |
Може да съхранява нулеви обекти | Нулевите обекти не можаха да се съхраняват |
Изпълнението е бързо | Изпълнението е бавно |
В # 23) Разлика между абстрактния клас и интерфейса.
Отговор: Разликите между абстрактния клас и интерфейса са както следва:
Абстрактен клас:
- Абстрактните класове имат конструктор по подразбиране и той се извиква всеки път, когато конкретният подклас е създаден.
- Съдържа абстрактни методи, както и абстрактни методи.
- Класът, който разширява класа Абстракт, не трябва да изисква изпълнението на всички методи, а само методите Абстракция трябва да бъдат внедрени в конкретния подклас.
- Абстрактният клас съдържа променливи на екземпляра.
Интерфейс:
- Той няма конструктор и не може да бъде създаден.
- Трябва да се декларира само абстрактният метод.
- Класовете, които реализират интерфейса, трябва да осигурят изпълнението на всички методи.
- Интерфейсът съдържа само константи.
Въпрос: # 24) Какво е значението на колекциите в Java?
Отговор: Колекцията е рамка, която е предназначена да съхранява обектите и да манипулира дизайна, за да съхранява обектите.
Колекциите се използват за извършване на следните операции:
- Търсене
- Сортиране
- Манипулация
- Вмъкване
- Изтриване
Група обекти е известна като колекции. Всички класове и интерфейси за събиране са налични в пакета Java util.
В # 25) Какви са всички класове и интерфейси, които са налични в колекциите?
Отговор: По-долу са дадени класовете и интерфейсите, които се предлагат в колекции:
Интерфейси:
- колекция
- Списък
- Комплект
- Карта
- Сортиран комплект
- Сортирана карта
- Опашка
Класове:
- Списъци:
- Списък с масиви
- Вектор
- Свързан списък
Комплекти:
- Хеш набор
- Свързан хеш набор
- Комплект дърво
Карти:
- Хеш карта
- Хеш таблица
- TreeMap
- Свързана хеширана карта
Опашка:
- Опашка с приоритет
В # 26) Какво се разбира под Подредени и сортирани в колекции?
Отговор:
Подредени: Това означава, че стойностите, които се съхраняват в колекция, се основават на стойностите, които се добавят към колекцията. Така че можем да повторим стойностите от колекцията в определен ред.
Сортирано: Механизмите за сортиране могат да се прилагат вътрешно или външно, така че групата обекти, сортирани в определена колекция, да се основава на свойствата на обектите.
В # 27) Обяснете различните списъци, налични в колекцията.
Отговор: Стойностите, добавени към списъка, се основават на позицията на индекса и се подрежда по позиция на индекса. Позволени са дубликати.
Видовете списъци са:
а) Списък с масиви:
- Бърза итерация и бърз произволен достъп.
- Това е подредена колекция (по индекс) и не е сортирана.
- Той изпълнява интерфейса с произволен достъп.
Пример:
public class Fruits{ public static void main (String ( ) args){ ArrayList names=new ArrayList (); names.add (“apple”); names.add (“cherry”); names.add (“kiwi”); names.add (“banana”); names.add (“cherry”); System.out.println (names); } }
Изход:
(Ябълка, череша, киви, банан, череша)
От изхода Array List поддържа реда на вмъкване и той приема дубликатите. Но не е сортирано.
б) вектор:
Това е същото като Array List.
- Векторните методи се синхронизират.
- Безопасност на резбата.
- Той също така прилага Random Access.
- Безопасността на нишките обикновено причинява хит в изпълнението.
Пример:
public class Fruit { public static void main (String ( ) args){ Vector names = new Vector ( ); names.add (“cherry”); names.add (“apple”); names.add (“banana”); names.add (“kiwi”); names.add (“apple”); System.out.println (“names”); } }
Изход:
(череша, ябълка, банан, киви, ябълка)
Vector също поддържа реда за вмъкване и приема дубликатите.
в) Свързан списък:
- Елементите са двойно свързани помежду си.
- Ефективността е по-бавна от списъка с масиви.
- Добър избор за вмъкване и изтриване.
- В Java 5.0 той поддържа често срещани методи на опашка peek (), Pool (), Offer () и др.
Пример:
public class Fruit { public static void main (String ( ) args){ Linkedlist names = new linkedlist ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Изход:
(банан, череша, ябълка, киви, банан)
Поддържа реда за вмъкване и приема дубликатите.
Q # 28) Обяснете за Set и техните типове в колекция.
Отговор: Набор се грижи за уникалността. Не позволява дублиране. Тук методът „equals ()” се използва, за да се определи дали два обекта са идентични или не.
а) Hash Set:
- Неподредени и несортирани.
- Използва хеш код на обекта, за да вмъкне стойностите.
- Използвайте това, когато изискването е „няма дубликати и не се интересува от поръчката“.
Пример:
public class Fruit { public static void main (String( ) args){ HashSet names = new HashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Изход:
(банан, череша, киви, ябълка)
Не следва никакъв ред за вмъкване. Не се допускат дубликати.
б) Свързан хеш набор:
- Подредената версия на хеш набора е известна като Linked Hash Set.
- Поддържа двойно свързан списък на всички елементи.
- Използвайте това, когато е необходима итерационна поръчка.
Пример:
public class Fruit { public static void main (String( ) args){ LinkedHashSet; names = new LinkedHashSet ( ) ; names.add(“banana”); names.add(“cherry”); names.add(“apple”); names.add(“kiwi”); names.add(“banana”); System.out.println (names); } }
Изход:
(банан, череша, ябълка, киви)
Той поддържа реда на вмъкване, в който са добавени към комплекта. Не се допускат дубликати.
в) Комплект дърво:
- Това е една от двете сортирани колекции.
- Използва дървовидната структура „Четене-Черно“ и гарантира, че елементите ще бъдат във възходящ ред.
- Можем да конструираме дървесен набор с конструктора, като използваме сравним (или) компаратор.
Пример:
public class Fruits{ public static void main (String( )args) { Treeset names= new TreeSet( ) ; names.add(“cherry”); names.add(“banana”); names.add(“apple”); names.add(“kiwi”); names.add(“cherry”); System.out.println(names); } }
Изход:
(ябълка, банан, череша, киви)
TreeSet сортира елементите във възходящ ред. И дубликати не са позволени.
Въпрос # 29) Обяснете за Картата и нейните типове.
Отговор: Карта грижи се за уникалния идентификатор. Можем да съпоставим уникален ключ с определена стойност. Това е двойка ключ / стойност. Можем да търсим стойност въз основа на ключа. Подобно на комплекта, картата също използва метода “equals ()”, за да определи дали два ключа са еднакви или различни.
Картата е от следните типове:
а) Хеш карта:
- Неподредена и несортирана карта.
- Hashmap е добър избор, когато не ни интересува поръчката.
- Той позволява един нулев ключ и множество нулеви стойности.
Пример:
Public class Fruit{ Public static void main(String( ) args){ HashMap names =new HashMap( ); names.put(“key1”,“cherry”); names.put (“key2”,“banana”); names.put (“key3”,“apple”); names.put (“key4”,“kiwi”); names.put (“key1”,“cherry”); System.out.println(names); } }
Изход:
{key2 = банан, key1 = череша, key4 = киви, key3 = ябълка}
В Map не се допускат дублиращи се ключове.
Той не поддържа никакъв ред за вмъкване и е несортиран.
б) Хеш таблица:
- Подобно на векторния ключ, методите на класа се синхронизират.
- Безопасността на резбата и следователно забавя работата.
- Не позволява нищо, което е нищожно.
Пример:
public class Fruit{ public static void main(String( )args){ Hashtable names =new Hashtable( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Изход:
{key2 = ябълка, key1 = череша, key4 = киви, key3 = банан}
Не се допускат дублиращи се ключове.
° С) Свързана хеш карта:
- Поддържа реда за вмъкване.
- По-бавно от Hash картата.
- Мога да очаквам по-бърза итерация.
Пример:
кое е най-доброто приложение за виртуална реалност
public class Fruit{ public static void main(String( ) args){ LinkedHashMap names =new LinkedHashMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“apple”); names.put(“key3”,“banana”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Изход:
{key2 = ябълка, key1 = череша, key4 = киви, key3 = банан}
Не се допускат дублиращи се ключове.
г) TreeMap:
- Сортирана карта.
- Подобно на набор от дървета, ние можем да конструираме ред на сортиране с конструктора.
Пример:
public class Fruit{ public static void main(String( )args){ TreeMap names =new TreeMap( ); names.put(“key1”,“cherry”); names.put(“key2”,“banana”); names.put(“key3”,“apple”); names.put(“key4”,“kiwi”); names.put(“key2”,“orange”); System.out.println(names); } }
Изход:
{key1 = череша, key2 = банан, key3 = ябълка, key4 = киви}
Сортира се във възходящ ред въз основа на ключа. Не се допускат дублиращи се ключове.
В # 30) Обяснете приоритетната опашка.
Отговор: Интерфейс на опашката
Приоритетна опашка: Класът на свързания списък е подобрен за внедряване на интерфейса на опашката. Опашките могат да се обработват със свързан списък. Целта на опашката е „Приоритет-в, Приоритет-изход“.
Следователно елементите са подредени или естествено, или според сравнителния. Подреждането на елементите представлява техния относителен приоритет.
В # 31) Какво се разбира под изключение?
Отговор: Изключение е проблем, който може да възникне по време на нормалния поток на изпълнение. Методът може да създаде изключение, когато нещо вика по време на изпълнение. Ако това изключение не може да бъде обработено, изпълнението се прекратява, преди да изпълни задачата.
Ако се справихме с изключението, нормалният поток продължава. Изключения са подклас на java.lang.Exception.
Пример за работа с изключение:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
В # 32) Какви са видовете изключения?
Отговор: Има два вида изключения. Те са обяснени подробно по-долу.
а) Проверено изключение:
Тези изключения се проверяват от компилатора по време на компилацията. Класовете, които разширяват клас Throwable с изключение по време на изпълнение и грешка, се наричат проверено изключение.
Проверените изключения трябва или да декларират изключението, използвайки ключова дума throws (или), заобиколено от подходящ опит / улов.
Например, ClassNotFound изключение
б) Непроверено изключение:
Тези изключения не се проверяват по време на компилацията от компилатора. Компилаторът не принуждава да се справи с тези изключения. Включва:
- Аритметично изключение
- Изключение ArrayIndexOutOfBounds
В # 33) Какви са различните начини за обработка на изключенията?
Отговор: По-долу са обяснени два различни начина за справяне с изключенията:
а) Използване на опит / улов:
Рисковият код е заобиколен от блок за опити. Ако възникне изключение, то се улавя от блока catch, последван от блока try.
Пример:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
б) Чрез деклариране на хвърля ключова дума:
В края на метода можем да декларираме изключението с помощта на ключова дума throws.
Пример:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
В # 34) Какви са предимствата на обработката на изключения?
Отговор: Предимствата са както следва:
- Нормалният поток на изпълнението няма да бъде прекратен, ако бъде обработено изключение
- Можем да идентифицираме проблема, като използваме декларация за улов
В # 35) Какви са ключовите думи за обработка на изключения в Java?
Отговор: По-долу са изброени двете ключови думи за обработка на изключения:
опит:
Когато рисков код е заобиколен от блок за опити. Изключение, възникващо в блока try, се улавя от блок catch. Опитът може да бъде последван или от catch (или) накрая (или) и двете. Но всеки един от блоковете е задължителен.
б) улов:
Това е последвано от блок за опити. Тук се улавят изключения.
в) накрая:
Това е последвано от try block (или) catch block. Този блок се изпълнява независимо от изключение. Така че тук обикновено са предоставени кодове за почистване.
Въпрос # 36) Обяснете за разпространението на изключения.
Отговор: Изключение първо се изхвърля от метода, който е в горната част на стека. Ако не хване, тогава той изскача метода и се придвижва към предишния метод и така, докато те се получат.
Това се нарича разпространение на изключение.
Пример:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
От горния пример стекът изглежда така, както е показано по-долу:
Ако възникне изключение в добавяне () метод не е уловен, след това се придвижва към метода добавяне () . След това се премества в главен () метод и след това ще спре потока на изпълнение. Нарича се Разпространение на изключения.
В # 37) Каква е последната ключова дума в Java?
Отговор:
Край на променлива: След като променлива е декларирана като окончателна, тогава стойността на променливата не може да бъде променена. Това е като константа.
Пример:
окончателен int = 12;
Краен метод: Крайна ключова дума в метод не може да бъде заменена. Ако методът е маркиран като окончателен, тогава той не може да бъде заменен от подкласа.
Финален клас: Ако клас е деклариран като окончателен, тогава класът не може да бъде подкласиран. Никой клас не може да удължи крайния клас.
В # 38) Какво е нишка?
Отговор: В Java потокът на изпълнение се нарича Thread. Всяка java програма има поне една нишка, наречена основна нишка, основната нишка се създава от JVM. Потребителят може да дефинира свои собствени нишки чрез разширяване на класа Thread (или) чрез внедряване на Runnable интерфейс. Нишките се изпълняват едновременно.
Пример:
public static void main(String() args){//main thread starts here }
В # 39) Как се прави нишка в Java?
Отговор: Има два начина, по които можете да направите нишка.
а) Разширяване на нишката клас: Разширяване на клас Thread и замяна на метода run. Нишката е достъпна в java.lang.thread.
Пример:
Public class Addition extends Thread { public void run () { } }
Недостатъкът на използването на клас на нишка е, че не можем да разширяваме други класове, защото вече сме разширили класа на нишките. Можем да претоварим метода run () в нашия клас.
б) Внедряване на изпълним интерфейс: Друг начин е чрез внедряване на управляем интерфейс. За това трябва да осигурим изпълнението на метода run (), който е дефиниран в интерфейса.
Пример:
Public class Addition implements Runnable { public void run () { } }
Въпрос # 40) Обяснете за метода join ().
Отговор: Методът Join () се използва за присъединяване на една нишка с края на текущата текуща нишка.
Пример:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
Въз основа на горния код основната нишка е стартирала изпълнението. Когато стигне до кода t.start () след това ‘thread t’ стартира собствен стек за изпълнение. JVM превключва между основната нишка и „нишката t“.
След като достигне кода t.join () след това се изпълнява само ‘thread t’ и изпълнява задачата си, след което само основната нишка започва изпълнението.
Това е нестатичен метод. Методът Join () има претоварена версия. Така че можем да споменем продължителността на времето в метода join () също “.s”.
Q # 41) Какво прави методът yield на класа Thread?
Отговор: Метод yield () премества текущата текуща нишка в състояние за изпълнение и позволява на останалите нишки за изпълнение. Така че нишките с еднакъв приоритет имат шанс да стартират. Това е статичен метод. Не освобождава заключване.
Методът Yield () премества нишката обратно само в състояние Runnable, а не нишката в спящ (), изчакайте () (или) блок.
Пример:
public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ Thread.yield(); } }
Q # 42) Обяснете за метода wait ().
Отговор: изчакайте () метод се използва, за да накара нишката да изчака в чакащия пул. Когато методът wait () се изпълни по време на изпълнение на нишка, веднага нишката се отказва от заключването на обекта и отива в чакащия пул. Методът Wait () казва на нишката да изчака даден период от време.
Тогава нишката ще се събуди, след като бъде извикан методът notify () (или) notify all ().
Изчакайте () и другите гореспоменати методи не дават заключване на обекта веднага, докато изпълняваната в момента нишка не завърши синхронизирания код. Използва се най-вече при синхронизация.
Пример:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
В # 43) Разлика между метода notify () и метода notifyAll () в Java.
Отговор: Разликите между метода notify () и метода notifyAll () са изброени по-долу:
уведоми () | notifyAll () |
---|---|
Този метод се използва за изпращане на сигнал за събуждане на една нишка в чакащия пул. | Този метод изпраща сигнала за събуждане на всички нишки в чакаща макара. |
В # 44) Как да спрете нишка в java? Обяснете за метода на sleep () в нишка?
Отговор: Можем да спрем нишка, като използваме следните методи на нишка:
- Спи
- Очакване
- Блокиран
Сън: Методът Sleep () се използва за заспиване на текущата изпълняваща се нишка за даденото време. След като нишката се събуди, тя може да премине в състояние за изпълнение. Така че методът sleep () се използва за забавяне на изпълнението за определен период.
Това е статичен метод.
Пример:
Тема. Сън (2000)
Така че забавя нишката да заспи 2 милисекунди. Методът Sleep () хвърля непрекъснато изключение, поради което трябва да обградим блока с try / catch.
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ try{ Thread.sleep(2000); }catch(InterruptedException e){ } }
В # 45) Кога да използвам Runnable interface Vs Thread class в Java?
Отговор: Ако се нуждаем от нашия клас, за да разширим други класове, различни от нишката, тогава можем да използваме интерфейса, който може да се изпълнява, защото в java можем да разширим само един клас.
Ако няма да разширяваме който и да е клас, тогава можем да разширим класа на нишката.
Въпрос # 46) Разлика между метода start () и run () на клас нишка.
Отговор: Методът Start () създава нова нишка и кодът в метода run () се изпълнява в новата нишка. Ако директно извикаме метода run (), тогава не се създава нова нишка и изпълняваната в момента нишка ще продължи да изпълнява метода run ().
Въпрос # 47) Какво е многопоточност?
Отговор: Няколко нишки се изпълняват едновременно. Всяка нишка стартира свой собствен стек въз основа на приоритета на потока (или) на нишките.
Примерна програма:
public class MultipleThreads implements Runnable { public static void main (String() args){//Main thread starts here Runnable r = new runnable (); Thread t=new thread (); t.start ();//User thread starts here Addition add=new addition (); } public void run(){ go(); }//User thread ends here }
При изпълнението на 1-ви ред JVM извиква основния метод и стекът на основната нишка изглежда както е показано по-долу.
След като изпълнението достигне, t.start () линия, тогава се създава нова нишка и също се създава новият стек за нишката. Сега JVM превключва към новата нишка и основната нишка се връща в състояние за изпълнение.
Двата стека изглеждат, както е показано по-долу.
Сега потребителската нишка изпълни кода в метода run ().
След като методът run () приключи, JVM превключва обратно към основната нишка и потребителската нишка е изпълнила задачата и стекът е изчезнал.
JVM превключва между всяка нишка, докато и двете нишки са завършени. Това се нарича многопоточност.
Q # 48) Обяснете жизнения цикъл на нишката в Java.
Отговор: Темата има следните състояния:
- Ново
- Изпълним
- Бягане
- Не се управлява (блокиран)
- Прекратено
- Ново: В ново състояние е създаден екземпляр на нишка, но методът start () все още не е извикан. Сега нишката не се счита за жива.
- Изпълним : Нишката е в състояние за изпълнение след извикване на метода start (), но преди извикването на метода run (). Но нишката може също да се върне в състояние за изпълнение от чакане / сън. В това състояние нишката се счита за жива.
- Бягане : Нишката е в работещо състояние, след като извика метода run (). Сега нишката започва изпълнението.
- Не се изпълнява (Блокиран): Нишката е жива, но не отговаря на условията за стартиране. Той не е в състояние за работа, но също така ще се върне в състояние за работа след известно време. Пример: чакайте, спите, блокирайте.
- Прекратено : След като методът на изпълнение е завършен, той се прекратява. Сега нишката не е жива.
В # 49) Какво е синхронизация?
Отговор: Синхронизацията прави само една нишка за достъп до блок от код наведнъж. Ако множество нишки имат достъп до блока с код, тогава има вероятност за неточни резултати в края. За да избегнем този проблем, можем да осигурим синхронизация за чувствителния блок кодове.
Синхронизираната ключова дума означава, че нишката се нуждае от ключ, за да има достъп до синхронизирания код.
Бравите са за обекти. Всеки обект на Java има заключване. Ключалката има само един ключ. Нишката може да получи достъп до синхронизиран метод само ако нишката може да получи ключа към обектите, които да се заключат.
За целта използваме ключовата дума „Синхронизирано“.
Пример:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
В # 50) Какъв е недостатъкът на синхронизацията?
Години: Не се препоръчва синхронизиране за прилагане на всички методи. Защото, ако една нишка има достъп до синхронизирания код, следващата нишка трябва да изчака. Така че това прави бавно представяне от другата страна.
В # 51) Какво се разбира под сериализация?
Отговор: Преобразуването на файл в байтов поток е известно като сериализация. Обектите във файла се преобразуват в байтове за целите на сигурността. За това трябва да внедрим интерфейс java.io.Serializable. Той няма метод за дефиниране.
Променливите, които са маркирани като преходни, няма да бъдат част от сериализацията. Така че можем да пропуснем сериализацията на променливите във файла, като използваме преходна ключова дума.
Научете повече = >> Сериализуем и клонируем
В # 52) Каква е целта на преходна променлива?
Отговор: Преходните променливи не са част от процеса на сериализация. По време на десериализацията стойностите на преходните променливи се задават на стойността по подразбиране. Не се използва със статични променливи.
Пример:
преходни int числа;
В # 53) Кои методи се използват по време на процеса на сериализация и десериализация?
Отговор: Класовете ObjectOutputStream и ObjectInputStream са по-високо ниво java.io. пакет. Ще ги използваме с класове от по-ниско ниво FileOutputStream и FileInputStream.
ObjectOutputStream.writeObject —-> Сериализирайте обекта и запишете сериализирания обект във файл.
ObjectInputStream.readObject -> Чете файла и десериализира обекта.
За да бъде сериализиран, обектът трябва да приложи сериализуем интерфейс. Ако суперкласът изпълнява Serializable, тогава подкласът автоматично ще може да се сериализира.
В # 54) Каква е целта на летливата променлива?
Отговор: Променливите стойности на променливите винаги се четат от основната памет, а не от кеш паметта на нишката. Това се използва главно по време на синхронизация. Приложим е само за променливи.
Пример:
променлив int номер;
В # 55) Разлика между сериализацията и десериализацията в Java.
Отговор: Това са разликите между сериализацията и десериализацията в java:
Сериализация | Десериализация |
---|---|
Сериализацията е процес, който се използва за преобразуване на обектите в байтов поток | Десериализацията е обратният процес на сериализация, при който можем да върнем обектите от байтовия поток. |
Обектът е сериализиран, като му се напише ObjectOutputStream. | Обектът се десериализира, като се чете от ObjectInputStream. |
В # 56) Какво е SerialVersionUID?
Отговор: Всеки път, когато даден обект е сериализиран, обектът се подпечатва с идентификационен номер на версията за обектния клас. Този идентификатор се нарича SerialVersionUID. Това се използва по време на десериализация, за да се провери дали подателят и получателят са съвместими със сериализацията.
Заключение
Това са някои от основните въпроси за интервюта за JAVA, които обхващат както основните, така и усъвършенстваните Java концепции за програмиране, както и интервюто за разработчици, и това са отговори от нашите експерти по JAVA.
Надявам се, че този урок ще ви даде подробна представа за основните концепции за кодиране на JAVA в детайли. Обясненията, дадени по-горе, наистина ще обогатят вашите знания и ще увеличат вашето разбиране за програмирането на JAVA.
Пригответе се за разбиване на интервю за JAVA уверено.