← Все навыки

Java. Core

Устройство языка от ООП и контрактов объекта до JVM, сборщика мусора и лайвкодинга на Core-секции собеседования

11 модулей Junior → Middle / Senior Индивидуально с ментором

Для кого этот навык

  • Java-разработчики, которые хотят понимать не только «как использовать», но и «почему так устроено»
  • Те, кто готовится к Core-секции собеседования уровня Middle / Senior
  • Все, кто хочет уверенно отвечать на вопросы про контракт equals/hashCode, устройство HashMap, type erasure и сборщики мусора

Курс ведёт Алексей Ушаровский — backend-разработчик в высоконагруженных системах, который регулярно проводит технические собеседования. Разбираем не академическую теорию, а production-код, типичные ошибки кандидатов и причины, по которым язык устроен именно так.

Программа

ООП в Java

Система типов и принципы проектирования
  • Классы и объекты, наследование против композиции, полиморфизм
  • Интерфейс против абстрактного класса, вложенные классы
  • Records, sealed-классы и enum
  • SOLID, DRY, KISS, YAGNI и GRASP — с мерой
  • Singleton как антипаттерн, рефакторинг switch в паттерн Стратегия

Контракты объекта

equals, hashCode, Comparable — и что ломается без них
  • Класс Object и его методы, равенство: == против equals
  • Контракт equals и связка hashCode с equals
  • Порядок объектов: Comparable и Comparator
  • Клонирование и иммутабельные классы

Строки, примитивы и обёртки

String pool, автоупаковка и деньги в BigDecimal
  • Почему String неизменяем и как устроен пул строковых литералов
  • StringBuilder и StringBuffer
  • Пароли: char[] вместо String
  • Примитивы и обёртки, BigDecimal и BigInteger

Исключения

Иерархия Throwable и работа с ресурсами
  • Иерархия Throwable, checked против unchecked
  • try-catch-finally и try-with-resources
  • Собственные исключения и валидация аргументов

Коллекции

JCF изнутри: от ArrayList до устройства HashMap
  • Иерархия JCF: Iterable, Collection и почему Map отдельно
  • ArrayList, LinkedList, ArrayDeque и PriorityQueue
  • Итераторы, fail-fast, иммутабельные коллекции
  • HashMap изнутри и требования к ключу
  • LinkedHashMap, TreeMap, Set-реализации, EnumMap и EnumSet

Дженерики

Type erasure, wildcards, PECS + 5 заданий
  • Обобщённые классы и методы, параметры типа (T/E/K/V/R)
  • Type erasure, raw types, unchecked warnings
  • Инвариантность дженериков против ковариантности массивов
  • Ограничения типа (T extends Number), wildcards ? extends / ? super, PECS
  • Разбор вопросов с собеседований по дженерикам

Лямбды, Stream API и Optional

Ленивый pipeline + 8 заданий
  • Функциональные интерфейсы и лямбды
  • Stream как ленивый pipeline, Spliterator, short-circuit
  • Stateless/stateful операции: filter, map, flatMap, reduce, collect
  • Collectors: groupingBy, partitioningBy, joining
  • Optional, числовые потоки, параллельные стримы

JVM изнутри

Байткод, загрузчики классов, области памяти
  • JVM, JRE, JDK: три уровня платформы
  • Байткод и переносимость, компиляция против интерпретации
  • Загрузчики классов и жизненный цикл класса
  • Области памяти JVM: Heap, Stack, Metaspace

GC и диагностика памяти

От поколенческой модели до heap dump в Eclipse MAT
  • GC Roots и tracing GC, поколенческая модель: Young/Old, Eden, Survivor, TLAB
  • Алгоритмы: Mark-Sweep, Mark-Compact, Copying
  • Эволюция сборщиков: Serial, Parallel, CMS, G1, ZGC, Shenandoah
  • Типы ссылок: Strong, Soft, Weak, Phantom
  • Флаги памяти, GC-логирование, heap dump, JFR и Mission Control

Подготовка к Core-секции собеседования

Лайвкодинг и типовые ловушки
  • Из чего состоит Core-секция и что оценивают помимо кода
  • Сводка задач-ловушек курса
  • Реализация упрощённого HashMap руками
  • Типовые форматы заданий

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

Разбор вопросов по всем темам курса
  • Вопросы по каждой теме курса с эталонными ответами
  • Формулировки уровня Junior, Middle и Senior

Практика

14 заданий с тестами — реализуете код, прогоняете тесты, все должны быть зелёными

  • Обобщённый контейнер Box<T> без Object и приведения типов
  • Обобщённые методы и ограничения типа <T extends Number>
  • Wildcards и PECS в методе copy(List<? extends Number>, List<? super Number>)
  • Цепочки стримов: filter/map/collect, агрегации, flatMap, Collectors
  • Корректный parallelStream без race condition
  • Поиск и устранение утечки памяти в EventBus, анализ heap dump