-
Фаза 1. Основы языка: Java · 16 вопросов
Синтаксис и типы, ООП, коллекции, дженерики, исключения, лямбды и Stream API, современный Java, инструменты — фундамент языка до фреймворков.
- Синтаксис и типы Java: с чего начинается код
- ООП в Java: классы, наследование, интерфейсы, record и enum
- Коллекции Java: списки, множества и словари
- Как устроена HashMap внутри
- Дженерики в Java: типобезопасность без приведения типов
- Исключения в Java: иерархия, checked/unchecked, try-with-resources
- Лямбды и Stream API в Java
- Records, Optional и современный Java
- Сборка мусора в Java
- Инструменты Java: JDK, javac, jar, Maven и Gradle
-
Фаза 2. Фундамент: ядро Spring · 16 вопросов
DI/IoC, жизненный цикл бина, Boot, MVC, Data JPA, транзакции, события, AOP, планировщик.
- Spring DI/IoC, bean scopes
- Жизненный цикл Spring-бина с примерами
- Spring Boot auto-configuration, properties, profiles
- Spring MVC: контроллеры, REST, валидация и обработка ошибок
- @Transactional в Spring: транзакции, propagation, ловушки
- Spring Data JPA: репозитории, запросы по имени, проекции, N+1
- Spring Events: @EventListener, @TransactionalEventListener, асинхронные события
- Spring AOP: аспекты, прокси и почему @Transactional иногда молчит
- Spring Scheduled, Async, виртуальные потоки
-
Фаза 3. Многопоточность и конкурентность · 13 вопросов
Потоки и модель памяти Java (JMM, happens-before, volatile), гонки, synchronized и явные блокировки, atomics и CAS, потокобезопасные коллекции, пулы потоков, CompletableFuture, виртуальные потоки Java 21 и типичные баги — deadlock, livelock, starvation.
- Потоки и процессы в Java
- Модель памяти Java (JMM): видимость и happens-before
- Гонки в многопоточных программах: race condition и data race
- synchronized и мониторы: взаимное исключение в Java
- Явные блокировки: Lock и ReentrantLock
- Атомарные переменные и CAS в Java
- Потокобезопасные коллекции в Java
- Пулы потоков: ExecutorService
- CompletableFuture: асинхронные задачи в Java
- Виртуальные потоки в Java 21
- Deadlock, livelock и starvation: когда потоки мешают друг другу
-
Фаза 4. PostgreSQL: модель и запросы · 13 вопросов
Транзакции и изоляция, блокировки, типы данных, индексы и EXPLAIN.
- ACID и уровни изоляции транзакций в PostgreSQL
- Уровни изоляции транзакций в PostgreSQL
- Spring @Transactional: как работают транзакции и где они ломаются
- Блокировки в PostgreSQL: SELECT FOR UPDATE, SKIP LOCKED и advisory locks
- Именование объектов в PostgreSQL — snake_case, единственное число, префиксы
- Числа в PostgreSQL: bigint, numeric, boolean и как не потерять деньги
- Строковые типы в PostgreSQL: text, varchar и char
- Время и таймзоны в PostgreSQL — почему timestamptz и как с ним работать
- UUID в PostgreSQL: тип uuid, v7 против v4, bigint vs UUID
- Перечисления в PostgreSQL: ENUM, справочник или CHECK
- JSONB в PostgreSQL — что это, как работает и когда применять
- Массивы и range-типы в PostgreSQL: теги, бронирования, EXCLUDE
- Типы индексов в PostgreSQL — B-tree, GIN, GiST, BRIN
- Составные индексы PostgreSQL и правило левого префикса
- Как выбрать индекс и считать селективность в PostgreSQL
- EXPLAIN ANALYZE — как читать план запроса PostgreSQL
-
Фаза 5. PostgreSQL: эксплуатация и масштаб · 11 вопросов
Миграции, пул, vacuum/WAL, репликация, бэкап, партиционирование, FTS и гео.
- Миграции PostgreSQL без остановки сервиса
- Connection pooling в PostgreSQL — HikariCP, PgBouncer и формула Wooldridge
- VACUUM, autovacuum и bloat в PostgreSQL
- WAL в PostgreSQL: что это и как влиять на объём журнала
- Репликация PostgreSQL: read-replica и маршрутизация запросов
- Резервные копии PostgreSQL: pg_dump, pg_basebackup и PITR
- Мониторинг PostgreSQL: slow queries, активность и ключевые метрики
- Партиционирование в PostgreSQL: когда нужно и как устроено
- Партиционирование и шардирование в PostgreSQL
- Multi-tenancy в PostgreSQL: row, schema, db per tenant
- Materialized views в PostgreSQL: как работают и когда использовать
- Триггеры и хранимые процедуры PostgreSQL
- Расширения PostgreSQL: pg_trgm, pgcrypto, pg_stat_statements и другие
- Полнотекстовый поиск в PostgreSQL — tsvector, GIN, russian
- PostGIS: геоданные в PostgreSQL — точки, полигоны, поиск в радиусе
- Анонимизация дампа PostgreSQL для разработчика
- Частые ошибки при выборе типов в PostgreSQL
-
Фаза 6. Hibernate и ORM · 14 вопросов
Объектно-реляционное отображение: маппинг сущностей и связей, persistence context, ленивая загрузка и N+1, JPQL и Criteria, кэширование, транзакции и блокировки, наследование и типичные грабли.
- Что такое ORM и Hibernate: от JDBC к объектно-реляционному маппингу
- Маппинг сущностей в Hibernate и JPA
- Связи между сущностями в Hibernate: @OneToMany, @ManyToOne, @ManyToMany
- Persistence context и состояния сущности в Hibernate
- Ленивая и жадная загрузка в Hibernate
- Проблема N+1 запросов в Hibernate
- JPQL, Criteria API и нативные запросы в Hibernate
- Кэширование в Hibernate: первый уровень, второй уровень и кэш запросов
- Транзакции, flush и блокировки в Hibernate
- Наследование сущностей в Hibernate: SINGLE_TABLE, JOINED, TABLE_PER_CLASS
- Типичные ошибки с Hibernate: что идёт не так и как это исправить
-
Фаза 7. Другие хранилища: документы, поиск, файлы, аналитика · 13 вопросов
MongoDB, Elasticsearch, object storage (S3) и ClickHouse.
- ACID, read и write concerns, транзакции в MongoDB
- Моделирование документов в MongoDB: embed vs reference, индексы
- Репликация и шардинг в MongoDB
- Elasticsearch: как устроен поисковый движок
- Как работают запросы в Elasticsearch и почему документы сортируются именно так
- Spring Data Elasticsearch: как подключить и использовать поиск в Java-приложении
- Как работает Elasticsearch в production: ILM, snapshots, sizing, мониторинг
- Что такое object storage: bucket, объект, ключ, классы хранения и presigned URL
- Spring + AWS SDK v2 для S3: интеграция, паттерны, MinIO
- S3 в production: резервные копии, репликация, стоимость и мониторинг
- Что такое Redis: in-memory хранилище для backend-разработчика
- Структуры данных Redis: String, Hash, List, Set, Sorted Set и другие
- Паттерны кэширования в Redis
- Redis не только для кэша: блокировки, ограничение запросов, очереди и Pub/Sub
- Redis в Spring Boot: RedisTemplate, @Cacheable и Spring Session
- Эксплуатация Redis: персистентность, память, репликация
- Как устроен ClickHouse: колоночное хранение, MergeTree и OLAP
- ClickHouse: моделирование схемы, запросы, materialized views
- ClickHouse из Java и Spring Boot: подключение, запись и чтение
- ClickHouse в проде: репликация, TTL, бэкапы и мониторинг
-
Фаза 8. Принципы и паттерны проектирования · 9 вопросов
SOLID, GRASP, паттерны GoF, DRY/KISS/YAGNI.
-
Фаза 9. Сетевой фундамент
Модели OSI и TCP/IP, IP и порты, TCP/UDP, DNS, HTTP и HTTPS, версии HTTP, соединения и надёжность.
- Как устроена сеть: модели OSI и TCP/IP
- IP-адреса, порты и NAT
- TCP и UDP: надёжность против скорости
- DNS: как доменное имя превращается в адрес
- HTTP: методы, статусы, заголовки
- HTTPS и TLS: шифрование и рукопожатие
- HTTP/1.1, HTTP/2 и HTTP/3: что поменялось
- Соединения: keep-alive, пулы и таймауты
- Балансировщики и обратные прокси
- Сеть и надёжность: таймауты, ретраи, идемпотентность
-
Фаза 10. API: REST и контракты · 11 вопросов
URL и ресурсы, query-параметры, ответы и ошибки, версионирование, OpenAPI.
- URL и ресурсы REST: как называть пути и выбирать HTTP-методы
- Query-параметры и пагинация в REST API
- JSON и формат ответов в REST API
- Ошибки в REST API — формат Problem Details
- HTTP-заголовки в REST API: Content-Type, Authorization, Idempotency-Key и трассировка
- Версионирование REST API — как менять API без поломки клиентов
- Alias-сегменты и action-эндпоинты в REST API
- API-first и contract-first: проектируем контракт раньше кода
- OpenAPI: метаданные и типичные ошибки в REST
- Rate limiting, загрузка файлов и deprecation в REST API
- Массовые операции, асинхронность и локализация в REST API
- gRPC: быстрые вызовы между сервисами
- GraphQL: клиент запрашивает ровно нужное
- HATEOAS: зрелость REST и гиперссылки
- Где валидировать данные
- Bean Validation в Spring: @NotNull, @Valid и MethodArgumentNotValidException
- Свои ограничения и сообщения об ошибках
- Модель ошибок приложения
- Единый обработчик ошибок
- Типичные ошибки в обработке исключений
-
Фаза 11. Безопасность и авторизация · 11 вопросов
Spring Security, Keycloak/OAuth2/OIDC и паттерны авторизации.
- Spring Security: фильтры, AuthN, AuthZ, OAuth2
- Что такое Keycloak и зачем он нужен
- OAuth2 и OIDC простыми словами
- Realm, client, роли и пользователи в Keycloak
- Authorization Code Flow и PKCE по шагам
- Keycloak и Spring Security: проверка токенов
- Роли и доступ: RBAC и ABAC с Keycloak
- Три токена Keycloak: access, id, refresh — куда какой
- Паттерны аутентификации и авторизации
- Где какая проверка — Gateway, BFF и Domain Service
- ABAC и проверка владения ресурсом в Spring
- Service-to-service аутентификация: mTLS и Client Credentials
- PII и секреты — как не утечь в логи, ответы и сообщения
- Аудит действий администратора
-
Фаза 12. Брокеры и распределённые системы · 13 вопросов
AMQP/RabbitMQ, Kafka и распределённые паттерны: saga, outbox, idempotency.
- Протокол AMQP: exchange, queue, binding, ack
- RabbitMQ в production: кластеризация, типы очередей и мониторинг
- Spring AMQP: как отправлять и получать сообщения через RabbitMQ
- Паттерны обмена сообщениями через AMQP
- AMQP vs Kafka: какой брокер выбрать
- Apache Kafka: топики, партиции, порядок и гарантии
- Kafka в production: Spring Kafka, DLQ, Schema Registry, тюнинг, безопасность
- Распределённые паттерны
-
Фаза 13. Контейнеры: Docker · 11 вопросов
Контейнеры и образы, Dockerfile для Spring Boot, multi-stage сборка, запуск контейнеров, тома и данные, сети, Docker Compose, JVM в контейнере, безопасные образы и реестры.
- Что такое Docker и контейнеры
- Образы, слои и Dockerfile: как Docker упаковывает приложение
- Dockerfile для Spring Boot: правильная сборка образа
- Multi-stage сборка и кэш слоёв Docker
- Запуск контейнеров: docker run и жизненный цикл
- Тома и данные в Docker: как не потерять базу при перезапуске контейнера
- Сети Docker: как контейнеры общаются между собой
- Docker Compose: поднять всё окружение одной командой
- JVM в контейнере: память и ядра
- Маленькие и безопасные образы Docker
- Реестры образов и сборка в CI
-
Фаза 14. Kubernetes и graceful shutdown · 13 вопросов
Кластер, сеть, Spring Boot в k8s, деплой и корректное завершение работы.
- Kubernetes: pod, deployment, service — с чего начать
- Сеть в Kubernetes: Service, DNS, Ingress, NetworkPolicy
- Spring Boot в Kubernetes: probes, ресурсы и JVM, graceful shutdown
- Деплой в Kubernetes: манифесты, Helm, rolling update, GitOps
- Kubernetes на практике: отладка подов и kubectl-команды
- Graceful shutdown в Spring Boot: server.shutdown, таймауты и health-пробы
- HTTP drain — preStop sleep и долгие endpoints
- БД и persistence при завершении Spring Boot
- Scheduled, @Async и outbox: как правильно останавливать фоновые задачи
- Kafka shutdown — как правильно останавливать потребитель и продюсер
- Идемпотентность при остановке сервиса
- Kubernetes и graceful shutdown: terminationGracePeriodSeconds, probes, maxSurge
- Бюджеты завершения и наблюдаемость graceful shutdown
-
Фаза 15. Облако: AWS · 11 вопросов
Сеть, IAM, compute, масштабирование, serverless, данные, IaC и well-architected.
- Основы AWS: аккаунты, IAM, регионы и VPC
- Сеть в AWS: VPC, подсети, NAT и security groups
- IAM в AWS: пользователи, роли и политики
- Где запускать сервис в AWS: EC2, ECS, EKS или Lambda
- Масштабирование и доступность в AWS
- Serverless в AWS: Lambda, события, cold start, API Gateway
- Управляемые данные в AWS: RDS, ElastiCache, SQS, MSK
- DynamoDB: ключи, индексы и когда брать вместо SQL
- AWS из Spring Boot: SDK v2, credentials chain и LocalStack
- Безопасность и наблюдаемость в AWS: Secrets Manager, SSM, KMS, CloudWatch
- Отказоустойчивость и аварийное восстановление в AWS
- Оптимизация затрат в AWS: с чего начать
- AWS Well-Architected Framework: шесть столпов и как ими пользоваться
- Infrastructure as Code: основы
- Terraform: HCL, провайдеры, состояние и модули
- CloudFormation: шаблоны и стеки
- AWS CDK: инфраструктура как программа
- IaC на практике: state, секреты, доставка
-
Фаза 16. CI/CD: конвейер доставки · 9 вопросов
Принципы конвейера, CI для Java, стратегии релиза и ветвление.
-
Фаза 17. Качество: тесты и наблюдаемость · 11 вопросов
Стратегия тестов и observability/Actuator.
- Spring Testing: @SpringBootTest, слайсы, TestContainers
- Пирамида тестов: что и где
- Интеграционные тесты с Testcontainers
- Моки и внешние системы в тестах
- Spring Actuator, Micrometer, трейсинг
- Логирование в Java и Spring Boot: JSON, MDC и уровни логов
- Метрики в Spring Boot: Micrometer и Prometheus
- Distributed tracing в Java: OpenTelemetry, spans и как связать логи с трассировкой
- Context propagation и MDC в Spring Boot
- Health checks в Spring Boot: liveness, readiness и custom HealthIndicator
- SLO и алерты в Java/Spring Boot
- Конфигурация observability в Python: management-порт, логи и метрики
-
Фаза 18. Системный дизайн и архитектурный выбор · 11 вопросов
Метод дизайна, строительные блоки, развилки хранилищ и нотаций, C4.
- Метод системного дизайна: от требований к архитектуре
- Строительные блоки системного дизайна
- Как устроена система уведомлений: архитектура с нуля
- Как оформить и защитить дизайн системы: design doc, C4, ревью
- Выбор начальной архитектуры: монолит, модульный монолит, микросервисы
- PostgreSQL или MongoDB: как выбрать базу данных
- PostgreSQL или ClickHouse: когда добавлять вторую базу
- Поиск: PostgreSQL FTS или Elasticsearch
- Файлы: в базе данных или в object storage
- Между сервисами: синхронный вызов или события
- Spring MVC, WebFlux и виртуальные потоки: что выбрать
- ADR: как фиксировать архитектурные решения
- Роль архитектора в команде разработки
- Модель C4
-
Фаза 19. Domain-Driven Design · 10 вопросов
Стратегические и тактические паттерны, агрегаты, доменные события.
-
Фаза 20. Архитектурные паттерны сервиса · 11 вопросов
Структура сервиса и микросервисов, Onion и Hexagonal, CQRS, отказоустойчивость и пакетная обработка.
- Луковая архитектура (Onion Architecture)
- CQRS
- Когда применять CQRS: от простых маркеров до разных баз данных
- Command side в CQRS — как работает запись
- Query side в CQRS: как читать данные без write-инструментов
- Read-model в CQRS — денормализованная проекция для быстрого чтения
- Синхронизация read-model через события: outbox, Kafka и idempotent consumer
- Уровень и эволюция CQRS — от простого разделения к event-driven read-model
- Гексагональная архитектура
- Когда применять Hexagonal Architecture
- Core слой в Hexagonal Architecture
- Ports в Hexagonal Architecture — interfaces в core/
- Входные адаптеры в гексагональной архитектуре — REST, Kafka, CLI
- Out-адаптеры в Hexagonal Architecture — как сервис разговаривает с внешним миром
- Структура модулей в Hexagonal Architecture
- Bootstrap / Composition Root в Hexagonal
- Архитектурные тесты в Hexagonal-проекте через ArchUnit
- Структурные паттерны микросервисов
- Паттерны отказоустойчивости
- Пакетная обработка данных: как не сломать фоновый обработчик
- Event Sourcing: хранить события, а не состояние
-
Фаза 21. Use Case Pattern: методология и зрелость
Зачем нужна, как применять, шаблон спеки и четыре уровня зрелости.
-
Фаза 22. Сквозной кейс
Всё вместе на маркетплейсе — от бизнес-брифа до спеки.
Программа обучения
Программа: что нужно знать, чтобы работать с UCP
Этот сайт устроен как программа подготовки. Каждая статья — кусочек знаний, необходимый, чтобы работать в команде, использующей Use Case Pattern. Программа ведёт от фундамента Spring через данные, принципы и паттерны, поиск и хранилища, инфраструктуру и качество к архитектурному мышлению — системному дизайну и DDD — и к кульминации в Use Case Pattern, а затем к сквозному кейсу маркетплейса.
Всего в программе 227 вопросов для самопроверки.