Разборы тем

Статьи: Java

Java от junior до senior: ООП и основы языка, коллекции изнутри, многопоточность, JVM и GC, Stream API, паттерны.

57статей
≈ 2 чна чтение
264вопроса в разборе

Основы языка

4
  1. 01Примитивы, обёртки и Integer cache

    Восемь примитивов и их диапазоны, autoboxing, кэш Integer и ловушка ==, NPE при распаковке и цена боксинга.

    3 мин
  2. 02Строки: неизменяемость, пул и StringBuilder

    Почему String immutable, String pool и intern, конкатенация и StringBuilder, char/code points и compact strings.

    3 мин
  3. 03final, static и порядок инициализации

    Семантика final (и почему это не immutable), static-члены, порядок инициализации класса и объекта, константы и ловушки.

    3 мин
  4. 04Методы: pass-by-value, перегрузка, varargs

    Почему Java всегда pass-by-value, разрешение перегрузки на этапе компиляции и устройство varargs.

    2 мин

ООП

3
  1. 05ООП и его принципы

    Инкапсуляция, наследование, полиморфизм, абстракция — зачем они нужны, как работают внутри и почему композицию предпочитают наследованию.

    4 мин
  2. 06Интерфейсы против абстрактных классов

    Контракт против частичной реализации, default/static/private-методы, разрешение конфликта default-методов и критерий выбора.

    2 мин
  3. 07Проектирование неизменяемых классов

    Зачем нужна неизменяемость, рецепт immutable-класса, защитные копии, безопасная публикация и records.

    2 мин

Принципы проектирования

2
  1. 08SOLID: пять принципов дизайна

    SRP, OCP, LSP, ISP, DIP — что каждая буква значит на самом деле, как выглядит нарушение в Java-коде, чем DIP отличается от DI и IoC.

    7 мин
  2. 09DRY, KISS, YAGNI и качество связей

    Дублирование знания против дублирования текста, цена преждевременной абстракции, связность и связанность, закон Деметры, каталог code smells и когда рефакторить.

    7 мин

Равенство, equals и hashCode

1
  1. 10Равенство: ==, equals и hashCode

    Идентичность против логического равенства, контракт equals и hashCode, проблема equals с наследованием и корректная реализация.

    3 мин

Коллекции

10
  1. 11Collections Framework: карта и выбор структуры

    Иерархия интерфейсов, сложности операций основных структур, неизменяемые коллекции и принцип выбора по паттерну доступа.

    5 мин
  2. 12ArrayList: динамический массив изнутри

    Бэкенд-массив, рост в 1.5×, амортизированная O(1), стоимость вставки/удаления и когда массив лучше.

    2 мин
  3. 13LinkedList и миф о дешёвой вставке

    Двусвязные узлы, реальная стоимость операций, cache locality и почему ArrayList/ArrayDeque почти всегда лучше.

    1 мин
  4. 14HashMap изнутри: бакеты, treeify, resize

    Таблица бакетов, перемешивание хеша и индекс, превращение цепочки в дерево, ресайз и load factor, контракт ключа.

    2 мин
  5. 15LinkedHashMap и LRU-кэш

    Порядок вставки против порядка доступа, связанный список поверх HashMap и реализация LRU через removeEldestEntry.

    3 мин
  6. 16TreeMap, TreeSet и сортировка

    Красно-чёрное дерево, NavigableMap, Comparable против Comparator, согласованность с equals и TimSort.

    1 мин
  7. 17Set: HashSet, LinkedHashSet, TreeSet

    Почему Set построен поверх Map, три реализации и их гарантии порядка, роль equals/hashCode.

    3 мин
  8. 18Очереди и стек: ArrayDeque и PriorityQueue

    ArrayDeque как кольцевой буфер и замена Stack, PriorityQueue как бинарная куча и её неотсортированная итерация.

    1 мин
  9. 19Итераторы: fail-fast и ConcurrentModificationException

    Iterator и ListIterator, механизм modCount, причины CME даже в одном потоке и безопасное удаление.

    2 мин
  10. 20Конкурентные коллекции

    ConcurrentHashMap без сегментов (CAS + блокировка бакета), запрет null, CopyOnWriteArrayList и BlockingQueue.

    2 мин

