Патерни проектування
16 питань і відповідей у розділі Патерни проектування.
Питання цього розділу
- Що таке патерни проектування?
- Які категорії патернів існують?
- Що таке Singleton?
- Як реалізувати потокобезпечний Singleton?
- Що таке double-checked locking?
- Які проблеми є у Singleton?
- В чому різниця між Factory Method та Abstract Factory?
- Коли використовувати Builder?
- Що таке патерн Prototype?
- Коли використовувати Strategy?
- Як Observer реалізований в Java?
- В чому перевага Decorator перед наслідуванням?
- В чому різниця між State та Strategy?
- Які типи Proxy існують?
- Що таке патерн Iterator?
- Які антипатерни ви знаєте?
Навігатор по розділу
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 | ⭐⭐ |
| 10 | Коли використовувати Strategy | ⭐⭐⭐ |
| 11 | Як Observer реалізований в Java | ⭐⭐ |
| 12 | В чому перевага Decorator перед наслідуванням | ⭐⭐ |
| 13 | В чому різниця між State та Strategy | ⭐⭐⭐ |
| 14 | Які типи Proxy існують | ⭐⭐⭐ |
| 15 | Що таке патерн Iterator | ⭐⭐ |
| 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 через 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
- 🎯 Шпаргалка для інтерв’ю — ключові тези, часті запитання, червоні прапорці, пов’язані теми