top 50 core java interview questions
Найпоширеніші запитання та відповіді на інтерв’ю Java із прикладами:
У цьому підручнику ми розглянули майже 50+ важливих основних питань інтерв’ю на Java для більш свіжих та досвідчених кандидатів.
Цей допис на запитаннях інтерв’ю JAVA підготовлений, щоб допомогти вам зрозуміти основні поняття програмування на Java для цілей інтерв’ю. Усі важливі концепції JAVA пояснюються тут із прикладами для Вашого легкого розуміння.
Цей підручник охоплює такі теми JAVA, як основні визначення Java, концепції ООП, специфікатори доступу, колекції, винятки, нитки, серіалізація тощо, з прикладами, які дозволять вам ідеально підготуватися впевнено зіткнутися з будь-яким інтерв’ю JAVA.
Найпопулярніші запитання та відповіді на інтерв’ю Java
Нижче наведено вичерпний перелік найважливіших та найпоширеніших базових та вдосконалених запитань на інтерв’ю для програмування на Java із детальними відповідями.
Q # 1) Що таке JAVA?
Відповідь: Java є мовою програмування високого рівня і не залежить від платформи.
Java - це сукупність об'єктів. Він був розроблений Sun Microsystems. Існує багато програм, веб-сайтів та ігор, розроблених за допомогою Java.
Q # 2) Які особливості JAVA?
Відповідь: Особливості Java такі:
- Концепції ООП
- Об’єктно-орієнтований
- Спадщина
- Капсуляція
- Поліморфізм
- Абстракція
- Незалежна від платформи: Одна програма працює на різних платформах без будь-яких змін.
- Висока ефективність: JIT (Just In Time compiler) забезпечує високу продуктивність у Java. JIT перетворює байт-код у машинну мову, а потім JVM починає виконання.
- Багатопотокові: Потік виконання відомий як Thread. JVM створює потік, який називається основним потоком. Користувач може створити кілька потоків, розширивши клас потоків або реалізувавши інтерфейс Runnable.
Запитання №3) Як Java забезпечує високу продуктивність?
Відповідь: Java використовує компілятор Just In Time, щоб забезпечити високу продуктивність. Він використовується для перетворення інструкцій у байт-коди.
Q # 4) Назвіть Java IDE?
Відповідь: Eclipse та NetBeans - це середовище розробки середовища JAVA.
Q # 5) Що ви маєте на увазі під конструктором?
Відповідь: Конструктор можна детально пояснити перерахованими пунктами:
- Коли в програмі створюється новий об'єкт, конструктор отримує виклик, що відповідає класу.
- Конструктор - це метод, який має те саме ім'я, що і ім'я класу.
- Якщо користувач не створює конструктор неявно, буде створений конструктор за замовчуванням.
- Конструктор може бути перевантажений.
- Якщо користувач створив конструктор з параметром, то він повинен створити інший конструктор явно без параметра.
Q # 6) Що мається на увазі під змінною Local та змінною Instance?
Відповідь:
Локальні змінні визначаються методом та обсягом змінних, що існують усередині самого методу.
Змінна екземпляра визначається всередині класу та поза методом, а область змінних існує у всьому класі.
Q # 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; } }
Q # 8) Що таке Об'єкт?
Відповідь: Екземпляр класу називається об’єктом. Об'єкт має стан і поведінку.
Щоразу, коли JVM читає ключове слово “new ()”, він створює екземпляр цього класу.
Приклад:
public class Addition{ public static void main(String() args){ Addion add = new Addition();//Object creation } }
Наведений вище код створює об’єкт для класу Addition.
Q # 9) Що таке концепції ООП?
Відповідь: Поняття ООП включають:
- Спадщина
- Капсуляція
- Поліморфізм
- Абстракція
- Інтерфейс
Пропоноване читання = >> Найпопулярніші запитання щодо інтерв’ю щодо ООП
Q # 10) Що таке успадкування?
Відповідь: Спадщина означає, що один клас може поширюватися на інший клас. Так що коди можуть бути використані повторно з одного класу в інший клас. Існуючий клас відомий як клас Super, тоді як похідний клас відомий як підклас.
Приклад:
Super class: public class Manupulation(){ } Sub class: public class Addition extends Manipulation(){ }
Спадщина застосовується лише до громадськості та захищених членів. Приватні члени не можуть передаватися у спадок.
Q # 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 }
У наведеному нижче коді показано геттер та сеттер.
Під час встановлення змінної можна надати умови.
get A(){ } set A(int a){ if(a>0){// Here condition is applied ......... } }
Для інкапсуляції нам потрібно зробити усі змінні екземпляра приватними та створити сеттер та геттер для цих змінних. Що, у свою чергу, змусить інших зателефонувати сетерам, а не отримувати безпосередній доступ до даних.
Q # 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 ()”. Ця здатність відома як поліморфізм. Поліморфізм застосовний для перевизначення а не для перевантаження .
Q # 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 і відомий як метод Overriding.
Q # 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 перевантажується в тому ж класі, що і у супер-класі.
Примітка: Поліморфізм не застосовується для перевантаження методів.
Q # 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(){ ……………. } }
Q # 16) Що мається на увазі під абстрактним класом?
Відповідь: Ми можемо створити клас Abstract, використовуючи ключове слово “Abstract” перед назвою класу. Абстрактний клас може мати як “абстрактні” методи, так і “не абстрактні” методи, які є конкретним класом.
Абстрактний метод:
Метод, який має лише декларацію, а не реалізацію, називається абстрактним методом, і він має ключове слово 'абстрактний'. Декларації закінчуються крапкою з комою.
Приклад:
public abstract class Manupulation{ public abstract void add();//Abstract method declaration Public void subtract(){ } }
- Абстрактний клас може також мати не абстрактний метод.
- Конкретний підклас, який розширює клас Abstract, повинен забезпечувати реалізацію абстрактних методів.
Q # 17) Різниця між масивом та списком масивів.
Відповідь: Різницю між масивом та списком масивів можна зрозуміти з таблиці нижче:
Масив | Список масивів |
---|---|
Розмір слід вказувати під час оголошення масиву. Рядок () ім'я = новий Рядок (2) | Розмір може не знадобитися. Він динамічно змінює розмір. ArrayList name = новий ArrayList |
Щоб додати об'єкт до масиву, нам потрібно вказати індекс. назва (1) = “книга” | Індекс не потрібен. name.add (“книга”) |
Масив не параметризований за типом | Параметри ArrayList у Java 5.0. Наприклад: Ця кутова дужка є параметром типу, що означає список рядків. |
Q # 18) Різниця між String, String Builder та String Buffer.
Відповідь:
Рядок: Рядкові змінні зберігаються у “постійному пулі рядків”. Як тільки посилання на рядок змінює старе значення, яке існує в “постійному пулі рядків”, воно не може бути стерто.
Приклад:
Ім'я рядка = “книга”;
Пул постійних рядків
.
Якщо ім’я-значення змінилося з “book” на “pen”.
Пул постійних рядків
Тоді старше значення залишається у постійному пулі рядків.
Рядковий буфер:
- Тут значення рядків зберігаються у стеку. Якщо значення змінено, то нове значення замінює старіше.
- Рядок буфер синхронізований, що є потокобезпечним.
- Продуктивність повільніша, ніж String Builder.
Приклад:
Ім’я буфера рядків = ”book”;
Після того, як значення імені було змінено на «ручка», «книга» стирається в стосі.
Струнний конструктор:
Це те саме, що String Buffer, за винятком String Builder, який не є безпечно потоковим і не синхронізованим. Тож, очевидно, продуктивність швидка.
Q # 19) Поясніть про публічні та приватні специфікатори доступу.
Відповідь: Методи та змінні екземпляра відомі як члени.
Публічний:
Громадські учасники видно в тому самому пакеті, як і зовнішній пакет, який призначений для інших пакетів.
Загальнодоступні члени класу A видимі для класу B (той самий пакет), а також класу C (різні пакети).
Приватна:
Приватні члени видно лише в тому самому класі, а не для інших класів у тому самому пакеті, а також класів у зовнішніх пакетах.
Приватні учасники класу A видно лише в цьому класі. Він невидимий для класу B, а також класу C.
Q # 20) Різниця між специфікаторами доступу та захищеним доступом.
Відповідь:
За замовчуванням: Методи та змінні, оголошені в класі без будь-яких специфікаторів доступу, називаються типовими.
Члени за замовчуванням у класі A видимі для інших класів, що знаходяться всередині пакету, і невидимі для класів, які знаходяться поза пакетом.
Отже, члени класу A видимі для класу B, а невидимі для класу C.
Захищений:
.
Захищений - це те саме, що і за замовчуванням, але якщо клас розширюється, він видно, навіть якщо він знаходиться поза пакетом.
Члени класу A видимі для класу B, оскільки він знаходиться всередині пакета. Для класу C він невидимий, але якщо клас C поширює клас A, тоді члени видно для класу C, навіть якщо він знаходиться поза пакетом.
Q # 21) Різниця між HashMap та HashTable.
Відповідь: Різницю між HashMap та HashTable можна побачити нижче:
HashMap | HashTable |
---|---|
Методи не синхронізовані | Ключові методи синхронізовані |
Не безпека ниток | Безпека ниток |
Ітератор використовується для ітерації значень | Перераховувач використовується для ітерації значень |
Дозволяє один нульовий ключ і кілька нульових значень | Не допускає нічого, що має значення null |
Продуктивність висока, ніж HashTable | Продуктивність повільна |
Q # 22) Різниця між HashSet та TreeSet.
Відповідь: Різницю між HashSet та TreeSet можна побачити нижче:
HashSet | TreeSet |
---|---|
Вставлені елементи розташовані в довільному порядку | Веде елементи у відсортованому порядку |
Може зберігати нульові об'єкти | Не вдалося зберегти нульові об’єкти |
Продуктивність швидка | Продуктивність повільна |
Q # 23) Різниця між абстрактним класом та інтерфейсом.
Відповідь: Різниця між абстрактним класом та інтерфейсом полягає в наступному:
Анотація Клас:
- Абстрактні класи мають конструктор за замовчуванням, і він викликається щоразу, коли створюється конкретний підклас.
- Він містить абстрактні методи, а також не абстрактні методи.
- Клас, який розширює клас Abstract, не повинен вимагати реалізації всіх методів, лише абстрактні методи повинні бути реалізовані в конкретному підкласі.
- Абстрактний клас містить змінні екземпляра.
Інтерфейс:
- Він не має жодного конструктора, і його неможливо створити.
- Слід оголосити лише абстрактний метод.
- Класи, що реалізують інтерфейс, повинні забезпечувати реалізацію для всіх методів.
- Інтерфейс містить лише константи.
Питання # 24) Що означає колекції в Java?
Відповідь: Колекція - це фреймворк, призначений для зберігання об’єктів та маніпулювання дизайном для зберігання об’єктів.
Колекції використовуються для виконання таких операцій:
- Пошук
- Сортування
- Маніпуляція
- Вставка
- Видалення
Група об'єктів відома як колекції. Усі класи та інтерфейси для збору доступні у пакунку Java util.
Q # 25) Які всі класи та інтерфейси доступні у колекціях?
Відповідь: Нижче наведено класи та інтерфейси, доступні у колекціях:
Інтерфейси:
- Колекція
- Список
- Встановити
- Карта
- Сортований набір
- Відсортована карта
- Черга
Класи:
- Списки:
- Список масивів
- Вектор
- Зв’язаний список
Набори:
- Хеш-набір
- Пов’язаний хеш-набір
- Дерево набір
Карти:
- Хеш-карта
- Хеш-таблиця
- TreeMap
- Зв’язана хеш-карта
Черга:
- Черга пріоритетів
Q # 26) Що мається на увазі під упорядкованими та відсортованими у колекціях?
Відповідь:
Замовлено: Це означає, що значення, що зберігаються в колекції, базуються на значеннях, які додаються до колекції. Тож ми можемо повторити значення з колекції в певному порядку.
Відсортовано: Механізми сортування можуть бути застосовані всередині або зовні, щоб група об'єктів, відсортованих у певній колекції, базувалася на властивостях об'єктів.
Q # 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 підтримує порядок вставки та приймає дублікати. Але це не відсортовано.
б) Вектор:
Це те саме, що і список масивів.
- Векторні методи синхронізовані.
- Безпека ниток.
- Він також реалізує 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) Поясніть про набір та їх типи в колекції.
Відповідь: Набір піклується про унікальність. Це не дозволяє дублювати. Тут метод “дорівнює ()” використовується для визначення того, ідентичні два об'єкти чи ні.
а) Хеш-набір:
- Невпорядковані та несортовані.
- Використовує хеш-код об’єкта для вставки значень.
- Використовуйте це, коли вимогою є 'відсутність дублікатів і не дбаєте про замовлення'.
Приклад:
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); } }
Вихід:
приклад сортування міхурів c ++
(банан, вишня, ківі, яблуко)
Він не відповідає жодному порядку вставки. Дублікати заборонені.
b) Пов’язаний хеш-набір:
- Впорядкована версія хеш-набору відома як 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); } }
Вихід:
(банан, вишня, яблуко, ківі)
Він підтримує порядок вставки, в якому вони були додані до набору. Дублікати заборонені.
в) Дерево:
- Це одна з двох відсортованих колекцій.
- Використовує деревоподібну структуру 'Read-Black' і гарантує, що елементи будуть у порядку зростання.
- Ми можемо побудувати набір дерев за допомогою конструктора, використовуючи порівнянний (або) компаратор.
Приклад:
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 сортує елементи за зростанням. І дублікати заборонені.
Q # 29) Поясніть про карту та її типи.
Відповідь: Карта дбає про унікальний ідентифікатор. Ми можемо зіставити унікальний ключ із певним значенням. Це пара ключ / значення. Ми можемо шукати значення на основі ключа. Як і набір, карта також використовує метод “дорівнює ()”, щоб визначити, однакові чи різні два ключі.
Карта буває наступних типів:
а) Хеш-карта:
- Невпорядкована та невідсортована карта.
- Хеш-карта - це хороший вибір, коли нас не хвилює порядок.
- Це дозволяє один нульовий ключ і кілька нульових значень.
Приклад:
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 = банан}
Повторювані ключі заборонені.
в) Карта зв’язаного хешу:
- Зберігає порядок вставки.
- Повільніше за хеш-карту.
- Я можу очікувати більш швидкої ітерації.
Приклад:
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 = банан}
Повторювані ключі заборонені.
d) Карта дерева:
- Відсортована карта.
- Як і набір Tree, ми можемо побудувати порядок сортування за допомогою конструктора.
Приклад:
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 = ківі}
Він сортується у порядку зростання за ключем. Повторювані ключі заборонені.
Q # 30) Поясніть чергу пріоритетів.
Відповідь: Інтерфейс черги
Черга пріоритетів: Клас пов’язаного списку був вдосконалений для реалізації інтерфейсу черги. Черги можна обробляти за допомогою пов’язаного списку. Призначення черги - «Пріоритет - вхід, Пріоритет - вихід».
Отже, елементи впорядковані або природним шляхом, або згідно з компаратором. Впорядкування елементів представляє їх відносний пріоритет.
Q # 31) Що мається на увазі під винятком?
Відповідь: Винятком є проблема, яка може виникнути під час звичайного потоку виконання. Метод може створити виняток, коли щось заграє під час виконання. Якщо з цим винятком не вдалося обробити, виконання виконується до завершення завдання.
Якщо ми обробили виняток, то нормальний потік продовжується. Виняток становить підклас java.lang.Exception.
Приклад обробки винятків:
try{ //Risky codes are surrounded by this block }catch(Exception e){ //Exceptions are caught in catch block }
Q # 32) Які існують типи винятків?
Відповідь: Існує два типи винятків. Вони детально пояснюються нижче.
а) Позначений виняток:
Ці винятки перевіряє компілятор під час компіляції. Класи, що розширюють клас Throwable, крім винятків виконання та помилок, називаються перевіреними винятками.
Перевірені винятки повинні або оголосити виняток за допомогою ключового слова throws (або), оточеного відповідною функцією try / catch.
Наприклад, Виняток ClassNotFound
b) Невизначений виняток:
Ці винятки не перевіряються компілятором під час компіляції. Компілятор не змушує обробляти ці винятки. Це включає:
- Арифметичне виняток
- Виняток ArrayIndexOutOfBounds
Q # 33) Які різні способи обробки винятків?
Відповідь: Нижче описано два різні способи обробки винятків:
а) Використовуючи функцію try / catch:
Ризиковий код оточений блоком try. Якщо трапляється виняток, тоді його ловить блок catch, за яким слідує блок try.
Приклад:
class Manipulation{ public static void main(String() args){ add(); } Public void add(){ try{ addition(); }catch(Exception e){ e.printStacktrace(); } } }
б) Оголосивши ключове слово throws:
В кінці методу ми можемо оголосити виняток за допомогою ключового слова throws.
Приклад:
class Manipulation{ public static void main(String() args){ add(); } public void add() throws Exception{ addition(); } }
Q # 34) Які переваги обробки винятків?
Відповідь: Переваги такі:
- Звичайний потік виконання не буде припинено, якщо буде оброблено виняток
- Ми можемо виявити проблему, використовуючи декларацію catch
Q # 35) Які ключові слова обробляють винятки в Java?
Відповідь: Нижче перелічено два ключові слова, які обробляють винятки:
а) спробуйте:
Коли ризикований код оточений блоком try. Виняток, що виникає в блоці try, перехоплюється блоком catch. Спробу може супроводжувати або catch (або) нарешті (або) обидва. Але будь-який із блоків є обов’язковим.
б) зловити:
Далі слід блок спроби. Тут трапляються винятки.
в) нарешті:
Далі слідує або блок блоку (або) catch. Цей блок виконується незалежно від винятку. Тож загалом тут наводяться коди очищення.
Q # 36) Поясніть про поширення винятків.
Відповідь: Виняток спочатку створюється методом, який знаходиться у верхній частині стека. Якщо він не вловлює, тоді він вискакує метод і переходить до попереднього методу і так далі, поки вони не отримані.
Це називається поширенням винятків.
Приклад:
public class Manipulation{ public static void main(String() args){ add(); } public void add(){ addition(); }
З наведеного вище прикладу стек виглядає так, як показано нижче:
Якщо у файлі додавання () метод не ловиться, тоді він переходить до методу add () . Потім він переміщується в основний () метод, а потім зупинить потік виконання. Це називається поширенням винятків.
Q # 37) Яке останнє ключове слово в Java?
Відповідь:
Закінчення змінної: Як тільки змінна оголошена остаточною, значення змінної змінити не можна. Це як константа.
Приклад:
кінцевий int = 12;
Остаточний метод: Кінцеве ключове слово у методі неможливо замінити. Якщо метод позначений як остаточний, тоді його не можна замінити підкласом.
Підсумковий клас: Якщо клас оголошено остаточним, клас не можна перекладати. Жоден клас не може продовжити остаточний клас.
Q # 38) Що таке нитка?
Відповідь: На Java потік виконання називається Thread. Кожна програма Java має принаймні один потік, який називається основним, основний потік створюється JVM. Користувач може визначити власні потоки, розширивши клас Thread (або), реалізувавши інтерфейс Runnable. Потоки виконуються одночасно.
Приклад:
public static void main(String() args){//main thread starts here }
Q # 39) Як створити ланцюжок на Java?
Відповідь: Є два способи зробити нитку.
а) Клас Extend Thread: Розширення класу Thread та перевизначення методу run. Потік доступний у java.lang.thread.
Приклад:
Public class Addition extends Thread { public void run () { } }
Недоліком використання потокового класу є те, що ми не можемо розширити будь-які інші класи, оскільки ми вже розширили клас ниток. Ми можемо перевантажити метод run () у нашому класі.
b) Реалізувати запущений інтерфейс: Інший спосіб - реалізація запущеного інтерфейсу. Для цього ми повинні надати реалізацію методу run (), який визначений в інтерфейсі.
Приклад:
Public class Addition implements Runnable { public void run () { } }
Q # 40) Поясніть про метод join ().
Відповідь: Метод Join () використовується для приєднання одного потоку до кінця поточного потоку.
Приклад:
public static void main (String() args){ Thread t = new Thread (); t.start (); t.join (); }
Виходячи з наведеного вище коду, основний потік розпочав виконання. Коли він доходить до коду t.start () тоді «потік 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 ().
Wait () та інші вищезазначені методи не дають блокування об’єкту відразу, поки поточний файл, що виконується, не завершить синхронізований код. Він в основному використовується для синхронізації.
Приклад:
public static void main (String() args){ Thread t = new Thread (); t.start (); Synchronized (t) { Wait(); } }
Q # 43) Різниця між методом notify () та методом notifyAll () у Java.
Відповідь: Різниця між методом notify () та методом notifyAll () наведена нижче:
сповістити () | notifyAll () |
---|---|
Цей метод використовується для передачі сигналу пробудження єдиного потоку в пулі очікування. | Цей метод посилає сигнал для пробудження всіх потоків в очікувальній котушці. |
Q # 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){ } }
Q # 45) Коли в Java використовувати інтерфейс Runnable Vs Thread?
Відповідь: Якщо нам потрібен наш клас для розширення деяких інших класів, крім потоку, ми можемо перейти до запущеного інтерфейсу, оскільки в Java ми можемо розширити лише один клас.
Якщо ми не збираємося розширювати будь-який клас, тоді ми можемо розширити клас потоку.
Q # 46) Різниця між методом start () та run () класу потоку.
Відповідь: Метод Start () створює новий потік, а код всередині методу run () виконується в новому потоці. Якщо ми безпосередньо викликали метод run (), тоді новий потік не створюється, і поточний виконаний потік продовжить виконувати метод run ().
Q # 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.
Відповідь: Потік має такі стани:
- Новий
- Біговий
- Біг
- Не запускається (заблоковано)
- Припинено
- Нове: У новому стані створено екземпляр Thread, але метод start () ще не викликається. Зараз нитка не вважається живою.
- Біговий : Потік знаходиться у запущеному стані після виклику методу start (), але до виклику методу run (). Але потік може також повернутися до запущеного стану з режиму очікування / сну. У цьому стані нитка вважається живою.
- Біг : Потік знаходиться в робочому стані після того, як він викликає метод run (). Тепер потік починає виконання.
- Не запускається (Заблоковано): Потік живий, але його не можна запускати. Він не перебуває у спрощеному стані, але також через деякий час він повернеться до запущеного стану. Приклад: чекати, спати, блокувати.
- Припинено : Після завершення методу запуску він завершується. Зараз нитка не жива.
Q # 49) Що таке синхронізація?
Відповідь: Синхронізація робить лише один потік для доступу до блоку коду одночасно. Якщо декілька потоків отримують доступ до блоку коду, то в кінці є ймовірність отримання неточних результатів. Щоб уникнути цієї проблеми, ми можемо забезпечити синхронізацію для чутливого блоку кодів.
Синхронізоване ключове слово означає, що потоку потрібен ключ для доступу до синхронізованого коду.
Замки даються на об'єкти. Кожен об'єкт Java має замок. Замок має лише один ключ. Потік може отримати доступ до синхронізованого методу лише в тому випадку, якщо потік може отримати ключ від об’єктів для блокування.
Для цього ми використовуємо ключове слово “Синхронізоване”.
Приклад:
public class ExampleThread implements Runnable{ public static void main (String() args){ Thread t = new Thread (); t.start (); } public void run(){ synchronized(object){ { } }
Q # 50) У чому недолік синхронізації?
Роки: Для реалізації всіх методів не рекомендується синхронізація. Тому що якщо один потік отримує доступ до синхронізованого коду, то наступний потік повинен почекати. Тож це робить повільну продуктивність з іншого боку.
Q # 51) Що означає серіалізація?
Відповідь: Перетворення файлу в байтовий потік відоме як серіалізація. Об'єкти у файлі з міркувань безпеки перетворюються в байти. Для цього нам потрібно реалізувати інтерфейс java.io.Serializable. Він не має методу для визначення.
Змінні, які позначені як перехідні, не будуть частиною серіалізації. Тож ми можемо пропустити серіалізацію змінних у файлі, використовуючи перехідне ключове слово.
Дізнатися більше = >> Серіалізується та клонується
Q # 52) Яке призначення перехідної змінної?
Відповідь: Перехідні змінні не є частиною процесу серіалізації. Під час десериалізації значення перехідних змінних встановлюються за замовчуванням. Він не використовується зі статичними змінними.
Приклад:
шаблон прийняття тесту на прийняття користувача
перехідні числа int;
Q # 53) Які методи використовуються під час процесу серіалізації та десеріалізації?
Відповідь: Класи ObjectOutputStream та ObjectInputStream - це вищий рівень java.io. пакет. Ми використовуватимемо їх із класами нижчого рівня FileOutputStream та FileInputStream.
ObjectOutputStream.writeObject —-> Серіалізуйте об'єкт і запишіть серіалізований об'єкт у файл.
ObjectInputStream.readObject -> Читає файл і десеріалізує об'єкт.
Щоб бути серіалізованим, об’єкт повинен реалізувати інтерфейс, що серіалізується. Якщо суперклас реалізує серіалізацію, тоді підклас буде автоматично серіалізуватися.
Q # 54) Яка мета летючої змінної?
Відповідь: Значення змінних змінних завжди зчитуються з основної пам'яті, а не з кеш-пам'яті потоку. Це використовується переважно під час синхронізації. Він застосовується лише для змінних.
Приклад:
мінливий номер int;
Q # 55) Різниця між серіалізацією та десеріалізацією в Java.
Відповідь: Ось відмінності між серіалізацією та десеріалізацією в Java:
Серіалізація | Десериалізація |
---|---|
Серіалізація - це процес, який використовується для перетворення об’єктів у байтовий потік | Десериалізація - це протилежний процес серіалізації, коли ми можемо повернути об'єкти з байтового потоку. |
Об’єкт серіалізується, записуючи в нього ObjectOutputStream. | Об’єкт десеріалізується, зчитуючи його з ObjectInputStream. |
Q # 56) Що таке SerialVersionUID?
Відповідь: Щоразу, коли об’єкт серіалізований, на об’єкт ставиться ідентифікаційний номер версії для класу об’єкта. Цей ідентифікатор називається SerialVersionUID. Це використовується під час десериалізації для перевірки відправника та одержувача, сумісних із серіалізацією.
Висновок
Ось декілька основних питань інтерв’ю JAVA, які охоплюють як основні, так і вдосконалені поняття Java для програмування, а також інтерв’ю розробників, і на них відповіли наші експерти JAVA.
Сподіваюсь, цей підручник дасть вам глибоке розуміння детальних концепцій кодування JAVA. Пояснення, наведені вище, дійсно збагатять ваші знання та покращать ваше розуміння програмування JAVA.
Будьте готові впевнено зламати інтерв’ю JAVA.