[OTUS] Разработчик Java. Часть 3 из 5
Программа:
Первый месяц
Лекция 1: Введение. Обзор и задачи курса. Подготовка к курсу.
Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.
ДЗ 01
Создать проект под управлением maven, настроить сборку проекта из командной строки командой mvn install. Выложить проект на github. Создать ветку "obfuscation" изменить в ней pom.xml так чтобы сборка содержала стадию обфускации байткода.
Семинар 1: Байт код. Содержание .class. Декомпиляция. Обфускация. История изменений языка Java от версии к версии. Разбор ДЗ 01.
Лекция 2: Углубленные основы. Загрузка классов. Виды и задачи class loader-ов. Класс Class. Примитивные типы, строки, массивы. Память, которую занимают объекты.
ДЗ 02
Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.
Семинар 2: Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ 02.
Лекция 3: Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
ДЗ 03
Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
Семинар 3: Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ 03.
Лекция 4: Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.
ДЗ 04
Написать приложение которое "подтекает" по памяти. Логгировать активность GC (количетство сборок в минуту, время паузы в минуту). Написать скрипт, который проведет измерение активности GC для разных параметров GC.
Семинар 4: QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ 04.
Второй месяц
Лекция 5: Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.
ДЗ 05
Написать свой тестовый фреймворк. Поддержать аннотации @test, @Before, . Запускать вызовом статического метода с массивом классов с тестами, именем package в котором надо найти и запустить тесты
Семинар 5: Annotation preprocessor, Class loading / Instrumentation, ASM и Javassist. Разбор примеров и ДЗ 05.
Лекция 6: Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, coupling and cohesion, inheritance, interface, polymorphism. SOLID.
ДЗ 06
На основе рассмотренных паттернов написать приложение, в котором классы являются в одно и то же время классами нескольких паттернов.
Семинар 6: Behavioral patterns часть 1. Разбор примеров и ДЗ 06.
Лекция 7: Behavioral patterns часть 2. Structural patterns.
ДЗ 07
Подключить к работе предыдущего задания еще два паттерна
Семинар 7: Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ 07.
Лекция 8: Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
ДЗ 08
Написать свой сериализатор объектов в JSON.
Семинар 8: XML. Java NIO. Разбор примеров и ДЗ 08
Третий месяц
Лекция 9: Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
ДЗ 09
Написать свою ORM систему с автоматической сборкой объекта при помощи Reflection.
Семинар 9: Inmemory базы. myBatis. Разбор примеров и ДЗ 09.
Лекция 10: Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
ДЗ 10
Переписать ДЗ 09 на Hibernate.
Семинар 10: Connection Pools. Разбор примеров и ДЗ 10.
Лекция 11: Типы ссылок в Java. Системы кэширования. Ehcache.
ДЗ 11
Написать свой cache engine для DBServer.
Семинар 11: No SQL. Работа с MongoDB. Разбор примеров и ДЗ 11
Лекция 12: Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
ДЗ 12
Встроить веб сервер на Jetty в приложение. Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша из ДЗ 11.
Семинар 12: Asynchronous Web applications. AJAX. Long polling. Websockets. Разбор примеров из ДЗ 12
Четвертый месяц
Лекция 13: Dependency injection. Web archive. Jetty as an external web server. Spring IoC. Spring beans.
ДЗ 13
Собрать war для приложения из ДЗ12. Создавать кэш и DBService как Spring beans. Подключить бины в сервлеты. Запустить веб приложение во внешнем веб сервере.
Семинар 13: Логгирование: java.util.logging, log4j, slf4j, Spring MVC. Разбор примеров и ДЗ 13.
Лекция 14: Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа. JMM.
ДЗ 14
Написать приложение, которое сортирует массив в 4 потоках с использованием библиотеки или без нее.
Семинар 14: JMM, Happens before. wait(), notify(). Разбор примеров и ДЗ 14.
Лекция 15: Потокобезопасные контейнеры.Система обмена сообщениями.
ДЗ 15: Переписать ДЗ12 или ДЗ13 с использованием системы обмена сообщениями.
Семинар 15: Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ 15.
Лекция 16: Многопроцессные приложения. Сокеты. RMI. Разбор примера многопроцессного приложения.
ДЗ 16
Поддержать в системе обмена cообщениями из ДЗ15 сообщения между процессами
Семинар 16: NIO для сокетов. Netty.
Пятый месяц
Скрытое содержимое.
Складчина на 3 месяц.
Программа:
Первый месяц
Лекция 1: Введение. Обзор и задачи курса. Подготовка к курсу.
Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.
ДЗ 01
Создать проект под управлением maven, настроить сборку проекта из командной строки командой mvn install. Выложить проект на github. Создать ветку "obfuscation" изменить в ней pom.xml так чтобы сборка содержала стадию обфускации байткода.
Семинар 1: Байт код. Содержание .class. Декомпиляция. Обфускация. История изменений языка Java от версии к версии. Разбор ДЗ 01.
Лекция 2: Углубленные основы. Загрузка классов. Виды и задачи class loader-ов. Класс Class. Примитивные типы, строки, массивы. Память, которую занимают объекты.
ДЗ 02
Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.
Семинар 2: Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ 02.
Лекция 3: Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
ДЗ 03
Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
Семинар 3: Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ 03.
Лекция 4: Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.
ДЗ 04
Написать приложение которое "подтекает" по памяти. Логгировать активность GC (количетство сборок в минуту, время паузы в минуту). Написать скрипт, который проведет измерение активности GC для разных параметров GC.
Семинар 4: QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ 04.
Второй месяц
Лекция 5: Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.
ДЗ 05
Написать свой тестовый фреймворк. Поддержать аннотации @test, @Before, . Запускать вызовом статического метода с массивом классов с тестами, именем package в котором надо найти и запустить тесты
Семинар 5: Annotation preprocessor, Class loading / Instrumentation, ASM и Javassist. Разбор примеров и ДЗ 05.
Лекция 6: Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, coupling and cohesion, inheritance, interface, polymorphism. SOLID.
ДЗ 06
На основе рассмотренных паттернов написать приложение, в котором классы являются в одно и то же время классами нескольких паттернов.
Семинар 6: Behavioral patterns часть 1. Разбор примеров и ДЗ 06.
Лекция 7: Behavioral patterns часть 2. Structural patterns.
ДЗ 07
Подключить к работе предыдущего задания еще два паттерна
Семинар 7: Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ 07.
Лекция 8: Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
ДЗ 08
Написать свой сериализатор объектов в JSON.
Семинар 8: XML. Java NIO. Разбор примеров и ДЗ 08
Третий месяц
Лекция 9: Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
ДЗ 09
Написать свою ORM систему с автоматической сборкой объекта при помощи Reflection.
Семинар 9: Inmemory базы. myBatis. Разбор примеров и ДЗ 09.
Лекция 10: Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
ДЗ 10
Переписать ДЗ 09 на Hibernate.
Семинар 10: Connection Pools. Разбор примеров и ДЗ 10.
Лекция 11: Типы ссылок в Java. Системы кэширования. Ehcache.
ДЗ 11
Написать свой cache engine для DBServer.
Семинар 11: No SQL. Работа с MongoDB. Разбор примеров и ДЗ 11
Лекция 12: Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
ДЗ 12
Встроить веб сервер на Jetty в приложение. Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша из ДЗ 11.
Семинар 12: Asynchronous Web applications. AJAX. Long polling. Websockets. Разбор примеров из ДЗ 12
Четвертый месяц
Лекция 13: Dependency injection. Web archive. Jetty as an external web server. Spring IoC. Spring beans.
ДЗ 13
Собрать war для приложения из ДЗ12. Создавать кэш и DBService как Spring beans. Подключить бины в сервлеты. Запустить веб приложение во внешнем веб сервере.
Семинар 13: Логгирование: java.util.logging, log4j, slf4j, Spring MVC. Разбор примеров и ДЗ 13.
Лекция 14: Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа. JMM.
ДЗ 14
Написать приложение, которое сортирует массив в 4 потоках с использованием библиотеки или без нее.
Семинар 14: JMM, Happens before. wait(), notify(). Разбор примеров и ДЗ 14.
Лекция 15: Потокобезопасные контейнеры.Система обмена сообщениями.
ДЗ 15: Переписать ДЗ12 или ДЗ13 с использованием системы обмена сообщениями.
Семинар 15: Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ 15.
Лекция 16: Многопроцессные приложения. Сокеты. RMI. Разбор примера многопроцессного приложения.
ДЗ 16
Поддержать в системе обмена cообщениями из ДЗ15 сообщения между процессами
Семинар 16: NIO для сокетов. Netty.
Пятый месяц
- Веб сервер без веб фреймворков
- Создание своих аннотаций @NotNull, @NotEmpty
- ORM на JDBC
- Система кэширования
- Свой проект
Скрытое содержимое.
http://otus.ru/lessons/razrabotchik-java/