Рубрики
Без рубрики

Топ-20+ Вопросы для интервью на Java

Нетрудно догадаться, что Java является одним из ведущих вариантов программирования для получения прибыльной работы. В конце концов, основанный на классах, универсальный, объектно-ориентированный язык программирования является одним из наиболее широко используемых языков программирования в мире. Помеченный вопросами java, java.

Нетрудно догадаться, что Java является одним из ведущих вариантов программирования для получения прибыльной работы. В конце концов, основанный на классах, универсальный, объектно-ориентированный язык программирования является одним из наиболее широко используемых языков программирования в мире.

Обладая множеством замечательных функций, язык программирования предпочитают не только опытные эксперты, но и те, кто новичок в мире программирования. Итак, вот 28 важных вопросов для собеседования, которые помогут вам получить работу на Java или, по крайней мере, улучшить ваше обучение.

Вопрос: Как вы будете отличать HashMap от HashTable? A: HashMap в Java – это класс коллекции на основе карт, используемый для хранения пар ключей и значений. Он обозначается как:

Хэш-карта или хэш-карта

Хэш-таблица – это массив списка, где каждый список называется корзиной. Значения, содержащиеся в хэш-таблице, уникальны и зависят от ключа.

Методы не синхронизируются в HashMap, в то время как ключевые методы синхронизируются в HashTable. Однако у HashMap нет потокобезопасности, в то время как у HashTable есть то же самое. Для итерации значений HashMap использует итератор, а hashtable использует перечислитель.

HashTable не допускает ничего, что является нулевым, в то время как HashMap допускает один нулевой ключ и несколько нулевых значений. С точки зрения производительности хэш-таблица работает медленно. Сравнительно, HashMap работает быстрее.

Вопрос: Что вы подразумеваете под коллекциями в Java? Каковы составляющие коллекций в Java? Ответ: Группа объектов в Java называется коллекциями. Пакет Java.util содержит, наряду с функциями даты и времени, интернационализацией, устаревшими классами сбора и т.д., Различные классы и интерфейсы для сбора.

В качестве альтернативы коллекции можно рассматривать как структуру, предназначенную для хранения объектов и управления дизайном, в котором хранятся объекты. Коллекции можно использовать для выполнения следующих операций с объектами:

1. Удаление 2. Вставка 3. Манипуляция 4. Поиск 5. Сортировка

Ниже приведены различные составляющие структуры коллекций:

Классы – Список массивов, Связанный список, Списки и Вектор Интерфейсы – Коллекция, Список, Карта, Очередь, Набор, Отсортированная карта и Отсортированный набор Карты – Хэш-карта, хэш-таблица, связанная хэш-карта и карта деревьев Очереди – Приоритетная очередь Наборы – Набор хэшей, Связанный набор хэшей и Набор деревьев

Вопрос: Пожалуйста, объясните карты и их типы на Java. Ответ: Карта Java – это объект, который сопоставляет ключи со значениями. Он не может содержать дубликатов ключей, и каждый ключ может соответствовать только одному значению. Чтобы определить, являются ли два ключа одинаковыми или разными, Map использует метод equals (). В Java существует 4 типа карт, описанных следующим образом:

HashMap – Это неупорядоченная и несортированная карта и, следовательно, является хорошим выбором, когда нет акцента на порядке. Хэш-карта допускает один нулевой ключ и несколько нулевых значений и не поддерживает порядок вставки. HashTable – Не допускает ничего нулевого и имеет методы, которые синхронизированы. Поскольку это обеспечивает безопасность потоков, производительность низкая. LinkedHashMap – Медленнее, чем хэш-карта, но сохраняет порядок вставки и имеет более быструю итерацию. Древовидная карта – Отсортированная карта, обеспечивающая поддержку построения порядка сортировки с помощью конструктора.

Вопрос: Что вы подразумеваете под очередью приоритетов в Java? A: Очередь приоритетов, как и обычная очередь, является абстрактным типом данных, за исключением того, что приоритет связан с каждым содержащимся в ней элементом. Элемент с высоким приоритетом обслуживается перед элементом с низким приоритетом в очереди приоритетов.

Элементы в очереди приоритетов упорядочиваются либо в соответствии с компаратором, либо естественным образом. Порядок элементов в очереди приоритетов отражает их относительный приоритет.

Вопрос: Чем абстрактный класс отличается от интерфейса? A: Существует несколько различий между абстрактным классом и интерфейсом в Java, которые суммируются следующим образом:

Составляющие – Абстрактный класс содержит переменные экземпляра, в то время как интерфейс может содержать только константы. Конструктор и создание экземпляра – В то время как интерфейс не имеет ни конструктора, ни его можно создать, абстрактный класс может иметь конструктор по умолчанию, который вызывается всякий раз, когда создается экземпляр конкретного подкласса. Реализация методов – Все классы, реализующие интерфейс, должны предоставлять реализацию для всех содержащихся в нем методов. Однако класс, расширяющий абстрактный класс, не требует реализации всех содержащихся в нем методов. В конкретном подклассе должны быть реализованы только абстрактные методы. Тип методов – Любой абстрактный класс имеет как абстрактные, так и неабстрактные методы. Интерфейс, с другой стороны, имеет только один абстрактный метод.

Вопрос: Не могли бы вы объяснить различные типы исключений в Java? Кроме того, расскажите нам о различных способах их обработки. A: В Java предусмотрены два типа исключений:

Проверенные исключения – Классы, которые расширяют Выбрасываемый класс, за исключением исключения и ошибки во время выполнения, называются проверенными исключениями. Такие исключения проверяются компилятором во время компиляции. Эти типы исключений должны либо иметь соответствующие блоки try/catch, либо быть объявлены с использованием ключевого слова throws. Исключение ClassNotFoundException является проверяемым исключением. Непроверенные Исключения – Такие исключения не проверяются компилятором во время компиляции. Таким образом, компилятору не требуется обрабатывать непроверенные исключения. Арифметическое исключение и исключение ArrayIndexOutOfBounds являются непроверенными исключениями. Исключения в Java обрабатываются двумя способами:

Объявление ключевого слова throws – Мы можем объявить исключение, используя ключевое слово throws в конце метода. Например, проверка исключений класса{public static void main(String[] args){добавить(); } public void add() вызывает исключение{добавление(); }} С помощью try/catch – Любой сегмент кода, который, как ожидается, приведет к исключению, окружен блоком try. При возникновении исключения оно перехватывается блоком catch, который следует за блоком try. Например, проверка исключения класса {public static void main (String[] args){добавить(); } публичное добавление пустоты(){попробуйте{добавление(); }поймать (исключение e){e.printStackTrace(); } }}

Вопрос: Не могли бы вы нарисовать иерархию исключений Java? A:

Вопрос: Какую роль играет ключевое слово final в Java? Какое влияние это оказывает на переменную, метод и класс? Ответ: Последнее ключевое слово в Java – это модификатор без доступа, который применим только к классу, методу или переменной. Он служит другой цели в зависимости от контекста, в котором он используется.

С классом:

Когда класс объявляется как окончательный, он отключается от подкласса, т. Е. Ни один класс не может расширить конечный класс.

С помощью метода:

Любой метод, сопровождающий ключевое слово final, не может быть переопределен подклассом.

С переменной:

Переменная, за которой следует ключевое слово final, не может изменить значение, которое она содержит во время выполнения программы. Таким образом, он ведет себя как константа.

Вопрос: Как вы создаете поток на Java? Привести примеры. A: Для того, чтобы создать поток на Java, есть два варианта:

Расширьте класс Thread – Поток доступен в java.lang. Класс потоков. Чтобы создать поток, вам нужно расширить класс потока и переопределить метод run. Например, добавление открытого класса расширяет поток {public void run() {}}

Недостатком использования класса thread является то, что становится невозможным расширение любых других классов. Тем не менее, можно перегрузить метод run () в классе

Реализовать управляемый интерфейс – Еще один способ создания потока в Java – это реализовать управляемый интерфейс. Для этого необходимо предоставить реализацию метода run (), определенного в интерфейсе. Например, публичный класс Дополнение реализует запускаемый {публичный пустой запуск () {}}

Вопрос: Почему мы используем метод yield ()? Ответ: Метод yield () принадлежит классу thread. Он переводит текущий поток в работоспособное состояние, а также позволяет другим потокам выполняться. Другими словами, это дает возможность запускать потоки с равным приоритетом. Поскольку yield() является статическим методом, он не снимает никакой блокировки.

