← Все навыки

Core Java

Generics, Garbage Collector и Stream API — внутреннее устройство трёх ключевых механизмов языка

Generics GC Stream API Индивидуально с ментором

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

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

Программа

Дженерики

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

Garbage Collector

Области памяти JVM, поколения, сборщики
  • Heap, Stack, Metaspace; GC Roots и tracing GC
  • Поколенческая модель: Young/Old, Eden, Survivor, TLAB
  • Алгоритмы: Mark-Sweep, Mark-Compact, Copying
  • Эволюция сборщиков: Serial, Parallel, CMS, G1, ZGC, Shenandoah
  • Типы ссылок (Strong/Soft/Weak/Phantom), утечки памяти и диагностика (heap dump, -Xlog:gc)

Stream API

Ленивый pipeline, collectors, параллельные стримы
  • Stream как ленивый pipeline, Spliterator, short-circuit
  • Stateless/stateful операции: filter, map, flatMap, reduce, collect
  • Collectors: groupingBy, partitioningBy, joining
  • Optional и числовые стримы
  • Параллельные стримы: когда помогают, когда вредят

Практика

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

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