Начало занятий 25 января

Разработчик 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-11
24 января, среда
20:00 — 21:30
XML
XML. Java NIO. Разбор примеров и ДЗ.
Разработчик Java 2017-11
Разработчик Java 2017-10
26 января, пятница
19:30 — 21:00
Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
Разработчик Java 2017-10
Разработчик Java 2017-11
26 января, пятница
20:00 — 21:30
JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
Разработчик Java 2017-11
Разработчик Java 2017-10
27 января, суббота
11:00 — 12:30
Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
Разработчик Java 2017-10
Разработчик Java 2017-11
31 января, среда
20:00 — 21:30
myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
Разработчик Java 2017-11
Разработчик Java 2017-10
2 февраля, пятница
19:30 — 21:00
Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
Разработчик Java 2017-10
Разработчик Java 2017-11
2 февраля, пятница
20:00 — 21:30
Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
Разработчик Java 2017-11
Разработчик Java 2017-10
3 февраля, суббота
11:00 — 12:30
Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
Разработчик 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 ландшафт компании Альфа-Капитал, и множество других.
Отзыв
Сергей Торчиков
Для меня принять решение об обучении на курсе по Java было довольно просто, достаточно было посмотреть на преподавателя и структуру курса, также огромным плюсом было увидеть в партнерах Otus.ru компанию, в которой я хотел работать. Очень важно, что перед началом курса проводиться День открытых дверей, где можно лично задать вопросы по курсу и более подробно ознакомиться с программой. Я бы хотел по порядку разобрать основные составляющие курса.

Программа.

Изначально конечно в голову закрались сомнения, а есть ли смысл слушать лекции, которые затрагивают самые азы (типы данных, например), но как говориться повторение – мать учения, решил слушать, и не пожалел. Разбирали действительно все детально и домашние задания очень интересны, одно задание по замеру работы разных сборщиков мусора чего стоит. Приятно, что в программу включены Hibernate и Spring, хоть и основы, но этого действительно достаточно, чтобы понимать в какую сторону копать в случае чего. Достаточно было и сносок на дополнительный материал расширяющий тему урока.

Преподаватель.

Не знаю, стоит ли указывать тут сторонние обучающие ресурсы, но скажем так с лекциями Виталия я знаком уже давно. Всегда нравилось, что Виталий приводит много примеров из жизни. Лично для меня это огромная проблема, я могу что-то выучить, понимать как это работает, но абсолютно не знать, где это применить Все объяснения доходчивы и понятны. Постоянно спрашивает, о чем бы хотели дополнительно послушать ученики. Примеры с кодом есть на каждую тему и мы даже несколько раз ставили эксперименты прямо на лекциях, пытаясь что-то сломать, было довольно интересно.

Команда OTUS

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

Минусы.

Те минусы, которые я могу отметь, насколько мне известно, уже исправлены. Например, платформа. Первые лекции были довольно не стабильны, но команда Otus.ru довольно быстро нашла аналог, который устроил всех. Все относились к этому с пониманием, т.к. мы были первым набором, так сказать первопроходцами

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

Результат.

Через несколько дней я выхожу на работу именно в ту компанию, где хотел работать. Все интервью организовывали сотрудники Otus, так что результатом я конечно доволен На собеседованиях кстати пригодились те самые знания о сборщиках мусора, о которых я говорил ранее. Так что хотелось бы поблагодарить еще раз всю команду Otus.ru за профессионализм и работу, а также всех ребят с курса за интересные обсуждения и за то, что делились своими знаниями. Я продолжу следить за курсами и если будет что-то интересное для меня, обязательно приду снова!
Работодатели