Буткемп Java [OTUS] [Олег Агафонов] [2022]
Ориентировочный старт ~ Февраль 2022!!!
Что даст вам этот курс:
Буткемп Java поможет вам полностью погрузиться в программирование и получить навыки Java-разработчика за короткий срок.
Программа нацелена на формирование целостного понимания профессиональной разработки на языке Java. Вы освоите основы программирования на Java и заложите фундамент из навыков, необходимых для работы в команде разработчиков.
Формат буткемпа поможет в течение 2-х месяцев пройти программу специализации и сформировать навыки уверенного разработчика.
Список основных информационных ресурсов и сценарии работы с ними:
Hard skills: Java Core, алгоритмы и структуры данных, основы Spring Framework (MVC, Data, Security, Cloud), Docker + K8S, CI\CD, Git, TDD, DDD, Clean Code, Шаблоны проектирования, SOLID, Code Review. Soft Skills: Agile + Scrum, командная работа.
Реальные примеры (личные и наиболее заметных личностей комьюнити) построения успешной ИТ карьеры (success stories).
На кого ориентирован курс?
Курс рассчитан на новичков, кто хочет обучиться программированию с нуля и дойти до минимальной позиции, когда можно трудоустроиться разработчиком.
Что сможет делать выпускник после окончания курса?
Трудоустроиться на junior позицию.
У выпускника будет сформирован образ его профессионального будущего (кем и где он себя видит через 3 года) с маршрутом движения к этому образу (в том числе и использованием образовательных возможностей OTUS). Он сможет успешно пройти собеседование на позицию junior разработчика. Он сможет успешно работать в команде и течение 1 года перейти на позицию middle разработчика. Он станет частью ИТ-комьюнити и сможет вносить посильный вклад в его развитие (open source проекты и базы знаний).
Длительность курса - 3 месяца (338 академических часов).
Ориентировочный старт ~ Февраль 2022!!!
Что даст вам этот курс:
Буткемп Java поможет вам полностью погрузиться в программирование и получить навыки Java-разработчика за короткий срок.
Программа нацелена на формирование целостного понимания профессиональной разработки на языке Java. Вы освоите основы программирования на Java и заложите фундамент из навыков, необходимых для работы в команде разработчиков.
Формат буткемпа поможет в течение 2-х месяцев пройти программу специализации и сформировать навыки уверенного разработчика.
Список основных информационных ресурсов и сценарии работы с ними:
Hard skills: Java Core, алгоритмы и структуры данных, основы Spring Framework (MVC, Data, Security, Cloud), Docker + K8S, CI\CD, Git, TDD, DDD, Clean Code, Шаблоны проектирования, SOLID, Code Review. Soft Skills: Agile + Scrum, командная работа.
Реальные примеры (личные и наиболее заметных личностей комьюнити) построения успешной ИТ карьеры (success stories).
На кого ориентирован курс?
Курс рассчитан на новичков, кто хочет обучиться программированию с нуля и дойти до минимальной позиции, когда можно трудоустроиться разработчиком.
Что сможет делать выпускник после окончания курса?
Трудоустроиться на junior позицию.
У выпускника будет сформирован образ его профессионального будущего (кем и где он себя видит через 3 года) с маршрутом движения к этому образу (в том числе и использованием образовательных возможностей OTUS). Он сможет успешно пройти собеседование на позицию junior разработчика. Он сможет успешно работать в команде и течение 1 года перейти на позицию middle разработчика. Он станет частью ИТ-комьюнити и сможет вносить посильный вклад в его развитие (open source проекты и базы знаний).
Длительность курса - 3 месяца (338 академических часов).
1 Введение в экосистему Java. Знакомство с инфраструктурой курса. Настройка окружения.
1 Вводное занятие
2 Обзор экосистемы Java.Технологический стек. Виды приложений. Roadmap разработчика. Работодатели.
Цели занятия: понять текущее состояние рынка IT, ниша Java.
Краткое содержание: что такое IT; направления в IT (администрирование, разработка, менеджмент, автоматизация процессов, дизайн
3 Командная строка linux. Базовые понятия, основы работы в командной строке
Цели занятия: познакомиться с Linux; объяснить, почему Java-разработчику важно уметь пользоваться Linux Краткое содержание: чем Linux отличается от Windows и MacOs; зачем программисту Linux;
4 Часы практики с ментором 1
Цели занятия: познакомиться с экосистемой Java.
Краткое содержание: Подробно познакомиться с ресурсами Java Community, настроить рассыkки и подписки, в соотвеnствии со своими интересами. Ознакомиться с основными проектами Java Community и выбрать для себя те, в которых было бы интересно принять участи.
5 Часы практики с ментором 2
Цели занятия: научиться управлять сервисами в linux
Краткое содержание: Зарегистрировать заранее подготовленный сервис. Изменить его версию с использованием символических ссылок. Выполнить анализ журнала его работы. Домашние задания 1ДЗ 1
6 Установка Java в Linux, MacOS, Windows. WSL. Установка и настройка IDE IntelliJ Idea, VS Code. Основы работы в IDE.
Цели занятия: понять чем отличается IDE от языка программирования, какие есть популярные IDE для Java Краткое содержание: Установка Java; текстовый редактор как инструмент написания программы, почему программы типа MS Word не подходят; что такое компилятор и для чего он нужен; компиляция программы; что такое IDE и чем полезна; какие есть полулярные IDE для Java: Eclipse, NetBeans, JDeveloper, Idea, Visual Studio Code; демонстрация Idea как самой популярной IDE; почему Visual Studio Code хороша для начинающих.
7 Введение в версионирование кода через GIT
Цели занятия: познакомиться системами контроля версия и подходами управлением кодом при командной работе Краткое содержание: Version Control и его история, зачем вести историю кода; принципы работы Git, branch-и и commit-ы; основные команд; GitHub, создание аккаунта; Pull Request.
8 Часы практики с ментором 1
Цели занятия: настроить рабочее место для командной работы научиться устанавливать необходимое программное обеспечение, освоить компиляцию и запуск java-приложения.
Краткое содержание: Установить несколько версия JDK. Научиться менять версию по умолчанию. Установить javaсервис, для специфичной версии java. Загрузить проект в Idea (VS Code). Изучить его структуру. Научиться его запускать и тестировать Исправить проблемы с компиляцией и тестами. В парах воспользоваться функцие Idea code with me или Live Share в VS Code
9 Часы практики с ментором 2
Цели занятия: научиться совместно работать на общим текстом
Краткое содержание: Работа в парах: создать новый репозиторий для совместной работой на статье в markdown. Согласно плану написать свои части статьи и отправить PR на друг друга. Выполнить text review и слить изменения в основную ветку. Правка одного и того же текста и разрешение конфликтов. Использование тегов для фиксирования версий статьи. Домашние задания 1ДЗ 2
2 Java Core. Синтаксис языка.
1 Структура программы на Java. Примитивные типы.
Цели занятия: написать первую программу на Java.
Краткое содержание: текстовый файл для программы; функция main; javac и его основные параметры; как запустить скомпилированный класс; что такое тип данных; константы; enum; Code conventions и почему это важно. 2 Условные операторы. Операторы цикла. Массивы.
Цели занятия: познакомиться с массивами, циклами и условными операторами.
Краткое содержание: массивы в Java и зачем один нужны; условные операторы, switch-case;
3 Часы практики с ментором 1
Цели занятия: реализовать на Java задачи, которые решались на прошлом уроке. Проверить корректность их работы с помощью тестов. Выполнить отладку в IDE.
Краткое содержание: написать систему тестирования. На экран выводится вопрос и варианты ответа, с клавиатуры вводится номер ответа. Вопросы и ответы должны быть зашиты в коде, внешнего хранения в файлах или базах данных не нужно. Должно быть три вопроса, каждый с 3-5 вариантами ответов. Все вопросы с одним правильным вариантом ответа. После прохождения теста отображается результат.
4 Часы практики с ментором 2
Цели занятия: решение задач по созданию и обработки массивов (преобразование массивов, перестановки, вычисления). Задачи из линейной алгебры. Реализация стэка и очереди с помощью массивов. Решение задач по созданию и обработки массивов (преобразование массивов, перестановки, вычисления). Задачи из линейной алгебры. Реализация стэка и очереди с помощью массивов.
Краткое содержание: Потренироваться в работе с массивами - Поиск анаграммы - Поиск максимального и минимального значения - Вычисление среднего значения - Транспонирование массива Домашние задания 1ДЗ 4
5 Классы и интерфейсы. Введение в ООП 1
Цели занятия: познакомиться с основами концепции ООП и реализацией ООП в Java.
Краткое содержание: почему ООП стало популярным; Java и ООП; классы и интерфейсы в Java.
6 Классы и интерфейсы. Введение в ООП 2
Цели занятия: познакомиться с основными практиками ООП
Краткое содержание: что такое полиморфизм, виды полиморфизма; ООП как частный случай полиморфизма;
7 Часы практики с ментором 1
Цели занятия: получить навыки разработки ООП-модели
Краткое содержание: Переписать в ООП-стиле задание по разработке программы для тестирования из занятия ""Java синтаксис: массивы, условные операторы, циклы"". Продумать структуру классов и как они будут между собой взаимодействовать (какие будут методы в классах).
8 Часы практики с ментором 2
Цели занятия: применить практики ОПП на практике
Краткое содержание: "Написать эмулятор АТМ (банкомата). Объект класса АТМ должен уметь: - принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка) - выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать Это задание не на алгоритмы, а на проектирование. Поэтому оптимизировать выдачу не надо. - выдавать сумму остатка денежных средств" Домашние задания 1ДЗ 5
9 Введение в ФП 1
Цели занятия: рассмотреть введение в функциональное программирование (ФП);
Краткое содержание: чистые функции; не мутирующие данные; лямбда-функции; монады;
10 ФП в Java
Цели занятия: познакомиться с возможностями ФП Java.
Краткое содержание: Функциональный интерфейс
11 Часы практики с ментором 1
Цели занятия: получить навыки разработки модели с помощью ФП Решение задач 6-го дня с помощью ФП. Анализ различия.
Краткое содержание: Переписать в ФП-стиле задание по разработке программы для тестирования из занятия ""Java синтаксис: массивы, условные операторы, циклы"". Продумать структуру классов и как они будут между собой взаимодействовать (какие будут методы в классах).
12 Часы практики с ментором 2
Цели занятия: применить практики ФП на практике Развитие задач за счет добавления валидного состояния объектов. Реализация валидации с помощью Exception.
Краткое содержание: Написать эмулятор АТМ (банкомата). Объект класса АТМ должен уметь: - принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка) - выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать Это задание не на алгоритмы, а на проектирование. Поэтому оптимизировать выдачу не надо. - выдавать сумму остатка денежных средств Домашние задания 1ДЗ 6
13 Работа со строками. Регулярные выражения
Цели занятия: научиться выполнять часто встречающиеся задачи со строками
Краткое содержание: Java String API Appahce StringUtils Pattern, Matcher
14 Exception Handling
Цели занятия: познакомиться с методами обработок ошибок.
Краткое содержание: почему важно работать с ошибками; какими могут быть ошибки (некорректные входные данные, ошибки в логике, ошибки внешних систем);
15 Часы практики с ментором 1
Цели занятия: применение регулярных выражений для решения задач валидации
Краткое содержание: Написать программу, когда выполняет валидациях входных строк на соответствие шаблонам: - номер телефона - email - число с десятичным разделителем и прочее
16 Часы практики с ментором 2
Цели занятия: применение регулярных выражение для решения задач парсинга текста
Краткое содержание: Написать программу, которая разбирает исходный тест и создает нужную модель данных. В качестве исходного текста берется разделенными табами текст из Excel, содержащий данные счета-фактуры. На выходе получаем объект "Счет-фактура" Домашние задания 1ДЗ 7
3 Java Core. Java Collections
1 Элементы формальной логики. Базовые структуры данных
Цели занятия: познакомиться с основами алгоритмов и булевой алгеброй. Изучить базовые структуры данных: массивы, списки, словари
Краткое содержание: надо ли изучать алгоритмы; алгоритмическая сложность - О
массивы; односвязные и двухсвязные списки; сортировка выбором как пример простейшей сортировки;
2 Алгоритмы сортировки
Цели занятия: изучить различные алгоритмы сортировки
Краткое содержание: алгоритмы сортировки пузырьком и вставкой; комбинированный алгоритм сортировки Шелла; сложность каждого алгоритма; время работы алгоритмов для различных данных. принцип работы пирамидальной сортировки; сравнить её преимущества и недостатки; Быстрая и внешняя сортировка
3 Часы практики с ментором 1
Цели занятия: написать свою реализацию различных структур данных; сравнить эффективность различных подходов; выбрать подходящую структуру данных под конкретную задачу.
Краткое содержание: создание динамического массива; сравнение эффективности различных подходов; оценка эффективности разных операций; реализация стека и очереди.
4 Часы практики с ментором 2
Цели занятия: реализация различные алгоритмы сортировки
Краткое содержание: Реализовать алгоритмы сортировки пузырьком и вставкой, реализовать алгоритм быстрой сортировки quick sort; реализовать алгоритм сортировки слиянием merge sort; отсортировать миллиард чисел, не загружая их все в память. Домашние задания 1ДЗ 8
5 Введение в Java Collections: обзор интерфейсов и их имплементаций.
Цели занятия: познакомиться с Generic-ами в Java и со стандартными коллекциями.
Краткое содержание: Generic-ков, особенности использования стандартных коллекций. понимание базовых коллекций и ответ на самый популярный вопрос на собеседованиях по Java.
6 Собственные реализации интерфейсов Java Collections
Цели занятия: объяснить на примере принципы создания коллекций; познакомиться с пакетом unsafe, утилитой JMH и популярными библиотеками коллекций.
Краткое содержание: Unsafe; утилита JMH; принципы построения hashMap; Apache Commons; Google Guava.
7 Часы практики с ментором 1
Цели занятия: самостоятельно реализовать интерфейса. Выполнить анализ сложности. Оптимизировать. Собственная реализация hash-функции.
8 Часы практики с ментором 2
Цели занятия: реализация основных операция работы с графами и деревьями: обход, задача коммивояжёра и т.п. (список задач) Домашние задания 1ДЗ 9
9 Java Streams. Основы
Цели занятия: познакомиться с Java Streams API
Краткое содержание: Как streams работают MapReduce: map, filter, collect
10 Java Streams. Продвинутые техники
Цели занятия: научиться применять Java Stream API в задачах обработки данных
Краткое содержание: Groupping FlatMap Parallels streams
11 Часы практики с ментором 1
Цели занятия: самостоятельно реализовать один из интерфейсов. Выполнить анализ сложности. Оптимизировать Краткое содержание: Самостоятельно реализовать один из интерфейсов. Выполнить анализ сложности. Оптимизировать
12 Часы практики с ментором 2
Цели занятия: решение задач обработки и преобразования коллекций с помощью базовых инструкцию java и java stream.
Краткое содержание: Решение задач обработки и преобразования коллекций с помощью базовых инструкцию java и java stream. Домашние задания 1ДЗ 10
4 Взаимодействие с внешними системами
1 I/O Streams. File I/O.
Цели занятия: познакомиться с возможностями IO в Java
Краткое содержание: InputSteam и OutputSteam Reader и Writer Apache библиотеки FileUtils, IOUtils
2 Сериализация/ десериализация.
Цели занятия: познакомиться с функционалом сериализации объектов.
Краткое содержание: что такое сериализация?; Java API для работы с JSON; GSON; Google ProtoBuf.
3 Часы практики с ментором 1
Цели занятия: задачи на сохранение состояния объектов программы при остановке с последующим продолжением работы после перезапуска. Задачи на обмен данными объектами. Варианты решения этих же задач с помощь различных алгоритмов и форматов сериализации (в том числе собственной). Сравнение эффективности. Задачи на обработку файлов: обработка списков, парсинг файлов и т.п.
4 Часы практики с ментором 2
Цели занятия: задачи на сохранение состояния объектов программы при остановке с последующим продолжением работы после перезапуска. Задачи на объмен данными объектами. Варианты решения этих же задач с помощь различных алгоритмов и форматов сериализации (в том числе собственной). Сранение эффектиности. Задачи на обработку файлов: обработка списков, парсинг файлов и т.п. Домашние задания 1ДЗ 11
5 Основы сетевых технологий, TCP/IP.
Цели занятия: познакомиться с основами сетевых технологий и TCP/IP.
Краткое содержание: понятие компьютерной сети; что такое Ethernet
6 HTTP и Sockets. Web-сервер.
Цели занятия: объяснить на примере Jetty принципы работы Webсервера и servlet API
Краткое содержание: "встроенный веб сервер; сервлеты: servlet API, жизненный цикл сервлета; Jetty: устройство, работа, подключение сервлетов."
7 Часы практики с ментором 1
Цели занятия: разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
Краткое содержание: Разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
8 Часы практики с ментором 2
Цели занятия: разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
Краткое содержание: Разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP. Домашние задания 1ДЗ 12
5 Работа с БД
1 Основы СУБД. SQL. Нормализация/ денормализация данных. Уровни изоляции транзакций.
Цели занятия: познакомиться с реляционными базами данных и SQL. Оптимизировать SQL-запросы
Краткое содержание: что такое реляционные база данных, для чего нужны; Postgres как популярный пример; установка и запуск Postgres; основы SQL: DDL, DML; DDL: create table; DML: select, update, delete, insert; агрегатные функции sql. архитектура РСУБД нормализация
2 JDBC
Цели занятия: познакомиться с транзакцией в реляционной СУБД и jdbc.
Краткое содержание: ACID; транзакции в СУБД; JDBC, роль JDBC в стеке технологий; база данных в Docker Connection Pool, HikariCP
3 Часы практики с ментором 1
Цели занятия: спроектировать реляционную структуру БД для управлением состоянием объектов задачи предметной области (UML). Разработать приложение, которое выполняет бизнес-сценарий с сохранением результатов работы в БД. Написать SQL запрос, которые выдает аналитику по данным приложения.
4 Часы практики с ментором 2
Цели занятия: спроектировать реляционную структуру БД для управлением состоянием объектов задачи предметной области (UML). Разработать приложение, которое выполняет бизнес-сценарий с сохранением результатов работы в БД. Написать SQL запрос, которые выдает аналики по данным прилоежния. Домашние задания 1ДЗ 13
5 Паттерн ORM
Цели занятия: познакомиться с концепцией ORM
Краткое содержание: ORM Pattern “Executor”.
6 Hibernate
Цели занятия: познакомиться с Hibernate.
Краткое содержание: Hibernate, место Hibernate в современном стеке технологий; конфигурирование Hibernate в коде и в XML;
7 Часы практики с ментором 1
Цели занятия: доработать предыдущее решение с использованием ORM.
8 Часы практики с ментором 2
Цели занятия: доработать предыдущее решение с использованием ORM. Домашние задания 1ДЗ 14
9 JPQL.
Цели занятия: познакомиться с Connection Pool; проанализировать методы конструирования запросов в Hibernate. Краткое содержание: Hibernate: Entity, Fetch, JPQL, SQL.
10 NoSQL.
Цели занятия: познакомиться с noSQL базами данных; объяснить отличия SQL от noSQL, когда и что следует использовать;
Краткое содержание: SQL базы данных; noSQL базы данных;
11 Часы практики с ментором 1
Цели занятия: реализовать предыдущее решение с помощью NoSQL хранилища
12 Часы практики с ментором 2
Цели занятия: реализовать предыдущее решение с помощью NoSQL хранилища Домашние задания 1ДЗ 15
6 Spring Framework
1 Введение в Spring Framework
Цели занятия: ориентироваться в проектах Spring для дальнейшего изучения; применять принцип IoC при написании классов и тестов; создавать контекст Spring; определять Spring Beans в контексте; организовывать правильный DI." "ориентироваться в проектах Spring для дальнейшего изучения; применять принцип IoC при написании классов и тестов; создавать контекст Spring; определять Spring Beans в контексте; организовывать правильный DI.
Краткое содержание: Spring Framework и его Spring Projects; IoC в общем виде; IoC-контейнер в Spring (контекст); XML-контекст cо Spring Beans и DI между ними
2 Конфигурирование Spring-приложений
Цели занятия: конфигурировать Spring-приложения в современном Java-based стиле (как сейчас и все пишут); ориентироваться в многослойной и луковой (Onion) архитектурах; пользоваться Spring Expression Language (SpEL); задавать параметры приложения c помощью .properties файлов.
Краткое содержание: Java-based конфигурацию контекста Spring; Annotation-based конфигурацию контекста; аннотация стереотипов, @Autowired и многие другие; многослойная и луковая (Onion) архитектура; SpEL; параметры конфигурации из .properties-файлов
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Spring Boot
Цели занятия: ориентироваться в возможностях Spring Boot для различных функциональностей и технологий; максимально быстро создавать production-grade standalone Spring-приложения с помощью Spring Boot Starters; писать автоконфигурации и использовать существующие; писать property в YAML-формате.
Краткое содержание: Spring Boot и зачем он; проект и научимся собирать артефакт; pom-файл, стартеры, структура проекта; пример применения – Rest-сервис; пример теста; разные интересные возможности.
6 Введение в Spring MVC, Spring MVC на Spring Boot
Цели занятия: различать архитектуры MVC и Spring MVC; создавать простые классические Web-приложения на основе Spring MVC и Spring Boot; создавать REST-сервисы на основе Spring MVC и Spring Boot.
Краткое содержание: архитектуры MVC и Spring MVC; Web-слой на Spring MVC; простой REST-сервис (без View).
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Spring Data JPA
Цели занятия: использовать абстракции Spring Data для реализации собственных репозиториев в общем виде; использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
Краткое содержание: проекты Spring Data; репозитории на Spring Data JPA; кастомизация (, custom repositories).
10 Транзакции, Spring Tx
Цели занятия: применять особенности транзакции в реляционных БД для правильной разработки слоя DAO; использовать декларативное и императивное управление транзакциями в Spring-приложениях с помощью Spring Tx.
Краткое содержание: ACID; уровни изоляции транзакций; декларативное управление транзакциями в Spring Tx; propagation транзакций в Sping Tx; императивное управление транзакциями в Spring Tx.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Spring Security: Архитектура
Цели занятия: использовать абстракции Spring Data для реализации собственных репозиториев в общем виде; использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
Краткое содержание: проекты Spring Data; репозитории на Spring Data JPA; кастомизация (, custom repositories).
14 Spring Security: Аутентификация и авторизация
Цели занятия: различать различные механизмы аутентификации; внедрять HTTP Basic аутентификацию для защиты Web-приложения; внедрять Form-based аутентификацию для защиты Web-приложения; использовать вторичные виды аутентификации (такие как Remember Me и Anonymous). внедрять в приложение различные механизмы авторизации - на основе URL и методов сервисов, для глубокой защиты приложений.
Краткое содержание: различные механизмы первичной аутентификации - HTTP Basic и Form-based и как их реализовывать с помощью Spring Security; вторичные механизмы аутентификации и как они поддерживаются Spring Security. классы Spring Security, участвующие в авторизации; авторизация на основе URL с помощью встроенного DSL; механизмы для авторизации на методах сервисов.
15 Работа над командным проектом 1
16 Работа над командным проектом 2
17 Тестирование Spring приложений
Цели занятия: познакомится с инструментами и подходами Spring для тестирования.
Краткое содержание: Тестирование приложения на различных этапах. Инструментарий spring для реализации тестов на различных этапа: - JPA testing - JDBC testing - JSON testing - Application testing MockMvc
18 Профилирование и сбор метрик
Цели занятия: познакомиться со стратегиями и тактиками сбора метрик и профилировки java приложений и в частности в Spring
Краткое содержание: Сбор, хранение и анализ метрики: инструменты. Promoteus + Graphana JVM metrics, Micrometer
19 Работа над командным проектом 1
20 Работа над командным проектом 2
7 Проектирование ПО
1 Waterfall vs Agile
Цели занятия: познакомиться с основными подходами к разработке ПО.
Краткое содержание: классический подход к разработке Waterfall, его плюсы и минусы; Agile-подход, манифест, ценности;
2 Scrum
Цели занятия: познакомиться с методологией Scum
Краткое содержание: Scrum framework
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Введение в архитектуру ПО
Цели занятия: познакомиться с понятием архитектуры программного обеспечения.
Краткое содержание: что такое архитектура программного обеспечения; масштабы архитектуры: метод, класс, модуль, микросервис, система
6 Микро сервисная архитектура vs Монолит
Цели занятия: различать два похода к разработке Enterpriseприложений - монолиты и микросервисы; видеть проблемы, возникающие при создании монолитов; использовать Best Practices при разработке монолитов. использовать Best Practices для разработки приложений на микро сервисной архитектуре
Краткое содержание: микросервисная и монолитная архитектуры; преимущества и недостатки обеих архитектур; микросервисная архитектура и Best Practices; HATEOAS подход; Spring Data REST, как самый простой способ создания CRUD микросервисов.
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Принципы SOLID.
Цели занятия: объяснить принципы SOLID и общие критерии идеальной архитектуры.
Краткое содержание: идеальная архитектура; Coupling и Cohesion;
10 Обзор шаблонов проектирования.
Цели занятия: подробно познакомиться с популярными шаблонами проектирования
Краткое содержание: Behavioral, Creational, Structural patterns
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Тестирование ПО. Основы TDD.
Цели занятия: познакомиться с junit и mockito; объяснить на примере, что такое ""тестируемое приложение"" Краткое содержание: виды тестов; инструменты: junit, mockito
14 Качество кода. Clean Code. Code Review.
Цели занятия: видеть недостатки кода, смогут корректировать его, превращая в корректный удобный код.
Краткое содержание: понятия ""чистого кода""; корректное представление; обработка ошибок, тестирование; ""воняющий"" код; реализация принципа единственной ответственности; модели выполнения (производители-потребители, читатели-писатели, обедающие философы); корректное завершение; понятие рефакторинга, принципы; тестирование.
15 Работа над командным проектом 1
16 Работа над командным проектом 2
8 Жизненный цикл приложения
1 DevOps
Цели занятия: рассмотреть процесс создания и поставки ПО в рамках devops.
Краткое содержание: проблемы доставки ПО; 4 фактора devops; версионирование,
2 CI/CD
Цели занятия: познакомится с основами развертывания приложения
Краткое содержание: Проблемы ""ручной"" сборки приложения и деплоя что такое CI/CD, что это дает
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Docker, основы применения
Цели занятия: использовать Docker для запуска приложений в повседневной жизни, собирать собственные образы Docker c помощью Dockerfile для запуска собственных приложений, использовать docker-compose для запуска сложных систем.
Краткое содержание: уровень виртуализации Docker; приложение с помощью Docker; свой image c помощью Dockerfile; dockercompose
6 Архитектура K8S. Minikube, kind.
Цели занятия: узнать, что такое Kubernetes и чем он полезен javaразработчику. Использовать k8s для запуска сложных систем
Краткое содержание: Архитектура k8s, minikube и kind как варианты работы с k8s в повседневной работе программиста
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Логирование. Обзор решений.
Цели занятия: познакомиться со стратегий логирования в промышленных системах. Познакомиться с основными инструментами для сбора и анализа логов
Краткое содержание: Логирование как важная правктика разрабокти современных систем организация логирования в Java: logback, sl4j; ELK стек
10 Отладка приложений
Цели занятия: объяснить детали устройства типов данных в Java; познакомиться с механизмами Remote Debug и Hot swap; познакомиться с утилитой Jol.
Краткое содержание: память, которую занимают объекты; изменение размера объекта, утилита JOL; remote Debug; hot swap.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
9 Java Core Advance
1 Аннотации и reflection.
Цели занятия: познакомиться с механизмом Reflection; объяснить, что такое Аннотации и как их можно сделать. Краткое содержание: Reflection; аннотации
2 Lombok
Цели занятия: познакомиться с технологиями annotation Processor и возможностями Lombok.
Краткое содержание: проблема Boilerplate-кода в Java-проектах; дерево интеграции функционала; как Annotation Processor может взломать компилятор?; Lombok – интеграция в проект; Record’ы для Java 13-; mutable-Record’ы; декларативные Builder’ы; различные мелочи.
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Сборщик мусора
Цели занятия: познакомиться со сборщиком мусора в Java.
Краткое содержание: концепция сборки мусора в JVM; виды сборщиков мусора; мониторинг работы сборщиков; примеры проблем производительности, связанных с мусором
6 Кеширование
Цели занятия: объяснить какие в java есть виды ссылок и для чего они нужны; оценить как устроены кэши; познакомиться с ""промышленным"" кэшом Ehcache.
Краткое содержание: виды ссылок в Java; пример самодельного кэша; Ehcache.
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Многопоточность в Java
Цели занятия: познакомиться с основными принципами многопоточности; объяснить как управлять потоками в Java.
Краткое содержание: многопоточность; класс и объект Thread; создание многопоточного приложения; проблемы многопоточного доступа.
10 Java Memory Model
Цели занятия: познакомиться с основными проблемами многопоточности; объяснить зачем придумали JMM; рассмотреть основные положения JMM.
Краткое содержание: основная проблема многопоточности; «железные» оптимизации; «программные» оптимизации; JMM; Volatile; Happens before; Lock-free алгоритмы, CAS.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Пул потоков и executors.
Цели занятия: познакомиться с пулами потоков в Java.
Краткое содержание: поддержка многопоточности в стандартной библиотеке; Workers. Executors; Fork/Join.
14 Многопроцессорность в java.
Цели занятия: проанализировать сетевое взаимодействие в java. объяснить принципы работы ""клиентсерверного"" приложения в Java
Краткое содержание: Сокеты; RMI; разбор примера многопроцессного приложения. gRPC
15 Работа над командным проектом 1
16 Работа над командным проектом 2
17 Java NIO.
Цели занятия: рассмотреть основы сетевых возможностей NIO.
Краткое содержание: NIO для сокетов
18 Netty
Цели занятия: рассмотреть основные принципы работы Netty.
Краткое содержание: архитектура Netty; примеры применения.
19 Работа над командным проектом 1
20 Работа над командным проектом 2
21 Архитектура систем обмена сообщениями
Цели занятия: рассмотреть архитектурные концепции построения систем обмена сообщений
Краткое содержание: стили интеграции (File Transfer, RPI, Shared Database, Messaging); основные концепции обмена сообщениями; каналы, сообщение, маршрутизация, трансляция, конечная точка.
22 Message System 2
Цели занятия: познакомиться с потокобезопасными контейнерами; JMS
Краткое содержание: Познакомитьсяс возможсностями java для создания система обмена сообщениями JMS
23 Работа над командным проектом 1
24 Работа над командным проектом 2
ПРОЕКТНАЯ РАБОТА
1 Вводное занятие Домашние задания 1
Проектная работа
Цель: В проектной работе вы сделаете прототип пользовательского сервиса, который будет поддерживать работу с телеграм-ботом и помогать пользователю решать задачи по учету, сбору, анализу данных.
2 Консультация по проектам
3 Защита проектов
4 Итоговое занятие
1 Вводное занятие
2 Обзор экосистемы Java.Технологический стек. Виды приложений. Roadmap разработчика. Работодатели.
Цели занятия: понять текущее состояние рынка IT, ниша Java.
Краткое содержание: что такое IT; направления в IT (администрирование, разработка, менеджмент, автоматизация процессов, дизайн
3 Командная строка linux. Базовые понятия, основы работы в командной строке
Цели занятия: познакомиться с Linux; объяснить, почему Java-разработчику важно уметь пользоваться Linux Краткое содержание: чем Linux отличается от Windows и MacOs; зачем программисту Linux;
4 Часы практики с ментором 1
Цели занятия: познакомиться с экосистемой Java.
Краткое содержание: Подробно познакомиться с ресурсами Java Community, настроить рассыkки и подписки, в соотвеnствии со своими интересами. Ознакомиться с основными проектами Java Community и выбрать для себя те, в которых было бы интересно принять участи.
5 Часы практики с ментором 2
Цели занятия: научиться управлять сервисами в linux
Краткое содержание: Зарегистрировать заранее подготовленный сервис. Изменить его версию с использованием символических ссылок. Выполнить анализ журнала его работы. Домашние задания 1ДЗ 1
6 Установка Java в Linux, MacOS, Windows. WSL. Установка и настройка IDE IntelliJ Idea, VS Code. Основы работы в IDE.
Цели занятия: понять чем отличается IDE от языка программирования, какие есть популярные IDE для Java Краткое содержание: Установка Java; текстовый редактор как инструмент написания программы, почему программы типа MS Word не подходят; что такое компилятор и для чего он нужен; компиляция программы; что такое IDE и чем полезна; какие есть полулярные IDE для Java: Eclipse, NetBeans, JDeveloper, Idea, Visual Studio Code; демонстрация Idea как самой популярной IDE; почему Visual Studio Code хороша для начинающих.
7 Введение в версионирование кода через GIT
Цели занятия: познакомиться системами контроля версия и подходами управлением кодом при командной работе Краткое содержание: Version Control и его история, зачем вести историю кода; принципы работы Git, branch-и и commit-ы; основные команд; GitHub, создание аккаунта; Pull Request.
8 Часы практики с ментором 1
Цели занятия: настроить рабочее место для командной работы научиться устанавливать необходимое программное обеспечение, освоить компиляцию и запуск java-приложения.
Краткое содержание: Установить несколько версия JDK. Научиться менять версию по умолчанию. Установить javaсервис, для специфичной версии java. Загрузить проект в Idea (VS Code). Изучить его структуру. Научиться его запускать и тестировать Исправить проблемы с компиляцией и тестами. В парах воспользоваться функцие Idea code with me или Live Share в VS Code
9 Часы практики с ментором 2
Цели занятия: научиться совместно работать на общим текстом
Краткое содержание: Работа в парах: создать новый репозиторий для совместной работой на статье в markdown. Согласно плану написать свои части статьи и отправить PR на друг друга. Выполнить text review и слить изменения в основную ветку. Правка одного и того же текста и разрешение конфликтов. Использование тегов для фиксирования версий статьи. Домашние задания 1ДЗ 2
2 Java Core. Синтаксис языка.
1 Структура программы на Java. Примитивные типы.
Цели занятия: написать первую программу на Java.
Краткое содержание: текстовый файл для программы; функция main; javac и его основные параметры; как запустить скомпилированный класс; что такое тип данных; константы; enum; Code conventions и почему это важно. 2 Условные операторы. Операторы цикла. Массивы.
Цели занятия: познакомиться с массивами, циклами и условными операторами.
Краткое содержание: массивы в Java и зачем один нужны; условные операторы, switch-case;
3 Часы практики с ментором 1
Цели занятия: реализовать на Java задачи, которые решались на прошлом уроке. Проверить корректность их работы с помощью тестов. Выполнить отладку в IDE.
Краткое содержание: написать систему тестирования. На экран выводится вопрос и варианты ответа, с клавиатуры вводится номер ответа. Вопросы и ответы должны быть зашиты в коде, внешнего хранения в файлах или базах данных не нужно. Должно быть три вопроса, каждый с 3-5 вариантами ответов. Все вопросы с одним правильным вариантом ответа. После прохождения теста отображается результат.
4 Часы практики с ментором 2
Цели занятия: решение задач по созданию и обработки массивов (преобразование массивов, перестановки, вычисления). Задачи из линейной алгебры. Реализация стэка и очереди с помощью массивов. Решение задач по созданию и обработки массивов (преобразование массивов, перестановки, вычисления). Задачи из линейной алгебры. Реализация стэка и очереди с помощью массивов.
Краткое содержание: Потренироваться в работе с массивами - Поиск анаграммы - Поиск максимального и минимального значения - Вычисление среднего значения - Транспонирование массива Домашние задания 1ДЗ 4
5 Классы и интерфейсы. Введение в ООП 1
Цели занятия: познакомиться с основами концепции ООП и реализацией ООП в Java.
Краткое содержание: почему ООП стало популярным; Java и ООП; классы и интерфейсы в Java.
6 Классы и интерфейсы. Введение в ООП 2
Цели занятия: познакомиться с основными практиками ООП
Краткое содержание: что такое полиморфизм, виды полиморфизма; ООП как частный случай полиморфизма;
7 Часы практики с ментором 1
Цели занятия: получить навыки разработки ООП-модели
Краткое содержание: Переписать в ООП-стиле задание по разработке программы для тестирования из занятия ""Java синтаксис: массивы, условные операторы, циклы"". Продумать структуру классов и как они будут между собой взаимодействовать (какие будут методы в классах).
8 Часы практики с ментором 2
Цели занятия: применить практики ОПП на практике
Краткое содержание: "Написать эмулятор АТМ (банкомата). Объект класса АТМ должен уметь: - принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка) - выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать Это задание не на алгоритмы, а на проектирование. Поэтому оптимизировать выдачу не надо. - выдавать сумму остатка денежных средств" Домашние задания 1ДЗ 5
9 Введение в ФП 1
Цели занятия: рассмотреть введение в функциональное программирование (ФП);
Краткое содержание: чистые функции; не мутирующие данные; лямбда-функции; монады;
10 ФП в Java
Цели занятия: познакомиться с возможностями ФП Java.
Краткое содержание: Функциональный интерфейс
11 Часы практики с ментором 1
Цели занятия: получить навыки разработки модели с помощью ФП Решение задач 6-го дня с помощью ФП. Анализ различия.
Краткое содержание: Переписать в ФП-стиле задание по разработке программы для тестирования из занятия ""Java синтаксис: массивы, условные операторы, циклы"". Продумать структуру классов и как они будут между собой взаимодействовать (какие будут методы в классах).
12 Часы практики с ментором 2
Цели занятия: применить практики ФП на практике Развитие задач за счет добавления валидного состояния объектов. Реализация валидации с помощью Exception.
Краткое содержание: Написать эмулятор АТМ (банкомата). Объект класса АТМ должен уметь: - принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка) - выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать Это задание не на алгоритмы, а на проектирование. Поэтому оптимизировать выдачу не надо. - выдавать сумму остатка денежных средств Домашние задания 1ДЗ 6
13 Работа со строками. Регулярные выражения
Цели занятия: научиться выполнять часто встречающиеся задачи со строками
Краткое содержание: Java String API Appahce StringUtils Pattern, Matcher
14 Exception Handling
Цели занятия: познакомиться с методами обработок ошибок.
Краткое содержание: почему важно работать с ошибками; какими могут быть ошибки (некорректные входные данные, ошибки в логике, ошибки внешних систем);
15 Часы практики с ментором 1
Цели занятия: применение регулярных выражений для решения задач валидации
Краткое содержание: Написать программу, когда выполняет валидациях входных строк на соответствие шаблонам: - номер телефона - email - число с десятичным разделителем и прочее
16 Часы практики с ментором 2
Цели занятия: применение регулярных выражение для решения задач парсинга текста
Краткое содержание: Написать программу, которая разбирает исходный тест и создает нужную модель данных. В качестве исходного текста берется разделенными табами текст из Excel, содержащий данные счета-фактуры. На выходе получаем объект "Счет-фактура" Домашние задания 1ДЗ 7
3 Java Core. Java Collections
1 Элементы формальной логики. Базовые структуры данных
Цели занятия: познакомиться с основами алгоритмов и булевой алгеброй. Изучить базовые структуры данных: массивы, списки, словари
Краткое содержание: надо ли изучать алгоритмы; алгоритмическая сложность - О
2 Алгоритмы сортировки
Цели занятия: изучить различные алгоритмы сортировки
Краткое содержание: алгоритмы сортировки пузырьком и вставкой; комбинированный алгоритм сортировки Шелла; сложность каждого алгоритма; время работы алгоритмов для различных данных. принцип работы пирамидальной сортировки; сравнить её преимущества и недостатки; Быстрая и внешняя сортировка
3 Часы практики с ментором 1
Цели занятия: написать свою реализацию различных структур данных; сравнить эффективность различных подходов; выбрать подходящую структуру данных под конкретную задачу.
Краткое содержание: создание динамического массива; сравнение эффективности различных подходов; оценка эффективности разных операций; реализация стека и очереди.
4 Часы практики с ментором 2
Цели занятия: реализация различные алгоритмы сортировки
Краткое содержание: Реализовать алгоритмы сортировки пузырьком и вставкой, реализовать алгоритм быстрой сортировки quick sort; реализовать алгоритм сортировки слиянием merge sort; отсортировать миллиард чисел, не загружая их все в память. Домашние задания 1ДЗ 8
5 Введение в Java Collections: обзор интерфейсов и их имплементаций.
Цели занятия: познакомиться с Generic-ами в Java и со стандартными коллекциями.
Краткое содержание: Generic-ков, особенности использования стандартных коллекций. понимание базовых коллекций и ответ на самый популярный вопрос на собеседованиях по Java.
6 Собственные реализации интерфейсов Java Collections
Цели занятия: объяснить на примере принципы создания коллекций; познакомиться с пакетом unsafe, утилитой JMH и популярными библиотеками коллекций.
Краткое содержание: Unsafe; утилита JMH; принципы построения hashMap; Apache Commons; Google Guava.
7 Часы практики с ментором 1
Цели занятия: самостоятельно реализовать интерфейса. Выполнить анализ сложности. Оптимизировать. Собственная реализация hash-функции.
8 Часы практики с ментором 2
Цели занятия: реализация основных операция работы с графами и деревьями: обход, задача коммивояжёра и т.п. (список задач) Домашние задания 1ДЗ 9
9 Java Streams. Основы
Цели занятия: познакомиться с Java Streams API
Краткое содержание: Как streams работают MapReduce: map, filter, collect
10 Java Streams. Продвинутые техники
Цели занятия: научиться применять Java Stream API в задачах обработки данных
Краткое содержание: Groupping FlatMap Parallels streams
11 Часы практики с ментором 1
Цели занятия: самостоятельно реализовать один из интерфейсов. Выполнить анализ сложности. Оптимизировать Краткое содержание: Самостоятельно реализовать один из интерфейсов. Выполнить анализ сложности. Оптимизировать
12 Часы практики с ментором 2
Цели занятия: решение задач обработки и преобразования коллекций с помощью базовых инструкцию java и java stream.
Краткое содержание: Решение задач обработки и преобразования коллекций с помощью базовых инструкцию java и java stream. Домашние задания 1ДЗ 10
4 Взаимодействие с внешними системами
1 I/O Streams. File I/O.
Цели занятия: познакомиться с возможностями IO в Java
Краткое содержание: InputSteam и OutputSteam Reader и Writer Apache библиотеки FileUtils, IOUtils
2 Сериализация/ десериализация.
Цели занятия: познакомиться с функционалом сериализации объектов.
Краткое содержание: что такое сериализация?; Java API для работы с JSON; GSON; Google ProtoBuf.
3 Часы практики с ментором 1
Цели занятия: задачи на сохранение состояния объектов программы при остановке с последующим продолжением работы после перезапуска. Задачи на обмен данными объектами. Варианты решения этих же задач с помощь различных алгоритмов и форматов сериализации (в том числе собственной). Сравнение эффективности. Задачи на обработку файлов: обработка списков, парсинг файлов и т.п.
4 Часы практики с ментором 2
Цели занятия: задачи на сохранение состояния объектов программы при остановке с последующим продолжением работы после перезапуска. Задачи на объмен данными объектами. Варианты решения этих же задач с помощь различных алгоритмов и форматов сериализации (в том числе собственной). Сранение эффектиности. Задачи на обработку файлов: обработка списков, парсинг файлов и т.п. Домашние задания 1ДЗ 11
5 Основы сетевых технологий, TCP/IP.
Цели занятия: познакомиться с основами сетевых технологий и TCP/IP.
Краткое содержание: понятие компьютерной сети; что такое Ethernet
6 HTTP и Sockets. Web-сервер.
Цели занятия: объяснить на примере Jetty принципы работы Webсервера и servlet API
Краткое содержание: "встроенный веб сервер; сервлеты: servlet API, жизненный цикл сервлета; Jetty: устройство, работа, подключение сервлетов."
7 Часы практики с ментором 1
Цели занятия: разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
Краткое содержание: Разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
8 Часы практики с ментором 2
Цели занятия: разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP.
Краткое содержание: Разработать клиент-серверное приложение: клиент принимает данные, передает из серверу, сервер выполняет задачу и возвращает данные клиенту. Варианты работы через Socket и HTTP. Домашние задания 1ДЗ 12
5 Работа с БД
1 Основы СУБД. SQL. Нормализация/ денормализация данных. Уровни изоляции транзакций.
Цели занятия: познакомиться с реляционными базами данных и SQL. Оптимизировать SQL-запросы
Краткое содержание: что такое реляционные база данных, для чего нужны; Postgres как популярный пример; установка и запуск Postgres; основы SQL: DDL, DML; DDL: create table; DML: select, update, delete, insert; агрегатные функции sql. архитектура РСУБД нормализация
2 JDBC
Цели занятия: познакомиться с транзакцией в реляционной СУБД и jdbc.
Краткое содержание: ACID; транзакции в СУБД; JDBC, роль JDBC в стеке технологий; база данных в Docker Connection Pool, HikariCP
3 Часы практики с ментором 1
Цели занятия: спроектировать реляционную структуру БД для управлением состоянием объектов задачи предметной области (UML). Разработать приложение, которое выполняет бизнес-сценарий с сохранением результатов работы в БД. Написать SQL запрос, которые выдает аналитику по данным приложения.
4 Часы практики с ментором 2
Цели занятия: спроектировать реляционную структуру БД для управлением состоянием объектов задачи предметной области (UML). Разработать приложение, которое выполняет бизнес-сценарий с сохранением результатов работы в БД. Написать SQL запрос, которые выдает аналики по данным прилоежния. Домашние задания 1ДЗ 13
5 Паттерн ORM
Цели занятия: познакомиться с концепцией ORM
Краткое содержание: ORM Pattern “Executor”.
6 Hibernate
Цели занятия: познакомиться с Hibernate.
Краткое содержание: Hibernate, место Hibernate в современном стеке технологий; конфигурирование Hibernate в коде и в XML;
7 Часы практики с ментором 1
Цели занятия: доработать предыдущее решение с использованием ORM.
8 Часы практики с ментором 2
Цели занятия: доработать предыдущее решение с использованием ORM. Домашние задания 1ДЗ 14
9 JPQL.
Цели занятия: познакомиться с Connection Pool; проанализировать методы конструирования запросов в Hibernate. Краткое содержание: Hibernate: Entity, Fetch, JPQL, SQL.
10 NoSQL.
Цели занятия: познакомиться с noSQL базами данных; объяснить отличия SQL от noSQL, когда и что следует использовать;
Краткое содержание: SQL базы данных; noSQL базы данных;
11 Часы практики с ментором 1
Цели занятия: реализовать предыдущее решение с помощью NoSQL хранилища
12 Часы практики с ментором 2
Цели занятия: реализовать предыдущее решение с помощью NoSQL хранилища Домашние задания 1ДЗ 15
6 Spring Framework
1 Введение в Spring Framework
Цели занятия: ориентироваться в проектах Spring для дальнейшего изучения; применять принцип IoC при написании классов и тестов; создавать контекст Spring; определять Spring Beans в контексте; организовывать правильный DI." "ориентироваться в проектах Spring для дальнейшего изучения; применять принцип IoC при написании классов и тестов; создавать контекст Spring; определять Spring Beans в контексте; организовывать правильный DI.
Краткое содержание: Spring Framework и его Spring Projects; IoC в общем виде; IoC-контейнер в Spring (контекст); XML-контекст cо Spring Beans и DI между ними
2 Конфигурирование Spring-приложений
Цели занятия: конфигурировать Spring-приложения в современном Java-based стиле (как сейчас и все пишут); ориентироваться в многослойной и луковой (Onion) архитектурах; пользоваться Spring Expression Language (SpEL); задавать параметры приложения c помощью .properties файлов.
Краткое содержание: Java-based конфигурацию контекста Spring; Annotation-based конфигурацию контекста; аннотация стереотипов, @Autowired и многие другие; многослойная и луковая (Onion) архитектура; SpEL; параметры конфигурации из .properties-файлов
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Spring Boot
Цели занятия: ориентироваться в возможностях Spring Boot для различных функциональностей и технологий; максимально быстро создавать production-grade standalone Spring-приложения с помощью Spring Boot Starters; писать автоконфигурации и использовать существующие; писать property в YAML-формате.
Краткое содержание: Spring Boot и зачем он; проект и научимся собирать артефакт; pom-файл, стартеры, структура проекта; пример применения – Rest-сервис; пример теста; разные интересные возможности.
6 Введение в Spring MVC, Spring MVC на Spring Boot
Цели занятия: различать архитектуры MVC и Spring MVC; создавать простые классические Web-приложения на основе Spring MVC и Spring Boot; создавать REST-сервисы на основе Spring MVC и Spring Boot.
Краткое содержание: архитектуры MVC и Spring MVC; Web-слой на Spring MVC; простой REST-сервис (без View).
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Spring Data JPA
Цели занятия: использовать абстракции Spring Data для реализации собственных репозиториев в общем виде; использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
Краткое содержание: проекты Spring Data; репозитории на Spring Data JPA; кастомизация (, custom repositories).
10 Транзакции, Spring Tx
Цели занятия: применять особенности транзакции в реляционных БД для правильной разработки слоя DAO; использовать декларативное и императивное управление транзакциями в Spring-приложениях с помощью Spring Tx.
Краткое содержание: ACID; уровни изоляции транзакций; декларативное управление транзакциями в Spring Tx; propagation транзакций в Sping Tx; императивное управление транзакциями в Spring Tx.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Spring Security: Архитектура
Цели занятия: использовать абстракции Spring Data для реализации собственных репозиториев в общем виде; использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
Краткое содержание: проекты Spring Data; репозитории на Spring Data JPA; кастомизация (, custom repositories).
14 Spring Security: Аутентификация и авторизация
Цели занятия: различать различные механизмы аутентификации; внедрять HTTP Basic аутентификацию для защиты Web-приложения; внедрять Form-based аутентификацию для защиты Web-приложения; использовать вторичные виды аутентификации (такие как Remember Me и Anonymous). внедрять в приложение различные механизмы авторизации - на основе URL и методов сервисов, для глубокой защиты приложений.
Краткое содержание: различные механизмы первичной аутентификации - HTTP Basic и Form-based и как их реализовывать с помощью Spring Security; вторичные механизмы аутентификации и как они поддерживаются Spring Security. классы Spring Security, участвующие в авторизации; авторизация на основе URL с помощью встроенного DSL; механизмы для авторизации на методах сервисов.
15 Работа над командным проектом 1
16 Работа над командным проектом 2
17 Тестирование Spring приложений
Цели занятия: познакомится с инструментами и подходами Spring для тестирования.
Краткое содержание: Тестирование приложения на различных этапах. Инструментарий spring для реализации тестов на различных этапа: - JPA testing - JDBC testing - JSON testing - Application testing MockMvc
18 Профилирование и сбор метрик
Цели занятия: познакомиться со стратегиями и тактиками сбора метрик и профилировки java приложений и в частности в Spring
Краткое содержание: Сбор, хранение и анализ метрики: инструменты. Promoteus + Graphana JVM metrics, Micrometer
19 Работа над командным проектом 1
20 Работа над командным проектом 2
7 Проектирование ПО
1 Waterfall vs Agile
Цели занятия: познакомиться с основными подходами к разработке ПО.
Краткое содержание: классический подход к разработке Waterfall, его плюсы и минусы; Agile-подход, манифест, ценности;
2 Scrum
Цели занятия: познакомиться с методологией Scum
Краткое содержание: Scrum framework
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Введение в архитектуру ПО
Цели занятия: познакомиться с понятием архитектуры программного обеспечения.
Краткое содержание: что такое архитектура программного обеспечения; масштабы архитектуры: метод, класс, модуль, микросервис, система
6 Микро сервисная архитектура vs Монолит
Цели занятия: различать два похода к разработке Enterpriseприложений - монолиты и микросервисы; видеть проблемы, возникающие при создании монолитов; использовать Best Practices при разработке монолитов. использовать Best Practices для разработки приложений на микро сервисной архитектуре
Краткое содержание: микросервисная и монолитная архитектуры; преимущества и недостатки обеих архитектур; микросервисная архитектура и Best Practices; HATEOAS подход; Spring Data REST, как самый простой способ создания CRUD микросервисов.
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Принципы SOLID.
Цели занятия: объяснить принципы SOLID и общие критерии идеальной архитектуры.
Краткое содержание: идеальная архитектура; Coupling и Cohesion;
10 Обзор шаблонов проектирования.
Цели занятия: подробно познакомиться с популярными шаблонами проектирования
Краткое содержание: Behavioral, Creational, Structural patterns
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Тестирование ПО. Основы TDD.
Цели занятия: познакомиться с junit и mockito; объяснить на примере, что такое ""тестируемое приложение"" Краткое содержание: виды тестов; инструменты: junit, mockito
14 Качество кода. Clean Code. Code Review.
Цели занятия: видеть недостатки кода, смогут корректировать его, превращая в корректный удобный код.
Краткое содержание: понятия ""чистого кода""; корректное представление; обработка ошибок, тестирование; ""воняющий"" код; реализация принципа единственной ответственности; модели выполнения (производители-потребители, читатели-писатели, обедающие философы); корректное завершение; понятие рефакторинга, принципы; тестирование.
15 Работа над командным проектом 1
16 Работа над командным проектом 2
8 Жизненный цикл приложения
1 DevOps
Цели занятия: рассмотреть процесс создания и поставки ПО в рамках devops.
Краткое содержание: проблемы доставки ПО; 4 фактора devops; версионирование,
2 CI/CD
Цели занятия: познакомится с основами развертывания приложения
Краткое содержание: Проблемы ""ручной"" сборки приложения и деплоя что такое CI/CD, что это дает
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Docker, основы применения
Цели занятия: использовать Docker для запуска приложений в повседневной жизни, собирать собственные образы Docker c помощью Dockerfile для запуска собственных приложений, использовать docker-compose для запуска сложных систем.
Краткое содержание: уровень виртуализации Docker; приложение с помощью Docker; свой image c помощью Dockerfile; dockercompose
6 Архитектура K8S. Minikube, kind.
Цели занятия: узнать, что такое Kubernetes и чем он полезен javaразработчику. Использовать k8s для запуска сложных систем
Краткое содержание: Архитектура k8s, minikube и kind как варианты работы с k8s в повседневной работе программиста
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Логирование. Обзор решений.
Цели занятия: познакомиться со стратегий логирования в промышленных системах. Познакомиться с основными инструментами для сбора и анализа логов
Краткое содержание: Логирование как важная правктика разрабокти современных систем организация логирования в Java: logback, sl4j; ELK стек
10 Отладка приложений
Цели занятия: объяснить детали устройства типов данных в Java; познакомиться с механизмами Remote Debug и Hot swap; познакомиться с утилитой Jol.
Краткое содержание: память, которую занимают объекты; изменение размера объекта, утилита JOL; remote Debug; hot swap.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
9 Java Core Advance
1 Аннотации и reflection.
Цели занятия: познакомиться с механизмом Reflection; объяснить, что такое Аннотации и как их можно сделать. Краткое содержание: Reflection; аннотации
2 Lombok
Цели занятия: познакомиться с технологиями annotation Processor и возможностями Lombok.
Краткое содержание: проблема Boilerplate-кода в Java-проектах; дерево интеграции функционала; как Annotation Processor может взломать компилятор?; Lombok – интеграция в проект; Record’ы для Java 13-; mutable-Record’ы; декларативные Builder’ы; различные мелочи.
3 Работа над командным проектом 1
4 Работа над командным проектом 2
5 Сборщик мусора
Цели занятия: познакомиться со сборщиком мусора в Java.
Краткое содержание: концепция сборки мусора в JVM; виды сборщиков мусора; мониторинг работы сборщиков; примеры проблем производительности, связанных с мусором
6 Кеширование
Цели занятия: объяснить какие в java есть виды ссылок и для чего они нужны; оценить как устроены кэши; познакомиться с ""промышленным"" кэшом Ehcache.
Краткое содержание: виды ссылок в Java; пример самодельного кэша; Ehcache.
7 Работа над командным проектом 1
8 Работа над командным проектом 2
9 Многопоточность в Java
Цели занятия: познакомиться с основными принципами многопоточности; объяснить как управлять потоками в Java.
Краткое содержание: многопоточность; класс и объект Thread; создание многопоточного приложения; проблемы многопоточного доступа.
10 Java Memory Model
Цели занятия: познакомиться с основными проблемами многопоточности; объяснить зачем придумали JMM; рассмотреть основные положения JMM.
Краткое содержание: основная проблема многопоточности; «железные» оптимизации; «программные» оптимизации; JMM; Volatile; Happens before; Lock-free алгоритмы, CAS.
11 Работа над командным проектом 1
12 Работа над командным проектом 2
13 Пул потоков и executors.
Цели занятия: познакомиться с пулами потоков в Java.
Краткое содержание: поддержка многопоточности в стандартной библиотеке; Workers. Executors; Fork/Join.
14 Многопроцессорность в java.
Цели занятия: проанализировать сетевое взаимодействие в java. объяснить принципы работы ""клиентсерверного"" приложения в Java
Краткое содержание: Сокеты; RMI; разбор примера многопроцессного приложения. gRPC
15 Работа над командным проектом 1
16 Работа над командным проектом 2
17 Java NIO.
Цели занятия: рассмотреть основы сетевых возможностей NIO.
Краткое содержание: NIO для сокетов
18 Netty
Цели занятия: рассмотреть основные принципы работы Netty.
Краткое содержание: архитектура Netty; примеры применения.
19 Работа над командным проектом 1
20 Работа над командным проектом 2
21 Архитектура систем обмена сообщениями
Цели занятия: рассмотреть архитектурные концепции построения систем обмена сообщений
Краткое содержание: стили интеграции (File Transfer, RPI, Shared Database, Messaging); основные концепции обмена сообщениями; каналы, сообщение, маршрутизация, трансляция, конечная точка.
22 Message System 2
Цели занятия: познакомиться с потокобезопасными контейнерами; JMS
Краткое содержание: Познакомитьсяс возможсностями java для создания система обмена сообщениями JMS
23 Работа над командным проектом 1
24 Работа над командным проектом 2
ПРОЕКТНАЯ РАБОТА
1 Вводное занятие Домашние задания 1
Проектная работа
Цель: В проектной работе вы сделаете прототип пользовательского сервиса, который будет поддерживать работу с телеграм-ботом и помогать пользователю решать задачи по учету, сбору, анализу данных.
2 Консультация по проектам
3 Защита проектов
4 Итоговое занятие
https://otus.ru/lessons/java-bootcamp/