Java backend, как в BigTech [Тариф sam_reshu] [Павел Сорокин]

Bot

Администратор
Команда форума
23 Янв 2020
208,732
3,150
113
269049.jpg

Спринт 1. Spring Core — фундамент современного Java backend’а
Коротко: разберёшься, как работает Spring «под капотом»: контейнер, DI, жизненный цикл бинов, конфигурация и базовый AOP. Перестаёшь «разбрасывать new по проекту», начинаешь мыслить как backend-разработчик.

Что внутри:

  • Зачем вообще нужен Spring: чем отличается от «голой» Java и почему на нём пишут почти все современные backend’ы.
  • IoC-контейнер и ApplicationContext: как Spring создаёт и связывает объекты.
  • Dependency Injection:
    • внедрение зависимостей через конструктор / поле / сеттер;
    • @Component, @service, @Repository, @Configuration, @Bean;
    • @Autowired, @Qualifier, @Primary.
  • Области видимости бинов: singleton, prototype, web-scope и где они реально нужны.
  • Жизненный цикл бина: создание, инициализация, уничтожение (@PostConstruct, @PreDestroy).
  • Работа с конфигурацией: application.properties, профили (@profile), вынесение настройки из кода.
  • Введение в AOP:
    • что такое аспектно-ориентированное программирование;
    • логирование, метрики, технический cross-cutting без засорения бизнес-логики.
  • Как не превращать проект в “спагетти”:
    • базовые принципы SOLID;
    • разделение ответственности между слоями.
Практика:
  • Ты поднимешь первый учебный проект на Spring Core:
    • небольшая доменная область — учебный «банкинг»;
    • все сервисы и репозитории собираются через DI, без ручного new;
    • конфигурация вынесена в properties и профили;
    • написан хотя бы один AOP-аспект: логирование или метрики.
Результат:
  • готовый репозиторий с живым Spring-приложением;
  • понимание, что делает Spring-контейнер и зачем нужны все эти аннотации.
Спринт 2. Hibernate Core — работа с БД как у взрослых
Коротко: учишься работать с реальной базой данных через JPA/Hibernate: сущности, связи, CRUD, жизненный цикл объектов, ленивые загрузки и первые грабли.

Что внутри:

  • ORM, JPA и Hibernate:
    • зачем маппить объекты на таблицы;
    • чем это лучше ручного JDBC.
  • Поднимаем PostgreSQL в Docker:
    • базовая конфигурация;
    • создание схемы и пользователя.
  • JPA-сущности:
    • @Entity, @Table, @Id, @Column;
    • типы полей, генерация идентификаторов.
  • CRUD-операции через Hibernate:
    • сохранение, поиск, обновление, удаление;
    • разбор SQL, который реально уходит в БД.
  • Жизненный цикл сущностей:
    • Transient → Persistent → Detached → Removed;
    • что делает Session / EntityManager.
  • Связи:
    • @OneToOne, @OneToMany, @ManyToOne, @ManyToMany;
    • каскады, orphanRemoval, как не удалить лишнего.
  • Ленивая и жадная загрузка:
    • FetchType.LAZY vs EAGER;
    • классическая N+1-проблема на примерах.
Практика:
  • Учебный проект «Каталог / курсы / студенты»:
    • несколько таблиц в PostgreSQL;
    • сущности с разными типами связей (1:1, 1:N, N:M);
    • CRUD-операции с разбором SQL, который генерит Hibernate.
Результат
  • ты уверенно создаёшь сущности и связи;
  • понимаешь, что происходит с объектом в разных состояниях;
  • не боишься смотреть в реальные SQL-запросы.
Спринт 3. Spring Boot Web — веб и HTTP на практике
Коротко: выходишь в веб: поднимаешь REST API, работаешь с HTTP, DTO, валидацией и обработкой ошибок. Практика — Payments API: пользователи, их заказы и платежи, плюс тесты через MockMvc.

Что внутри:

  • Введение в Spring Boot:
    • стартеры, автоконфигурация, встроенный Tomcat;
    • структура боевого backend-приложения.
  • HTTP и REST:
    • методы GET/POST/PUT/DELETE, статус-коды, заголовки;
    • хорошие и плохие REST-эндпоинты.
  • Контроллеры:
    @RestController, @RequestMapping, @GetMapping, @PostMapping и др.;
    @PathVariable, @RequestParam, @RequestBody.
  • DTO и валидация:
    разделение сущностей и DTO;
    Bean Validation: @valid, @NotBlank, @email, @Min и т. д.
  • Централизованная обработка ошибок:
    @ControllerAdvice, @ExceptionHandler;
    единый формат ошибок для клиента.
  • Тестирование веб-слоя:
    MockMvc;
    проверка кодов ответа, тела, ошибок.
