Полный и подробный план обучения языку Java. Какие...
बनाया गया: 1 जुलाई 2025
बनाया गया: 1 जुलाई 2025
Полный и подробный план обучения языку Java.
Какие темы необходимо знать по шагово и порядку
Этап | Темы | Примерные сроки* | Итог проекта/результат |
---|---|---|---|
0. Подготовка | Установка последней LTS (21) или новейшей 24; IntelliJ IDEA/VS Code; настройка javac , JDK Docs | 1-2 дня | “Hello, Java!” CLI-программа |
1. Базовый синтаксис | Структура файла, main , примитивы, строки, операторы, ввод/вывод | 1-2 нед. | Калькулятор / Конвертер единиц |
2. Управляющие конструкции | if/else , циклы, современный switch -expression | 1 нед. | Игра «Угадай число» |
3. Методы и переменные | Аргументы, varargs , ключевое слово var | 3-5 дн. | Мини-библиотека мат. функций |
4. ООП-фундамент | Классы/объекты, пакеты, модификаторы, наследование, полиморфизм, интерфейсы, record , sealed | 2-3 нед. | Консольный менеджер задач |
5. Core API & Generics | java.lang , java.util.* , коллекции, обобщения, Optional , java.time | 2 нед. | Простейшая CRM-система в CLI |
6. Lambda & Streams | Функциональные интерфейсы, pipeline, collectors | 1-2 нед. | Анализ CSV-данных потоком |
7. Исключения | Checked/unchecked, кастомные, try-with-resources | 4-6 дн. | Логгер с гибкой обработкой ошибок |
8. I/O & NIO.2 | Files , Path , каналы, буферы, асинхронный I/O | 1 нед. | Файл-синхронизатор |
9. Параллелизм | Thread , synchronized , java.util.concurrent , CompletableFuture , Virtual Threads (Loom, JDK 21) | 2-3 нед. | Многопоточный веб-сканер |
10. Модульная система (JPMS) | module-info.java , экспорт/requires, слоистая архитектура | 1 нед. | Разделение проекта на модули |
11. Сборка и тесты | Maven/Gradle, структуру проекта, JUnit 5, Mockito | 1 нед. | CI-pipeline + юнит-тесты |
12. JVM — Под капотом | Память, GC, JIT, профилирование (jcmd , Flight Recorder) | 1-2 нед. | Отчёт об оптимизации проекта |
13. Современные фичи (21-24) | Pattern Matching (instanceof , switch ), String Templates, FF&M API, Unnamed Patterns/Variables | 1 нед. | Демонстрационный “playground” |
14. Безопасность | JCA/JCE, TLS, key-store, шифрование | 1 нед. | Инструмент шифрования файлов |
15. GUI (опц.) | JavaFX/Swing основы | 1 нед. | Настольный To-Do |
16. Работа с БД | JDBC, connection pool, ORM (Hibernate/JPA) | 1-2 нед. | REST-служба “Библиотека” |
17. Веб-фреймворки | Spring Core, Spring Boot, Spring MVC, REST, Jakarta EE | 3-4 нед. | Микросервис Catalog |
18. Микросервисы & Cloud | Spring Cloud, Docker, Kubernetes, GraalVM Native Image | 3-4 нед. | Полный набор сервисов + deployment |
19. CI/CD & DevOps | GitHub Actions/Jenkins, контейнер-регистры, мониторинг | 1-2 нед. | Автодеплой + наблюдаемость |
20. Архитектура & Паттерны | SOLID, DDD, дизайн-паттерны GoF, Clean Architecture | 2 нед. | Рефакторинг предыдущих сервисов |
21. Сертификация/Портфолио | OCP Java SE 17/21, подготовка к тестам, open-source вклад | по потребности | Публичный репозиторий + сертификат |
* Сроки даны для 10-15 ч/нед. — адаптируйте под своё расписание.
Документация:
Книги:
Курсы:
Практика: LeetCode (категория Java), Exercism, участие в Spring PetClinic, Quarkus/Helidon sample-apps.
Следуя такому маршруту, за 9-12 месяцев при умеренной нагрузке можно уверенно пройти путь от новичка до разработчика, готового к коммерческим Spring-микросервисам и сертификации OCP. Удачи на пути освоения Java!
По первому пункту опиши подробно что нужно изучить
Ниже — пошаговый чек-лист, который превращает «Hello, Java!» из теории в живую, готовую к работе среду. Если уже что-то из списка сделано — пропускайте или сверяйтесь с рекомендациями.
Шаг | Цель | Что конкретно делаем | Почему важно |
---|---|---|---|
1. Понимаем версии JDK | Разобраться, какую JDK ставить | 1. Открываем [Oracle Java SE Support Roadmap] и видим, что Java 21 — текущая LTS.<br>2. Если хотите попробовать самые свежие фичи (String Templates, FFM API), берём JDK 24 параллельно. | Чтобы проект жил долго, лучше опираться на LTS, но иметь под рукой «песочницу» для новых возможностей. |
2. Скачиваем JDK | Установить компилятор и стандартную библиотеку | - Oracle JDK, OpenJDK (Adoptium Temurin), Azul Zulu — любая дистрибуция.<br>- macOS: brew install openjdk@21 .<br>- Windows: MSI-инсталлер OpenJDK Temurin 21.<br>- Linux: репо дистрибутива или архив .tar.gz. | Все IDE и сборщики используют установленный JDK-home. |
3. Настраиваем переменные среды | Чтобы java /javac работали в терминале | - Добавляем JAVA_HOME и путь к bin .<br>- Проверяем java -version , javac -version . | Позволяет запускать компилятор и инструменты вне IDE. |
4. Выбираем IDE/редактор | Удобный кодинг и отладка | - IntelliJ IDEA Community (рекомендуется).<br>- VS Code + плагин Extension Pack for Java.<br>- Eclipse IDE (если нужен PDE/RCP). | Автодополнение, рефакторинг, быстрый запуск. |
5. Создаём первый проект | Проверить, что всё установилось правильно | - В IDEA: New Project → JDK 21 → Command-line app.<br>- Пишем System.out.println("Hello, Java!"); .<br>- Запускаем. | Быстрый sanity-check. |
6. Знакомимся с документацией | Научиться искать ответ в официальных источниках | - Заглядываем в https://docs.oracle.com/en/java/javase/21/docs/api/index.html (Java API Docs).<br>- Читаем раздел The Java Tutorials → Getting Started. | Официальная справка — источник правды о каждом классе. |
7. CLI-инструменты JDK | Понимать, что лежит кроме java /javac | - jshell (интерактивная REPL).<br>- javadoc (генерация доков).<br>- jcmd , jmap , jstack , jfr (диагностика). | Пригодятся позже для профилирования и экспериментов. |
8. Git + GitHub | Контроль версий и публикация кода | - Устанавливаем Git.<br>- Создаём репозиторий java-learning-roadmap .<br>- Делаем первый коммит Hello.java . | Практика «маленьких, частых коммитов» упростит обучение. |
9. Сборщик проекта | Автоматизировать компиляцию и зависимости | - Maven: mvn archetype:generate -DartifactId=demo .<br>- Gradle (Kotlin DSL): gradle init --type java-application . | Сборщик избавит от «jar-адской» ручной раскладки. |
10. Русскоязычный fallback | Быстро находить ответы на родном языке | - Добавляем в закладки: javarush.ru, habr.com/tag/java, Telegram-чат Java Developers. | Когда застрянете — искать помощь легче. |
Категория | Ссылка / инструмент | Примечание |
---|---|---|
Версии и JEP-ы | https://openjdk.org/ | Описание всех «JDK Enhancement Proposals». |
Дистрибутивы | Temurin (Adoptium), Amazon Corretto, Azul Zulu | Бесплатные, кроссплатформенные. |
IDE плагины | IntelliJ: Lombok, Key Promoter X; VS Code: Debug Adapter Host Transport | Повышают продуктивность. |
Cheatsheet | https://github.com/cheat-engine/java-cheatsheet | Быстрые шпаргалки по синтаксису и CLI. |
java -version
выводит 21 или 24HelloWorld
без ошибокjshell
открывается и позволяет делать арифметикуКогда все галочки стоят — переходите к блоку «Базовый синтаксис». Если что-то ломается на пути — возвращайтесь к соответствующему шагу и фиксите: на раннем этапе лучше потратить час, чем потом «ловить» проблемы окружения.
по каждому пункту распиши подробно
Ниже — развёрнутые инструкции к каждому из 10 шагов блока «Подготовка рабочей среды». Если что-то у вас уже настроено, пропустите соответствующий подпункт либо используйте его как чек-лист для самопроверки.
Что делаем
Почему важно
Библиотеки/фреймворки в продакшене ориентируются на LTS; но работодатели любят, когда кандидат знает новые JEP-ы и умеет играться в песочнице.
Дистрибутив | Особенности |
---|---|
Temurin (Adoptium) | 100 % open-source, быстрые патчи безопасности. |
Oracle JDK | Коммерческая лицензия, но бесплатно для Dev/Test. |
Azul Zulu / Amazon Corretto | Долгая поддержка, оптимизированы под облака. |
bashbrew install openjdk@21 sudo ln -sfn /usr/local/opt/openjdk@21 /Library/Java/JavaVirtualMachines/openjdk-21.jdk
OpenJDK21U-jdk_x64_windows_hotspot_21.0.3.msi
, запускаем, указываем «Add to PATH».bashtar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21.0.3.tar.gz -C /opt sudo update-alternatives --install /usr/bin/java java /opt/jdk-21.0.3/bin/java 1
Проверка:
bashjava -version # должно показать 21.0.x javac -version
ОС | Действия |
---|---|
Windows | Панель упр. → Система → Доп. параметры → Переменные среды.<br>• JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-21 <br>• В PATH — %JAVA_HOME%\bin первым. |
macOS / Linux | .zshrc или .bashrc :<br>export JAVA_HOME=$(/usr/libexec/java_home -v21) <br>export PATH="$JAVA_HOME/bin:$PATH" |
Потенциальные ловушки: две версии JDK в PATH, WSL vs Windows, корпоративные group policy.
settings.json
— выставить "java.configuration.runtimes"
на 21 и 24.Shift+Shift
(вездеискатель), Ctrl+Alt+L
(формат).Ctrl+P
, Ctrl+.
(быстрый импорт).javapublic class Main { public static void main(String[] args) { System.out.println("Hello, Java!"); } }
Shift+F10
.bashgradle init --type java-application --dsl kotlin --project-name hello-java ./gradlew run
Ожидаемый вывод: Hello, Java!
https://docs.oracle.com/en/java/javase/21/docs/api/
java.base/java/lang/String.html
.javadoc -d docs src/**/*.java
— генерирует офлайн-HTML.Совет: при чтении API фиксируйте себе: пакет ➜ класс ➜ самые частые методы.
Инструмент | Назначение | Мини-пример |
---|---|---|
jshell | REPL для экспериментов | jshell> List.of(1,2,3).stream().sum() |
javap | Дизассемблер байткода | javap -c Hello.class |
jdeps | Анализ зависимостей | jdeps --recursive my.jar |
jlink | Генерация кастом-JRE | jlink --add-modules java.base,java.sql -o minimal-jre |
jcmd / jstack | Диагностика JVM | jcmd <pid> GC.heap_info |
jfr | Flight Recorder профайлер | java -XX:StartFlightRecording ... |
Сразу заведите шпаргалку: что делает, когда понадобится, пример команды.
git --version
; если нет — ставим.ssh-keygen -t ed25519 -C "your_email"
→ добавляем ключ в GitHub → Settings → SSH and GPG keys..gitconfig
— заполняем name/email, включаем цветной вывод:
bashmkdir java-learning && cd java-learning git init echo "# Java Learning" > README.md git add . git commit -m "Init repo" git remote add origin [email protected]:<user>/java-learning.git git push -u origin main
text/out/ *.class .idea/ .gradle/
bashbrew install maven # macOS
bashmvn archetype:generate -DgroupId=com.example \ -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false
bashmvn clean package java -jar target/demo-1.0-SNAPSHOT.jar
gradle init --type java-library
./gradlew test
build.gradle.kts
:
kotlindependencies { implementation("com.google.guava:guava:33.1.0-jre") testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") }
Чем отличаются? Maven декларативен (XML), Gradle — скриптовой (Groovy/Kotlin), быстрее за счёт кеша.
Как пользоваться: когда англ. источник непонятен, ищите статью-разбор на русском; фиксируйте перевод терминов (sealed class — запечатанный класс).
Проверка | Как выполнить |
---|---|
java -version и javac -version → 21.0.x (или 24.0.x) | Терминал |
IDE собирает и запускает Hello, Java! | Кнопка Run |
jshell считает 2+2 | jshell> /exit |
mvn -version или ./gradlew --version работают | Терминал |
git push проходит без пароля (SSH-ключ) | Проверка |
Поставили все галочки — значит окружение готово, и можно переходить к следующему большому этапу — базовому синтаксису Java. Если где-то возникли ошибки, вернитесь к нужному шагу и устраните их, чтобы не тратить время на конфигурационные проблемы позже.
подробно описать что делает каждый файл из этой структуры
deposit-spring/
├─ model/ // Client, DepositType, Account, AppUser
├─ repository/ // JpaRepository + кастомные JPQL-методы
├─ service/ReportService.java
├─ security/SecurityConfig.java
├─ controller/
│ ├─ AccountController // CRUD
│ └─ ReportController // /reports
├─ templates/
│ ├─ layout.html // общий шаблон Bootstrap
│ ├─ form.html
│ └─ reports.html
├─ application.yaml
└─ db/migration/
└─ V1__schema_and_seed.sql
supply-spring/
├─ src/main/java/ru/dstu/supply/
│ ├─ model/ // @Entity классы
│ ├─ repository/ // интерфейсы JpaRepository
│ ├─ service/ReportService.java // бизнес-логика 5 запросов
│ ├─ controller/
│ │ ├─ CrudController.java // общие CRUD-операции
│ │ └─ ReportController.java // /reports
│ └─ SupplySpringApplication.java // точка входа
├─ src/main/resources/
│ ├─ templates/ // Thymeleaf: list.html, form.html, reports.html
│ ├─ application.yaml // url=jdbc:postgresql://…
│ └─ db/migration/ // V1__schema.sql, V2__seed.sql
└─ pom.xml
Файл / папка | Назначение / ключевые моменты реализации |
---|---|
model/ | Слой доменных моделей – классы, размеченные @Entity , которые Hibernate отображает на таблицы.<br>• Client – Физическое лицо/организация, открывающее вклад. Поля: id , ФИО, паспорт и т. д.<br>• DepositType – Cправочник видов вкладов (срок, ставка, капитализация).<br>• Account – Банковский счёт, связанный с конкретным Client и DepositType ; хранит сумму, дату открытия.<br>• AppUser – Учётная запись для доступа к приложению; содержит username , password , roles . |
repository/ | Слой доступа к данным. Для каждой сущности – интерфейс, расширяющий JpaRepository (даёт CRUD бесплатно) плюс собственные JPQL-методы, напр. findByClientPassport() или агрегирующие запросы по вкладам. |
service/ReportService.java | Бизнес-логика отчётов. Собирает данные из нескольких репозиториев, формирует DTO/Map<String, Object> для отображения отчёта (например «Вклады по клиентам»). |
security/SecurityConfig.java | Конфигурирует Spring Security: HttpSecurity , список URL без авторизации, форма логина, PasswordEncoder , источник пользователей (In-Memory или AppUserDetailsService ). |
controller/AccountController | MVC/REST-контроллер с маршрутами /accounts , /accounts/{id} . Методы: GET список, GET id , POST создать, PUT обновить, DELETE . Вызывает AccountRepository напрямую либо через сервис. |
controller/ReportController | Маршрут /reports + параметры даты/типа. Делегирует в ReportService , кладёт данные в Model , возвращает reports.html . |
templates/layout.html | Базовый шаблон Thymeleaf: подключает Bootstrap CSS & JS, блоки th:fragment="content" /header /footer ; остальные страницы расширяют его через th:replace="layout :: content" . |
templates/form.html | Форма создания/редактирования счёта или клиента. Использует th:object="${account}" , бинды th:field="*{amount}" и т. д. |
templates/reports.html | Таблица с данными отчёта, цикл th:each="row : ${rows}" , ссылки «Скачать CSV/PDF». |
application.yaml | Конфигурация окружения: spring.datasource.url , username , password , spring.jpa.hibernate.ddl-auto=validate , локаль, порты. |
db/migration/V1__schema_and_seed.sql | Сценарий Flyway. Создаёт таблицы (client , deposit_type , account , app_user ) + начальные данные (2 вида вкладов, demo-пользователь). Выполняется при первом старте. |
(Полная Maven-структура, поэтому пути начинаются с src/main/...
)
Файл / папка | Назначение / ключевые моменты реализации |
---|---|
src/main/java/ru/dstu/supply/model/ | Сущности учёта поставок: Supplier , Product , Contract , Warehouse и т. д.; аннотации @Entity , связи @ManyToOne , @OneToMany . |
repository/ | Интерфейсы JpaRepository . Расширяются дженериками: ProductRepository extends JpaRepository<Product, Long> . К сложным запросам – методы с @Query . |
service/ReportService.java | Содержит пять бизнес-отчётов (по контрактам, остаткам, просроченным поставкам…). Каждый публичный метод возвращает DTO-список или Excel / CSV-строку. |
controller/CrudController.java | Обобщённый контроллер (generic) – принимает параметры <T, ID> или использует делегирование через интерфейс CrudService . Экономит код повторяющихся CRUD-точек. |
controller/ReportController.java | Экшены /reports/overdue , /reports/stock и т. д.; принимает параметры запроса (дата от/до, склад), вызывает ReportService , кладёт результат в модель либо стримит файл. |
SupplySpringApplication.java | @SpringBootApplication + public static void main(String[] args) – точка входа, запускает встроенный Tomcat и сканирование компонентов. |
src/main/resources/templates/ | Шаблоны Thymeleaf: <br>• list.html – таблица всех сущностей (пагинация, поиск).<br>• form.html – th:object для добавления/редактирования.<br>• reports.html – вывод отчётов с фильтрами в <form method="get"> . |
application.yaml | Конфигурация БД (PostgreSQL URI, schema-name), путь к логам, настройки Spring Data (showSql: true , openInView: false ). |
db/migration/V1__schema.sql | Первичная схема (supplier , product , contract , warehouse ). |
db/migration/V2__seed.sql | Заполнение тестовыми поставщиками, товарами, остатками. |
pom.xml | Maven-модуль: зависимости (spring-boot-starter-data-jpa , spring-boot-starter-thymeleaf , flyway-core , lombok ), плагины spring-boot-maven-plugin , профили (dev , prod ). Определяет Java 21, версии библиотек и параметры сборки (mvn clean package ). |
db/migration
, а настройки БД — в application.yaml
.Опиши структуру на примере этого
Проект «БАНКОВСКИЕ ВКЛАДЫ» содержит 10 страниц PHP. Это главная страница «index.php», страница отчета о продажах «itog.php» и по три страницы на каждую из четырех таблиц базы данных. Страницы для взаимодействия с таблицами БД имеют названия, совпадающие с таблицами:
«имя таблицы.php» - страница вывода данных таблицы;
«create_имя таблицы.php» - страница для добавления данных в табли-цу;
«edit_имя таблицы.php» - страница для внесения изменений в таблицу.
На главной странице расположено 4 кнопок: «Отчет», «Таблица стран», «Таблица продаж», «Таблица маршрутов».
Ниже — «читаемая картинка» того, как устроен типовой учебный мини-CRUD-проект «Банковские вклады» на чистом PHP.
Я привожу названия файлов именно такими, как вы указали, и поясняю, какую задачу решает каждый.
Файл | Что делает и какие ключевые куски кода содержит |
---|---|
index.php | Главная страница-меню. <br>• Подключает db.php (или любой общий файл-конфиг с PDO/ MySQLi). <br>• Рендерит четыре кнопки-ссылки: ① «Отчёт» (itog.php ), ② «Таблица стран» (country.php ), ③ «Таблица продаж» (sale.php ), ④ «Таблица маршрутов» (route.php ). <br>• Никакой бизнес-логики кроме навигации не содержит. |
itog.php | Страница сводного отчёта о продажах/вкладах. <br>• Делает агрегирующий SQL — например:<br>SELECT c.name, SUM(s.amount) AS total FROM sale s JOIN country c ON c.id=s.country_id GROUP BY c.id .<br>• Формирует табличку, возможно рисует диаграмму chart.js. |
country.php | Чтение/список стран. Запрос: SELECT * FROM country ORDER BY id DESC . <br>• Кнопки «Добавить» (ведёт на create_country.php ) и «Edit»/«Delete» в каждой строке. |
create_country.php | Форма добавления новой страны. <br>• POST -обработчик берёт $_POST['name'] , валидирует, делает INSERT INTO country(name) VALUES(?) , редиректит назад на country.php . |
edit_country.php | Редактирование существующей строки. <br>• На GET выводит форму с текущими данными (SELECT * FROM country WHERE id=? ). <br>• На POST выполняет UPDATE country SET name=? WHERE id=? . |
sale.php | Список всех продаж/вкладов. <br>• Обычно выводится джойн сразу с клиентом и страной, чтобы не делать N+1-запросов. |
create_sale.php | Форма создания продажи. <br>• Выпадающие списки клиентов и стран (SELECT id,name FROM client ). <br>• После INSERT пересчитывает отчёт (опционально вызывает хранимку), редирект на sale.php . |
edit_sale.php | Обновление записи продажи. <br>• При загрузке делает префилд всех полей (клиент, сумма, дата). |
route.php | Справочник маршрутов (доставка документов, выездных касс и т.д.). <br>• Плюс-минус та же логика, что и в country.php . |
create_route.php / edit_route.php | Аналогичные формы для маршрутов. route обычно хранит названия городов, расстояние, привязку к стране. |
🔸 Как работает связь страниц
Все CRUD-страницы используют один и тот же приём:
- Подключают
db.php
, где инициализируется$pdo = new PDO(...)
.- Делают нужный SQL (SELECT/INSERT/UPDATE/DELETE).
- После успешной операции делают
header("Location: xxx.php")
чтобы не повторять форму F5-ом.
🔸 Обращение к одной точке подключения
Чаще всего заводитсяdb.php
+functions.php
(хелперы форматирования дат, экранирования, флэш-сообщений). Чтобы не повторять<html><head>…
, создаютheader.php
иfooter.php
и подгружают их черезinclude
.
🔸 О чём стоит помнить, если проект станет «боевым»
- Использовать prepared-statement-ы PDO (иначе SQL -инъекции).
- Валидация
filter_input()
или Respect/Validation.- Защита от CSRF (token hidden-field + проверка в POST).
- Делить слой отображения и бизнес-логику (как минимум вынести SQL в DAO-классы).
textindex.php ├─ itog.php (кнопка «Отчёт») ├─ country.php (список стран) │ ├─ create_country.php │ └─ edit_country.php ├─ sale.php (список продаж/вкладов) │ ├─ create_sale.php │ └─ edit_sale.php └─ route.php (список маршрутов) ├─ create_route.php └─ edit_route.php
Такой минималистичный «Single-Purpose-Page»-подход прост для начинающих: каждая страница отвечает ровно за одну операцию с одной таблицей. Когда приложение вырастет, эту же структуру легко мигрировать на MVC-фреймворк (Laravel, Symfony) — файлы станут контроллерами и blade-/twig-шаблонами, а SQL уедет в модели/репозитории.
Опиши структуру spring, который я ранее оправлял , но чтобы имеел ввид похоже на этот
"Проект «БАНКОВСКИЕ ВКЛАДЫ» содержит 10 страниц PHP. Это главная страница «index.php», страница отчета о продажах «itog.php» и по три страницы на каждую из четырех таблиц базы данных. Страницы для взаимодействия с таблицами БД имеют названия, совпадающие с таблицами:
«имя таблицы.php» - страница вывода данных таблицы;
«create_имя таблицы.php» - страница для добавления данных в табли-цу;
«edit_имя таблицы.php» - страница для внесения изменений в таблицу.
На главной странице расположено 4 кнопок: «Отчет», «Таблица стран», «Таблица продаж», «Таблица маршрутов»."
Ниже я описываю тот же набор экранов, что был в PHP-варианте, — «Главная», «Отчёт» и по три страницы на каждую таблицу. Просто вместо разрозненных
*.php
-скриптов теперь используются контроллеры, шаблоны и сервисы Spring.
Я беру структуру deposit-spring/, которую вы присылали, и раскладываю её «один-к-одному» с тем, как это делалось в PHP.
Путь | Роль | «PHP-аналог» |
---|---|---|
src/main/java/.../controller/IndexController.java | Обрабатывает GET / и отдаёт index.html . | index.php |
src/main/java/.../controller/ReportController.java | Маршрут /reports (+ параметры дат, типа вклада). | itog.php |
src/main/java/.../controller/AccountController.java | CRUD-маршруты /accounts/** . | account.php , create_account.php , edit_account.php |
src/main/java/.../controller/ClientController.java | CRUD для клиентов. | country.php , … |
src/main/java/.../controller/DepositTypeController.java | CRUD для видов вкладов. | ещё одна тройка PHP-страниц |
src/main/java/.../controller/AppUserController.java | (опционально) управление пользователями. | аналог «таблицы маршрутов» |
src/main/java/.../service/ReportService.java | Бизнес-логика отчётов. | SQL-часть из itog.php |
src/main/resources/templates/index.html | Главная страница с 4-мя кнопками. | в точности index.php -HTML |
src/main/resources/templates/accounts/list.html | Таблица счетов. | account.php |
src/main/resources/templates/accounts/form.html | Форма создания/редактирования. | create_account.php / edit_account.php |
(аналогичные пары для clients, depositTypes, users) | ||
src/main/resources/templates/reports.html | Шаблон отчёта. | itog.php |
src/main/resources/templates/layout.html | Общий Bootstrap-макет, подключается через th:replace . | header.php + footer.php |
src/main/resources/application.yaml | URL БД, логин, пароль, настройки JPA. | config.php или блок констант |
db/migration/V1__schema_and_seed.sql | Flyway-скрипт: создаёт таблицы и демо-данные. | ручное CREATE TABLE в PHP-проекте |
PHP-файл | Spring-замена | Что происходит |
---|---|---|
account.php | GET /accounts → list.html | Контроллер получает List<Account> из AccountRepository.findAll() и кладёт в Model . Thymeleaf выводит таблицу + кнопки «Edit / Delete / Add». |
create_account.php | GET /accounts/new → form.html <br>POST /accounts | GET рендерит пустую форму; POST принимает форму (binding-object @ModelAttribute AccountDto ), валидирует и зовёт AccountService.save(...) ; затем redirect:/accounts . |
edit_account.php | GET /accounts/{id}/edit → form.html <br>POST /accounts/{id} | GET подставляет текущие значения (AccountService.findById(id) ), POST обновляет запись через сервис. |
По той же схеме работают Client, DepositType и AppUser: для каждой сущности три маршрута заменяют три PHP-файла.
index.html
)html<div class="btn-group-vertical gap-2"> <a href="/reports" class="btn btn-primary">Отчёт</a> <a href="/clients" class="btn btn-outline-primary">Клиенты</a> <a href="/accounts" class="btn btn-outline-primary">Счета</a> <a href="/deposit-types" class="btn btn-outline-primary">Виды вкладов</a> </div>
HTML идентичен старому меню, только ссылки ведут на маршруты Spring-контроллеров, а не на отдельные *.php
файлы.
/reports
)ReportService.buildReport(...)
, который делает агрегирующий JPQL / @Query
.List<ReportRow>
) кладётся в Model
.reports.html
выводит таблицу и, при необходимости, кнопку «Скачать CSV/PDF».security/SecurityConfig.java
javaauthorizeHttpRequests(auth -> auth .requestMatchers("/", "/css/**").permitAll() .anyRequest().authenticated()) .formLogin().defaultSuccessUrl("/", true);
В PHP-версии авторизации не было; здесь доступ к CRUD-страницам можно закрыть логином-паролем.
textdeposit-spring ├─ controller/ │ ├─ IndexController → index.html (Главная) │ ├─ ReportController → reports.html (Отчёт) │ ├─ AccountController → accounts/list|form (Счета) │ ├─ ClientController → clients/list|form (Клиенты) │ ├─ DepositTypeController → depositTypes/... (Виды вкладов) │ └─ AppUserController → users/... (Пользователи) ├─ templates/ │ ├─ index.html │ ├─ reports.html │ ├─ accounts/ │ │ ├─ list.html │ │ └─ form.html │ ├─ clients/ … (и т. д.) │ └─ layout.html └─ … (model, repository, service, migration, config)
Итого: вместо 10 разрозненных PHP-страниц вы получаете пять контроллеров + набор Thymeleaf-шаблонов, но логика навигации и количество экранов остаётся тем же:
1 страница-меню → 1 страница-отчёт → 3×N страниц на каждую таблицу БД.
План обучения по темам, чтобы было достаточно для работы java программистом
Логика: идём «пирамидой» — сначала ядро языка и стандартной библиотеки, затем инфраструктура (сборка, тестирование), потом фреймворки и практики, которые востребованы в большинстве коммерческих проектов.
Примерный горизонт — 9–12 месяцев при занятости 10–15 ч в неделю.
Уровень | Темы | Что обязательно усвоить | Мини-проекты для закрепления |
---|---|---|---|
1. База языка | • Установка JDK 21/24, IDE<br>• Структура программы, main <br>• Типы, операторы, строки<br>• Управляющие конструкции<br>• Методы, область видимости | — отличать примитивы и ссылки<br>— понимать, как компилятор строит .class | Конвертер единиц, калькулятор CLI |
2. ООП-фундамент | • Классы/объекты, пакеты<br>• Инкапсуляция, наследование, полиморфизм<br>• Интерфейсы, record , sealed | — проектировать иерархию классов<br>— применять переопределение vs. перегрузку | Консольный менеджер задач |
3. Generics + Core API | • Коллекции (List , Map , Set )<br>• Обобщения: <T> , wildcards<br>• Optional , java.time | — выбрать подходящую коллекцию под задачу<br>— писать собственные generic-классы | Мини-CRM в памяти |
4. Функциональный стиль | • Lambda-выражения<br>• java.util.stream.* pipeline<br>• Методы map/filter/reduce | — писать читабельные Stream-цепочки<br>— понимать lazy vs. terminal ops | Анализ CSV-файла потоками |
5. Обработка ошибок & I/O | • Checked / unchecked исключения<br>• try-with-resources<br>• Files , Path , NIO.2 | — проектировать собственные исключения<br>— безопасно читать/писать файлы | Логгер с ротацией файлов |
6. Параллелизм | • Классический Thread , synchronized <br>• java.util.concurrent basics<br>• Virtual Threads (Project Loom)<br>• CompletableFuture | — избегать гонок, deadlock’ов<br>— писать асинхронный код-pipeline | Многопоточный веб-сканер |
7. Модульная система JPMS | • module-info.java , requires / exports | — дробить монолит на модули, избегать split-packages | Разделить предыдущий проект на 2–3 модуля |
8. Сборка и тестирование | • Maven или Gradle (Wrapper, зависимости)<br>• JUnit 5, Mockito<br>• CI-pipeline (GitHub Actions) | — писать repeatable тесты<br>— настроить билд одной командой | Unit-тесты 80 % кода, автоматический build |
9. JVM «под капотом» | • Память, стек/хип, GC-виды<br>• JIT, профилировка (jcmd , JFR)<br>• Flags: -Xms/-Xmx , GC tuning | — читать heap-dump, находить утечки<br>— понимать влияние параметров на перф | Профилировать свой веб-сканер |
10. Работа с БД | • JDBC + connection pool<br>• JPA/Hibernate аннотации<br>• Основы SQL, индексы | — маппить one-to-many / many-to-many<br>— писать JPQL-запросы | CRUD-REST-сервис «Библиотека» |
11. Веб и REST | • Spring Boot 3 (LTS) основы<br>• Контроллеры, DTO, валидация<br>• Spring Data JPA repositories | — строить слой Service → Repository<br>— обрабатывать ошибки REST (Advice) | Микросервис «Accounts» |
12. Безопасность | • Spring Security: фильтр-цепочка<br>• JWT / OAuth 2, CORS<br>• Базовые уязвимости (OWASP Top-10) | — конфигурировать роли и доступы<br>— защищать REST-эндпоинты | Авторизация для сервиса «Accounts» |
13. Микросервисы & DevOps | • Dockerfile, Docker Compose<br>• Spring Cloud Config, OpenFeign<br>• Основы Kubernetes, Helm Chart | — контейнеризировать приложение<br>— настроить конфиг-сервер и сервис-дискавери | Деплой 2-х сервисов в Docker Compose |
14. Современные фичи (JDK 21-24) | • Pattern Matching (switch , instanceof )<br>• String Templates (JEP 459)<br>• Foreign Function & Memory API (JEP 454) | — применять новые конструкции без «магии»<br>— писать interop c native C-lib | Playground «новинки Java 24» |
15. Архитектура и паттерны | • SOLID, DDD базово<br>• GOF-паттерны: Factory, Strategy, Adapter<br>• Clean Architecture слои | — выделять границы (domain ↔ infra)<br>— выбирать паттерны обоснованно | Рефакторинг ранее созданных сервисов |
16. Портфолио и сертификация | • Подготовка к OCP Java SE 21<br>• Open-source issues / pull-requests | — решить 200+ задач на LeetCode (Java) | Публичный GitHub с 3-4 pet-проекта |
Следуя этому маршруту, вы соберёте достаточную «боевую» корзину навыков, чтобы уверенно выйти на позицию Junior / крепкого Junior+ и начать расти в Middle: сможете писать чистый код, тестировать, деплоить и поддерживать типичный Spring-микросервис. Удачи в обучении!