Языки программирования

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

15 уроков · 5 разделов · бесплатно, без регистрации

Реальные вопросы с Java-собеседований — не теория ради теории, а разбор конкретных ловушек и «что выведет этот код».

Курс «Вопросы на собеседовании: Java» состоит из 5 разделов и 15 уроков: Память и объекты, ООП в Java, Коллекции, Многопоточность и Исключения и особенности JVM. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Память и объекты

    1. Примитивы и обёртки: int vs Integer

      Разница между int и Integer в Java: автоупаковка, unboxing, NullPointerException и когда обёртки замедляют программу.

    2. == или .equals(): частая ловушка

      Почему new String("a") == new String("a") — false, что такое кеш Integer от -128 до 127, и как сравнивать объекты в Java правильно.

    3. Контракт hashCode() и equals()

      Зачем переопределять hashCode() вместе с equals(), как HashMap использует оба метода вместе и что сломается, если забыть про hashCode.

  2. 2 ООП в Java

    1. Интерфейс или абстрактный класс?

      Когда в Java выбирать интерфейс, а когда абстрактный класс: default-методы, множественное наследование интерфейсов и разбор конфликтов на примерах кода.

    2. final, static и когда их использовать

      Разница между final-переменной, методом и классом в Java, как работают static-поля и почему они — частая причина утечек памяти в долго работающих программах.

    3. Полиморфизм: override и overload

      Чем override отличается от overload в Java, как работает позднее связывание методов и почему поля, в отличие от методов, не переопределяются, а скрываются.

  3. 3 Коллекции

    1. ArrayList против LinkedList

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

    2. Как устроена HashMap изнутри

      Бакеты, коллизии и hashCode() в HashMap: почему поиск в среднем работает за O(1), что ломает эту скорость и как не убить производительность плохим hashCode().

    3. Comparable и Comparator: сортировка объектов

      Чем Comparable отличается от Comparator в Java: где объявлять сортировку по умолчанию, как отсортировать список объектов сразу по нескольким полям.

  4. 4 Многопоточность

    1. Thread и Runnable: как запустить поток

      Разбираем на собеседовании: чем Runnable лучше наследования от Thread, как правильно запускать потоки в Java и какую ошибку допускают новички.

    2. synchronized и volatile

      Разбор для собеседования: что реально гарантируют synchronized и volatile в Java, почему volatile не заменяет блокировку и в каких случаях его достаточно.

    3. Race condition на живом примере

      Race condition в Java на конкретном коде: как два потока портят общий счётчик, почему это происходит и три рабочих способа починить — от synchronized до AtomicInteger.

  5. 5 Исключения и особенности JVM

    1. Checked и unchecked исключения

      Разбираем, чем checked-исключения отличаются от unchecked, зачем Java заставляет писать throws и когда это раздражает даже опытных разработчиков.

    2. try-with-resources и finally

      Разбираем порядок выполнения finally при исключении и автоматическое закрытие ресурсов через try-with-resources и интерфейс AutoCloseable.

    3. Сборщик мусора: как JVM освобождает память

      Простыми словами о том, как работает сборщик мусора в Java: когда объект становится «мусором», идея поколений young и old generation.