Вопрос: Можете ли вы объяснить жизненный цикл потока в Java? Ответ: Жизненный цикл потока имеет следующие состояния и следует следующему порядку:

Новое – В самом первом состоянии жизненного цикла потока создается экземпляр потока, а метод start () еще не вызван. Теперь нить считается живой. Работоспособный – После вызова метода start (), но до вызова метода run () поток находится в состоянии, пригодном для выполнения. Поток также может вернуться в работоспособное состояние из состояния ожидания или ожидания. Запущенный – Поток переходит в состояние выполнения после вызова метода run (). Это когда поток начинает выполнение. Не запускаемый – Хотя поток живой, он не может работать. Как правило, через некоторое время он возвращается в работоспособное состояние. Завершенный – Поток переходит в завершенное состояние, как только метод run () завершает свое выполнение. Сейчас оно не живое.

** Вопрос: Взгляните на два фрагмента кода ниже:

i.

сумматор класса {Статический int add(int a, int b) {возвращает a+b; } Статический двойной add(двойной a, двойной b) {возвращает a+b; } общедоступный статический void main(Строковые аргументы[]) {System.out.println(Сумматор.добавить(11,11)); System.out.println(Сумматор.добавить(12.3,12.6)); }} ii.

класс автомобиля{void run(){System.out.println(“автомобиль работает”); } Класс Audi расширяет автомобиль{void run() {System.out.prinltn(“Audi безопасно пробегает 100 км”); } общедоступная статическая пустота main(Строковые аргументы[]) {Автомобиль Audi(); b.run(); }} В чем важное различие между ними? A:** Фрагмент кода i. является примером перегрузки метода, в то время как фрагмент кода ii. демонстрирует переопределение метода.

Вопрос: Что вы понимаете под синхронизацией в Java? В чем его самый существенный недостаток? A: Если несколько потоков пытаются получить доступ к одному блоку кода, то повышается вероятность получения неточных результатов. Чтобы предотвратить это, используется синхронизация.

Использование ключевого слова синхронизации заставляет поток нуждаться в ключе для доступа к синхронизированному коду. Просто синхронизация позволяет только одному потоку получать доступ к блоку кода одновременно.

Каждый объект Java имеет блокировку, и у каждой блокировки есть только один ключ. Поток может получить доступ к синхронизированному методу только в том случае, если он может получить ключ к блокировке объекта. Следующий пример демонстрирует синхронизацию:

пример потока открытого класса реализует запускаемый {общедоступный статический пустой основной (строка[] args){ Поток Thread (); т.запуск (); } публичный запуск void(){синхронизированный(объект){{}} Примечание: Рекомендуется избегать реализации синхронизации для всех методов. Это происходит потому, что, когда только один поток может получить доступ к синхронизированному коду, следующий поток должен подождать. Следовательно, это приводит к снижению производительности программы.

Вопрос: Возможно ли записать несколько блоков catch в один блок try? A: Да, можно записать несколько блоков catch в один блок try. Однако подход должен быть от конкретного к общему. Следующий пример демонстрирует то же самое:

пример открытого класса {public static void main(Строковые аргументы[]) {попробуйте {int int[10];/0;} поймать (исключение ArithmeticException e) {System.out.println(“Арифметическое исключение в первом блоке catch”); } поймать (исключение ArrayIndexOutOfBoundsException e) {System.out.println (“Индекс массива выходит за пределы во втором блоке catch”); } поймать (Исключение e) {System.out.println(“Любое исключение в третьем блоке catch”); }}

Вопрос: Можете ли вы определить разницу между execute(), ExecuteQuery() и executeUpdate()? A:

execute() – Используется для выполнения любого SQL-запроса. Он возвращает значение TRUE, если результатом является результирующий набор, например выполнение запросов Select, и значение FALSE, если результат не является результирующим набором, например выполнение запроса вставки или обновления. Выполнить запрос() – Используется для выполнения запросов Select. Он возвращает набор результатов, который не является нулевым, даже если нет записей, соответствующих запросу. Метод ExecuteQuery() должен использоваться при выполнении запросов select, чтобы он вызывал java.sql. Исключение SQLException с сообщением “Метод ExecuteQuery не может использоваться для обновления”, когда кто-то пытается выполнить инструкцию Insert или Update. executeUpdate() – Используется для выполнения инструкции Delete/Insert/Update или инструкций DDL, которые ничего не возвращают. Выходные данные различаются в зависимости от того, являются ли операторы инструкциями Языка обработки данных (DML) или инструкциями языка определения данных (DDL). Выходные данные являются целым числом и равны общему количеству строк в первом случае и 0 в последнем случае. Примечание: Метод execute() необходимо использовать только в сценарии, когда нет уверенности в типе оператора. Во всех остальных случаях используйте метод ExecuteQuery() или executeUpdate().

Вопрос: Приведите пример архитектуры гибернации: A:

Вопрос: Не могли бы вы продемонстрировать, как удалить файл cookie в JSP, на примере кода? A: Следующий код демонстрирует удаление файла cookie в JSP:

Cookie Cookie (“имя 1”, “значение 1”); ответ.addcookie (мой повар 1); Cookie Cookie (“мой повар 1”, “значение 1”); killmycook. setMaxAge (0); убойная книга. задать путь (“/”) ; убойный кук. addCookie (убойная книга 1);

Вопрос: Напишите подходящие примеры кода, чтобы продемонстрировать использование final, finally и finalize. A:

Окончательный Ключевое слово final используется для ограничения класса, метода и переменной. Конечный класс не может быть унаследован, конечный метод отключен от переопределения, а конечная переменная становится константой, т. Е. ее значение нельзя изменить.

пример класса Final Var{public static void main(строковые аргументы[]) {final int;;//Приведет к ошибке, так как значение не может быть изменено сейчас} Наконец, любой код внутри блока finally будет выполнен, независимо от того, обработано исключение или нет.

пример класса Finally{public static void main(Строковые аргументы[]){попробуйте {инициализировать; } поймать(исключение e) {System.out.println(e);} наконец {System.out.println(“наконец-то блок выполняется”); } } }} Завершить Метод finalize выполняет очистку непосредственно перед сбором мусора с объекта.

пример завершения класса {public void finalize() {System.out.println(“Завершение вызывается”); } публичная статическая пустота main(Строковые аргументы[]) {Завершающий пример Завершающий пример(); Завершающий пример Завершающий пример(); ; ; System.gc(); }}

Вопрос: Чем ключевое слово throw отличается от ключевого слова throw? A: В то время как ключевое слово throws позволяет объявлять исключение, ключевое слово throw используется для явного создания исключения. Проверенные исключения нельзя распространять только с помощью броска, но броски позволяют делать это без необходимости в чем-либо еще.

За ключевым словом throws следует класс, в то время как за ключевым словом throw следует экземпляр. Ключевое слово throw используется в методе, но ключевое слово throw используется с сигнатурой метода. Кроме того, невозможно создать несколько исключений, но можно объявить несколько исключений.

Вопрос: Как вы будете отличать процессы от потоков? A: Существует несколько фундаментальных различий между процессом и потоком, которые заключаются в следующем:

Определение – Процесс является исполняемым экземпляром программы, тогда как поток является подмножеством процесса. Изменения – Изменение, внесенное в родительский процесс, не влияет на дочерние процессы. Однако изменение в главном потоке может привести к изменениям в поведении других потоков того же процесса. Связь – В то время как процессы требуют межпроцессной связи для связи с процессами-братьями, потоки могут напрямую взаимодействовать с другими потоками, принадлежащими к тому же процессу. Управление – Процессы управляются операционной системой и могут управлять только дочерними процессами. Напротив, потоки управляются программистом и способны осуществлять контроль над потоками того же процесса, к которому они принадлежат. Зависимость – Процессы являются независимыми сущностями, в то время как потоки являются зависимыми сущностями Память – Потоки выполняются в общих пространствах памяти, но процессы выполняются в отдельных пространствах памяти.

Вопрос: Не могли бы вы провести сравнение между массивом и ArrayList? A: Массив требует указания размера во время объявления, в то время как список массивов не обязательно требует размера, поскольку он динамически изменяет размер.

Для того чтобы поместить объект в массив, необходимо указать индекс. Однако для списка массивов такого требования не существует. В то время как список массивов параметризован, массив не параметризован.

Вопрос: Пожалуйста, объясните, что вы подразумеваете под абстрактным классом и абстрактным методом? Ответ: Абстрактный класс в Java – это класс, который не может быть создан. Такой класс обычно используется для предоставления базы для подклассов с целью расширения, а также реализации абстрактных методов и переопределения или использования реализованных методов, определенных в абстрактном классе.

Чтобы создать абстрактный класс, за ним должно следовать ключевое слово abstract. Любой абстрактный класс может иметь как абстрактные, так и неабстрактные методы.

Метод в Java, который имеет только объявление, а не реализацию, известен как абстрактный метод. Кроме того, за абстрактным именем метода следует ключевое слово abstract. Любой конкретный подкласс, расширяющий абстрактный класс, должен обеспечивать реализацию абстрактных методов.

Вопрос: Что вы знаете об интерфейсе в Java? Ответ: Интерфейс Java – это шаблон, который содержит только объявления методов, а не реализации методов. Это обходной путь для достижения множественного наследования в Java.

Некоторые заслуживающие внимания важные моменты, касающиеся интерфейсов Java, заключаются в следующем:

Класс, реализующий интерфейс, должен предоставлять реализацию для всех методов, объявленных в интерфейсе Все методы в интерфейсе являются внутренне общедоступными абстрактные пустые Все переменные в интерфейсе являются внутренне общедоступными статические конечные классы не расширяют, но реализуют интерфейсы

Вопрос: Что такое метод join()? Приведите пример. A: Мы используем метод join () для соединения одного потока с концом текущего запущенного потока. Это нестатический метод и имеет перегруженную версию. Рассмотрим пример ниже:

общедоступная статическая пустая основная (строка[] аргументов) {Поток потока (); т.запуск (); т.соединение();}

Основной поток начинает выполнение в вышеупомянутом примере. Основной поток начинает выполнение в вышеупомянутом примере. JVM переключается между основным потоком и потоком там.

Как только выполнение достигает t.join(), выполняется только поток t, и ему разрешается выполнить свою задачу. После этого основной поток возобновляет выполнение.

Вопрос: Как остановить поток в Java? A: В Java есть три метода для остановки выполнения потока:

Блокировка – Этот метод используется для перевода потока в заблокированное состояние. Выполнение возобновляется, как только выполняется условие блокировки. Например, ServerSocket.accept() – это метод блокировки, который прослушивает входящее соединение с сокетом и возобновляет заблокированный поток только при установлении соединения. Спящий режим – Этот метод используется для задержки выполнения потока на некоторое время. Поток, в котором используется метод sleep(), как говорят, переходит в состояние сна. Он переходит в работоспособное состояние, как только просыпается, т. е. состояние сна завершается. Время, в течение которого поток должен перейти в состояние сна, указано в фигурных скобках метода sleep(). Это статический метод. Ожидание – Хотя он может быть вызван для любого объекта Java, метод wait() может быть вызван только из синхронизированного блока.

Вопрос: Какой цели служит переменная Volatile в Java? A: Значение, хранящееся в изменчивой переменной, считывается не из кэш-памяти потока, а из основной памяти. Изменчивые переменные в основном используются во время синхронизации.

Вопрос: Пожалуйста, сравните сериализацию с десериализацией в Java. A: Сериализация – это процесс, посредством которого объекты Java преобразуются в поток байтов. Десериализация – это прямо противоположный процесс сериализации, при котором объекты Java извлекаются из потока байтов.

Объект Java сериализуется путем записи его в ObjectOutputStream и десериализуется путем считывания его из ObjectInputStream.

Это завершает список из 28 основных вопросов для собеседования на Java. Что вы думаете о списке, который мы составили? Сообщите нам об этом, оставив свои комментарии в специальном окне ниже. Кроме того, ознакомьтесь с этими лучшими учебными пособиями по Java, чтобы еще больше усовершенствовать свой набор навыков Java.

Первоначально опубликовано: https://hackr.io/blog/java-interview-questions

Оригинал: “https://dev.to/vijaykhatri96/top-20-java-interview-questions–1lcf”