October 9, 2020

Как успешно пройти техническое интервью на позицию Java Developer

Готовимся к техническому собеседованию для Java-разработчиков. Ловите краткий чек-лист вопросов, которые часто задают на технических собеседованиях на позицию Junior:

ООП (перейти в раздел)

1. Принципы ООП.
2. Что такое “класс”?
3. Что такое поле/атрибут класса?
4. Что такое “конструктор”?
5. Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
6. Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
7. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
8. О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
9. Что такое “метод”?
10. Что такое сигнатура метода?
11. Какие методы называются перегруженными?
12. Могут ли нестатические методы перегрузить статические?
13. Расскажите про переопределение методов.
14. Может ли метод принимать разное количество параметров (аргументы переменной длины)?
15. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
16. Как получить доступ к переопределенным методам родительского класса?
17. Какие преобразования называются нисходящими и восходящими?
18. Чем отличается переопределение от перегрузки?
19. Где можно инициализировать статические/нестатические поля?
20. Зачем нужен оператор instanceof?
21. Зачем нужны и какие бывают блоки инициализации?
22. Где и для чего используется модификатор abstract?
23. Можно ли объявить метод абстрактным и статическим одновременно?
24. Что означает ключевое слово static?
25. К каким конструкциям Java применим модификатор static?
26. Что будет, если в static блоке кода возникнет исключительная ситуация?
27. Можно ли перегрузить static метод?
28. Что такое статический класс, какие особенности его использования?
29. Какие особенности инициализации final static переменных?
30. Как влияет модификатор static на класс/метод/поле?
31. О чем говорит ключевое слово final?
32. Дайте определение понятию “интерфейс”.
33. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
34. Почему нельзя объявить метод интерфейса с модификатором final или static?
35. Какие типы классов бывают в java (вложенные… и.т.д.)
36. Какие особенности создания вложенных классов: простых и статических.
37. Что вы знаете о вложенных классах, зачем они используются?
38. Классификация, варианты использования, о нарушении инкапсуляции.
39. В чем разница вложенных и внутренних классов?
40. Какие классы называются анонимными?
41. Как связан любой пользовательский класс с классом Object?
42. Расскажите про каждый из методов класса Object.
43. Что такое метод equals(). Чем он отличается от операции ==.
44. Какой метод возвращает строковое представление объекта?
45. Чем отличается абстрактный класс от интерфейса, в каких случаях что вы будете использовать?
46. Знаете ли вы какие-либо паттерны проектирования?

Типы данных, переменные, операторы, циклы, массивы

1. Из каких символов может состоять имя переменной (корректный идентификатор)?
2. Что такое “инициализация”?
3. На какие основные группы можно поделить типы данных?
4. Какие примитивные типы вы знаете?
5. Как передается значение переменной (по ссылке/значению)?
6. Что вы знаете о функции main, какие обязательные условия ее определения?
7. Какие логические операции и операторы вы знаете?
8. В чем разница краткой и полной схемы записи логических операторов?
9. Что такое тернарный оператор выбора?
10. Какие унарные и бинарные арифметические операции вы знаете?
11. Какие побитовые операции вы знаете?
12. Какова роль и правила написания оператора выбора (switch)?
13. Какие циклы вы знаете, в чем их отличия?
14. Что такое “итерация цикла”?
15. Какие параметры имеет цикл for, можно ли их не задать?
16. Какой оператор используется для немедленной остановки цикла?
17. Какой оператор используется для перехода к следующей итерации цикла?
18. Что такое массив?
19. Какие виды массивов вы знаете?
20. Что такое boxing/unboxing?

Исключения

1. Дайте определение понятию “исключение”
2. Какова иерархия исключений.
3. Можно/нужно ли обрабатывать ошибки jvm?
4. Какие существуют способы обработки исключений?
5. О чем говорит ключевое слово throws?
6. В чем особенность блока finally? Всегда ли он исполняется?
7. Может ли не быть ни одного блока catch при отлавливании исключений?
8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
11. В чем особенность RuntimeException?
12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
13. Какой оператор позволяет принудительно выбросить исключение?
14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
17. Что вы знаете о OutOfMemoryError?
18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
20. Какая конструкция используется в Java для обработки исключений?

Коллекции