Исключения и ресурсы

2
  1. 21Исключения: иерархия и checked/unchecked

    Дерево Throwable, философия checked против unchecked, раскрутка стека и стоимость, цепочки причин и практики обработки.

    2 мин
  2. 22Управление ресурсами: try-with-resources

    Беды ручного finally, автозакрытие AutoCloseable, suppressed-исключения и разница Closeable/AutoCloseable.

    2 мин

Многопоточность

9
  1. 23Потоки: создание, состояния и отмена

    Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.

    3 мин
  2. 24synchronized, мониторы и wait/notify

    Взаимное исключение и видимость через монитор, reentrancy, guarded blocks с wait/notify и причины deadlock.

    2 мин
  3. 25volatile, атомарность и CAS

    Разница видимости и атомарности, atomic-классы, compare-and-swap и ABA, контеншн и LongAdder.

    2 мин
  4. 26Явные блокировки: ReentrantLock, RW и Condition

    Когда synchronized мало, ReentrantLock с tryLock/fairness, ReadWriteLock и StampedLock, Condition вместо wait/notify.

    1 мин
  5. 27Пулы потоков и ExecutorService

    Зачем пул, параметры ThreadPoolExecutor, ловушки фабрик Executors, выбор размера и корректное завершение.

    2 мин
  6. 28Future и CompletableFuture

    Ограничения Future, асинхронная композиция CompletableFuture, async-варианты с пулами и обработка ошибок.

    2 мин
  7. 29Координация: семафоры, защёлки и барьеры

    Semaphore, CountDownLatch, CyclicBarrier, Phaser и Exchanger — что каждый делает и когда выбирать.

    2 мин
  8. 30ThreadLocal и Fork/Join

    Состояние на поток и утечки в пулах, InheritableThreadLocal, work-stealing в ForkJoinPool и общий пул parallel streams.

    2 мин
  9. 31Виртуальные потоки (Project Loom)

    Лёгкие потоки JVM, монтирование на carrier, когда их применять, почему не пулят и проблема pinning.

    2 мин

JVM и сборка мусора

7
  1. 32Загрузка классов и class loaders

    Жизненный цикл класса (loading/linking/initialization), иерархия загрузчиков с делегированием, триггеры инициализации и изоляция.

    2 мин
  2. 33Память JVM и устройство объекта

    Runtime data areas, стек против кучи, заголовок объекта и выравнивание, compressed oops и metaspace.

    2 мин
  3. 34GC: поколения и продвижение объектов

    Гипотеза о поколениях, Eden и Survivor, minor GC через копирование, tenuring и преждевременное продвижение.

    2 мин
  4. 35GC: алгоритмы и сборщики

    Mark-sweep-compact и копирование, stop-the-world и safepoints, конкурентная маркировка, G1 и ZGC и выбор по throughput/latency.

    2 мин
  5. 36GC: корни, достижимость и типы ссылок

    GC roots и reachability, strong/soft/weak/phantom-ссылки, Cleaner вместо finalize и утечки через сильные ссылки.

    2 мин
  6. 37GC: тюнинг и мониторинг

    Ключевые флаги, unified GC-логи, метрики (паузы, throughput, allocation/promotion rate) и диагностика частых проблем.

    2 мин
  7. 38Java Memory Model: happens-before и volatile

    Зачем нужна модель памяти, видимость и переупорядочивание, отношение happens-before, семантика volatile и final, гонки данных.

    2 мин

Дженерики

