Ответ
К собеседованию на Java-разработчика стоит освежить ключевые темы из разных областей экосистемы.
Основные блоки тем:
-
Java Core:
- Многопоточность:
Thread,Runnable,ExecutorService,Concurrent Collections,synchronized,volatile,Atomic-классы. - Коллекции: Иерархия
List,Set,Map, их реализации (ArrayList,HashMap) и отличия. - JVM и память: Модель памяти (Heap, Stack), сборка мусора (алгоритмы GC),
finalize.
- Многопоточность:
-
Паттерны и принципы:
- SOLID, принципы DRY, KISS, YAGNI.
- Паттерны проектирования (GoF): Singleton, Factory, Observer, Strategy. Знать, когда и зачем применять.
-
Фреймворки и библиотеки:
- Spring (Core, Boot, MVC, Data): Dependency Injection, бины, аннотации (
@Autowired,@Component). - ORM (Hibernate/JPA): Отображение сущностей,
EntityManager, ленивая/жадная загрузка.
- Spring (Core, Boot, MVC, Data): Dependency Injection, бины, аннотации (
-
Тестирование: 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) и связанные темы (порядок инициализации).