Проходил 18 января в 20:00

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

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

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

Запись

О курсе

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

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

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

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

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

Определите размер пустой строки и пустых контейнеров. Определите рост размера контейнера от количества элементов в нем.

Если вы знакомы с инструментированием, сравните результаты измерениий.
2.2 Remote debug
Hot swap. Remote debug. Сборщик мусора. Instrumentation. Разбор примеров и ДЗ.
16 января, 20:00 — 21:30
3.1 Контейнеры и алгоритмы
Generics. Контейнеры и алгоритмы. Обзор устройства и работы контейнеров из java.util. Сравнение контейнеров. Карты на основе хэш функции и на основе дерева. Разбор алгоритмов из java.util.Collections.
17 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 03. MyArrayList. Написать свою реализацию ArrayList на основе массива.

class MyArrayList<t> implements List<t>{...}

Проверить, что на ней работают методы
addAll(Collection<? super T> c, T... elements)
static <t> void copy(List<? super T> dest, List<? extends T> src)
static <t> void sort(List<t> list, Comparator<? super T> c)

из java.util.Collections</t></t></t></t></t>
3.2 Инструменты для преобразования контейнеров
Инструменты для преобразования контейнеров. Apache Commons. Google Guava. Разбор примеров и ДЗ.
23 января, 20:00 — 21:30
4.1 Сборщик мусора
Параметры запуска VM. Сборщик мусора. Виды сборок. Разделение памяти под разные поколения объектов. Виды сборщиков. JMX. Управление приложением из jconsole. OutOfMemory. dump памяти. Исседование thread dump и heap dump.
24 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 04. Измерение активности GC. Написать приложение, которое следит за сборками мусора и пишет в лог количество сборок каждого типа (young, old) и время которое ушло на сборки в минуту.
Добиться OutOfMemory в этом приложении через медленное подтекание по памяти (например добавлять элементы в List и удалять только половину).
Настроить приложение (можно добавлять Thread.sleep(...)) так чтобы оно падало с OOM примерно через 5 минут после начала работы.
Собрать статистику (количество сборок, время на сборрки) по разным типам GC.
Сделать выводы.
4.2 QA и тестирование
QA, тестирование. Виды тестов. "Заглушки". Testing frameworks: junit, mockito. Разбор примеров и ДЗ.
30 января, 20:00 — 21:30
5.1 Аннотации
Аннотации. Стандартные аннотации. Применение аннотаций. Типы аннотаций. Синтаксис. Создание своих аннтатаций. Reflection.
31 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 05. Тестовый фреймворк на аннотациях. Написать свой тестовый фреймворк.
Поддержать свои аннотации @Test, @Before, @After.
Запускать вызовом статического метода с именем класса с тестами.
5.2 Java 8
Элементы функционального программирования. Streams. Lambdas. Примеры.
6 февраля, 20:00 — 21:30
6.1 Типы ссылок. Кэширование
Типы ссылок в Java. Системы кэширования. Ehcache.
7 февраля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-06: my cache engine. Напишите свой cache engine с soft references.
6.2 Логгирование
java.util.logging, log4j, slf4j. Разбор примеров и ДЗ.
13 февраля, 20:00 — 21:30
Проектирование
7.1 Концепты проектирования ООП
Понятие дизайна приложения и паттерна проектирования. Концепты проектирования ООП: delegation, aggregation, composition, association, coupling and cohesion. SOLID.
14 февраля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 06. Написать эмулятор АТМ. Написать эмулятор АТМ (банкомата).