3
  1. 39Дженерики и стирание типов

    Типобезопасность на компиляции, механизм type erasure и его последствия, дженерик-методы, ограниченные параметры и опасность raw types.

    3 мин
  2. 40Wildcards и правило PECS

    Инвариантность дженериков против ковариантных массивов, ? extends/super, и когда что выбирать по PECS.

    2 мин
  3. 41Дженерики: массивы, varargs и bridge-методы

    Почему дженерики не дружат с массивами, heap pollution и @SafeVarargs, синтетические bridge-методы и reifiable-типы.

    2 мин

Лямбды и Stream API

4
  1. 42Лямбды и функциональные интерфейсы

    SAM-интерфейсы, лямбда против анонимного класса, замыкания и effectively final, ссылки на методы и стандартные интерфейсы.

    2 мин
  2. 43Stream API: устройство и ленивый конвейер

    Что такое стрим, источники, промежуточные против терминальных, ленивость и short-circuiting, stateful-операции, параллельность и примитивные стримы.

    2 мин
  3. 44Collectors и свёртка

    reduce против collect, базовые коллекторы и ловушка toMap, группировка и downstream-коллекторы, характеристики и параллельность.

    2 мин
  4. 45Optional: явное отсутствие значения

    Зачем Optional, orElse против orElseGet, композиция map/flatMap/filter и антипаттерны использования.

    2 мин

Дата и время

1
  1. 46Дата и время: java.time

    Почему java.time вытеснил Date/Calendar, машинное (Instant) и человеческое (LocalDateTime) время, часовые пояса, Duration/Period и потокобезопасный DateTimeFormatter.

    2 мин

Ввод-вывод и NIO

2
  1. 47Потоки ввода-вывода: байты, символы, буферы

    Байтовые и символьные потоки, кодировки и Charset, буферизация и системные вызовы, декоратор-паттерн и современный файловый API.

    2 мин
  2. 48NIO: каналы, буферы и неблокирующий ввод-вывод

    io против nio, Channel и ByteBuffer с его flip/clear, Selector и event loop, влияние виртуальных потоков и NIO.2.

    2 мин

Сериализация

1
  1. 49Сериализация и форматы данных

    Java serialization и её механика, serialVersionUID, почему её опасно использовать и какие форматы выбирают вместо неё.

    2 мин

Паттерны проектирования

3
  1. 50Порождающие паттерны

    Factory Method против статической фабрики Блоха, Abstract Factory, Builder в двух версиях, Prototype и почему clone() считают ошибкой, object pool — с примерами из JDK и Spring.

    6 мин
  2. 51Структурные паттерны

    Adapter, Decorator, Proxy и чем они отличаются друг от друга, Facade, Composite, Bridge и Flyweight — на примерах java.io, java.lang.reflect.Proxy и Spring AOP.

    4 мин
  3. 52Поведенческие паттерны

    Strategy, Template Method, Observer, Command, Chain of Responsibility, State, Iterator и Visitor — с примерами из JDK, Spring и заменой паттернов лямбдами и sealed-типами.

    6 мин

Тестирование и логирование

1
  1. 53Тестирование, логирование и базовые паттерны

    Unit/integration тесты, уровни логирования, MDC и Singleton без ловушек.

    2 мин

Современная Java

3
  1. 54Records: компактные носители данных

    Что генерирует record, канонический и компактный конструкторы, ограничения и когда применять.

    2 мин
  2. 55Sealed-типы и pattern matching

    Закрытые иерархии через sealed, pattern matching в instanceof и switch, деконструкция записей и проверка исчерпываемости.

    2 мин
  3. 56Современный синтаксис: var, текстовые блоки, switch

    Локальный вывод типа var, многострочные текстовые блоки, switch-выражения и другие удобства новых версий.

    2 мин

JIT и производительность

1
  1. 57JIT, оптимизации и бенчмаркинг

    Tiered compilation C1/C2, ключевые оптимизации JIT (inlining, escape analysis), деоптимизация и прогрев, корректные микробенчмарки на JMH.

    2 мин
Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования