21 июня в 20:00

Открытый вебинар
Многопоточность в Java. Базовые примитивы синхронизации.

Открытый вебинар онлайн

Рассмотрим, в чем сложность разработки многопоточных программ на Java.
Также обсудим базовые средства работы с потоками в JVM и ряд примеров, связанных с главой 17 JLS.
Преподаватель
Сергей Петрелевич
Напомнить о мероприятии по почте
Напомнить о мероприятии в календаре

О курсе

Разработчик Java
60 000 ₽
6 месяцев
Начало 28 июня
Курс будет интересен всем кто пишет приложения на Java. Основная задача курса – познакомить слушателя с практиками разработки серверных приложений на Java. В процессе прохождения курса, вы - узнаете об особенностях языка и платформы Java, - познакомитесь с библиотекой Java, - освоите подходы к проектированию приложений, - освоите подходы к работе с базами, файлами, веб фронтендом, - изучите никоуровнемые и ...
Программа курса
Ступень 1
2 месяца
15000 ₽/мес
Ступень 2
2 месяца
10500 ₽/мес
Ступень 3
2 месяца
9000 ₽/мес
Язык и платформа
1.1 Подготовка к курсу
Введение. Обзор и задачи курса. Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.
28 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 01. Сборка и запуск проекта. Создать проект под управлением maven в Intellij IDEA.

Добавить зависимость на Google Guava/Apache Commons/библиотеку на ваш выбор.
Использовать библиотечные классы для обработки входных данных.

Задать имя проекта (project_name) в pom.xml
Собрать project_name.jar содержащий все зависимости.
Проверить, что приложение можно запустить из командной строки.

Выложить проект на github.

Создать ветку "obfuscation" изменить в ней pom.xml, так чтобы сборка содержала стадию обфускации байткода.
1.2 Байт код
Байт код. Содержание .class. Декомпиляция. Обфускация. История изменений языка Java от версии к версии. Разбор ДЗ.
3 июля, 20:00 — 21:30
2.1 Углубленные основы
Углубленные основы. Загрузка классов. Виды и задачи class loader-ов. Класс Class<?>. Примитивные типы, строки, массивы. Память, которую занимают объекты.
5 июля, 20:00 — 21:30
Домашние задания: 3
ДЗ
ДЗ 02. Измерение памяти. Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.


Например:
Object — 8 bytes,
Empty String — 40 bytes
Array — from 12 bytes
ДЗ
ДЗ 02. Работа с массивом. В коде класса ArrayCopyTutor (возьмите из материалов) реализуйте метод deleteAnimal(int position).
ДЗ
ДЗ 02. Работа со строками. В классе StringTutor (в материалах) реализуйте метод checkGreeting.
2.2 Remote debug
Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ.
10 июля, 20:00 — 21:30
3.1 Контейнеры и алгоритмы
Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
12 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 03. MyArrayList. Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
3.2 Инструменты для преобразования контейнеров
Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ.
17 июля, 20:00 — 21:30
4.1 Аннотации
Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.
19 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 05. Тестовый фреймворк на аннотациях. Написать свой тестовый фреймворк. Поддержать аннотации @Test, @Before, @After.
Запускать вызовом статического метода с
1. именем класса с тестами,
2. именем package в котором надо найти и запустить тесты
4.2 Java 8
Элементы функционального программирования. Streams. Lambdas. Примеры.
24 июля, 20:00 — 21:30
5.1 Сборщик мусора
Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.
26 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 04. Измерение активности GC. Написать приложение, которое следит за сборками мусора и пишет в лог количество сборок каждого типа (young, old) и время которое ушло на сборки в минуту.
Добиться OutOfMemory в этом приложении через медленное подтекание по памяти (например добавлять элементы в List и удалять только половину).
Настроить приложение (можно добавлять Thread.sleep(...)) так чтобы оно падало с OOM примерно через 5 минут после начала работы.
Собрать статистику (количество сборок, время на сборрки) по разным типам GC.
5.2 QA и тестирование
QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ.
31 июля, 20:00 — 21:30
6.1 Типы ссылок. Кэширование.
Типы ссылок в Java. Системы кэширования. Ehcache.
2 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-11: my cache engine. Напишите свой cache engine с soft references.
Добавьте кэширование в DBService из заданий myORM или Hibernate ORM
6.2 Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
7 августа, 20:00 — 21:30
Проектирование. Работа с внешними сервисами
7.1 Основы дизайна
Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, composition, association, coupling and cohesion. SOLID.
9 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 06. Написать эмулятор АТМ. Написать эмулятор АТМ (банкомата).

