Вопросы на собеседовании Java junior
База Java для первого собеседования — ООП, коллекции, исключения, основы языка.
- 01Какие четыре принципа ООП?
Четыре принципа: инкапсуляция, наследование, полиморфизм, абстракция — к каждому короткий пример.
Junior - 02Что вернут сравнения для new String("a") и new String("a") через == и через equals()?
== даст false, equals() — true: == сравнивает ссылки, equals() у String — содержимое.
Junior - 03Чем ArrayList отличается от LinkedList и что брать по умолчанию?
ArrayList — динамический массив: доступ по индексу O(1), добавление в конец амортизированно O(1). LinkedList — двусвязный список: O(1) только при вставке или удалении у уже…
Junior - 04Integer a=127, b=127, c=128, d=128. Что вернут a==b и c==d?
a==b → true, c==d → false: Integer.valueOf() кэширует значения от −128 до 127.
Junior - 05Для чего предназначен Optional?
Optional — контейнер «значение или пусто», который явно говорит, что результата может не быть, и заставляет это обработать.
Junior - 06Что означает final для переменной-ссылки?
final у ссылки запрещает переприсваивание, но объект по ней менять можно.
Junior - 07Из каких основных областей состоит память JVM и что где хранится?
Куча (heap) — все объекты и массивы, общая для потоков, её чистит GC. Стек — у каждого потока свой: кадры вызовов с локальными переменными и ссылками. Metaspace — метаданные…
Junior - 08Чем отличаются JDK, JRE и JVM?
Вложенность: JVM исполняет байткод, JRE = JVM + стандартные библиотеки для запуска, JDK = JRE + инструменты разработки.
Junior - 09Что верно про модификатор final в Java?
final-класс нельзя наследовать (String, Integer), final-метод нельзя переопределить, final-переменная или поле присваивается ровно один раз. final-ссылка не делает объект…
Junior - 10Какой порядок catch-блоков корректен для FileNotFoundException и IOException?
Сначала FileNotFoundException, затем IOException: catch проверяются сверху вниз, и общий тип перед частным делает частный недостижимым — ошибка компиляции.
Junior - 11Что такое generics в Java и зачем нужен wildcard ? extends / ? super?
Дженерики — проверка типов на компиляции без приведений вручную. Wildcard: ? extends T — из коллекции читают как T (производитель), ? super T — в коллекцию пишут T (потребитель)…
Junior - 12Чем Thread, Runnable и Callable отличаются?
Thread — сам поток выполнения. Runnable — задача без результата (void run()), Callable<V> — задача с результатом V call(), которая может бросить проверяемое исключение.
Junior - 13Что такое перегрузка метода (overloading)?
Перегрузка (overloading) — несколько методов с одним именем и разными параметрами в одном классе; выбор на этапе компиляции по объявленным типам аргументов. Переопределение…
Junior - 14Чем String, StringBuilder и StringBuffer отличаются?
String неизменяем: каждая «правка» — новый объект. StringBuilder — изменяемый буфер, быстрый, не потокобезопасный. StringBuffer — то же, но с synchronized на каждом методе …
Junior - 15Чем HashSet, LinkedHashSet и TreeSet отличаются?
HashSet — без порядка, операции O(1); LinkedHashSet — помнит порядок вставки, O(1); TreeSet — отсортирован (красно-чёрное дерево), O(log n) и навигация: first, ceiling, subSet.
Junior - 16Какая пара классов преобразует байтовые потоки в символьные и обратно?
InputStreamReader декодирует байты в символы, OutputStreamWriter кодирует символы в байты. Кодировку указывают явно: new InputStreamReader(in, StandardCharsets.UTF_8).
Junior - 17Чем unit-тест отличается от integration-теста?
Unit-тест проверяет единицу логики изолированно: быстро, без БД и сети, зависимости заменены моками. Интеграционный проверяет связку компонентов с реальной инфраструктурой: БД…
Junior - 18Реализуй метод reverse(String s), возвращающий строку в обратном порядке.
Проще всего — new StringBuilder(s).reverse().toString(); вручную — обмен символов массива с двух концов.
Junior - 19Сколько в Java примитивных типов и что хранит char?
Примитивов восемь: byte, short, int, long, float, double, char, boolean; char — 16-битный беззнаковый, один UTF-16 code unit.
Junior - 20Чему равно Integer.MAX_VALUE + 1 и бросит ли это исключение?
Integer.MIN_VALUE, без исключения: целочисленная арифметика молча заворачивается по модулю 2³². 2147483647 + 1 = −2147483648.
Junior - 21Что выведет System.out.println(0.1 + 0.2 == 0.3) и что брать для денег?
false: 0.1 непредставимо точно в двоичной плавающей точке (IEEE 754), сумма даёт 0.30000000000000004. Для денег — BigDecimal из строки (new BigDecimal("0.1")) или копейки в long.
Junior - 22Что произойдёт при выполнении: Integer x = null; int y = x;?
NullPointerException: int y = x компилируется в x.intValue(), а вызов метода на null — NPE. Обёртка может быть null, примитив — нет.
Junior - 23Почему нельзя объявить List<int> и что пишут вместо этого?
Параметр дженерика может быть только ссылочным типом, поэтому пишут List<Integer> с автоупаковкой.
Junior - 24Что такое функциональный интерфейс?
Функциональный интерфейс — интерфейс ровно с одним абстрактным методом (SAM); лямбда и ссылка на метод — его реализация.
Junior - 25Что верно про var (Java 10)?
var — статический вывод типа компилятором из инициализатора; тип фиксируется при компиляции, динамики нет.
Junior - 26Почему java.time (Java 8) предпочитают старым Date/Calendar?
java.time (Java 8) неизменяем, потокобезопасен и с явной моделью: Instant, LocalDate, LocalTime, ZonedDateTime, Duration, Period. Date и Calendar изменяемы, месяцы с нуля…
Junior - 27Что даёт неизменяемость (immutability) объекта?
Неизменяемый объект потокобезопасен без синхронизации, безопасен как ключ Map / элемент Set и его можно свободно кэшировать и делить.
Junior - 28Что на самом деле утверждает Single Responsibility Principle?
SRP: у модуля одна причина для изменения — он отвечает перед одним актором (группой заинтересованных людей).
Junior - 29Что верно про иерархию Collections Framework?
Iterable → Collection → List, Set, Queue; Map — отдельная ветвь, не Collection: она хранит пары, а не элементы.
Junior - 30Что происходит с примитивным аргументом, переданным в метод, если внутри метода его изменить?
Ничего не произойдёт снаружи: Java всегда передаёт аргументы по значению, метод получает копию.
Junior - 31Сколько интерфейсов может реализовать один класс в Java?
Интерфейсов — сколько угодно, класс-родитель — только один.
Junior - 32Что означает принцип DRY?
DRY — Don't Repeat Yourself: каждое знание (правило, расчёт) должно быть записано в одном месте.
Junior - 33Чем List отличается от Set?
List — упорядоченная последовательность с дубликатами и доступом по индексу; Set — только уникальные элементы.
Junior - 34Что лежит в основе ArrayList?
В основе — массив, который при заполнении заменяется большим с копированием элементов (примерно в 1,5 раза).
Junior - 35Сколько стоит получение элемента по индексу в LinkedList?
O(n): произвольного доступа нет, до позиции нужно дойти по ссылкам (JDK начинает с ближнего конца).
Junior - 36Как HashMap находит место для пары ключ-значение?
По hashCode ключа вычисляется индекс корзины в массиве, внутри корзины ключи сравниваются через equals.
Junior - 37Что LinkedHashMap добавляет к обычной HashMap?
Предсказуемый порядок обхода — по умолчанию в порядке вставки — поверх той же хеш-таблицы.
Junior - 38В каком порядке TreeMap отдаёт свои ключи при обходе?
Всегда в порядке сортировки ключей — по естественному порядку (Comparable) или по переданному компаратору.
Junior - 39Что произойдёт при добавлении в HashSet элемента, который там уже есть?
Множество не изменится, а add вернёт false — удобная проверка «элемент новый?».
Junior - 40Чем очередь (FIFO) отличается от стека (LIFO)?
Очередь (FIFO) отдаёт элементы в порядке поступления, стек (LIFO) — начиная с последнего добавленного.
Junior - 41Для чего служит интерфейс Iterator?
Iterator даёт единый способ обойти коллекцию, не раскрывая её устройства: hasNext() и next().
Junior - 42Несколько потоков одновременно пишут в обычную HashMap. Чем это грозит?
HashMap не потокобезопасен: параллельная запись ломает структуру — потерянные записи, неверный size, в старых версиях — зависание обхода.
Junior - 43Что происходит, если исключение не перехвачено ни в одном методе цепочки вызовов?
Исключение поднимается вверх по стеку вызовов до первого подходящего catch; если его нет — поток завершается со стектрейсом.
Junior - 44Что делает конструкция try-with-resources?
try-with-resources гарантированно закрывает ресурсы при любом выходе из блока — без ручного finally.
Junior - 45Чем вызов start() у потока отличается от прямого вызова run()?
start() создаёт новый поток, и уже он вызывает run(); прямой run() выполняется в текущем потоке, как обычный метод.
Junior - 46Что обеспечивает ключевое слово synchronized?
synchronized даёт взаимное исключение (один поток в блоке по данному монитору) и видимость изменений для следующего вошедшего.
Junior - 47Что делает класс AtomicInteger?
AtomicInteger выполняет операции вроде инкремента атомарно без блокировок — на аппаратной инструкции CAS (сравнение с обменом).
Junior - 48Где должен располагаться вызов unlock() при работе с ReentrantLock?
unlock() — в finally, а lock() — перед try: иначе исключение в критической секции оставит замок захваченным навсегда.
Junior - 49Почему задачи отдают в пул потоков, а не создают поток на каждую?
Пул переиспользует потоки и ограничивает их число: создание потока дорого, а неограниченный рост убивает приложение.
Junior - 50Что представляет собой объект Future?
Future — ссылка на результат, который появится позже: можно проверить готовность, дождаться значения или отменить задачу.
Junior - 51Что делает CountDownLatch?
CountDownLatch — защёлка на счётчике: потоки ждут в await(), пока другие не уменьшат счётчик до нуля через countDown().
Junior - 52Что даёт переменная типа ThreadLocal?
ThreadLocal — своя ячейка значения для каждого потока: синхронизация не нужна, потому что значение никто не разделяет.
Junior - 53Чем виртуальный поток отличается от обычного платформенного?
Виртуальный поток — лёгкий поток под управлением JVM, а не ОС: создание и блокировка стоят копейки, их можно держать миллионами.
Junior - 54Где размещаются объекты, создаваемые оператором new?
Объекты — в куче, общей для всех потоков; в стеке потока — кадры вызовов с локальными переменными, в том числе ссылками на объекты.
Junior - 55Какие объекты удаляет сборщик мусора?
Удаляются недостижимые от корней объекты: сборщик обходит граф ссылок от GC roots, всё, до чего не дошёл, — мусор.
Junior - 56Что означает пауза stop-the-world при сборке мусора?
Stop-the-world — все потоки приложения приостанавливаются, пока сборщик выполняет часть работы; эти паузы и стараются сокращать.
Junior - 57Чем слабая ссылка (WeakReference) отличается от обычной?
Слабая ссылка позволяет обратиться к объекту, но не удерживает его от сборки: если обычных ссылок нет, объект соберут.
Junior - 58С чего правильно начинать настройку сборщика мусора?
Начинать с измерений: включить логи GC и понять, в чём проблема — длинные паузы, частые сборки или рост живых данных.
Junior - 59Один поток в цикле читает обычное поле-флаг, другой его меняет, но цикл не завершается. Почему?
Проблема видимости: без синхронизации нет гарантии, что поток увидит изменение, сделанное другим, — нужен volatile или синхронизация.
Junior - 60Что дают дженерики при работе с коллекциями?
Дженерики переносят проверку типов на этап компиляции и убирают ручные приведения при чтении.
Junior - 61Что означает запись List<?> в сигнатуре метода?
List<?> — список неизвестного типа: читать можно как Object, добавлять нельзя ничего, кроме null.
Junior - 62Что означает стирание типов (type erasure)?
Стирание типов: компилятор проверяет типы, но в байткоде параметр заменяется границей (обычно Object) — в рантайме его нет.
Junior - 63Что такое Stream в Java?
Stream — конвейер обработки элементов источника: данные не хранит и источник не меняет.
Junior - 64Что делает терминальная операция collect?
collect — терминальная операция, которая складывает результат конвейера в структуру: список, множество, карту, строку.
Junior - 65Что произойдёт при вызове date.plusDays(1) у объекта LocalDate?
Вернётся новый объект, исходный не изменится — все типы java.time неизменяемы.
Junior - 66Чем байтовые потоки отличаются от символьных?
Байтовые потоки (InputStream/OutputStream) — для любых двоичных данных, символьные (Reader/Writer) — для текста и учитывают кодировку.
Junior - 67Что такое буфер (Buffer) в терминах NIO?
Buffer — область памяти фиксированного размера, через которую данные читаются из канала и пишутся в него.
Junior - 68Что такое сериализация?
Сериализация — преобразование объекта в байты для передачи или хранения и обратное восстановление.
Junior - 69Какую задачу решают порождающие паттерны?
Порождающие паттерны отделяют клиента от конкретных классов создаваемых объектов: создание прячут за фабрикой или билдером.
Junior - 70На каком приёме построено большинство структурных паттернов?
Структурные паттерны построены на композиции и делегировании: объект хранит ссылку на другой и пропускает вызовы через себя.
Junior - 71Что описывают поведенческие паттерны?
Поведенческие паттерны описывают, как объекты распределяют обязанности и взаимодействуют.
Junior - 72Зачем в логировании существуют уровни вроде DEBUG и ERROR?
Уровни нужны, чтобы фильтровать записи по важности: в продакшене — только значимое, подробности — для отладки.
Junior - 73Для чего предназначен record?
record — компактный неизменяемый носитель данных: поля в заголовке, а конструктор, аксессоры, equals, hashCode и toString создаёт компилятор.
Junior - 74Что делает модификатор sealed у класса или интерфейса?
sealed ограничивает список наследников: наследовать или реализовывать могут только перечисленные в permits типы.
Junior - 75Что делает JIT-компилятор в JVM?
JIT компилирует часто выполняемые участки байткода в машинный код прямо во время работы программы.
Junior - 76Как написать модульный тест на JUnit 5?
Тест — метод с @Test в классе в src/test/java. Проверки — assertEquals(ожидаемое, фактическое), assertTrue, assertThrows для исключений; удобнее — AssertJ…
Junior - 77Зачем нужны Maven и Gradle и как устроена сборка Java-проекта?
Система сборки скачивает зависимости нужных версий из репозитория (Maven Central), компилирует код, запускает тесты и упаковывает результат (jar). Maven описывает проект…
Junior - 78Что дают switch-выражения, text blocks и сопоставление с образцом в современной Java?
Switch-выражение (Java 14) возвращает значение, использует стрелки case A -> ... без проваливания и требует покрыть все варианты (для enum и sealed — проверяет компилятор). Text…
Junior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.