Проходил 26 июня в 20:00

День открытых дверей
Разработчик Java

День открытых дверей онлайн

Хотите узнать, почему OTUS – больше, чем просто образовательный портал?
Как OTUS дает возможность стать частью сообщества профессионалов и сделать новый шаг по карьерной лестнице?
Почему учиться – не обязанность, а удовольствие и почему тесное сплетение теории и практики в обучении дает эффект синергии?
Приходите к нам на День Открытых Дверей. Формат проведения – онлайн – подключиться можно из любой точки мира!
Преподаватель
Виталий Чибриков

Запись

О курсе

Разработчик Java
60 000 ₽
6 месяцев
Начало 30 октября
  • Освоение разработки серверных приложений на Java.
  • Понимание библиотеки Java, особенностей языка и платформы Java.
  • Знание основных подходов к проектированию приложений, работе с базами, файлами, веб-фронтендом.
  • Владение низкоуровневыми и высокоуровневыми подходами к созданию многопоточных и многопроцессных приложений.
20 работодателей
большое количество практических заданий
Программа курса
Ступень 1
2 месяца
15000 ₽/мес
Ступень 2
2 месяца
10500 ₽/мес
Ступень 3
2 месяца
9000 ₽/мес
Язык и платформа
1.1 Подготовка к курсу
Введение. Обзор и задачи курса. Настройка окружения: система контроля версий git, система контроля зависимостей maven, среда разработки Intellij IDEA. Сборка и запуск java приложений.
Домашние задания: 1
ДЗ
ДЗ 01. Сборка и запуск проекта. Создать проект под управлением maven в Intellij IDEA.

Добавить зависимость на Google Guava/Apache Commons/библиотеку на ваш выбор.
Использовать библиотечные классы для обработки входных данных.

Задать имя проекта (project_name) в pom.xml
Собрать project_name.jar содержащий все зависимости.
Проверить, что приложение можно запустить из командной строки.

Выложить проект на github.

Создать ветку "obfuscation" изменить в ней pom.xml, так чтобы сборка содержала стадию обфускации байткода.
1.2 Байт код
Байт код. Содержание .class. Декомпиляция. Обфускация. История изменений языка Java от версии к версии. Разбор ДЗ.
2.1 Углубленные основы
Углубленные основы. Загрузка классов. Виды и задачи class loader-ов. Класс Class<?>. Примитивные типы, строки, массивы. Память, которую занимают объекты.
Домашние задания: 1
ДЗ
ДЗ 02. Измерение памяти. Написать стенд для определения размера объекта. Определить размер пустой строки и пустых контейнеров. Определить рост размера контейнера от количества элементов в нем.


Например:
Object — 8 bytes,
Empty String — 40 bytes
Array — from 12 bytes
2.2 Remote debug
Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ.
3.1 Контейнеры и алгоритмы
Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
Домашние задания: 1
ДЗ
ДЗ 03. MyArrayList. Написать свою реализацию ArrayList на основе массива. Проверить, что на ней работают методы java.util.Collections
3.2 Инструменты для преобразования контейнеров
Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ.
4.1 Аннотации
Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.
Домашние задания: 1
ДЗ
ДЗ 05. Тестовый фреймворк на аннотациях. Написать свой тестовый фреймворк. Поддержать аннотации @Test, @Before, @After.
Запускать вызовом статического метода с
1. именем класса с тестами,
2. именем package в котором надо найти и запустить тесты
4.2 Java 8
Элементы функционального программирования. Streams. Lambdas. Примеры.
28 сентября, 20:00 — 21:30
Лектор: Виталий Чибриков
5.1 Сборщик мусора
Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.
29 сентября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ 04. Измерение активности GC. Написать приложение, которое следит за сборками мусора и пишет в лог количество сборок каждого типа (young, old) и время которое ушло на сборки в минуту.
Добиться OutOfMemory в этом приложении через медленное подтекание по памяти (например добавлять элементы в List и удалять только половину).
Настроить приложение (можно добавлять Thread.sleep(...)) так чтобы оно падало с OOM примерно через 5 минут после начала работы.
Собрать статистику (количество сборок, время на сборрки) по разным типам GC.
5.2 QA и тестирование
QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ.
5 октября, 20:00 — 21:30
Лектор: Виталий Чибриков
6.1 Типы ссылок. Кэширование.
Типы ссылок в Java. Системы кэширования. Ehcache.
6 октября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-11: my cache engine. Напишите свой cache engine с soft references.
Добавьте кэширование в DBService из заданий myORM или Hibernate ORM
6.2 Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
12 октября, 20:00 — 21:30
Лектор: Виталий Чибриков
Проектирование. Работа с внешними сервисами
7.1 Основы дизайна
Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, composition, association, coupling and cohesion. SOLID.
13 октября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ 06. Написать эмулятор АТМ. Написать эмулятор АТМ (банкомата).

