Раздел 13 · 29 вопросов

Иммутабельность

29 вопросов и ответов в разделе Иммутабельность.

Russian Иммутабельность Исходный Markdown
Версии по языкам: English Russian Ukrainian

Вопросы этого раздела

  1. Что такое иммутабельный (неизменяемый) объект?
  2. Какие преимущества даёт использование иммутабельных объектов?
  3. Как создать иммутабельный класс в Java?
  4. Почему класс String является иммутабельным?
  5. Какие последствия имеет иммутабельность String?
  6. Почему иммутабельные объекты являются потокобезопасными?
  7. Что такое ключевое слово final и как оно помогает в создании иммутабельных классов?
  8. Достаточно ли сделать все поля final для обеспечения иммутабельности?
  9. Что делать, если поле иммутабельного класса ссылается на мутабельный объект?
  10. Что такое defensive copy (защитная копия)?
  11. Когда нужно делать defensive copy (защитную копию)?
  12. Как защитить коллекцию от изменений?
  13. Что такое Collections.unmodifiableList() и как это работает?
  14. В чём разница между shallow copy и deep copy?
  15. Можно ли наследоваться от иммутабельного класса?
  16. Почему иммутабельный класс должен быть final?
  17. Что произойдёт, если переопределить геттер в подклассе иммутабельного класса?
  18. Как работает String pool и как это связано с иммутабельностью?
  19. Можно ли изменить значение String через рефлексию?
  20. Что такое Record и как он помогает создавать иммутабельные классы?
  21. Почему LocalDate, LocalDateTime иммутабельны?
  22. В чём преимущества иммутабельных объектов для кэширования?
  23. Как иммутабельность влияет на производительность?
  24. Что такое persistent data structures?
  25. Есть ли недостатки у иммутабельных объектов?
  26. Как реализовать Builder pattern для иммутабельного класса?
  27. Можно ли использовать иммутабельные объекты как ключи в HashMap?
  28. Что произойдёт, если изменить мутабельный ключ в HashMap?
  29. Как правильно работать с коллекциями в иммутабельных классах?

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

29 вопросов для подготовки к собеседованию на Middle Java Developer.


📋 Все вопросы

# Вопрос Уровень сложности
1 Что такое иммутабельный (неизменяемый) объект
2 Какие преимущества даёт использование иммутабельных объектов
3 Как создать иммутабельный класс в Java ⭐⭐
4 Почему класс String является иммутабельным ⭐⭐
5 Какие последствия иммутабельности String ⭐⭐
6 Почему иммутабельные объекты являются потокобезопасными ⭐⭐
7 Что такое ключевое слово final и как оно помогает ⭐⭐
8 Достаточно ли сделать все поля final для иммутабельности ⭐⭐
9 Что делать, если поле класса ссылается на мутабельный объект ⭐⭐⭐
10 Что такое defensive copy (защитная копия) ⭐⭐
11 Когда нужно делать defensive copy ⭐⭐
12 Как защитить коллекцию от изменений ⭐⭐
13 Что такое Collections.unmodifiableList() и как это работает ⭐⭐
14 В чём разница между shallow copy и deep copy ⭐⭐
15 Можно ли наследоваться от иммутабельного класса ⭐⭐
16 Почему иммутабельный класс должен быть final ⭐⭐
17 Что произойдёт, если переопределить геттер в подклассе ⭐⭐⭐
18 Как работает String pool и как это связано с иммутабельностью ⭐⭐
19 Можно ли изменить значение String через рефлексию ⭐⭐⭐
20 Что такое Record и как он помогает создавать иммутабельные классы ⭐⭐
21 Почему LocalDate, LocalDateTime иммутабельны ⭐⭐
22 В чём преимущества иммутабельных объектов для кэширования ⭐⭐⭐
23 Как иммутабельность влияет на производительность ⭐⭐⭐
24 Что такое persistent data structures ⭐⭐⭐
25 Есть ли недостатки у иммутабельных объектов ⭐⭐
26 Как реализовать Builder pattern для иммутабельного класса ⭐⭐
27 Можно ли использовать иммутабельные объекты как ключи в HashMap ⭐⭐
28 Что произойдёт, если изменить мутабельный ключ в HashMap ⭐⭐⭐
29 Как правильно работать с коллекциями в иммутабельных классах ⭐⭐⭐

