На какие технические темы по Java стоит подготовиться к собеседованию?

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

Ответ

К собеседованию на Java-разработчика стоит освежить ключевые темы из разных областей экосистемы.

Основные блоки тем:

  1. Java Core:

    • Многопоточность: Thread, Runnable, ExecutorService, Concurrent Collections, synchronized, volatile, Atomic-классы.
    • Коллекции: Иерархия List, Set, Map, их реализации (ArrayList, HashMap) и отличия.
    • JVM и память: Модель памяти (Heap, Stack), сборка мусора (алгоритмы GC), finalize.
  2. Паттерны и принципы:

    • SOLID, принципы DRY, KISS, YAGNI.
    • Паттерны проектирования (GoF): Singleton, Factory, Observer, Strategy. Знать, когда и зачем применять.
  3. Фреймворки и библиотеки:

    • Spring (Core, Boot, MVC, Data): Dependency Injection, бины, аннотации (@Autowired, @Component).
    • ORM (Hibernate/JPA): Отображение сущностей, EntityManager, ленивая/жадная загрузка.
  4. Тестирование: JUnit 5, Mockito для мокинга, интеграционные тесты.

Пример кода (Thread-safe Singleton):

public class Singleton {
    // volatile гарантирует видимость изменения instance всеми потоками
    private static volatile Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        // Double-checked locking для оптимизации
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Готов обсудить нюансы реализации, альтернативы (enum, static holder) и связанные темы (порядок инициализации).