Наконец-то полезный роадмап Java Backend 2024
Евгений Афанасьев @evg_a_channelРоадмап состоит из 3 этапов:
1. Java core – это основы языка, под java core я подразумеваю всю базу: синтаксис, коллекции, многопоточка, ООП, исключения, стримы и прочее.
2. Фреймворки + смежные технологии. Spring, Hibernate, SQL, Maven, Git и пр. Без фреймворков никуда. С голой джавой ты никому не нужен.
3. Подготовка к собеседованиям. Сюда входит подготовка к самопрезентации, составление резюме, подготовка к технической части собеседований.

Немного обо мне
В этом ролике я уже рассказывал о том, как я за 3 месяца стал java разработчиком и у меня многие спрашивают - как учить этот язык, с чего начинать и на каком этапе нужно переходить от одной темы к другой. Тут я хочу сделать подробный гайд, используя который можно самостоятельно и дешево или вообще бесплатно выучить язык, минимальный набор технологий и подготовиться к прохождению собеседований на позицию мидла с вилкой 100-200к. Конечной целью является получить оффер и выйти на работу джавистом в минимально кратчайший срок. Так как наша цель это быстрее получить оффер и не выгореть по пути, я буду пропускать или явно указывать на те темы, которые считаю не обязательными в изучении на этой стадии.
А если ты в процессе обучения встретил тему, но в роадмапе о ней ни слова и ты сомневаешься нужна она или нет, ты всегда можешь задать вопрос в сообществе типа "А мне вообще понадобится эта хрень?", где тебе я или кто-то еще с опытом ответит "Не, я это вообще в работе разок использовал, так что забей, можно пропустить".
1. Java Core
Самое главное это писать код и как можно больше, на все возможные темы, поэтому ищем ресурсы, которые предоставляют нам возможность решать как можно больше задач.