Практика:
  • Ты реализуешь учебный Payments API:
    • пользователи / клиенты и их заказы;
    • создание заказов, получение списка заказов пользователя, просмотр деталей;
    • базовая модель «платежа» — например, статус PAYMENT_PENDING / PAID.
  • Что именно сделаешь руками:
    • набор REST-эндпоинтов для пользователей и их заказов;
    • DTO с валидацией входящих данных;
    • единый формат API-ошибок;
    • тесты контроллеров через MockMvc: успешные кейсы + ошибки.
Результат:
  • у тебя есть законченный REST-сервис Payments API;
  • ты умеешь писать и тестировать нормальные HTTP-сервисы, а не «крученные методы».
Спринт 4. Spring Data JPA + EventManager | Iteration 1
Коротко: переходишь от маленьких учебных примеров к выпускному проекту EventManager. Подключаешь Spring Data JPA, строишь нормальные репозитории и делаешь первую итерацию проекта.

Что внутри:

  • Архитектура слоёв:
    Controller → Service → Repository;
    почему «всё в контроллере» — зло.
  • Spring Data JPA:
    • JpaRepository, готовые CRUD-методы;
    • query-методы: поиск по полям без явного SQL.
  • Сложные запросы:
    • @Query — JPQL и нативный SQL;
    • @Modifying для обновлений.
  • Транзакции:
    • @Transactional, propagation, read-only;
    • где нужны транзакции, а где нет.
  • Оптимизация запросов:
    • N+1 снова, но уже в мире Spring Data;
    • JOIN FETCH, EntityGraph.
  • Интеграционные тесты репозиториев:
    • поднятие PostgreSQL через Testcontainers;
    • тесты, которые реально ходят в БД.
Практика:
  • Старт выпускного проекта EventManager: сервис, где пользователи создают, редактируют и просматривают мероприятия.
  • В Iteration 1 ты:
    • проектируешь базовые сущности: User, Event, Location и необходимые вспомогательные таблицы;
    • создаёшь репозитории на Spring Data JPA;
    • реализуешь базовые CRUD-операции для ключевых сущностей;
    • поднимаешь REST-эндпоинты для создания, редактирования, удаления и получения событий и локаций.
Результат:
  • у тебя есть EventManager Iteration 1 — живой сервис событий с БД и REST-API;
  • это первый кирпич выпускного проекта, который пойдёт в портфолио.
Спринт 5. Spring Security + EventManager — Iteration 2
Коротко: учишься защищать backend: логин, роли, права доступа, JWT. EventManager становится не «открытой песочницей», а реальным защищённым сервисом.

Что внутри:

  • Аутентификация и авторизация:
    • в чём разница;
    • какие подходы используют в реальных проектах.
  • Основы Spring Security:
    • конфигурация SecurityFilterChain;
    • цепочка фильтров и жизненный цикл запроса.
  • Ограничение доступа:
    • hasRole, hasAuthority, @PreAuthorize;
    • защита эндпоинтов по ролям.
  • JWT:
    • структура токена: header, payload, signature;
    • генерация и валидация токена;
    • хранение токена на клиенте, типичные ошибки.
  • Обработка ошибок безопасности:
    • 401 vs 403;
    • AuthenticationEntryPoint, AccessDeniedHandler.
  • Тестирование защищённых эндпоинтов:
    • @WithMockUser;
    • тесты с реальными JWT.
Практика:
  • В Iteration 2 ты:
    • добавляешь регистрацию и логин пользователей;
    • реализуешь выдачу JWT-токенов;
    • ограничиваешь доступ к CRUD-операциям EventManager.
Результат:
  • EventManager Iteration 2 — полноценный защищённый REST-сервис;
  • ты умеешь интегрировать Spring Security и JWT в реальный проект.
Спринт 6. Бизнес-логика backend-систем + EventManager — Iteration 3
Коротко: спринт целиком посвящён бизнес-логике и умению превращать требования в код. Здесь ты делаешь крупную итерацию выпускного проекта: сложные правила, статусы, сценарии, проверки, транзакции. Это тот слой, который отличает «настоящего backend-разработчика» от человека, который умеет навесить аннотации.

