Промышленное программирование на Java
Содержание
О курсе
Аннотация
Java — один из самых популярных языков программирования. Он используется для широкого круга задач: разработки десктопных, мобильных и веб-приложений, серверной логики, высоконагруженных систем в сфере финансов, рекламы, мониторинга, банковской деятельности и многого другого. Специфицированная модель языка и управления памятью, а также огромное коммерческое и некоммерческое сообщество, поддерживающее открытые исходные коды платформы, позволяют создавать промышленные и безопасные приложения.
Лектор: Литвиненко Егор Викторович
Цели освоения курса
Основные знания и навыки, которые приобретаются на этом курсе:
- Стандартные библиотеки JDK java.util.* (Collections, Stream API, etc.).
- Паттерны написания конкурентного потокобезопасного кода: как использовать паттерны блокировки из java.concurrency.* и других библиотек: locks, compare-and-swap, double-check-locking, non-blocking структуры и др.
- Виды и использование object pools (thread pools, connection pool, object pool).
- Системы сборки Java-приложений (Maven и/или Gradle).
- Java Input/Output Stream API, работа с файлами, NIO, ByteBuffer.
- Spring Framework.
- Взаимодействие с базами данных: Hibernate, Jakarta Persistence API.
- Виды бэкенд-серверов (Netty, Undertow, Vert.x и др.), серверов приложений (Tomcat EE, Glassfish, Wildfly и др.) и их применимость, оценка нагрузки приложений.
- Написать свой сервер с использованием GRPC, Spring Framework, Hibernate, и базы данных на выбор.
- Настройка JVM и garbage collectors.
- Инструменты отладки, профилирования и мониторинга Java приложений: IDE, MBeans, VisualVM, perf, async-profiler, log4j, logback, MAT, jstack, jmap, jps, Prometheus/Micrometer/OpenTelemetry.
Пререквизиты курса (необязательные)
Лучше знать один или несколько языков: Java, C++, C#, Python, Go, Rust. Основы синтаксиса рассматриваются, но в этом курсе не будет простых задач на усвоение основ языка. Упор на практические знания и применение языка Java.
Технические требования
Компьютер с JDK 17+ версии. IDE для разработки (IDEA CE, VS code, Eclipse, NetBeans). У преподавателя IDEA CE.
Понедельный план курса
| № | Тема лекции | Тема семинара | Кто готовит? |
|---|---|---|---|
| 1 | История, Использование, Статистика популярности, Создатель, WORA, Компиляция, Исполнение, C1/C2, Гарантии, Спецификации, Memory Model, Управление памятью, GC, Анатомия (JDK, JRE, JVM), Реализации JVM, Коммьюнити, Итоги, Hello world | Типы данных, управляющие конструкции, строки, операции | Егор Литвиненко |
| 2 | Основы языка: Типы и управляющие конструкции, Пакеты, классы, объекты, наследование, Исключения | Система сборки проектов Maven | Егор Литвиненко |
| 3 | Коллекции в Java | Знакомство с тестами, классами, исключениями, List, Map | Егор Литвиненко |
| 4 | Функциональные интерфейсы, лямбды, ссылки на методы, введение в Stream API | Требования к ПО, Тестирование | Егор Литвиненко |
| 5 | Параметризация типов, обобщения, специализации | Тестирование (продолжение), Логгирование, Примеры | Егор Литвиненко |
| 6 | Servers, Web Servers, Application Servers и их применение в Java (Tomcat, Netty и т.д.) | Дебаг программ и инструменты диагностики верхнеуровневого уровня | Егор Литвиненко |
| 7 | Многопоточность и конкурентное программирование, Ч.1: примитивы, атомарные операции | Многопоточное программирование, Ч.1 | Егор Литвиненко |
| 8 | Многопоточность и конкурентное программирование, Ч.2: блокирующие/неблокирующие коллекции, пулы потоков, CompletableFuture, паттерны | Многопоточное программирование, Ч.2 | Егор Литвиненко |
| 9 | Многопоточность и конкурентное программирование, Ч.3: Закон Мура, Закон Амдала, USL, Java Memory Model, volatile, happens-before, program-order, sequential consistency | Многопоточное программирование, Ч.3 | Егор Литвиненко |
| 10 | Annotations, Reflection API | CI & CD, Kafka | Егор Литвиненко |
| 11 | Method Handles, Var Handles | Настройка Kafka, Kafka Producer и Consumer | Егор Литвиненко, все студенты |
| 12 | IO, ByteBuffers, zero copy | Настройка Kafka, обзор Protobuf | Егор Литвиненко |
| 13 | IoC, DI, Spring | Как написать свой сервис с нуля, Ч.1 | Егор Литвиненко |
| 14 | SpringBoot, AOP, диагностика Spring, настройки, слоистая архитектура | Демо день + Как написать свой сервис с нуля, Ч.2 | Егор Литвиненко |
| 15 | RDMBS, JDBC, DAO, JPA, Транзакции, ORM | Как написать свой сервис с нуля – Ч.3, разбор домашних заданий | Егор Литвиненко, все студенты |
| 16 | RDMBS, JDBC, DAO, JPA, Транзакции, ORM, POJO | Разбор домашних заданий, семинарского проекта, использование AI в Java, Ч.1 | Егор Литвиненко |
| 17 | JVM компиляция, bytecode, структура класса, кодогенерация, теория поколений GC | Демо день: итерация изменений семинарских проектов | Егор Литвиненко, все студенты |
| 18 | Утилиты JDK: debugging, profiling, анализ памяти, Native Memory Tracking | Анализ JFR для Spring, AI в Java, Ч.2 | Егор Литвиненко |
| 19 | Виды и опции настройки GC | Практика настройки GC, AI в Java, Ч.3 | Егор Литвиненко |
| 20 | Демо день: лучшие ИДЗ | Демо день: финальная презентация проектов | Егор Литвиненко, все студенты |
Формы контроля
Индивидуальное домашнее задание по лекциям
Разработка сервиса для прогноза продаж, предоставляющего gRPC и REST API, с интеграцией в Kafka. Задача сервиса — эмулировать прогнозирование продаж на основе истории заказов.
Задание выдаётся на первом занятии. Объясняется, как можно начать работу, используя генераторы шаблонов для новых проектов.
Домашнее задание рассчитано на весь семестр.
- Если задание выполнено — начисляется полный балл.
- Если не выполнено — 0 баллов.
- В случае просрочки — 0.5 балла.
- Доступно бонусное задание, позволяющее повысить итоговую оценку.
Максимальный балл: 2.
Готовит Егор Литвиненко, выдается до 09.03.
5 домашних заданий в рамках лекций
Каждое домашнее задание по 0,4 балла. Суммарно 2 балла.
Готовит Егор Литвиненко, выдается по графику: примерно каждые две недели с начала занятий.
Командный проект по семинарам
Команды и тема проекта формируются до 13.02.
- Если задание выполнено — начисляется полный балл.
- Если не выполнено — 0 баллов.
- В случае просрочки — 0.5 балла.
- Доступно бонусное задание, позволяющее повысить итоговую оценку.
Максимальный балл: 4.
Готовит Егор Литвиненко, выдается до 13.02.
Посещение 30% лекций
Если критерий выполнен, то максимум 1 балл.
Посещение 30% семинаров
Если критерий выполнен, то максимум 1 балл.
Пересдача
Выполнение домашних заданий в ускоренной форме с новыми дедлайнами.
Формула оценки и пересдачи
- 1 балл — посещение 30% лекций
- 1 балл — посещение 30% семинаров
- 2 балла — 5 домашних заданий в рамках лекций (каждое по 0.4 балла)
- 2 балла — индивидуальный проект по лекциям
- 4 балла — командный семинарский проект
По всем заданиям предусмотрены дедлайны. Возможны дополнительные задания, позволяющие повысить итоговый балл. Подробнее — см. раздел «Формы контроля».
Литература
Рекомендуемая основная литература
- Java Language Specification, Java SE 21
- Официальная документация Java SE 21
- Java SE 8 Books
- Открытые записи лекций Тагира Валиева по языку Java
- Java EE: паттерны проектирования для профессионалов, Мурат Йенер, Алекс Фридом
- Чистый код (Clean Code), Роберт Мартин
- Effective Java, Joshua Bloch
Рекомендуемая дополнительная литература
- 97 вещей, о которых должен знать каждый Java-программист, Кевлин Хенни, Триша Джи
- Паттерны объектно-ориентированного проектирования (GoF), Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
- Основы программирования на Java: ООП, алгоритмы и структуры данных, Роберт Седжвик, Кевин Уэйн
- Совершенный алгоритм: графовые алгоритмы и структуры данных, Тим Рафгарден
- Усовершенствованные структуры данных, Петер Брасс
- Алгоритмы. Построение и анализ, Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн
- Высоко-нагруженные приложения: программирование, масштабирование, поддержка, Мартин Клеппман
- Распределённые данные: алгоритмы работы современных систем хранения информации, Алекс Петров
- System Design Interview, Алекс Сюй
- SQL. Полное руководство, Джеймс Р. Грофф, Пол Н. Вайнберг, Эндрю Дж. Оппель
- Архитектура компьютера, Эндрю Таненбаум, Тодд Остин
- Конкретная математика. Математические основы информатики, Грэхэм, Кнут, Паташник
- Искусство программирования. Том 1. Основные алгоритмы, Дональд Кнут
- Искусство программирования. Том 2. Получисленные алгоритмы, Дональд Кнут
- Искусство программирования. Том 3. Сортировка и поиск, Дональд Кнут
- Мифический человеко-месяц, Фредерик Брукс
- Джедайские техники. Как воспитать свою обезьяну, опустошить инбокс и сберечь мыслетопливо, Максим Дорофеев
- Gangs of Four Software Patterns (GeeksForGeeks)
- Канал microJUG в Telegram
- Канал JavaTG в Telegram
- LMAX Disruptor User Guide