Проходил 21 марта в 20:00

Открытый вебинар
Java: исключения

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

На уроке мы рассмотрим зачем нужны исключения, какими они бывают, как их ловить и нужно ли это делать, как создавать иерархии исключений и анализировать стек вызовов, какие бывают политики управления исключениями.

Запись

О курсе

Разработчик Java
45 000 ₽
5 месяцев
Начало 28 июня
Курс будет интересен всем кто пишет приложения на Java. Основная задача курса – познакомить слушателя с практиками разработки серверных приложений на Java. В процессе прохождения курса, вы - узнаете об особенностях языка и платформы Java, - познакомитесь с библиотекой Java, - освоите подходы к проектированию приложений, - освоите подходы к работе с базами, файлами, веб фронтендом, - изучите никоуровнемые и ...
Программа курса
1
Язык и платформа Java
2
Проектирование
3
Работа с окружением
4
Многопоточность
5
Проектная работа
Занятие 1: 1.1 Подготовка к курсу
Введение. Обзор и задачи курса. Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.
ДЗ
ДЗ 01. Сборка и запуск проекта. Создать проект под управлением maven в Intellij IDEA.

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

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

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

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


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

Объект класса АТМ должен уметь
• принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
• выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
• выдавать сумму остатка денежных средств
Занятие 12: 6.2 Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
Занятие 13: 7.1 Structural patterns
Behavioral patterns часть 2. Structural patterns.
ДЗ
ДЗ 07. ATM Department. Написать приложение ATM Department:
• Приложение может содержать несколько ATM
• Departmant может собирать сумму остатков со всех ATM
• Department может инициировать событие – восстановить состояние всех ATM до начального.
(начальные состояния у разных ATM могут быть разными)
Занятие 14: 7.2 Creational patterns
Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ.
Занятие 15: 8.1 Сериализация
Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
ДЗ
ДЗ-08: JSON object writer. Напишите свой json object writer (object to JSON string) аналогичный gson на основе javax.json или simple-json и Reflection.
Поддержите массивы объектов и примитивных типов, и коллекции из стандартный библиотерки.
Занятие 16: 8.2 XML
XML. Java NIO. Разбор примеров и ДЗ.
Занятие 17: 9.1 JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
ДЗ
ДЗ-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){…}
Занятие 18: 9.2 myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
Занятие 19: 10.1 Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
ДЗ
ДЗ-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
Занятие 20: 10.2 JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
Занятие 21: 11.1 Системы кэширования
Типы ссылок в Java. Системы кэширования. Ehcache.
ДЗ
ДЗ-11: my cache engine. Напишите свой cache engine с soft references.
Добавьте кэширование в DBService из заданий myORM или Hibernate ORM
Занятие 22: 11.2 No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
Занятие 23: 12.1 Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
ДЗ
ДЗ-12: Веб сервер. Встроить веб сервер в приложение из ДЗ-11.
Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша.
Занятие 24: 12.2 Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
Занятие 25: 13.1 Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
ДЗ
ДЗ-13: WAR. Собрать war для приложения из ДЗ-12.
Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты.
Запустить веб приложение во внешнем веб сервере.
Занятие 26: 13.2 Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
Занятие 27: 14.1 Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
ДЗ
ДЗ-14: Многопоточная сортировка. Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
Занятие 28: 14.2 JMM
Happens before. Cooperation. Atomics.
Занятие 29: 15.1 Message System
Потокобезопасные контейнеры.Система обмена сообщениями.
ДЗ
ДЗ-15: MessageSystem. Добавить систему обмена сообщениями в веб сервер из ДЗ-13.
Пересылать сообщения из вебсокета в DBService и обратно.
Организовать структуру пакетов без циклических зависимостей.
Занятие 30: 15.2 Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
Занятие 31: 16.1 Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.
ДЗ
ДЗ-16: MessageServer. Cревер из ДЗ-15 разделить на три приложения:
• MessageServer
• Frontend
• DBServer
Запускать Frontend и DBServer из MessageServer.
Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами.
Пересылать сообщения с Frontend на DBService через MessageServer.
Запустить приложение с двумя фронтендами (на разных портах)* и двумя датабазными серверами.

* если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте
Занятие 32: 16.2 NIO
Registration. NIO для сокетов. Проектная работа.
Заключительный месяц курса посвящен проектной работе. Свой проект это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе.
При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

Проект должен стать примером кода, который можно показывать потенциальным работодателям.

Примеры тем проекта:
- web сервер (разберите протокол)
- socket сервер на NIO (как netty)
- свой ORM
- распределенный кэш
- кэш для hibernate