Подборка вопросов

Вопросы на собеседовании Java junior

База Java для первого собеседования — ООП, коллекции, исключения, основы языка.

78вопросов
  1. 01Какие четыре принципа ООП?

    Четыре принципа: инкапсуляция, наследование, полиморфизм, абстракция — к каждому короткий пример.

    Junior
  2. 02Что вернут сравнения для new String("a") и new String("a") через == и через equals()?

    == даст false, equals() — true: == сравнивает ссылки, equals() у String — содержимое.

    Junior
  3. 03Чем ArrayList отличается от LinkedList и что брать по умолчанию?

    ArrayList — динамический массив: доступ по индексу O(1), добавление в конец амортизированно O(1). LinkedList — двусвязный список: O(1) только при вставке или удалении у уже…

    Junior
  4. 04Integer a=127, b=127, c=128, d=128. Что вернут a==b и c==d?

    a==b → true, c==d → false: Integer.valueOf() кэширует значения от −128 до 127.

    Junior
  5. 05Для чего предназначен Optional?

    Optional — контейнер «значение или пусто», который явно говорит, что результата может не быть, и заставляет это обработать.

    Junior
  6. 06Что означает final для переменной-ссылки?

    final у ссылки запрещает переприсваивание, но объект по ней менять можно.

    Junior
  7. 07Из каких основных областей состоит память JVM и что где хранится?

    Куча (heap) — все объекты и массивы, общая для потоков, её чистит GC. Стек — у каждого потока свой: кадры вызовов с локальными переменными и ссылками. Metaspace — метаданные…

    Junior
  8. 08Чем отличаются JDK, JRE и JVM?

    Вложенность: JVM исполняет байткод, JRE = JVM + стандартные библиотеки для запуска, JDK = JRE + инструменты разработки.

    Junior
  9. 09Что верно про модификатор final в Java?

    final-класс нельзя наследовать (String, Integer), final-метод нельзя переопределить, final-переменная или поле присваивается ровно один раз. final-ссылка не делает объект…

    Junior
  10. 10Какой порядок catch-блоков корректен для FileNotFoundException и IOException?

    Сначала FileNotFoundException, затем IOException: catch проверяются сверху вниз, и общий тип перед частным делает частный недостижимым — ошибка компиляции.

    Junior
  11. 11Что такое generics в Java и зачем нужен wildcard ? extends / ? super?

    Дженерики — проверка типов на компиляции без приведений вручную. Wildcard: ? extends T — из коллекции читают как T (производитель), ? super T — в коллекцию пишут T (потребитель)…

    Junior
  12. 12Чем Thread, Runnable и Callable отличаются?

    Thread — сам поток выполнения. Runnable — задача без результата (void run()), Callable<V> — задача с результатом V call(), которая может бросить проверяемое исключение.

    Junior
  13. 13Что такое перегрузка метода (overloading)?

    Перегрузка (overloading) — несколько методов с одним именем и разными параметрами в одном классе; выбор на этапе компиляции по объявленным типам аргументов. Переопределение…

    Junior
  14. 14Чем String, StringBuilder и StringBuffer отличаются?

    String неизменяем: каждая «правка» — новый объект. StringBuilder — изменяемый буфер, быстрый, не потокобезопасный. StringBuffer — то же, но с synchronized на каждом методе …

    Junior
  15. 15Чем HashSet, LinkedHashSet и TreeSet отличаются?

    HashSet — без порядка, операции O(1); LinkedHashSet — помнит порядок вставки, O(1); TreeSet — отсортирован (красно-чёрное дерево), O(log n) и навигация: first, ceiling, subSet.

    Junior
  16. 16Какая пара классов преобразует байтовые потоки в символьные и обратно?

    InputStreamReader декодирует байты в символы, OutputStreamWriter кодирует символы в байты. Кодировку указывают явно: new InputStreamReader(in, StandardCharsets.UTF_8).

    Junior
  17. 17Чем unit-тест отличается от integration-теста?

    Unit-тест проверяет единицу логики изолированно: быстро, без БД и сети, зависимости заменены моками. Интеграционный проверяет связку компонентов с реальной инфраструктурой: БД…

    Junior
  18. 18Реализуй метод reverse(String s), возвращающий строку в обратном порядке.

    Проще всего — new StringBuilder(s).reverse().toString(); вручную — обмен символов массива с двух концов.

    Junior
  19. 19Сколько в Java примитивных типов и что хранит char?

    Примитивов восемь: byte, short, int, long, float, double, char, boolean; char — 16-битный беззнаковый, один UTF-16 code unit.

    Junior
  20. 20Чему равно Integer.MAX_VALUE + 1 и бросит ли это исключение?

    Integer.MIN_VALUE, без исключения: целочисленная арифметика молча заворачивается по модулю 2³². 2147483647 + 1 = −2147483648.

    Junior
  21. 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. 22Что произойдёт при выполнении: Integer x = null; int y = x;?

    NullPointerException: int y = x компилируется в x.intValue(), а вызов метода на null — NPE. Обёртка может быть null, примитив — нет.

    Junior
  23. 23Почему нельзя объявить List<int> и что пишут вместо этого?

    Параметр дженерика может быть только ссылочным типом, поэтому пишут List<Integer> с автоупаковкой.

    Junior
  24. 24Что такое функциональный интерфейс?

    Функциональный интерфейс — интерфейс ровно с одним абстрактным методом (SAM); лямбда и ссылка на метод — его реализация.

    Junior
  25. 25Что верно про var (Java 10)?

    var — статический вывод типа компилятором из инициализатора; тип фиксируется при компиляции, динамики нет.

    Junior
  26. 26Почему java.time (Java 8) предпочитают старым Date/Calendar?

    java.time (Java 8) неизменяем, потокобезопасен и с явной моделью: Instant, LocalDate, LocalTime, ZonedDateTime, Duration, Period. Date и Calendar изменяемы, месяцы с нуля…

    Junior
  27. 27Что даёт неизменяемость (immutability) объекта?

    Неизменяемый объект потокобезопасен без синхронизации, безопасен как ключ Map / элемент Set и его можно свободно кэшировать и делить.

    Junior
  28. 28Что на самом деле утверждает Single Responsibility Principle?

    SRP: у модуля одна причина для изменения — он отвечает перед одним актором (группой заинтересованных людей).

    Junior
  29. 29Что верно про иерархию Collections Framework?

    Iterable → Collection → List, Set, Queue; Map — отдельная ветвь, не Collection: она хранит пары, а не элементы.

    Junior
  30. 30Что происходит с примитивным аргументом, переданным в метод, если внутри метода его изменить?

    Ничего не произойдёт снаружи: Java всегда передаёт аргументы по значению, метод получает копию.

    Junior
  31. 31Сколько интерфейсов может реализовать один класс в Java?

    Интерфейсов — сколько угодно, класс-родитель — только один.

    Junior
  32. 32Что означает принцип DRY?

    DRY — Don't Repeat Yourself: каждое знание (правило, расчёт) должно быть записано в одном месте.

    Junior
  33. 33Чем List отличается от Set?

    List — упорядоченная последовательность с дубликатами и доступом по индексу; Set — только уникальные элементы.

    Junior
  34. 34Что лежит в основе ArrayList?

    В основе — массив, который при заполнении заменяется большим с копированием элементов (примерно в 1,5 раза).

    Junior
  35. 35Сколько стоит получение элемента по индексу в LinkedList?

    O(n): произвольного доступа нет, до позиции нужно дойти по ссылкам (JDK начинает с ближнего конца).

    Junior
  36. 36Как HashMap находит место для пары ключ-значение?

    По hashCode ключа вычисляется индекс корзины в массиве, внутри корзины ключи сравниваются через equals.

    Junior
  37. 37Что LinkedHashMap добавляет к обычной HashMap?

    Предсказуемый порядок обхода — по умолчанию в порядке вставки — поверх той же хеш-таблицы.

    Junior
  38. 38В каком порядке TreeMap отдаёт свои ключи при обходе?

    Всегда в порядке сортировки ключей — по естественному порядку (Comparable) или по переданному компаратору.

    Junior
  39. 39Что произойдёт при добавлении в HashSet элемента, который там уже есть?

    Множество не изменится, а add вернёт false — удобная проверка «элемент новый?».

    Junior
  40. 40Чем очередь (FIFO) отличается от стека (LIFO)?

    Очередь (FIFO) отдаёт элементы в порядке поступления, стек (LIFO) — начиная с последнего добавленного.

    Junior
  41. 41Для чего служит интерфейс Iterator?

    Iterator даёт единый способ обойти коллекцию, не раскрывая её устройства: hasNext() и next().

    Junior
  42. 42Несколько потоков одновременно пишут в обычную HashMap. Чем это грозит?

    HashMap не потокобезопасен: параллельная запись ломает структуру — потерянные записи, неверный size, в старых версиях — зависание обхода.

    Junior
  43. 43Что происходит, если исключение не перехвачено ни в одном методе цепочки вызовов?

    Исключение поднимается вверх по стеку вызовов до первого подходящего catch; если его нет — поток завершается со стектрейсом.

    Junior
  44. 44Что делает конструкция try-with-resources?

    try-with-resources гарантированно закрывает ресурсы при любом выходе из блока — без ручного finally.

    Junior
  45. 45Чем вызов start() у потока отличается от прямого вызова run()?

    start() создаёт новый поток, и уже он вызывает run(); прямой run() выполняется в текущем потоке, как обычный метод.

    Junior
  46. 46Что обеспечивает ключевое слово synchronized?

    synchronized даёт взаимное исключение (один поток в блоке по данному монитору) и видимость изменений для следующего вошедшего.

    Junior
  47. 47Что делает класс AtomicInteger?

    AtomicInteger выполняет операции вроде инкремента атомарно без блокировок — на аппаратной инструкции CAS (сравнение с обменом).

    Junior
  48. 48Где должен располагаться вызов unlock() при работе с ReentrantLock?

    unlock() — в finally, а lock() — перед try: иначе исключение в критической секции оставит замок захваченным навсегда.

    Junior
  49. 49Почему задачи отдают в пул потоков, а не создают поток на каждую?

    Пул переиспользует потоки и ограничивает их число: создание потока дорого, а неограниченный рост убивает приложение.

    Junior
  50. 50Что представляет собой объект Future?

    Future — ссылка на результат, который появится позже: можно проверить готовность, дождаться значения или отменить задачу.

    Junior
  51. 51Что делает CountDownLatch?

    CountDownLatch — защёлка на счётчике: потоки ждут в await(), пока другие не уменьшат счётчик до нуля через countDown().

    Junior
  52. 52Что даёт переменная типа ThreadLocal?

    ThreadLocal — своя ячейка значения для каждого потока: синхронизация не нужна, потому что значение никто не разделяет.

    Junior
  53. 53Чем виртуальный поток отличается от обычного платформенного?

    Виртуальный поток — лёгкий поток под управлением JVM, а не ОС: создание и блокировка стоят копейки, их можно держать миллионами.

    Junior
  54. 54Где размещаются объекты, создаваемые оператором new?

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

    Junior
  55. 55Какие объекты удаляет сборщик мусора?

    Удаляются недостижимые от корней объекты: сборщик обходит граф ссылок от GC roots, всё, до чего не дошёл, — мусор.

    Junior
  56. 56Что означает пауза stop-the-world при сборке мусора?

    Stop-the-world — все потоки приложения приостанавливаются, пока сборщик выполняет часть работы; эти паузы и стараются сокращать.

    Junior
  57. 57Чем слабая ссылка (WeakReference) отличается от обычной?

    Слабая ссылка позволяет обратиться к объекту, но не удерживает его от сборки: если обычных ссылок нет, объект соберут.

    Junior
  58. 58С чего правильно начинать настройку сборщика мусора?

    Начинать с измерений: включить логи GC и понять, в чём проблема — длинные паузы, частые сборки или рост живых данных.

    Junior
  59. 59Один поток в цикле читает обычное поле-флаг, другой его меняет, но цикл не завершается. Почему?

    Проблема видимости: без синхронизации нет гарантии, что поток увидит изменение, сделанное другим, — нужен volatile или синхронизация.

    Junior
  60. 60Что дают дженерики при работе с коллекциями?

    Дженерики переносят проверку типов на этап компиляции и убирают ручные приведения при чтении.

    Junior
  61. 61Что означает запись List<?> в сигнатуре метода?

    List<?> — список неизвестного типа: читать можно как Object, добавлять нельзя ничего, кроме null.

    Junior
  62. 62Что означает стирание типов (type erasure)?

    Стирание типов: компилятор проверяет типы, но в байткоде параметр заменяется границей (обычно Object) — в рантайме его нет.

    Junior
  63. 63Что такое Stream в Java?

    Stream — конвейер обработки элементов источника: данные не хранит и источник не меняет.

    Junior
  64. 64Что делает терминальная операция collect?

    collect — терминальная операция, которая складывает результат конвейера в структуру: список, множество, карту, строку.

    Junior
  65. 65Что произойдёт при вызове date.plusDays(1) у объекта LocalDate?

    Вернётся новый объект, исходный не изменится — все типы java.time неизменяемы.

    Junior
  66. 66Чем байтовые потоки отличаются от символьных?

    Байтовые потоки (InputStream/OutputStream) — для любых двоичных данных, символьные (Reader/Writer) — для текста и учитывают кодировку.

    Junior
  67. 67Что такое буфер (Buffer) в терминах NIO?

    Buffer — область памяти фиксированного размера, через которую данные читаются из канала и пишутся в него.

    Junior
  68. 68Что такое сериализация?

    Сериализация — преобразование объекта в байты для передачи или хранения и обратное восстановление.

    Junior
  69. 69Какую задачу решают порождающие паттерны?

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

    Junior
  70. 70На каком приёме построено большинство структурных паттернов?

    Структурные паттерны построены на композиции и делегировании: объект хранит ссылку на другой и пропускает вызовы через себя.

    Junior
  71. 71Что описывают поведенческие паттерны?

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

    Junior
  72. 72Зачем в логировании существуют уровни вроде DEBUG и ERROR?

    Уровни нужны, чтобы фильтровать записи по важности: в продакшене — только значимое, подробности — для отладки.

    Junior
  73. 73Для чего предназначен record?

    record — компактный неизменяемый носитель данных: поля в заголовке, а конструктор, аксессоры, equals, hashCode и toString создаёт компилятор.

    Junior
  74. 74Что делает модификатор sealed у класса или интерфейса?

    sealed ограничивает список наследников: наследовать или реализовывать могут только перечисленные в permits типы.

    Junior
  75. 75Что делает JIT-компилятор в JVM?

    JIT компилирует часто выполняемые участки байткода в машинный код прямо во время работы программы.

    Junior
  76. 76Как написать модульный тест на JUnit 5?

    Тест — метод с @Test в классе в src/test/java. Проверки — assertEquals(ожидаемое, фактическое), assertTrue, assertThrows для исключений; удобнее — AssertJ…

    Junior
  77. 77Зачем нужны Maven и Gradle и как устроена сборка Java-проекта?

    Система сборки скачивает зависимости нужных версий из репозитория (Maven Central), компилирует код, запускает тесты и упаковывает результат (jar). Maven описывает проект…

    Junior
  78. 78Что дают switch-выражения, text blocks и сопоставление с образцом в современной Java?

    Switch-выражение (Java 14) возвращает значение, использует стрелки case A -> ... без проваливания и требует покрыть все варианты (для enum и sealed — проверяет компилятор). Text…

    Junior
Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования