В этой статье собраны лучшие теоретические вопросы для собеседования по Java для SDET (Software Development Environment Throughput) или автоматизатора тестирования.
Ищете работу Junior QA? Тогда вам в наш телеграм-канал QA Вакансии. Каждую неделю 7 лучших вакансий с телеграм-контактом HR компании.
1. Что такое JDK, JRE и JVM?
Java Development Kit (JDK) – набор инструментов, необходимых для написания программ на Java.
Java Runtime Environment (JRE) позволяет запускать скомпилированные Java-программы. Является частью JDK.
Виртуальная машина Java (JVM – Java Virtual Machine) выполняет байт-код Java . Она является частью JRE.
2. Что делает компилятор Java?
Компилятор Java компилирует исходный Java-код в байт-код Java , который является промежуточным языком и считается не совсем машинным кодом.
3. Что делает Java платформонезависимым?
Java не зависит от платформы, поскольку компилятор Java преобразует исходный код в байт-код Java, который является промежуточным языком. Затем этот код можно выполнить на любой платформе (ОС) с помощью JVM. При этом все равно придется устанавливать разные JVM для разных платформ. Компиляторы сложны и дорогостоящи для создания программ, а JVM легче для понимания и быстрее в работе. Таким образом, JVM делает Java платформонезависимым.
4. Назовите новые функции в Java 8 и Java 11
Java 8:
- Лямбда-выражения
- Методы по умолчанию в интерфейсе
- Stream API для поддержки операций функционального стиля с потоками элементов
- Новый набор пакетов, предоставляющих комплексную модель времени (локальное время и даты)
Java 11:
- Новые методы String (
isBlank
,lines
,strip
,stripLeading
,stripTrailing
иrepeat
) - Новые методы File (
readString
иwriteString
) - Коллекция в массив (метод
toArray
) - Поддержка использования синтаксиса локальной переменной (ключевое слово
var
) в параметрах лямбды - Новый HTTP-клиент из пакета
java.net.http
. Изначально представленный в Java 9, он стал стандартной функцией в Java 11 - Главное изменение в этой версии заключается в том, что нам больше не нужно компилировать исходные файлы Java с помощью
javac
5. Какие примитивы есть в Java?
Всего в Java существует восемь примитивных типов данных. Первая группа – это byte
, short
, int
, long
. Они могут хранить только целые числа, причем byte
– самое маленькое, а long
– самое большое. Далее идут float
и double
. Они хранят числа с плавающей запятой. Для хранения одного символа у нас есть примитив char
, а boolean
предназначен для хранения логического значения true или false.
6. В чем разница между String и StringBuilder?
Класс String
является неизменяемым, а класс StringBuilder
– изменяемым.
7. Когда следует использовать String, а когда – StringBuilder?
Каждое изменение класса String
создает новый объект в памяти, поскольку он является неизменяемым. Поэтому, если в коде приходится часто менять строку (особенно внутри цикла), лучше использовать StringBuilder
.
8. Что такое StringBuffer?
Класс StringBuffer
– потокобезопасная версия StringBuilder
. Его методы синхронизированы, а экземпляры могут быть использованы несколькими потоками одновременно.
9. Как найти количество символов в строке?
Это можно сделать с помощью метода length()
.
10. Как сравнить две строки на равенство?
С помощью метода equals()
.
11. Что делает оператор == при использовании со ссылками на объекты?
Он проверяет, указывают ли эти две ссылки на один и тот же объект.
12. Какие классы-обертки для примитивов существуют в Java ?
Каждый примитив в Java имеет соответствующее объектное представление. Некоторые функции Java (коллекции, дженерики) работают только с объектами, поэтому при их использовании мы можем использовать классы-обертки. Кроме того, эти классы имеют множество полезных методов, таких как Double
, Float
, Long
, Integer
, Short
, Byte
, Character
и Boolean
.
13. Когда нужно использовать цикл while?
Цикл while
используется в том случае, когда не известно точное количество итераций, а цикл for
– когда оно известно.
14. В чем разница между классами Array и ArrayList?
Array
может работать как с примитивами, так и с объектами, аArrayList
– только с объектами.Array
– это коллекция фиксированного размера, аArrayList
имеет динамический размер.
15. Что такое Varargs в Java?
Varargs
— это функция Java. Ее отличительные качества:
- Она дает возможность методу принимать динамическое количество аргументов (или даже целый массив).
- Она действует как массив внутри метода и может быть использована только в качестве аргумента метода.
16. Что такое конструктор в Java?
Конструктор – это специальный метод для создания объекта в Java. Он имеет то же имя, что и имя класса, и выполняется при создании объекта. Он может принимать аргументы и, как правило, используется для назначения свойств объекта.
17. Могут ли в одном классе быть перегруженные конструкторы?
Да, мы можем перегрузить конструктор в том же классе.
18. Можем ли мы переопределить конструктор?
Нет, мы не можем переопределить конструктор.
19. Что такое конструктор по умолчанию?
Конструктор по умолчанию – это пустой конструктор, который предоставляется Java, если мы не определяем никаких других. Как только мы определим свой собственный конструктор, Java не будет предоставлять конструктор по умолчанию.
20. Что такое ключевое слово static в Java?
Мы можем пометить наши методы, переменные уровня класса и внутренние классы ключевым словом static
. Члены с ключевым словом static
принадлежат классу, а не конкретным объектам. Правильный способ использования статических членов – по имени класса. Обычно мы делаем статическими наши служебные методы и константные переменные.
21. Что такое ключевое слово final в Java?
Мы можем помечать наши переменные, методы и классы как final
, если мы не можем:
- изменить (переинициализировать) наши конечные переменные
- расширять наши конечные классы
- переопределить наши конечные методы
22. Как предотвратить переопределение вашего метода?
Для этого нужно пометить его как как final
.
23. Что такое статический блок?
Статический блок запускается один раз в самом начале, когда класс впервые упоминается в коде. Обычно мы используем его для подготовки/инициализации нашего класса.
24. Что такое блок инициализации?
Блок инициализации – это блок кода, который выполняется перед вызовом конструктора.
25. Какие концепции ООП в Java вы знаете?
- Инкапсуляция
- Наследование
- Полиморфизм
- Абстракция
26. Что такое инкапсуляция в Java?
Инкапсуляция – это механизм сокрытия данных. Мы достигаем инкапсуляции, делая наши свойства частными и предоставляя общедоступные методы получения и установки.
27. Что такое наследование в Java?
Наследование – это способность одного класса наследовать свойства другого. Можно сказать, что это своего рода отношения “родитель-ребенок” между классами. Java поддерживает только одиночное наследование.
28. Что происходит, когда дочерний класс определяет тот же метод или свойство?
Когда дочерний класс определяет тот же метод, он переопределяет метод родительского класса. Когда дочерний класс определяет то же свойство, он затеняет (скрывает) свойство родительского класса.
29. Что такое суперкласс Object в Java?
Класс Object
является родительским классом для всех классов в Java. Java автоматически вводит расширенный синтаксис Object
после каждого объявления класса, поскольку хочет предоставить общие модели поведения для каждого объекта, который когда-либо будет создан в Java. У java.lang.Object есть 11 методов (Java 8), поэтому каждый класс будет наследовать эти методы.
30. Что такое абстракция в Java?
Абстракция – это способ разработки кода, позволяющий сделать его более пригодным для повторного использования, сосредоточив внимание на том, что делает объект, а не на том, как он это делает. Мы достигаем абстракции, используя абстрактные методы.
31. Что такое полиморфизм в Java?
Это способность объекта принимать различные формы.
32. В чем разница между интерфейсом и абстрактным классом?
И интерфейс, и абстрактный класс используются для достижения абстракции в Java, но между ними есть некоторые различия:
- Мы можем определять абстрактные и неабстрактные методы в абстрактном классе, но в интерфейсе мы можем определять только абстрактные методы (кроме статических методов и методов по умолчанию).
- Мы можем иметь обычные переменные свойства в абстрактном классе и только публичные статические конечные контакты в интерфейсе.
- Можно реализовать несколько интерфейсов, но расширить только один абстрактный класс.
33. В чем разница между переопределением и перегрузкой?
Переопределение методов — это возможность создавать методы с тем же именем и параметрами, но с другой реализацией в дочернем классе (то же имя, аргументы, тот же или согласованный тип возврата, модификатор доступа должен быть таким же или более заметным, а объявление исключения должно быть таким же или меньшим).
Перегрузка происходит в одном классе, когда мы определяем несколько методов с одним и тем же именем, но разными аргументами.
34. Как получить количество элементов в массиве?
С помощью переменной экземпляра length
.
35. Как получить количество элементов в ArrayList?
С помощью метода size()
.
36. Как работает ArrayList внутри?
Внутри ArrayList
находится стандартный массив, который и выступает хранилищем данных.
37. Какова начальная емкость ArrayList?
Начальная емкость ArrayList равна 10.
38. Что такое Set в Java?
Это коллекция уникальных элементов. Имеет три реализации:
- HashSet
- LinkedHashSet
- TreeSet
39. Что такое Map в Java?
Это структура данных типа “ключ-значение”. Имеет три реализации:
- HashMap
- LinkedHashMap
- TreeMap
40. Как выполнить итерацию по Map?
Мы можем перебирать Map
, используя методы entrySet()
или keySet()
.
41. В чем разница между HashMap и Hashtable?
Hashtable
не допускает нулевой ключ и нулевое значение, в то время какHashMap
может иметь один нулевой ключ и несколько нулевых значений.Hashtable
является потокобезопасным, аHashMap
– нет.
42. Какой класс является вспомогательным для массивов (для сортировки и поиска)?
Arrays
– это вспомогательный класс для работы с массивами.
java.util.Arrays
43. Какой вспомогательный класс используется в Java для работы с коллекциями?
Collections
– это вспомогательный класс для классов фреймворка коллекций.
java.util.Collections
44. Как обрабатываются исключения в Java?
В Java исключения обрабатываются с помощью оператора try-catch
.
45. В чем разница между исключениями времени выполнения и проверяемыми исключениями?
Исключения времени выполнения обрабатывать необязательно, а проверяемые исключения – обязательно.
46. Как понять, перед нами исключение времени выполнения или проверяемое?
Проверяемые исключения расширяются за счет класса Exception
, а исключения времени выполнения – за счет класса RuntimeException
.
47. Можно ли обрабатывать несколько исключений с помощью одного try-catch?
Да, можно.
48. Что такое try-with-resources?
Это оператор try
, который автоматически закрывает ресурсы (файл, соединение с БД и т. д.).
49. Можно ли выполнить оператор try без оператора catch?
Да, оператор try-with-resources
может быть объявлен без оператора catch
.
50. Что такое ошибка в Java?
Ошибка – это сбой на уровне системы. Мы не обрабатываем и не выбрасываем ошибки.
Перевод статьи «Top Theoretical Java Interview Questions for SDET».