Всем советую начать с JavaRush – на мой взгляд это лучший сайт для начинающих, самое главное там очень много задач по каждой теме, они структурированы, КАЖДАЯ задача проверяется автоматическим валидатором, ты моментально понимаешь правильно ты решил или нет. Нет групп с медленными студентами, нет ментора, который долго проверяет, все максимально оперативно. Из минусов теория там отвратительная, придется много гуглить. Не нужен их университет, достаточно самой дешевой подписки, пройти 30 уровней достаточно. Дальше нет смысла, ничего не даст. Подписка платная, около 2500р в месяц, оплатить картами РФ можно. Выбираешь виза и если ты находишься в рф по геопозиции, тебя перекинет в тинькоф кассу , там оплатишь и всё. Можно оплатить криптой, сервисами помогалами, например Oplatym.ru.
Есть бесплатные сборники задач, например:
Тоже есть автоматическая проверка, но не на все темы сможете найти задачи. Использовать как ресурс для изучения базы не рекомендую, только чтобы отточить какие-то узкие темы, на которые не хватило задач, и чтобы из головы не выдумывать. Я рекомендую на эти ресурсы вообще не налегать.
Для задач еще можно использовать ChatGpt. Просим придумать задачу на какую-то тему, он придумывает. Переносим в среду разработки и решаем.
Теорию разумеется черпать из самого джавараша, гуглить, либо по ютубу, ниже будут ссылки.
Дальше будет по темам подробнее. Пошли вы на джавараш или сами будете по открытым источникам изучать, не важно. Условно все темы можно поделить на два уровня по важности:
- Очень важно! Эти темы просто указываю с сылками, их надо изучать обязательно.
- Средней важности, можно пройтись поверхностно либо пропустить. Пометки делаю с комментариями.
Очень важным темам надо уделить 100% внимания, прорешать все доступные задачи. Темы средней важности уделяем меньше времени и внимания. Прочитали теорию, порешали задачи простые. На сложные задачи не тратим много времени, ищем решения если не можем сами, скатываем, не паримся. Некоторые темы пропускаем полностью, либо изучаем поверхностно, просто статью прочитать, понять где используется и для чего нужна, не вникаем сильно, подробней будут комментарии ниже.
Введение
Отличный туториал почти на все темы
Видео полные на ютубе:
Гуглим вопросы на https://stackoverflow.com/
Установка и настройка среды разработки
Установка JDK, Настройка IntelliJ IDEA.
Другие среды даже не рассматривай. Сразу качай IntelliJ IDEA с торрентов или пробную с офф сайта
Основы Java
Базовый синтаксис
Основные типы данных (int, long, Boolean, float, double, char и т.д.)
Переменные и константы
Операторы (арифметические, логические, сравнения) https://metanit.com/java/tutorial/2.4.php
Преобразование типов прочитать, но не тратить серьезное время на решение задач. В реальной работе преобразование редкость и идея сама все подсказывает где что не так. Операции сдвига вообще не смотрите даже.
Строки и работа с текстом
Основные операции со строками (создание, конкатенация, методы класса String)
К моменту подготовки к собесам надо будет понимать, как хранятся строки в пуле, очень часто спрашивают, но пока не вникаем сильно.
Отладка и тестирование!!!
Использование отладчика в IDE помогает в понимании как код бежит по строкам и как все работает. Чтобы не пытаться в уме предугадать куда тебя поведет цикл или ветвление, научись пользоваться отладкой на этом этапе, потом очень поможет. Не надо становиться гуру дебага, достаточно уметь поставить точку, запустить код в дебаг моде, построчно идти и досрочно завершить дебаг.
Управляющие конструкции
Условные операторы (if, if-else, switch)
Циклы (for, while, do-while)
Операторы управления потоком (break, continue, return)
Массивы
Многомерные массивы не используется в работе и на собесах, лучше не ломать себе мозг.
Основные концепции ООП (Объектно-Ориентированное Программирование)
Про все ООП на джуна-мидла спрашивают регулярно, надо понимать, так что не пропускаем ничего.
Классы и объекты
Объявление классов
Поля и методы
Конструкторы
Инкапсуляция
Модификаторы доступа (public, private, protected, default)
Геттеры и сеттеры
Наследование
Наследование классов
Ключевое слово extends, final
Переопределение методов
Полиморфизм
Переопределение методов (overriding)
Перегрузка методов (overloading)
Абстрактные классы и методы
Интерфейсы
Объявление и реализация интерфейсов
Множественное наследование через интерфейсы
Ключевое слово implements
Работа с данными
Коллекции
List, Set, Map
Обзор интерфейсов и основных реализаций ArrayList, HashMap, HashSet.
TreeSet, LinkedList, TreeMap, Queue, Stack и все прочее можно пропустить.
Отличия ArrayList от LinkedList выучить.
!!! Алгоритмическая сложность поиска, вставки, удаления элементов в ArrayList, LinkedList, HashMap.
Методы equals() и hashcode() надо понимать зачем они, уметь писать их своими руками не надо.
Дополнительные темы
Обработка исключений
Обработка исключений с помощью try-catch
Ключевые слова throw и throws
Пользовательские исключения
Иерархия исключений
Ключевое слово final
Работа с файлами и ввод-вывод
Этой теме уделяется необоснованно много внимания. Ни на собеседованиях, ни в реальной работе это не пригодится. Никто с файлами не работает почти. Очень редкий кейс. Минимум внимания, не переживаем по поводу непонимания.
Работа с потоками ввода-вывода (InputStream, OutputStream, Reader, Writer)
Многопоточность
Тема важная только для собеседований. Спрашивают часто для общего кругозора. В реальной работе многопоточка встречается редко. И если она есть на проекте, то там вилки большие, грейды высокие. Не джуновая тема. Элементарную многопоточку решает спринг фреймворк. Так что изучаем основы, решаем не сложные задачи, на понимание базовых вещей. Не пытаемся осознать ее глубоко, пустая трата времени, быстрей и лучше зазубрить для собеседований основные вопросы.
Основные концепции многопоточности в Java (Thread, Runnable, synchronized, volatile)
Создание и запуск потоков (Thread и Runnable)
Синхронизация потоков
Управление потоками (wait, notify, notifyAll)
Пул потоков (ThreadPoolExecutor)
Высокоуровневые конструкции для многопоточности (классы из пакета java.util.concurrent: CountDownLatch, CyclicBarrier, Semaphore, и др.)
Дополнительные важные темы
String
Поиск подстроки(без регулярок). Методы substring, replace, split.
Enum типы
На собеседованиях не спрашивают, но знакомы быть должны.
Определение и использование перечислений
Методы и свойства enum типов
На собеседованиях встречается крайне редко, тема для понимания сложная, пройти поверхностно, решить несложные задачи.
Обобщенные классы и методы
Примеры использования generics для повышения безопасности и повторного использования кода
Функциональные интерфейсы
Использование лямбда-выражений для более компактного кода
Единственное что могут спросить – что такое лямбда и зачем нужна.
Java 8 Features
Да, до сих пор спрашивают на собесах такие вещи.
Довольно часто спрашивают, немного познакомиться надо.
Optional, default methods в интерфейсах
Java Memory Model
Основные аспекты модели памяти в Java
Сборка мусора
Часто спрашивают, надо просто зубрить ответы, задач нет.
Дополнительно по кору
Далее темы знаю, что есть, но не нужно пристальное внимание в 99% случаев, можно прочитать и забыть, а когда понадобится вспомнить о существовании и загуглить.
Ввод с клавиатуры: тема нужна только для тестов на этапе обучения, в работе никогда.
Регулярные выражения, regexp. Прочитать зачем, решать задачи не надо, гуглить регулярки на работе либо чатгпт напишет. Редкая и вредная штука.
Расширение, сужение типов, сдвиг.
Класс Date и работа с датой и временем: очень много разных реализаций на реальных проектах. Вечная головная боль, будете крутить эти даты лучше, когда на работе встретите.
Вещественные типы, с плавающей запятой.
Instanceof – ключевое слово из легаси проектов, антипаттерн.
Работа с архивами – выкинуть. Очень запутанно и совершенно ненужно.
Сериализация\Десериализация, Маршаллинг: Руками такие вещи никто не делает в реальности, для этого есть удобные либы. Прочитать что это и зачем и все.
Класс File\Path – работа с файлами большая редкость.
Вложенные, внутренние, анонимные классы. Антипаттерн, на реальных проектах почти не встречается.
Comparator, Побитовые операторы (&, xor, <<,...).
JSON\XML – не нужно на этом этапе, в изучении спринга познакомитесь.
JavaScript, Html, Css, BootStrap - это все не нужно совершенно.
Английский язык – в РФ конторах совершенно не нужен, для гугления переводчик в помощь.
Еще полезные ссылки:
Основы Java garbage collection
Что вы должны знать на выходе:
Если вы пошли на джавараш, то у вас к 30 уровню около 1000 решеных задач разного уровня сложности и объема, которые охватывают вcю базу Collections, Многопоточка(базовая), Stream API, Exceptions, Generics, Date and Time, OOP(базовое), Lambda, и пр. Только пожалуйста, забейте на задачи про ресторан.
2. Фреймворки + смежные технологии