Что внутри:

  • Проектирование доменной модели и сервисов:
    • выделение агрегатов и границ ответственности;
    • проектирование методов сервисов под конкретные сценарии.
  • Типичные бизнес-правила в Event-системах:
    • нельзя создать событие в прошлом;
    • нельзя опубликовать событие без обязательных полей;
    • ограничение мест/capacity: проверка, что не переполнено;
    • дедлайны регистрации и отмены;
    • статусы событий: DRAFT / PUBLISHED / CANCELED / COMPLETED.
  • Бизнес-ошибки и исключения:
    • свои exception’ы для доменных ошибок;
    • маппинг доменных ошибок в HTTP-ответы 4xx.
  • Транзакционные границы:
    • где нужна транзакция, а где нет;
    • как обеспечить целостность при сложных сценариях, например, несколько записей в таблицы.
Практика:
  • В Iteration 3 ты превращаешь EventManager из «CRUD-формочек» в настоящую бизнес-систему:
    • добавляешь статусы событий и переходы между ними;
    • реализуешь проверки;
    • описываешь и реализуешь сценарии;
    • выделяешь отдельный слой доменных сервисов, работающих над сущностями.
  • Пишешь набор тестов:
    • unit-тесты бизнес-логики;
    • интеграционные тесты ключевых сценариев.
Результат:
  • EventManager Iteration 3 — большая итерация, где ты прокачиваешься именно как разработчик бизнес-логики, а не просто «разворачивающий фреймворки».
Спринт 7. Архитектура и микросервисы + EventManager — Iteration 4
Коротко: поднимаешься на уровень архитектуры: монолит vs микросервисы, Kafka, паттерны взаимодействия сервисов. Делаешь Iteration 4 EventManager — вынос нотификаций в отдельный сервис и переход к event-driven-архитектуре.

Что внутри:

  • Архитектура монолита и микросервисов:
    • плюсы и минусы каждого подхода;
    • когда вообще имеет смысл делить систему.
  • Типовые уровни архитектуры:
    • системная архитектура: какие сервисы и как взаимодействуют;
    • архитектура приложения: слои, модули;
    • инфраструктурная часть: БД, брокеры, балансировщики.
  • Kafka и event-driven:
    • producer / consumer, topic, partition, offset;
    • семантика «at least once», «at most once», «exactly once»;
    • долговечность и репликация.
  • Паттерны микросервисов:
    • API Gateway, Circuit Breaker, Saga, Outbox — на уровне идей;
    • взаимодействие sync HTTP и async Kafka;
    • отказоустойчивость и масштабирование;
    • базовые подходы к резервированию и мониторингу.
Практика:
  • В Iteration 4 ты:
    • выделяешь сервис уведомлений, например NotificationService, в отдельный микросервис;
    • настраиваешь Kafka-топики для событий: создание/изменение/отмена события, регистрация пользователя;
    • из EventManager публикуешь доменные события в Kafka;
    • в NotificationService подписываешься на эти события и подготавливаешь уведомления, которые пользователи могут получить через API.
Результат:
  • EventManager Iteration 4 — уже не просто монолит, а система из нескольких сервисов, общающихся через Kafka;
  • ты понимаешь, как выглядят event-driven-системы и какие проблемы они решают.
Спринт 8. Redis и кэширование + EventManager — Iteration 5
Коротко: подключаешь Redis и учишься ускорять систему через кэш и счётчики. Сделаете Iteration 5: кэш локаций и быстрые счётчики уведомлений в EventManager.

Что внутри:

  • Зачем вообще кэш:
    • где помогает — быстрый доступ к часто читаемым данным;
    • где убивает консистентность и приносит боль.
  • Базовые паттерны кэширования:
    • cache-aside — самый популярный;
    • read/write-through, write-behind — на уровне идей.
  • Redis:
    • модель «ключ-значение»;
    • строки и простые структуры данных;
    • базовые команды и TTL.
  • Поднимаем Redis в Docker:
    • базовая конфигурация;
    • проверка через CLI-клиент.
  • Интеграция Redis со Spring:
    • RedisTemplate, работа с ключами и значениями;
    • кэширующие аннотации: @Cacheable, @CacheEvict, @CachePut.
Практика:
  • В Iteration 5 ты:
    • внедряешь Redis в архитектуру EventManager;
    • реализуешь cache-aside для «горячих» данных, например;
    • добавляешь быстрый счётчик уведомлений или непрочитанных событий для пользователя в Redis;
    • настраиваешь инвалидацию кэша при изменениях, чтобы не было «протухших» данных.
Результат:
  • EventManager Iteration 5 — быстрый и отзывчивый, с кэшем и счётчиками в Redis;
  • ты понимаешь, где и как применять Redis в backend-системах.
Спринт 9. CI/CD для backend-разработчика
Коротко: разбираешься, как код доезжает до пользователей: сборка, тесты, Docker, пайплайны, окружения. После этого спринта ты не теряешься, когда видишь gitlab-ci.yml в проекте или kubernetes в вакансии.

Что внутри:

  • Что такое CI и CD:
    • continuous integration, continuous delivery/deployment;
    • как это экономит время и деньги команде.
  • Жизненный цикл задачи:
    commit → build → test → package → docker → deploy → monitor.
  • Пайплайны:
    • stages: build/test/deploy;
    • jobs, артефакты, variables.
  • Docker в контексте CI/CD:
    • сборка образа приложения;
    • Docker registry;
    • версии образов, tags и откаты.
  • Инструменты:
    • GitLab CI, GitHub Actions, Jenkins — кто чем отличается и где встречается;
    • базовое представление о деплое на сервер/в кластер.
  • Окружения:
    • Dev / Stage / Prod;
    • переменные окружения, секреты, конфиги.
Практика:
  • Собираешь минимальный рабочий CI/CD-процесс для Java-сервиса:
    • конфиг для GitLab CI или GitHub Actions;
    • сборка и запуск тестов;
    • сборка Docker-образа приложения;
    • деплой на выбранную целевую среду: локальный сервер / Docker-хост.
Результат:
  • ты понимаешь, как описывается и живёт пайплайн;
  • можешь уверенно общаться с тимлидом и DevOps по поводу деплоя и окружений.
Бонусный модуль №1. Прохождение собеседований: резюме, стратегия, ответы
Коротко: упаковываешь весь пройденный путь в резюме, портфолио и стратегию поиска работы, чтобы EventManager и остальные практики работали на твой оффер.

Что внутри:

  • Стратегия поиска работы:
    • как анализировать рынок и выбирать вакансии;
    • таблица откликов и работа с воронкой.
  • Резюме разработчика:
    • структура и оформление;
    • как грамотно описать учебные проекты и EventManager;
    • типичные ошибки, из-за которых резюме не читают.
  • Самопрезентация:
    • как рассказывать о себе и своём опыте;
    • ответы на поведенческие вопросы по модели STAR.
  • Подготовка к тех-собеседованиям:
    • темы по Java/Spring/SQL/архитектуре, которые ждут на интервью;
    • как использовать эти темы в твоих проектах, в том числе в EventManager.
  • Как говорить о процессах:
    • Agile, Scrum, роли в команде;
    • CI/CD, код-ревью, работа с задачами.
Практика:
  • Готовое резюме в PDF с описанием:
    • твоих навыков;
    • выпускного проекта EventManager с итерациями;
    • дополнительных проектов, типа Payments API.
  • Таблица откликов и план поиска работы.
  • Набор заготовок ответов на типовые вопросы: тех + поведенческие.
Бонусный модуль №2. Паттерны проектирования и чистый код
Коротко: закрываешь важный блок по паттернам и чистому коду: то, что регулярно спрашивают на собеседованиях и что действительно помогает писать поддерживаемые системы.

Что внутри:

  • Принципы SOLID:
    • на конкретных примерах «до/после»;
    • как они применяются в коде Spring-приложений.
  • Ключевые паттерны:
    • Builder — как избегать «конструкторов на 10 аргументов»;
    • Strategy — как гибко менять поведение без if-else-адов;
    • Proxy — где его видишь в Spring: AOP, транзакции, безопасность;
    • Facade — как прятать сложность подсистем.
  • Связка паттернов с EventManager:
    • какие решения в проекте можно описать через паттерны;
    • как об этом говорить на собеседовании.
Практика:
  • Небольшой учебный проект, например «система опросов / квизов», где ты:
    • реализуешь 3–4 паттерна в живом коде;
    • фиксируешь, как они помогают держать код чистым.
  • Конспект по SOLID и паттернам с примерами и формулировками «как для собеса».