🧩 Розділ 2 · 16 питань

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

16 питань і відповідей у розділі Патерни проектування.

Питання цього розділу

  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. Які антипатерни ви знаєте

Навігатор по розділу

16 питань для підготовки до співбесіди на Junior 🟢, Middle 🟡 та Senior 🔴 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 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
  • 🎯 Шпаргалка для інтерв’ю — ключові тези, часті питання, червоні прапорці, пов’язані теми