🗺️ Карта зависимостей тем

                    ┌──────────────────────────────────────────┐
                    │   ОСНОВЫ ИММУТАБЕЛЬНОСТИ (1-3)           │
                    │   1. Что такое immutable                   │
                    │   2. Преимущества                          │
                    │   3. Как создать                           │
                    └──────────────────┬───────────────────────┘
                                       │
            ┌──────────────────────────┼──────────────────────────┐
            ▼                          ▼                          ▼
    ┌───────────────┐        ┌───────────────┐        ┌────────────────────┐
    │ STRING И DATE  │        │ FINAL И        │        │ DEFENSIVE COPY     │
    │ (4-5, 18, 21)  │        │ НАСЛЕДОВАНИЕ   │        │ И КОПИРОВАНИЕ      │
    │ 4. String immut│        │ (7-8, 15-17)   │        │ (9-14, 29)         │
    │ 5. Последствия │        │ 7. final       │        │ 9. Мутабельные поля│
    │ 18. String pool│        │ 8. Все final?  │        │ 10. Defensive copy │
    │ 21. LocalDate  │        │ 15. Наследов.  │        │ 11. Когда делать   │
    │                │        │ 16. Final class│        │ 12. Защита коллекц │
    └───────┬───────┘        │ 17. Геттер     │        │ 13. unmodifiable   │
            │                └───────┬───────┘        │ 14. Shallow vs Deep│
            │                        │                │ 29. Коллекции        │
            └────────────────────────┼────────────────└────────┬───────────┘
                                     │                        │
            ┌────────────────────────┼────────────────────────┘
            ▼                        ▼
    ┌───────────────┐        ┌───────────────┐
    │ THREAD-SAFE    │        │ ADVANCED       │
    │ И CACHING      │        │ (19-20, 24-28) │
    │ (6, 22-23)     │        │ 19. Рефлексия  │
    │ 6. Thread-safe │        │ 20. Record     │
    │ 22. Кэширование│        │ 24. Persistent │
    │ 23. Perform.   │        │ 25. Недостатки │
    │                │        │ 26. Builder    │
    │                │        │ 27. Ключ HashMap│
    │                │        │ 28. Мутабельн.  │
    └───────────────┘        └─────────────────┘

🎯 Рекомендуемый порядок изучения

🟢 Уровень Junior (недели 1-2)

Шаг Тема Файлы Цель
1 Основы Q1, Q2 Что такое immutable, зачем нужно
2 Создание Q3 Как создать иммутабельный класс
3 final Q7 Три контекста final
4 String Q4, Q5 Почему String immutable, последствия
5 Thread-safe Q6 Почему immutable = thread-safe

🟡 Уровень Middle (недели 3-4)

Шаг Тема Файлы Цель
1 Defensive copy Q9, Q10, Q11 Копирование мутабельных полей
2 Коллекции Q12, Q13, Q29 unmodifiableList, List.copyOf
3 Copy types Q14 Shallow vs deep copy
4 Builder Q26 Паттерн для сложных immutable объектов
5 Record Q20 Record vs Lombok @Value vs final class
6 LocalDate Q21 Почему Java Time immutable

🔴 Уровень Senior (недели 5-6)

Шаг Тема Файлы Цель
1 Reflection attack Q19 Можно ли сломать immutable, module system
2 Inheritance Q15, Q16, Q17 Наследование, sealed classes, overridden getters
3 Caching Q22 Почему immutable идеальны для кэша
4 Performance Q23 Trade-offs, аллокация vs contention
5 Persistent DS Q24 Structural sharing, Vavr
6 HashMap keys Q27, Q28 Immutable keys, mutable key mutation bug

🔗 Ключевые связи между темами

Тема: Основы

Q1 (Immutable) → Q2 (Преимущества) → Q3 (Как создать)

Тема: final и наследование

Q7 (final) → Q8 (Все final?) → Q15 (Наследование) → Q16 (Final class) → Q17 (Геттер)

Ключевые связи:

  • Q7 ↔ Q8: final поля ≠ иммутабельный класс (мутабельные ссылки)
  • Q15 ↔ Q16: final class запрещает наследование, sealed — ограничивает
  • Q17 ↔ Q29: Геттер возвращает мутабельный объект — нарушение immutable contract

Тема: Defensive Copy и коллекции

Q9 (Мутабельные поля) → Q10 (Defensive copy) → Q11 (Когда делать)
     ↓
Q12 (Защита коллекции) → Q13 (unmodifiableList) → Q14 (Shallow vs Deep) → Q29 (Коллекции)

Тема: String и Date

Q4 (String immutable) → Q5 (Последствия) → Q18 (String Pool)
Q21 (LocalDate immutable)

Тема: Advanced

Q19 (Рефлексия) → Q20 (Record) → Q24 (Persistent DS)
Q27 (HashMap keys) → Q28 (Mutable key mutation)

🎓 Шпаргалка: что знать для каждого уровня

🟢 Junior

  • Immutable = состояние не меняется после создания
  • Преимущества: thread-safe, кэшируемый, предсказуемый
  • final для класса, полей, методов — три разных значения
  • String immutable — безопасность, String Pool, хэширование

🟡 Middle

  • Defensive copy: копируем мутабельные поля в конструкторе и геттерах
  • List.copyOf() vs Collections.unmodifiableList() — независимая копия vs живая обёртка
  • Shallow copy = копирует контейнер, deep copy = рекурсивно весь граф
  • Record = immutable value class с минимум boilerplate
  • Builder pattern для объектов с 4+ полями

🔴 Senior

  • Reflection на final полях заблокирован (Java 16+, JEP 396)
  • Sealed classes (Java 17) как альтернатива final для immutable hierarchies
  • Persistent data structures: structural sharing, O(log n) модификация
  • Mutable key в HashMap = логическая недоступность (не утечка!)
  • Immutable objects = линейное масштабирование на read-heavy нагрузке
  • String Pool связан с иммутабельностью: один объект → много ссылок безопасно

📝 Формат каждого файла

Каждый файл содержит:

  • 🟢 Junior Level — базовое понимание, простые аналогии, примеры
  • 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
  • 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
  • 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы