Промышленное программирование на Java

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

О курсе

Аннотация

Java — один из самых популярных языков программирования. Он используется для широкого круга задач: разработки десктопных, мобильных и веб-приложений, серверной логики, высоконагруженных систем в сфере финансов, рекламы, мониторинга, банковской деятельности и многого другого. Специфицированная модель языка и управления памятью, а также огромное коммерческое и некоммерческое сообщество, поддерживающее открытые исходные коды платформы, позволяют создавать промышленные и безопасные приложения.

Лектор: Литвиненко Егор Викторович

Цели освоения курса

Основные знания и навыки, которые приобретаются на этом курсе:

  1. Стандартные библиотеки JDK java.util.* (Collections, Stream API, etc.).
  2. Паттерны написания конкурентного потокобезопасного кода: как использовать паттерны блокировки из java.concurrency.* и других библиотек: locks, compare-and-swap, double-check-locking, non-blocking структуры и др.
  3. Виды и использование object pools (thread pools, connection pool, object pool).
  4. Системы сборки Java-приложений (Maven и/или Gradle).
  5. Java Input/Output Stream API, работа с файлами, NIO, ByteBuffer.
  6. Spring Framework.
  7. Взаимодействие с базами данных: Hibernate, Jakarta Persistence API.
  8. Виды бэкенд-серверов (Netty, Undertow, Vert.x и др.), серверов приложений (Tomcat EE, Glassfish, Wildfly и др.) и их применимость, оценка нагрузки приложений.
  9. Написать свой сервер с использованием GRPC, Spring Framework, Hibernate, и базы данных на выбор.
  10. Настройка JVM и garbage collectors.
  11. Инструменты отладки, профилирования и мониторинга 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 балла — командный семинарский проект

По всем заданиям предусмотрены дедлайны. Возможны дополнительные задания, позволяющие повысить итоговый балл. Подробнее — см. раздел «Формы контроля».

Литература

Рекомендуемая основная литература

Рекомендуемая дополнительная литература

  • 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