Паттерны проектирования
16 вопросов и ответов в разделе Паттерны проектирования.
Вопросы этого раздела
- Что такое паттерны проектирования?
- Какие категории паттернов существуют?
- Что такое Singleton?
- Как реализовать потокобезопасный Singleton?
- Что такое double-checked locking?
- Каковы проблемы с Singleton?
- В чём разница между Factory Method и Abstract Factory?
- Когда использовать Builder?
- Что такое Prototype pattern?
- Когда использовать Strategy?
- Как реализован Observer в Java?
- В чём преимущество Decorator перед наследованием?
- В чём разница между State и Strategy?
- Какие типы Proxy существуют?
- Что такое Iterator pattern?
- Какие антипаттерны вы знаете?
Навигатор по разделу
16 вопросов для подготовки к собеседованию на Middle Java Developer.
📋 Все вопросы
| # | Вопрос | Уровень сложности |
|---|---|---|
| 1 | Что такое паттерны проектирования | ⭐ |
| 2 | Какие категории паттернов существуют | ⭐ |
| 3 | Что такое Singleton | ⭐⭐ |
| 4 | Как реализовать потокобезопасный Singleton | ⭐⭐⭐ |
| 5 | Что такое double-checked locking | ⭐⭐⭐ |
| 6 | Каковы проблемы с Singleton | ⭐⭐ |
| 7 | В чём разница между Factory Method и Abstract Factory | ⭐⭐ |
| 8 | Когда использовать Builder | ⭐⭐ |
| 9 | Что такое Prototype pattern | ⭐⭐ |
| 10 | Когда использовать Strategy | ⭐⭐⭐ |
| 11 | Как реализован Observer в Java | ⭐⭐ |
| 12 | В чём преимущество Decorator перед наследованием | ⭐⭐ |
| 13 | В чём разница между State и Strategy | ⭐⭐⭐ |
| 14 | Какие типы Proxy существуют | ⭐⭐⭐ |
| 15 | Что такое Iterator pattern | ⭐⭐ |
| 16 | Какие антипаттерны вы знаете | ⭐⭐ |
🗺️ Карта зависимостей тем
┌──────────────────────────────────────────┐
│ ОСНОВЫ (1-2) │
│ 1. Что такое паттерны │
│ 2. Категории паттернов │
└──────────────────┬───────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌────────────────────┐
│ ПОРОЖДАЮЩИЕ │ │ ПОВЕДЕНЧЕСКИЕ │ │ СТРУКТУРНЫЕ │
│ (3-9) │ │ (10-11, 13) │ │ (12, 14-15) │
│ 3. Singleton │ │ 10. Strategy │ │ 12. Decorator │
│ 4. Thread-safe │ │ 11. Observer │ │ 14. Proxy │
│ Singleton │ │ 13. State vs │ │ 15. Iterator │
│ 5. DCL │ │ Strategy │ │ │
│ 6. Проблемы │ │ │ │ │
│ Singleton │ │ │ │ │
│ 7. Factory │ │ │ │ │
│ 8. Builder │ │ │ │ │
│ 9. Prototype │ │ │ │ │
└───────────────┘ └───────────────┘ └────────┬───────────┘
│
▼
┌────────────────────┐
│ АНТИПАТТЕРНЫ (16) │
│ 16. Антипаттерны │
└────────────────────┘
🎯 Рекомендуемый порядок изучения
🟢 Уровень Junior (недели 1-2)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Что такое паттерны | Q1, Q2 | Зачем нужны, категории GoF |
| 2 | Singleton | Q3 | Один экземпляр, где используется |
| 3 | Factory и Builder | Q7, Q8 | Создание объектов |
| 4 | Decorator и Iterator | Q12, Q15 | Оборачивание, перебор |
🟡 Уровень Middle (недели 3-4)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Проблемы Singleton | Q6 | Тестируемость, DI, масштабирование |
| 2 | Strategy | Q10 | Когда использовать, JIT оптимизации |
| 3 | Observer | Q11 | java.util.Observer deprecated, Flow API |
| 4 | Proxy | Q14 | JDK vs CGLIB, self-invocation |
🔴 Уровень Senior (недели 5-6)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Thread-safe Singleton | Q4, Q5 | Bill Pugh, DCL, volatile, JMM |
| 2 | State vs Strategy | Q13 | State machine, transitions via Registry |
| 3 | Prototype | Q9 | clone() issues, copy constructors |
| 4 | Антипаттерны | Q16 | God Object, Cargo Cult, Spaghetti |
🔗 Ключевые связи между темами
Тема: Singleton
Q3 (Singleton) → Q4 (Thread-safe) → Q5 (DCL) → Q6 (Проблемы)
Ключевые связи:
- Q4 ↔ Q5: DCL — один из способов thread-safe Singleton
- Q6 ↔ Q3: DI-контейнер (Spring) решает проблемы Singleton
Тема: Порождающие паттерны
Q7 (Factory) → Q8 (Builder) → Q9 (Prototype)
Ключевые связи:
- Q7 ↔ Q8: Factory = несколько способов создать, Builder = пошаговое создание
- Q8 ↔ Q9: Builder = конструирование, Prototype = копирование
Тема: Поведенческие паттерны
Q10 (Strategy) → Q11 (Observer) → Q13 (State vs Strategy)
Ключевые связи:
- Q10 ↔ Q13: Strategy = алгоритм меняется извне, State = состояние меняется изнутри
- Q11 ↔ Q13: Observer = оповещение подписчиков, State = делегирование поведения
Тема: Структурные паттерны
Q12 (Decorator) → Q14 (Proxy) → Q15 (Iterator)
Ключевые связи:
- Q12 ↔ Q14: Decorator добавляет поведение, Proxy контролирует доступ
- Q14 ↔ Q6: Proxy решает проблемы Singleton (self-invocation, testability)
🎓 Шпаргалка: что знать для каждого уровня
🟢 Junior
- Паттерны — проверенные решения типичных задач
- 3 категории: порождающие, структурные, поведенческие
- Singleton = один экземпляр, Factory = создание объектов
- Builder = пошаговое создание сложных объектов
🟡 Middle
- Bill Pugh Singleton = static inner class, thread-safe без synchronized
- DCL = double check + volatile, оптимизация synchronized
- DI-контейнер (Spring) решает проблемы Singleton
- Strategy = алгоритм через интерфейс, Observer = подписка на события
- Decorator vs наследование: n декораторов вместо 2^n классов
🔴 Senior
- JMM: volatile = happens-before гарантия, DCL без volatile = broken
- Megamorphic call threshold = 5 в HotSpot, inline cache оптимизация
- java.util.Observable deprecated (Java 9), использовать Flow API
- JDK Proxy ≈ CGLIB performance (JDK 8u40+), Spring Boot default = CGLIB
- clone() обходит конструктор, copy constructor надёжнее
- State transitions через Registry/Factory, не через new State()
📝 Формат каждого файла
Каждый файл содержит:
- 🟢 Junior Level — базовое понимание, простые аналогии, примеры
- 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
- 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
- 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы