Хотите получить этот курс в подарок? Сообщите об этом друзьям!
Начало занятий 25 января 2018 года

Разработчик 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.

ДЗ

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

ДЗ

ДЗ-08: JSON object writer. Напишите свой json object writer (object to json string) аналогичный gson на основе javax.json или simple-json и Reflection.
Поддержите массивы объектов и примитивных типов, и коллекции из стандартный библиотерки.
Занятие 16: XML
XML. Java NIO. Разбор примеров и ДЗ.
Занятие 17: 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: myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
Занятие 19: 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: JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
Занятие 21: Системы кэширования
Типы ссылок в Java. Системы кэширования. Ehcache.

ДЗ

ДЗ-11: my cache engine. Напишите свой cache engine с soft references.
Добавьте кэширование в DBService из заданий myORM или Hibernate ORM
Занятие 22: No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
Занятие 23: Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.

ДЗ

ДЗ-12: Веб сервер. Встроить веб сервер в приложение из ДЗ-11.
Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша.
Занятие 24: Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
Занятие 25: Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.

ДЗ

ДЗ-13: WAR. Собрать war для приложения из ДЗ-12.
Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты.
Запустить веб приложение во внешнем веб сервере.
Занятие 26: Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
Занятие 27: Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.

ДЗ

ДЗ-14: Многопоточная сортировка. Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
Занятие 28: JMM
Happens before. Cooperation. Atomics.
Занятие 29: Message System
Потокобезопасные контейнеры.Система обмена сообщениями.

ДЗ

ДЗ-15: MessageSystem. Добавить систему обмена сообщениями в веб сервер из ДЗ-13.
Пересылать сообщения из вебсокета в DBService и обратно.
Организовать структуру пакетов без циклических зависимостей.
Занятие 30: Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
Занятие 31: Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.

ДЗ

ДЗ-16: MessageServer. Cревер из ДЗ-15 разделить на три приложения:
• MessageServer
• Frontend
• DBServer
Запускать Frontend и DBServer из MessageServer.
Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами.
Пересылать сообщения с Frontend на DBService через MessageServer.
Запустить приложение с двумя фронтендами (на разных портах)* и двумя датабазными серверами.

* если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте
Занятие 32: NIO
Registration. NIO для сокетов. Проектная работа.
Расписание
Дата и время
Событие
Группа
Разработчик Java 2017-10
16 декабря, суббота
11:00 — 12:30
JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
Разработчик Java 2017-10
Разработчик Java 2017-11
20 декабря, среда
20:00 — 21:30
Java 8
Элементы функционального программирования. Streams. Lambdas. Примеры.
Разработчик Java 2017-11
Разработчик Java 2017-10
22 декабря, пятница
19:30 — 21:00
myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
Разработчик Java 2017-10
Разработчик Java 2017-11
22 декабря, пятница
20:00 — 21:30
Основы дизайна
Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, composition, association, coupling and cohesion. SOLID.
Разработчик Java 2017-11
Разработчик Java 2017-10
23 декабря, суббота
11:00 — 12:30
Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
Разработчик Java 2017-10
Разработчик Java 2017-11
27 декабря, среда
20:00 — 21:30
Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
Разработчик Java 2017-11
Разработчик Java 2017-10
29 декабря, пятница
19:30 — 21:00
JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
Разработчик Java 2017-10
Разработчик Java 2017-11
29 декабря, пятница
20:00 — 21:30
Structural patterns
Behavioral patterns часть 2. Structural patterns.
Разработчик Java 2017-11
Разработчик Java 2017-10
30 декабря, суббота
11:00 — 12:30
Системы кэширования
Типы ссылок в Java. Системы кэширования. Ehcache.
Разработчик Java 2017-10
Преподаватели
Виталий Чибриков
Виталий Чибриков – специалист по разработке серверных приложений на 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 в МФТИ.
Олег Климаков
Разработчик Java приложений. Увлечен программированием со школьных лет, профессионально разрабатывает приложения c 2000 года.
Основной рабочий инструмент - java, так же использует в работе C/C++, groovy, clojure, python, javascript.

Разрабатывал такие проекты, как «Сбербанк Бизнес Онлайн» в компании БСС, low latency платформа коннекторов к рыночным площадкам «Olympus» в Deutche Bank, весь IT ландшафт компании Альфа-Капитал, и множество других.
Отзыв
Николай Добровольский
На курс записался в большей степени потому, что преподавателем был объявлен Виталий Чибриков. Знал преподавателя по другим курсам, плюс ранее прослушаны записи лекций в МГТУ им. Баумана в рамках проекта ТЕХНОПАРК. Поэтому сразу решил записаться в группу.

Курс очень понравился. Впечатление очень положительное. Был освящен достаточно большой список тем. Некоторые моменты до курса были не очень хорошо знакомы (например тема про GC - были теоретические знания, но без практических навыков).

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

Курс помог не только систематизировать уже имеющиеся знания, а также приобрести новые. Особенно понравились темы про GC, JVM, многопоточность в Java, межпроцессное взаимодействие в Java.
После окончания курса гарантированы приглашения на собеседования, так что это огромный плюс)
На мой взгляд было бы здорово в рамках курса более подробно рассмотреть Spring, но основным направлением курса изначально было заявлено Java Core, поэтому за этой темой возможно стоит записываться на курс по Java EE.
Работодатели