Начало занятий 14 октября

Разработчик Java

Общая стоимость: 45000 ₽
В месяц: 10500 ₽
4 часа в неделю
5 месяцев
О курсе

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

Для закрепления теоретических знаний в курсе предусмотрена практическая работа с использованием популярных библиотек и фреймворков. Успешное выполнение практических заданий позволит слушателю уверенно решать задачи разработки коммерческих приложений в команде и самостоятельной разработки серверов для веб сервисов.

Продолжительность: 16 недель

Необходимое время в неделю: 4 академических часа на занятия и 4 академических часа на домашнюю работу

Программа курса
1
Первый
месяц
2
Второй
месяц
3
Третий
месяц
4
Четвертый
месяц
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, @After. Запускать вызовом статического метода с массивом классов с тестами, именем 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

Поддержать в системе обмена оообщениями из ДЗ115 сообщения между процессами


Семинар 16: NIO для сокетов. Netty.
Веб сервер без веб фреймворков
Создание своих аннотаций @NotNull, @NotEmpty
ORM на JDBC
Система кэширования
Свой проект
Преподаватели
Виталий Чибриков
Виталий Чибриков – старший программист JetBrains. Специалист по разработке серверных приложений на Java. Автор курсов по программированию на Java в Intuit.ru, Технопарк Mail.Ru и Stepic.org.
12 лет опыт программирования на Java, C++, C#, JavaScript, PHP, Python, Shell. Участие в проектах всех уровней сложности от стартапов на 3 человека/пол года до бизнес приложений на 200 человек/4 года. 8 лет разработки серверов клиентских игр на Java, в том числе серверов игр «Allods Online» и «Skyforge».

Разработчик облачных приложений. Эксперт в автоматизации процессов разработки и тестирования.
Преподаватель Harbour.Space University, Barcelona
Закончил МФТИ по специальности инженер-математик в 2004-ом году.
Дмитрий Архангельский
Java-разработчик в Одноклассниках (OK.RU).
Разработка серверной части портала - платежной системы, развлекательные сервисы для пользователей.
Опыт программирования - 6 лет серверной разработки на Java в DeutscheBank и OK.RU.
Ранее занимался разработкой виртуальных машин на языке C в компании Parallels.
В 2013 году закончил магистратуру МФТИ - прикладная математика и информатика.
Преподаватель и автор курса "Разработка на Java" в проекте Технотрек Mail.Ru в МФТИ.
Работодатели