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

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

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

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

Программа курса
1
Язык и платформа Java
2
Проектирование
3
Работа с окружением
4
Многопоточность
Занятие 1: Подготовка к курсу
Введение. Обзор и задачи курса. Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.

ДЗ

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

ДЗ

Измерение памяти. Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.
Занятие 4: Remote debug
Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ.
Занятие 5: Контейнеры и алгоритмы
Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.

ДЗ

MyArrayList. Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
Занятие 6: Инструменты для преобразования контейнеров
Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ.
Занятие 7: Сборщик мусора
Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.

ДЗ

Измерение активности GC. Написать приложение которое "подтекает" по памяти. Логгировать активность GC (количетство сборок в минуту, время паузы в минуту). Написать скрипт, который проведет измерение активности GC для разных параметров GC.
Занятие 8: QA и тестирование
QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ.
Занятие 9: Аннотации
Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.

ДЗ

1. Написать свой тестовый фреймворк. Поддержать аннотации @Test, @Before, @After. Запускать вызовом статического метода с массивом классов с тестами, именем package в котором надо найти и запустить тесты
Занятие 10: Java 8
Элементы функционального программирования. Streams. Lambdas. Примеры.
Занятие 11: Основы дизайна
Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, composition, association, coupling and cohesion. SOLID.

ДЗ

Написать эмулятор АТМ. Объект класса АТМ должен утеть
• принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
• выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
• выдавать сумму остатка денежных средств
Занятие 12: Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
Занятие 13: Structural patterns
Behavioral patterns часть 2. Structural patterns.

ДЗ

ATM Department. Написать приложение ATM Department:
• Приложение может содержать несколько ATM
• Departmant может собирать сумму остатков со всех ATM
• Department может инициировать событие – восстановить состояние всех ATM до начального.
(начальные состояния у разных ATM могут быть разными)
Занятие 14: Creational patterns
Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ.
Занятие 15: Сериализация
Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
Занятие 16: XML
XML. Java NIO. Разбор примеров и ДЗ.
Занятие 17: JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
Занятие 18: myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
Занятие 19: Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
Занятие 20: JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
Занятие 21: Системы кэширования
Типы ссылок в Java. Системы кэширования. Ehcache.
Занятие 22: No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
Занятие 23: Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
Занятие 24: Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
Занятие 25: Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
Занятие 26: Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
Занятие 27: Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
Занятие 28: JMM
Happens before. Cooperation. Atomics.
Занятие 29: Message System
Потокобезопасные контейнеры.Система обмена сообщениями.
Занятие 30: Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
Занятие 31: Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.
Занятие 32: NIO
Registration. NIO для сокетов. Проектная работа.
Расписание
Дата и время
Событие
20 октября, пятница
19:30 — 21:00
Байт код
Байт код. Содержание .class. Декомпиляция. Обфускация. История изменений языка Java от версии к версии. Разбор ДЗ 01.
21 октября, суббота
11:00 — 12:30
Углубленные основы
Углубленные основы. Загрузка классов. Виды и задачи class loader-ов. Класс Class<?>. Примитивные типы, строки, массивы. Память, которую занимают объекты.
27 октября, пятница
19:30 — 21:00
Remote debug
Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ 02.
28 октября, суббота
11:00 — 12:30
Контейнеры и алгоритмы
Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
Преподаватели
Виталий Чибриков
Виталий Чибриков – специалист по разработке серверных приложений на Java. Автор курсов по программированию на Java в Intuit.ru, Технопарк Mail.Ru и Stepic.org.
12 лет опыт программирования на Java, C++, C#, JavaScript, PHP, Python. Участие в проектах всех уровней сложности от стартапов на 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 в МФТИ.
Работодатели