Объект класса АТМ должен уметь
• принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
• выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
• выдавать сумму остатка денежных средств
7.2 Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
14 августа, 20:00 — 21:30
8.1 Structural patterns
Behavioral patterns часть 2. Structural patterns.
16 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 07. ATM Department. Написать приложение ATM Department:
• Приложение может содержать несколько ATM
• Departmant может собирать сумму остатков со всех ATM
• Department может инициировать событие – восстановить состояние всех ATM до начального.
(начальные состояния у разных ATM могут быть разными)
8.2 Creational patterns
Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ.
21 августа, 20:00 — 21:30
9.1 Сериализация
Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
23 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-08: JSON object writer. Напишите свой json object writer (object to JSON string) аналогичный gson на основе javax.json или simple-json и Reflection.
Поддержите массивы объектов и примитивных типов, и коллекции из стандартный библиотерки.
9.2 XML
XML. Java NIO. Разбор примеров и ДЗ.
28 августа, 20:00 — 21:30
10.1 JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
30 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-09: myORM. Создайте в базе таблицу с полями:
id bigint(20) NOT NULL auto_increment
name varchar(255)
age int(3)

Создайте абстрактный класс DataSet. Поместите long id в DataSet.
Добавьте класс UserDataSet (с полями, которые соответствуют таблице) унаследуйте его от DataSet.

Напишите Executor, который сохраняет наследников DataSet в базу и читает их из базы по id и классу.

<T extends="" DataSet=""> void save(T user){…}
<T extends="" DataSet=""> T load(long id, Class<T> clazz){…}
10.2 myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
4 сентября, 20:00 — 21:30
11.1 Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
6 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-10: Hibernate ORM. На основе предыдущего ДЗ (myORM):
1. Оформить решение в виде DBService (interface DBService, class DBServiceImpl, UsersDAO, UsersDataSet, Executor)
2. Не меняя интерфейс DBSerivice сделать DBServiceHibernateImpl на Hibernate.
3. Добавить в UsersDataSet поля:
адресс (OneToOne)
class AddressDataSet{
private String street;
}
и телефон* (OneToMany)
class PhoneDataSet{
private String number;
}
Добавить соответствущие датасеты и DAO.

4.** Поддержать работу из пункта (3) в myORM
11.2 JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
11 сентября, 20:00 — 21:30
12.3 No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
13 сентября, 20:00 — 21:30
12.1 Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
18 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-12: Веб сервер. Встроить веб сервер в приложение из ДЗ-11.
Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша.
Многопоточность и ассинхронность
13.1 Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
20 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-14: Многопоточная сортировка. Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
13.2 JMM
Happens before. Cooperation. Atomics.
25 сентября, 20:00 — 21:30
14.1 Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
27 сентября, 20:00 — 21:30
14.2 Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
2 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-13: WAR. Собрать war для приложения из ДЗ-12.
Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты.
Запустить веб приложение во внешнем веб сервере.
15.1 Message System
Потокобезопасные контейнеры.Система обмена сообщениями.
4 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-15: MessageSystem. Добавить систему обмена сообщениями в веб сервер из ДЗ-13.
Пересылать сообщения из вебсокета в DBService и обратно.
Организовать структуру пакетов без циклических зависимостей.
15.2 Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
9 октября, 20:00 — 21:30
16.1 Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.
11 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-16: MessageServer. Cревер из ДЗ-15 разделить на три приложения:
• MessageServer
• Frontend
• DBServer
Запускать Frontend и DBServer из MessageServer.
Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами.
Пересылать сообщения с Frontend на DBService через MessageServer.
Запустить приложение с двумя фронтендами (на разных портах)* и двумя датабазными серверами.

* если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте
16.2 NIO
Registration. NIO для сокетов. Проектная работа.
16 октября, 20:00 — 21:30
17.1 Консультация по ДЗ и проектам
18 октября, 20:00 — 21:30
18.1 Консультация по ДЗ и проектам
23 октября, 20:00 — 21:30

Преподаватель

Сергей Петрелевич
Java-разработчик в Технологическом центре Deutche Bank
В отрасли с 2003 года. Программировать начал со времен ZX-Spectrum.

8 лет в разработке банковских процессинговых систем пластиковых карт.

Занимался разработкой "коробочных" систем для внешних заказчиков, разработкой систем для внутренних заказчиков.

Компании: Магнитогорский Металлургический Комбинат, Компас+, Borlas, СМП Банк.

В 2003 году с отличием закончил Магнитогорский Государственный Интститут им. Носова, специальность: промышленная электроника.

Интересы: JavaScript, многопоточное программирование, сборщики мусора в Java.
Преподаватель курсов:
Разработчик Java