Ответ
Рекомендуется двигаться от фундаментальных тем к более специализированным.
1. Основы Java (Ядро):
- ООП: Четко понимать 4 принципа: Инкапсуляция, Наследование, Полиморфизм, Абстракция. Уметь привести примеры.
- Синтаксис: Типы данных (примитивы vs объекты), модификаторы доступа, циклы, условные операторы.
- Коллекции (java.util):
List(ArrayList, LinkedList),Set(HashSet, TreeSet),Map(HashMap, ConcurrentHashMap).- Понимать отличия, временную сложность (Big O) основных операций.
// Пример работы с ArrayList List<String> list = new ArrayList<>(); list.add("A"); // [A] list.add("B"); // [A, B] list.add(1, "C"); // Вставка по индексу 1 System.out.println(list); // Результат: [A, C, B]
- Исключения: Иерархия (
Throwable->Exception/Error), checked vs unchecked, обработка (try-catch-finally).
2. Многопоточность (Concurrency):
- Создание потоков (
Thread,Runnable). - Синхронизация (
synchronized,volatile,Lock). - Пул потоков (
ExecutorService). - Проблемы: race condition, deadlock, livelock.
3. JVM и память:
- Структура памяти (heap, stack, metaspace).
- Сборка мусора (Garbage Collection): Принципы работы, основные алгоритмы (Serial, Parallel, G1, ZGC).
4. Популярные фреймворки и библиотеки:
- Spring (Core): Принципы IoC (Inversion of Control) и DI (Dependency Injection), бины, аннотации (
@Component,@Autowired). - Spring Boot: Auto-configuration, создание REST API.
5. Базы данных и SQL:
- Основные типы JOIN (INNER, LEFT).
- Индексы: зачем нужны и как влияют на производительность.
- Транзакции, ACID.
6. Алгоритмы и структуры данных (базово):
- Понимание сложности алгоритмов (O-нотация).
- Основные алгоритмы сортировки (QuickSort, MergeSort).
- Поиск в структурах данных.
Стратегия: Изучать теорию и сразу закреплять практикой — писать код, решать задачи на LeetCode/HackerRank, отвечать на типовые вопросы.