Когда придете на собеседование вам нужно показать знания спринга, без него нет смысла искать работу, я пытался… Все что вам нужно – это написать минимальный pet-проект. Только бэкенд для приложения. Это значит, что не надо тратить время на изучение верстки и javascript для фронта, вам надо только сделать RestFull сервис, который предоставляет API для взаимодействия с вашим сервисом.
Из функционала должны быть реализованы все CRUD операции с вашими сущностями, плюс дополнительно реализовать фоновый процесс, который работает по расписанию и все. Это план минимум, но иногда на собеседованиях просят рассказать о решении задач, которыми вы гордитесь, и, чтобы вам было что ответить на это я предлагаю реализовать еще один сервис со «звездочкой» о котором будет в конце.
Начнем с основ.
Сборка проекта и Git
Прежде чем приступать к созданию своего проекта, рекомендуется освоить Maven - инструмент для автоматизации сборки проектов. Он позволяет легко добавлять и управлять сторонними библиотеками и их версиями.
Не надо глубоко копать, просто научитесь подключать зависимости, резолвить конфликты, собирать проект и все. Не надо учиться писать плагины или какие-то крутые штуки делать.
Далее изучите Git - распределенную систему контроля версий. Git позволяет отправлять и копировать проекты на удаленный репозиторий. Вы можете найти обучающие видео раз и два, чтобы понять основы Git, и попрактиковаться с командами и ветками на платформе для практики Git.
Важно! Начинайте сразу пушить свои проекты на удаленный репозиторий, чтобы познакомиться с Git. Лучше сделать несколько ошибок на этапе обучения, чем на реальном проекте. Сами проекты никому скидывать не надо, никто смотреть их все равно не будет. И не заморачивайтесь с работой с гитом через командную строку, если вам нравится кнопочки в идее тыкать, то делайте именно так, если нравится консоль то пожалуйста. На реальной работе всем пофиг как вы с гитом взаимодействуете.
Базы данных, JDBC и Hibernate
Начните изучать SQL - язык общения с реляционными базами данных.
*Для хорошей базы предлагаю пройти 2 модуля этого курса, этого будет пока достаточно. Ознакомьтесь и попрактикуйтесь с PostgreSQL, Прорешайте 30-40 задач (1 и 2 уровни сложности) на sql-ex.ru этого понимания будет достаточно для работы. Прочитайте о различиях между SQL и NoSQL. NoSQL базы данных на этом этапе не нужно осваивать, просто понимать разницу.
Для взаимодействия приложения с базой данных используйте JDBC, низкоуровневый драйвер для установления соединений. JDBC удобен для простых задач, но для более сложных случаев используйте ORM (Object Relational Mapping) - преобразование объектной модели в реляционную и обратно. В проекте ниже используйте Hibernate, который автоматически сопоставляет колонки таблиц с полями в Java-классах. Поэтому сначала спринг начнем, потом хибер подключим.
Spring Framework