1. Дайте определение понятию “коллекция”.
2. Назовите преимущества использования коллекций.
3. Какие данные могут хранить коллекции?
4. Какова иерархия коллекций?
5. Что вы знаете о коллекциях типа List?
6. Что вы знаете о коллекциях типа Set?
7. Что вы знаете о коллекциях типа Queue?
8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
9. Назовите основные реализации List, Set, Map.
10. Какие реализации SortedSet вы знаете и в чем их особенность?
11. В чем отличия/сходства List и Set?
12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
13. В каких случаях разумно использовать массив, а не ArrayList?
14. Чем отличается ArrayList от Vector?
15. Что вы знаете о реализации классов HashSet и TreeSet?
16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
18. Что будет, если в Map положить два значения с одинаковым ключом?
19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
20. Дайте определение понятию “итератор”.
21. Какую функциональность представляет класс Collections?
22. Как получить не модифицируемую коллекцию?
23. Какие коллекции синхронизированы?
24. Как получить синхронизированную коллекцию из не синхронизированной?
25. Как получить коллекцию только для чтения?
26. Почему Map не наследуется от Collection?
27. В чем разница между Iterator и Enumeration?
28. Как реализован цикл foreach?
29. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
30. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
31. В чем разница между Iterator и ListIterator?
32. Какие есть способы перебора всех элементов List?
33. В чем разница между fail-safe и fail-fast свойствами?
34. Что делать, чтобы не возникло исключение ConcurrentModificationException?
35. Что такое стек и очередь, расскажите в чем их отличия?
36. В чем разница между интерфейсами Comparable и Comparator?
37. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?

Строки

1. Какие “строковые” классы вы знаете?
2. Какие основные свойства “строковых” классов (их особенности)?
3. Можно ли наследовать строковый тип, почему?
4. Дайте определение понятию конкатенация строк.
5. Как преобразовать строку в число?
6. Как сравнить значение двух строк?
7. Как перевернуть строку?
8. Как работает сравнение двух строк?
9. Как обрезать пробелы в конце строки?
10. Как заменить символ в строке?
11. Как получить часть строки?
12. Дайте определение понятию “пул строк”.
13. Какой метод позволяет выделить подстроку в строке?
14. Как разбить строку на подстроки по заданному разделителю?
15. Какой метод вызывается для преобразования переменной в строку?
16. Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
17. Как найти необходимый символ в строке?
18. Можно ли синхронизировать доступ к строке?
19. Что делает метод intern()?
20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
22. Почему строка неизменная и финализированная в Java?
23. Почему массив символов предпочтительнее строки для хранения пароля?
24. Почему строка является популярным ключом в HashMap в Java?
25. Напишите метод удаления данного символа из строки.

Потоки ввода/вывода

1. Какие существуют виды потоков ввода/вывода?
2. Назовите основные предки потоков ввода/вывода.
3. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
4. Что вы знаете о RandomAccessFile?
5. Какие есть режимы доступа к файлу?
6. В каких пакетах лежат классы-потоки?
7. Что вы знаете о классах-надстройках?
8. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
9. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
10. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
11. Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
12. Какой символ является разделителем при указании пути к ЭФС?
13. Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
14. Что такое сериализация?
15. Какие классы позволяют архивировать объекты?

Потоки выполнения/многопоточность 

1. Дайте определение понятию “процесс”.
2. Дайте определение понятию “поток”.
3. Дайте определение понятию “синхронизация потоков”.
4. Как взаимодействуют программы, процессы и потоки?
5. В каких случаях целесообразно создавать несколько потоков?
6. Что может произойти если два потока будут выполнять один и тот же код в программе?
7. Что вы знаете о главном потоке программы?
8. Какие есть способы создания и запуска потоков?
9. Какой метод запускает поток на выполнение?
10. Какой метод описывает действие потока во время выполнения?
11. Когда поток завершает свое выполнение?
12. Как синхронизировать метод?
13. Как принудительно остановить поток?
14. Дайте определение понятию “поток-демон”.
15. Как создать поток-демон?
16. Как получить текущий поток?
17. Дайте определение понятию “монитор”.
18. Как приостановить выполнение потока?
19. В каких состояниях может пребывать поток?
20. Что является монитором при вызове нестатического и статического метода?
21. Что является монитором при выполнении участка кода метода?
22. Какие методы позволяют синхронизировать выполнение потоков?
23. Какой метод переводит поток в режим ожидания?
24. Какова функциональность методов notify и notifyAll?
25. Что позволяет сделать метод join?
26. Каковы условия вызова метода wait/notify?
27. Дайте определение понятию “взаимная блокировка”.
28. Чем отличаются методы interrupt, interrupted, isInterrupted?
29. В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
30. Модификаторы volatile и метод yield().