Роудмапы · L1
Junior Java Developer
Junior Java-разработчик уже знает синтаксис и решает небольшие задачи. Цель этого уровня: писать корректный, читаемый и проверяемый код и научиться работать в команде над реальной кодовой базой.
Чем отличается от предыдущего уровня
Тот, кто прошёл туториалы, повторяет готовые шаги и останавливается, когда код заработал. Junior-разработчик может объяснить, почему код работает, самостоятельно разбирается с ошибками, сдаёт работу с тестами и Pull Request и делает выводы из замечаний на review.
Ожидаемые знания
- Основы Java: типы, ООП, интерфейсы, record, неизменяемость и контракт equals/hashCode
- Collections: выбор между List, Set и Map и понимание их сложности
- Правильное использование исключений: checked и unchecked, обёртка с cause
- Читаемое использование Stream API и его ограничения
- SQL: SELECT, JOIN, GROUP BY, INSERT/UPDATE, primary и foreign key, идея индекса
- Основы Spring Boot: слои controller, service, repository и dependency injection
- REST: HTTP-методы, коды статусов, JSON, простая валидация
- Git и процесс Pull Request: ветки, коммиты, конфликты слияния, review
Практические навыки
- Написать небольшой REST-сервис с нуля на PostgreSQL
- Писать unit-тесты на JUnit и мокать простые зависимости
- Находить причину сбоя по stack trace и логам
- Пошагово проходить выполнение в отладчике
- Давать переменным, методам и классам осмысленные имена
- Готовить небольшой Pull Request с одной целью и отвечать на замечания review
Типичные ошибки
- Использовать изменяемый объект как ключ HashMap и не согласовать equals/hashCode
- Поймать исключение и оставить пустой блок catch
- Возвращать JPA-сущность напрямую как ответ API
- Класть всю логику внутрь controller
- Заменять тест ручной проверкой, что вроде бы работает
Приоритеты обучения
- 1Укрепить основы Java и ООПCollections, исключения, equals/hashCode и неизменяемость. На них строятся все следующие уровни.
- 2Серьёзно выучить SQLJOIN, агрегация и идея индекса. Большая часть backend-работы связана с данными.
- 3Разделять слои в Spring BootДержите ответственность controller, service и repository раздельно, используйте DTO и добавляйте валидацию.
- 4Выработать привычку писать тестыМинимум один unit-тест на каждую новую логику. Смотрите на тест как на инструмент проверки дизайна.
- 5Уверенно работать с Git, Pull Request и DockerНебольшие коммиты, понятное описание PR и локальное окружение, поднимаемое через docker compose.
Архитектурная зрелость
От junior не ждут проектирования архитектуры системы. Но важно понимать, как код делится на слои, куда направлены зависимости и почему бизнес-логика живёт в service, а не в controller. Достаточно добавлять код, который вписывается в существующую структуру, и задавать вопрос, когда что-то не вписывается.
Примеры вопросов
- Почему equals и hashCode нужно переопределять вместе?
- Когда вы выберете ArrayList, а когда LinkedList?
- В чём разница между checked и unchecked исключениями?
- Чем результат INNER JOIN отличается от LEFT JOIN?
- Какую проблему решает dependency injection в Spring?
- Почему Pull Request стоит делать небольшим?
Упражнения для самостоятельной работы
- Сделайте CRUD REST API для Order, где controller, service, repository и DTO разделены.
- Напишите три SQL-запроса на одних данных: с JOIN, GROUP BY и подзапросом. Изучите вывод EXPLAIN.
- Напишите тест, воспроизводящий потерю элемента в HashMap с изменяемым ключом, и исправьте через record.
- Поднимите проект одной командой через Dockerfile и docker compose.
Статьи для этого уровня
- Java CoreThe equals and hashCode contract in Java
- Java CoreChoosing the right Java collection
- Java CoreDesigning exceptions in Java services
- Spring BootLayering a Spring Boot application: controller, service, repository
- SQL и производительностьSQL indexes explained with PostgreSQL EXPLAIN
- Стратегия тестированияA practical testing strategy for Spring Boot backends
- DockerDocker for Java services
Подходящие программы
Насколько вы близки к этому уровню?
Оценка навыков формирует личный отчёт о пробелах на основе ваших ответов. Это рекомендация, а не сертификат.