Объект класса АТМ должен уметь
• принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
• выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
• выдавать сумму остатка денежных средств
7.2 Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
19 октября, 20:00 — 21:30
8.1 Structural patterns
Behavioral patterns часть 2. Structural patterns.
20 октября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ 07. ATM Department. Написать приложение ATM Department:
• Приложение может содержать несколько ATM
• Departmant может собирать сумму остатков со всех ATM
• Department может инициировать событие – восстановить состояние всех ATM до начального.
(начальные состояния у разных ATM могут быть разными)
8.2 Creational patterns
Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ.
26 октября, 20:00 — 21:30
9.1 Сериализация
Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
27 октября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-08: JSON object writer. Напишите свой json object writer (object to JSON string) аналогичный gson на основе javax.json или simple-json и Reflection.
Поддержите массивы объектов и примитивных типов, и коллекции из стандартный библиотерки.
9.2 XML
XML. Java NIO. Разбор примеров и ДЗ.
2 ноября, 20:00 — 21:30
10.1 JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
3 ноября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-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 dataset="" extends=""> void save(T user){…}
<t dataset="" extends=""> T load(long id, Class<t> clazz){…}</t></t></t>
10.2 myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
9 ноября, 20:00 — 21:30
11.1 Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
10 ноября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-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
11.2 JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
16 ноября, 20:00 — 21:30
12.1 Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
17 ноября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-12: Веб сервер. Встроить веб сервер в приложение из ДЗ-11.
Сделать админскую страницу, на которой админ должен авторизоваться и получить доступ к параметрам и состоянию кэша.
12.3 No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
23 ноября, 20:00 — 21:30
Многопоточность и ассинхронность
13.1 Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
24 ноября, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-14: Многопоточная сортировка. Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
13.2 JMM
Happens before. Cooperation. Atomics.
30 ноября, 20:00 — 21:30
14.2 Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
1 декабря, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-13: WAR. Собрать war для приложения из ДЗ-12.
Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты.
Запустить веб приложение во внешнем веб сервере.
14.1 Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
7 декабря, 20:00 — 21:30
15.1 Message System
Потокобезопасные контейнеры.Система обмена сообщениями.
8 декабря, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-15: MessageSystem. Добавить систему обмена сообщениями в веб сервер из ДЗ-13.
Пересылать сообщения из вебсокета в DBService и обратно.
Организовать структуру пакетов без циклических зависимостей.
15.2 Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
14 декабря, 20:00 — 21:30
16.1 Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.
15 декабря, 10:00 — 11:30
Домашние задания: 1
ДЗ
ДЗ-16: MessageServer. Cревер из ДЗ-15 разделить на три приложения:
• MessageServer
• Frontend
• DBServer
Запускать Frontend и DBServer из MessageServer.
Сделать MessageServer сокет-сервером, Frontend и DBServer клиентами.
Пересылать сообщения с Frontend на DBService через MessageServer.
Запустить приложение с двумя фронтендами (на разных портах)* и двумя датабазными серверами.

* если у вас запуск веб приложения в контейнере, то MessageServer может копировать root.war в контейнеры при старте
16.2 NIO
Registration. NIO для сокетов. Проектная работа.
21 декабря, 20:00 — 21:30
17.1 Консультация по ДЗ и проектам
22 декабря, 10:00 — 11:30
18.1 Консультация по ДЗ и проектам
28 декабря, 10:00 — 11:30

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

Виталий Чибриков
Генеральный директор «OTUS. Онлайн-образование»
Выпускник МФТИ 2004-го года по специальности «Инженер-математик». Профессиональный опыт: 12 лет программирования на Java, C++, C#, JavaScript, PHP, Python. Участник проектов различных уровней сложности: от стартапов на 3 человека/полгода до бизнес-приложений на 200 человек/4 года. 8 лет разработки серверов для клиентских игр на Java. Эксперт в разработке облачных приложений, автоматизации процессов разработки и тестирования.

Разрабатывал и запускал проекты MMORMGs: «Allods Online» и «Skyforge». Автор и преподаватель следующих курсов: «Углубленное программирование на Java» в Технопарке Mail.Ru Group, видеокурс «Разработка веб-сервиса на Java» на Stepik.org, курс «Java Programming» Harbour.Space University, Barcelona.
Преподаватель курсов:
Разработчик Java

F.A.Q.: Наиболее часто задаваемые вопросы:

Могу ли я принять участие в розыгрыше, если я уже оплатил обучение?
В розыгрыше принимают участие все пользователи, успешно прошедшие вступительное тестирование. Если вы уже оплатили обучение и выиграли в розыгрыше, то мы компенсируем вам затраты.
Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару. Если вы хотите принять участие в розыгрыше – не позже чем за час до начала мероприятия необходимо зарегистрироваться на сайте и успешно пройти вступительное тестирование
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы