Какие ключевые темы нужно знать для собеседования по Java?

«Какие ключевые темы нужно знать для собеседования по Java?» — вопрос из категории Other, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для успешного собеседования на позицию Java-разработчика необходимо уверенное знание следующих ключевых областей:

1. Основы языка (Core Java)

  • Типы данных: Примитивы (int, double) vs объекты-обертки (Integer, Double), автоупаковка/распаковка.
  • Строки: Иммутабельность (immutable), пул строк (String Pool), сравнение через equals() и ==.
    String a = "hello"; // Может быть взята из пула
    String b = new String("hello"); // Всегда новый объект в куче
    System.out.println(a == b); // false (разные ссылки)
    System.out.println(a.equals(b)); // true (одинаковое содержимое)
  • Управление памятью: Структура памяти JVM (Heap, Stack, Metaspace), сборка мусора (Garbage Collection).

2. Объектно-ориентированное программирование (ООП)

  • 4 принципа: Абстракция, Инкапсуляция, Наследование, Полиморфизм.
  • Абстрактные классы vs Интерфейсы: Их эволюция в Java 8 (дефолтные методы) и Java 9 (приватные методы).

3. Коллекции (Collections Framework)

  • Иерархия: List (ArrayList, LinkedList), Set (HashSet, TreeSet), Map (HashMap, ConcurrentHashMap).
  • Внутреннее устройство HashMap: Хэш-функция, коллизии, корзины (buckets), принцип работы get() и put().
  • Сравнение и сортировка: Интерфейсы Comparable и Comparator.

4. Многопоточность (Concurrency)

  • Создание потоков: Thread, Runnable, Callable.
  • Синхронизация: Ключевое слово synchronized, блокировки (Lock).
  • Потокобезопасные коллекции: ConcurrentHashMap, CopyOnWriteArrayList.
  • **Ключевое слово volatile и атомарные классы (AtomicInteger).
  • Пулы потоков (ExecutorService).

5. Обработка исключений (Exception Handling)

  • Иерархия: Throwable -> Error и Exception (проверяемые Checked и непроверяемые Runtime).
  • Try-with-resources для автоматического закрытия ресурсов, реализующих AutoCloseable.
    try (FileInputStream fis = new FileInputStream("file.txt");
         BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
        // Работа с ресурсами
    } // fis и br закроются автоматически

6. Современные версии Java (8+)

  • Лямбда-выражения и функциональные интерфейсы (Function, Predicate, Consumer, Supplier).
  • Stream API для работы с коллекциями.
  • Optional для защиты от NullPointerException.
  • Модули (Java Platform Module System — JPMS) в Java 9+.