Роудмапы · L2
Middle Java Developer
Middle-разработчик самостоятельно доводит задачу среднего размера до конца: анализ, код, тесты, выкладка и поддержка. Он думает не только о том, работает ли код, но и о том, как он ведёт себя под нагрузкой и при сбоях.
Чем отличается от предыдущего уровня
Junior выполняет задачу с ясными деталями. Middle уточняет расплывчатое требование, сравнивает варианты, заранее видит риски и умеет делать review чужого кода. Ему нужна не опека, а периодическая синхронизация.
Ожидаемые знания
- Concurrency: потоки, ExecutorService, visibility, разница synchronized и volatile, ConcurrentHashMap
- Как @Transactional в Spring работает через proxy, а также propagation и правила rollback
- JPA: проблема N+1, стратегии загрузки, DTO-проекции, optimistic locking
- SQL: выбор индексов, чтение EXPLAIN, основы уровней изоляции
- Стратегия тестирования: баланс unit-, slice- и integration-тестов, Testcontainers
- Дизайн REST API: версионирование, пагинация, единый формат ошибок (ProblemDetail)
- Основы аутентификации: сессии и JWT, самые частые ошибки авторизации
- CI/CD, Docker и базовая observability: структурные логи, метрики, health check
Практические навыки
- Найти медленный запрос и исправить его индексом или изменением запроса
- Писать integration-тесты на реальном PostgreSQL
- Разбирать жалобу клиента по логам, метрикам и трассам
- Готовить обратно совместимое изменение API и миграцию базы данных
- Правильно определять границы транзакций и избегать длинных транзакций
- Конструктивно делать review чужого Pull Request
Типичные ошибки
- Вызывать @Transactional-метод из того же класса и ждать транзакцию
- Читать lazy-коллекцию в цикле и порождать запросы N+1
- Делать внешний HTTP-вызов внутри транзакции
- Писать тесты, где замокано всё и ни одна реальная интеграция не проверена
- Вызывать внешний сервис без таймаутов и политики повторов
Приоритеты обучения
- 1Глубоко понять транзакции и базу данныхPropagation, изоляция, блокировки и индексы. Большинство сбоев в продакшене начинается здесь.
- 2Улучшать производительность измерениямиРаботайте с SQL-логом, EXPLAIN и профайлером вместо догадок.
- 3Выстроить стратегию тестированияВыбирайте unit-, slice- и Testcontainers-тесты по цели; избегайте медленных и хрупких тестов.
- 4Освоить основы concurrency и асинхронной обработкиЗамечать race condition, писать потокобезопасный код и знать основы обмена сообщениями, например Kafka.
- 5Отвечать за поставку и поддержкуCI/CD, мониторинг и выводы после инцидентов. Будьте владельцем кода, который пишете.
Архитектурная зрелость
Middle отвечает за внутренний дизайн одного сервиса: слои, границы модулей, модель данных и контракт API. Он предпочитает простое решение и не добавляет сложность без причины. Он оценивает влияние изменения на другие сервисы и команды и умеет оформить обоснование решения в короткую записку.
Примеры вопросов
- Почему @Transactional не работает при self-invocation?
- Как бы вы обнаружили и исправили проблему N+1?
- В чём практическая разница между REPEATABLE READ и READ COMMITTED?
- Когда вы выберете unit-тест, slice-тест или integration-тест?
- Как в Kafka сохраняется порядок для одного ключа?
- Почему порядок столбцов в составном индексе важен?
- Покажите race condition и исправьте его.
Упражнения для самостоятельной работы
- Создайте N+1 в endpoint, докажите его по SQL-логу и исправьте fetch join и DTO-проекцией.
- Напишите сценарий lost update, где две транзакции меняют одну строку, и решите его через @Version.
- Добавьте в сервис integration-тест на Testcontainers и запустите его в CI.
- Добавьте к внешнему вызову таймаут, retry и преобразование ошибок и протестируйте каждое.
- Сделайте review открытого Pull Request и разделите блокирующие замечания и nit.
Статьи для этого уровня
- Advanced JavaJava concurrency basics
- Транзакции и согласованностьSpring @Transactional pitfalls: proxies, propagation and rollback rules
- JPA / HibernateThe N+1 query problem in JPA and how to fix it
- Стратегия тестированияIntegration tests with Testcontainers and a real PostgreSQL
- Spring BootValidation and error responses in Spring Boot with ProblemDetail
- KafkaKafka fundamentals for backend engineers
- CI/CDA CI/CD pipeline for a Java service
- Техническое лидерствоCode review culture that helps teams
Подходящие программы
Насколько вы близки к этому уровню?
Оценка навыков формирует личный отчёт о пробелах на основе ваших ответов. Это рекомендация, а не сертификат.