Объект класса АТМ должен уметь
• принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка)
• выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать
• выдавать сумму остатка денежных средств
7.2 Behavioral patterns
Behavioral patterns часть 1. Разбор примеров и ДЗ.
20 февраля, 20:00 — 21:30
8.1 Structural patterns
Behavioral patterns часть 2. Structural patterns.
21 февраля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ 07. ATM Department. Написать приложение ATM Department:
• Приложение может содержать несколько ATM
• Departmant может собирать сумму остатков со всех ATM
• Department может инициировать событие – восстановить состояние всех ATM до начального.
(начальные состояния у разных ATM могут быть разными)
8.2 Creational patterns
Creational patterns. Связь между паттернами, "похожие" паттерны. Антипаттерны. Разбор примеров и ДЗ.
27 февраля, 20:00 — 21:30
Работа с окружением
9.1 Сериализация
Java IO. Сериализация. Запись и чтение бинарных файлов. Работа с simple-json, javax.json и com.google.code.gson.
28 февраля, 20:00 — 21: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. Разбор примеров и ДЗ.
6 марта, 20:00 — 21:30
10.1 JDBC
Работа с реляционной базой. JDBC. ORM через паттерн Executor. JPA.
7 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-10: 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){…}

Проверьте его работу на UserDataSet</t></t></t>
10.2 myBatis
Inmemory базы. myBatis. Разбор примеров и ДЗ.
13 марта, 20:00 — 21:30
11.1 Hibernate
Hibernate. Конфигурирование Hibernate в коде и в XML. Java persistency query language. DBSevice pattern.
14 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-11: Hibernate ORM. На основе ДЗ 10:
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.
* можно не поддерживать в ДЗ 10
11.2 JPQL
Connection Pools. JPQL. Разбор примеров и ДЗ.
20 марта, 20:00 — 21:30
12.1 Web сервер
Встроенный веб сервер. Сервлеты: servlet API, жизненный цикл сервлета. Jetty: устройство, работа, подключение сервлетов.
21 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-12: Веб сервер. Встроить веб сервер в приложение из ДЗ-11.
Сделать админскую страницу, на которой можно добавить пользователя, получить имя пользователя по id и получить количество пользователей в базе.
12.3 No SQL
No SQL. Работа с MongoDB. Разбор примеров и ДЗ.
27 марта, 20:00 — 21:30
Многопоточность
13.1 Thread
Многопоточность. Класс и объект Thread. Создание многопоточного приложения. Проблемы многопоточного доступа.
28 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-14: Многопоточная сортировка. Написать приложение, которое сортирует массив чисел в 4 потоках с использованием библиотеки или без нее.
13.2 JMM
Happens before. Cooperation. Atomics.
3 апреля, 20:00 — 21:30
14.1 Dependency injection
Web archive. Jetty as an external web server. Spring IoC. Spring beans.
4 апреля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-13: WAR. Собрать war для приложения из ДЗ-12.
Создавать кэш и DBService как Spring beans, передавать (inject) их в сервлеты.
Запустить веб приложение во внешнем веб сервере.
14.2 Asynchronous Web applications
AJAX. Long polling. Websockets. Разбор примеров из ДЗ.
10 апреля, 20:00 — 21:30
15.1 Message System
Потокобезопасные контейнеры.Система обмена сообщениями.
11 апреля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-15: MessageSystem. Добавить систему обмена сообщениями в веб сервер из ДЗ-13.
Пересылать сообщения из вебсокета в DBService и обратно.
Организовать структуру пакетов без циклических зависимостей.
15.2 Executors
Поддержка многопоточности в стандартной библиотеке. Workers. Executors. Fork/Join. Разбор примеров и ДЗ.
17 апреля, 20:00 — 21:30
16.1 Многопроцессные приложения
Сокеты. RMI. Разбор примера многопроцессного приложения.
18 апреля, 20:00 — 21: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 для сокетов. Проектная работа.
24 апреля, 20:00 — 21:30
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе.
При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

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

Примеры тем проекта:
- web сервер (разберите протокол)
- socket сервер на NIO (как netty)
- свой ORM
- распределенный кэш
- кэш для hibernate
17.1 Консультация по ДЗ и проектам
25 апреля, 20:00 — 21:30
18.1 Консультация по ДЗ и проектам
1 мая, 20:00 — 21:30

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

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