Spring - основной фреймворк для Java, используемый для разработки RESTful API и бэкенда. Это семейство фреймворков, построенных на Spring Core, таких как Spring MVC, Spring Web, Spring Data JPA, Spring Security, Spring Boot и другие.
Можно пойти по ютубу. Бесплатный вариант. Мой любимый: letsCode либо Алишев(до 13 урока достаточно) либо по JavaGuru(с 23-24 урока).
Просмотрите ролики и, используя их как шпаргалку, попробуйте выполнить вот это тестовое задание: Космопорт. В этом репозитории есть все что вам надо от описания и инструкций до исходного кода. Дайте себе неделю на него, максимум. Если все ок, то спокойно переходим к следующему курсу, если все плохо, то не упарываемся, в курсе будет с нуля, ничего страшного, главное двигаемся дальше.
Кстати, я сам его в итоге не сделал полностью прежде чем перейти к курсу и ничего страшного.
Можно взять этот курс с торрента и учиться по нему, я за базу брал его. И пет проект тоже на нем пишется. Отличный вариант, с 19 года не считаю его устаревшим, как совершенно бесплатное обучение пойдет. Есть свежий, 22 года, на торрентах нет, в сообществе спрашивайте, кот-нибудь поделится, плюс в сообществе можно попросить провести ревью домашки, там есть отдельный тред для этого. Весь курс проходить не обязательно. Я прошел 6-7 модулей, мне хватило, чтобы устроиться на работу. Советую делать так же, только темы с bootstrap и JS выкидывайте. Я их изучал, не пригодилось совершенно, пустая трата времени
- Spring Boot - если нам до этого приходилось писать бесконечные конфигурации, то Spring boot облегчает нам эту задачу тем, что предоставляет автоконфигурацию для наших модулей. Также он имеет встроенный http-сервер(Диспетчер сервлетов) который помогает развернуть RESTful API очень быстро.
Перед тем как создать первый проект на start.spring.io посмотрите это видео.
!!!Важно - если непонятны формулировки или не смогли найти ресурсы самостоятельно, в проекте с торрента есть многие уже готовые решения/конфигурации, вы также можете их взять для своего обучения и разобрать их работу
Изучите концепции "Dependency Injection" и "Inversion of Control", а также такие термины, как bean, spring context, spring container, и жизненный цикл бина. В своем пет проекте вы напишите небольшую программу, применяя эти принципы.
Важно: Изучайте только конфигурацию Spring с использованием Java и аннотаций, избегая XML-конфигурации, на них уже никто не пишет.
- Spring Boot упрощает конфигурацию Spring-приложений, предоставляя автоконфигурацию для модулей. Он включает встроенный HTTP-сервер, что позволяет быстро развернуть RESTful API.
- Spring Data JPA предоставляет методы для работы с базой данных, реализацию TransactionManager и автоконфигурацию. Создайте CRUD-приложение для магазина с использованием PostgreSQL.
Реализация проекта
Создайте первый проект, максимально приближенный к реальному. Выберите любую тему, главное - потрогать технологии.
Например, интернет магазин. Создайте сущность "товары" с полями: название, описание, категории, цена, количество, артикул, дата и время последнего изменения количества, дата создания. За основу возьмите CRUD сервис космопорт, который был выше. Все эти реализации есть в курсе с торрента.
Разделите приложение на слои: веб, сервис, репозиторий.
Реализуйте ручки для создания, удаления, обновления и получения данных.
- Liquibase упрощает управление версиями базы данных и тестирование. Напишите скрипты миграции для вашей базы.
- @Profile и пагинация
Аннотация @Profile управляет конфигурацией компонентов в зависимости от профиля. Пагинация позволяет разбивать большие наборы данных на страницы.
Добавьте возможность запуска с профилем "local", при котором используется H2DB вместо PostgreSQL.
Реализуйте ручку findAll с пагинацией.
- Изучите что такое ExceptionHandler, Напишите свой собственный. Избегайте RuntimeException, пишите свои кастомные исключения и обрабатывайте их хендлером.
Планировщик задач выполняет фоновые процессы. Почти в любом реальном проекте фоновые процессы присутствуют.
Добавьте свой job scheduler, который каждые 30 секунд увеличивает цену товара. Время конфигурируется через параметр app.scheduling.period. Возможность отключения через параметр app.scheduling.enabled (по умолчанию false).
- Тестирование: JUnit, Jupiter, Mockito
Используйте JUnit, Jupiter и Mockito для написания юнит-тестов.
Напишите юнит-тесты для методов сервиса. Пример теста: если jpa-репозиторий возвращает пустой Optional, выбрасывается свой кастомный Exception. Если возвращает Entity, метод возвращает Dto с соответствующими полями. Замокайте репозиторий @Mock.
- @Transactional
Добавьте в scheduler задержку на 30 секунд и аннотацию @Transactional. Попробуйте изменять и извлекать товары во время работы scheduler. Ознакомьтесь с различными видами блокировок (optimistic, pessimistic) и почините ошибки. Особо не углубляйтесь, на практике такие вещи никто почти не делает, тем более на первой работе. Просто зубрите типичные вопросы к собеседованиям. Их очень любят задавать. Уровни изоляции маст хев
Создайте второе примитивное приложение с парой эндпоинтов get и post. В первом сервисе добавьте фоновый процесс, который раз в минуту вызывает эти эндпоинты и сохраняет полученные данные в базу данных. Добавьте тесты на этот метод в которых замокайте вызовы ко второму сервису. Это даст минимальное понимание о межсервисном взаимодействии в микросервисной архитектуре.
- Связи между сущностями
Ознакомьтесь с аннотациями @OneToMany, @OneToOne и @ManyToMany и добавьте соответствующие связи в свой проект. Почитайте про проблему n+1 запроса. Умение объяснить эту проблему и пути ее решения на собеседовании добавит вам очков.
Заключение по фреймворкам
На этом этапе вы можете перейти к изучению теории. Можете пропустить брокеры сообщений и NoSQL базы данных, это можно освоить на первой работе. Обязательно посмотрите Spring потрошителя от Евгений Борисова часть1 и часть2. Сам Борисов рекомендует еще очень спринг построитель.
Итак, у вас есть минимальный RestFull сервис на спринге с хибернейтом плюс есть еще второй сервис, в который вы ходите по ресту. Это и есть микросервисная архитектура. Базовый набор для джуна-мидла. Но чтобы как-то выделить интересные задачи, которые от вас очень хотят интервьюеры, я предлагаю реализовать еще один сервис. В этом сервисе вы будете решать проблемы утечек памяти, ловить OutOfMemoryError и использовать трассировщик, чтобы искать утечки. Именно такую задачу я решал на своей самой первой работе и всегда, когда у меня спрашивают на собеседованиях даже на синьер позиции про «особенные» задачи, рассказ об этом заходит отлично.
На хабре я уже писал статью «Как выбрать 1 млн. записей из бд, записать в Excel и не упасть с OutOfMemoryError». Можно взять ее за основу и сделать такой же сервис чтобы воспроизвести проблему, поизучать как пользоваться трассировщиком и опробовать его на этом сервисе. На гитхабе лежат все исходники. Гуглите VisualVm. Ютуб
- На этом изучение хардов все! В результате у вас будет база языка, три реализованных сервисов на самых востребованных фреймворках и вам будет о чем рассказать на собеседовании.