День открытых дверей по курсу «PHP Developer. Professional» 13.04.2018 в 20:00 | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Team Lead C# Developer. Professional PHP Developer. Professional Web-разработчик на Python PHP Developer. Basic Специализация PHP Developer
-25%
Специализация C#
-24%
Golang Developer. Professional Разработчик на Spring Framework Специализация Python Developer
-25%
iOS Developer. Professional Scala-разработчик Highload Architect Kotlin Backend Developer Microservice Architecture Unity Game Developer. Basic JavaScript Developer. Professional Java Developer. Professional Node.js Developer Специализация Java-разработчик
-25%
NoSQL PostgreSQL Cloud Solution Architecture Специализация Java и Архитектор ПО Symfony Framework Программист С HTML/CSS C++ Developer. Basic
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02
Проходил 13 апреля 2018 года в 20:00

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

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

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

Запись

О курсе

PHP Developer. Professional
60 000 ₽
5 месяцев
Начало 18 октября

Вы сможете грамотно решать на PHP разнообразные задачи бэкенда Middle+ уровня. Подготовка проходит на реальных продуктовых задачах, после которых вы будете четко понимать, чем эффективные решения отличаются от плохого кода.

В последние годы работодатели отдают предпочтение PHP-разработчикам, которые не только пишут чистый код, но и умеют работать с инфраструктурой, в команде. Поэтому программа курса глубоко погружается в экосистему PHP:

Программа курса
Модуль 1
Общие знания
Модуль 2
Базы данных
Модуль 3
Практики разработки
Модуль 4
Архитектуры и HighLoad-системы
Модуль 5
Проектный модуль
Общие знания
Модуль направлен на выравнивание имеющихся знаний для работы с курсом, а также расширения понимания окружения, возможностей языка PHP и теоретических основ.
Подготовка к курсу и инфраструктура ПО
0. познакомиться;
1. организовать рабочее пространство;
2. сравнить разные типы окружения;
3. научиться работать с простыми Docker-контейнерами.
Домашние задания: 1
ДЗ
Работа с окружением. 1. Docker
1.1. Установить Docker себе на локальную машину
1.2. Описать инфраструктуру в Docker-compose, которая включает в себя
1.2.1. nginx (обрабатывает статику, пробрасывает выполнение скриптов в fpm)
1.2.2. php-fpm (соединяется с nginx через unix-сокет)
1.2.3. redis (соединяется с php по порту)
1.2.4. memcached (соединяется с php по порту)
1.3. БД подключать как отдельную VM (можно на базе Homestead), либо как контейнер (но тогда не забудьте про директории с данными)

2. Виртуальные машины.
2.1. Развернуть Homestead VM при помощи Vagrant и VirtualBox
2.2. Сайт должен отвечать на доменное имя application.local
2.3. Должна быть поддержка проброса директорий
Linux
после занятия вы сможете:
выровнять знания в области Linux-based серверов.
25 октября, 20:00 — 21:30
Лектор: Дмитрий Панкрашов
Домашние задания: 1
ДЗ
Bash. 1. Написать консольное приложение (bash-скрипт), который принимает два числа и выводит их сумму в стандартный вывод.
Например

./sum.sh 1.5 -7

Если предоставлены неверные аргументы (для проверки на число можно использовать регулярное выражение) вывести ошибку в консоль.

Если Вы запускаете скрипты на базе Docker под Windows 10, то поведение функции sort по умолчанию отличается от стандартного в linux (числа сортируются как числа, а не как строки)

2. Имеется таблица следующего вида:

id user city phone
1 test Moscow 1234123
2 test2 Saint-P 1232121
3 test3 Tver 4352124
4 test4 Milan 7990923
5 test5 Moscow 908213

Таблица хранится в текстовом файле.

Вывести на экран 3 наиболее популярных города среди пользователей системы, используя утилиты Линукса.

Подсказка: рекомендуется использовать утилиты uniq, awk, sort, head.
Основы PHP. Консольный PHP
выровнять знания языка PHP;
работать с консольным PHP.
28 октября, 20:00 — 21:30
Лектор: Дмитрий Кириллов
Домашние задания: 1
ДЗ
Работа с пакетами. Необходимо создать свой пакет.

В pull-request прислать composer.json, в котором приводится пример подключения Вашего пакета.
PHP WebServers
после занятия вы сможете:
выровнять знания о веб-серверах.
1 ноября, 20:00 — 21:30
Лектор: Александр Пряхин
Домашние задания: 1
ДЗ
Браузерное и консольное приложения. 1. Верификация строки со скобками
Используя Docker, вы описали сборку двух контейнеров – один с nginx, второй – с php-fpm и вашим кодом.
Используя docker-compose вы запускаете оба контейнера.
Контейнер с nginx пробрасывает 80 порт на вашу хостовую машину и ожидает соединений.
Клиент соединяется, и шлёт следующий HTTP-запрос:

POST / HTTP/1.1

string=(()()()()))((((()()()))(()()()(((()))))))

String - это POST-параметр, который можно проверять:

1.1. На непустоту
1.2. На корректность кол-ва открытых и закрытых скобок

Все запросы с динамическим содержимым (*.php) nginx, используя директиву fastcgi_pass, проксирует в контейнер с php-fpm и вашим кодом.
Nginx должен обрабатывать запросы не обращая внимания на директиву Host. После обработки,
• если строка корректна, то пользователю возвращается ответ 200 OK, с информационным текстом, что всё хорошо;
• если строка некорректна, то пользователю возвращается ответ 400 Bad Request, с информационным текстом, что всё плохо.

2. Консольный чат на сокетах
Создать логику, размещаемую в двух php-контейнерах (server и client), объединённых общим volume.
Скрипты запускаются в режиме прослушивания STDIN и обмениваются друг с другом вводимыми сообщениями через unix-сокеты.
Сети, протоколы. Балансировка. Безопасность
после занятия вы сможете:
обеспечивать понимание сетевого взаимодействия и отказоустойчивости;
обеспечивать безопасность кода и приложения.
8 ноября, 20:00 — 21:30
Лектор: Александр Пряхин
Домашние задания: 1
ДЗ
Ещё одно приложение и балансировщик. 1. Приложение верификации email

1.1. Реализовать приложение (сервис/функцию) для верификации email.
1.2. Реализация будет в будущем встроена в более крупное решение.
1.3. Минимальный функционал - список строк, которые необходимо проверить на наличие валидных email.
1.4. Валидация по регулярным выражениям и проверке DNS mx записи, без полноценной отправки письма-подтверждения.

2. Создать как минимум три машины/контейнера
2.1. Балансировщик nginx-upstream
2.2. Балансируемые бэкенды на nginx (у каждого свой php-fpm)
2.3. Подключите к обоим контейнерам fpm по контейнеру с Memcached

3.* Усложнённая задача для тех, кто хочет проверить свои силы
3.0. Если у Вас есть балансировка, стандартными сессиями уже не обойтись. Иначе не будет работать аутентификация.
3.1. Объедините оба Memcached в кластер. Можно использовать repcache
3.2. Переведите хранение сессий в него
Командная разработка
после занятия вы сможете:
производить код коллективно.
11 ноября, 20:00 — 21:30
Лектор: Александр Пряхин
Базы данных
Модуль нацелен на активное изучение вопросов выбора, применения и управления хранилищами в проектах, использующих PHP. Происходит тесное знакомство с СУБД PostgreSQL, рассматриваются различные NoSQL хранилища, а также вопросы тюнинга MySQL.
Основные понятия баз данных
после занятия вы сможете:
проанализировать знания о БД.
15 ноября, 20:00 — 21:30
Лектор: Василий Никонов
Домашние задания: 1
ДЗ
Проектирование БД. Спроектируйте схему данных для системы управления кинотеатром
* Кинотеатр имеет несколько залов, в каждом зале идет несколько разных сеансов, клиенты могут купить билеты на сеансы
* Спроектировать базу данных для управления кинотеатром
* Задокументировать с помощью логической модели
* Написать DDL скрипты
* Написать SQL для нахождения самого прибыльного фильма
PostgreSQL для администратора
после занятия вы сможете:
проанализировать аспекты работы с СУБД.
18 ноября, 20:00 — 21:30
Лектор: Василий Никонов
PostgreSQL для разработчика
после занятия вы сможете:
организовывать логику на уровне данных.
22 ноября, 20:00 — 21:30
Лектор: Василий Никонов
Домашние задания: 1
ДЗ
EAV модель. Спроектировать EAV-хранение для базы данных кинотеатра
4 таблицы: фильмы, атрибуты, типы атрибутов, значения.
Типы атрибутов и соответствующие им атрибуты (для примера):
- рецензии (текстовые значения) - рецензии критиков, отзыв неизвестной киноакадемии ...
- премия (заменяется при печати баннеров и билетов на изображение, логическое значение) - оскар, ника ...
- "важные даты" даты (при печати - наименование атрибута и значение даты, тип дата) - мировая премьера, премьера в РФ ...
- служебные даты (используются при планировании, тип дата) - дата начала продажи билетов, когда запускать рекламу на ТВ ...
View сборки служебных данных в форме (три колонки):
- фильм, задачи актуальные на сегодня, задачи актуальные через 20 дней
View сборки данных для маркетинга в форме (три колонки):
- фильм, тип атрибута, атрибут, значение (значение выводим как текст)
Как устроен PostgreSQL
после занятия вы сможете:
заглянуть под капот СУБД.
25 ноября, 20:00 — 21:30
Лектор: Василий Никонов
Домашние задания: 1
ДЗ
Индексирование данных. Подготовить список из 6 основных запросов к БД, разработанной на предыдущих занятиях. Целесообразно выбрать 3 "простых" (задействована 1 таблица), 3 "сложных" (агрегатные функции, связи таблиц).
Скрипт для наполнения основных таблиц БД тестовыми данными.
Заполнить таблицы, увеличив общее количество строк текстовых данных до 10000.
Провести анализ производительности запросов к БД, сохранить планы выполнения.
Заполнить таблицы, увеличив общее количество строк текстовых данных до 10000000.
Провести анализ производительности запросов к БД, сохранить планы выполнения.
На основе анализа запросов и планов предложить оптимизации (индексы, структура, параметры и др.), выполнить их, сравнить результат (планы выполнения).
Другие SQL-решения
после занятия вы сможете:
посмотреть на рынок хранилищ.
29 ноября, 20:00 — 21:30
Лектор: Олег Мельник
Домашние задания: 1
ДЗ
ElasticSearch. Создать приложение для анализа каналов на Youtube:
1.1. Создать структуру/структуры хранения информации о канале и видео канала в ElasticSearch, описать в виде JSON с указанием типов полей. Описать, какие индексы понадобятся в данной структуре?
1.2. Создать необходимые модели для добавления и удаления данных из коллекций
1.3. Реализовать класс статистики, который может возвращать:
- Суммарное кол-во лайков и дизлайков для канала по всем его видео
- Топ N каналов с лучшим соотношением кол-во лайков/кол-во дизлайков
1.4*. Можно создать паука, который будет ходить по Youtube и наполнять базу данными
Redis
после занятия вы сможете:
использовать один из самых популярных инструментов кэширования в web.
2 декабря, 20:00 — 21:30
Лектор: Дмитрий Кириллов
Домашние задания: 1
ДЗ
Redis. Аналитик хочет иметь систему со следующими возможностями:
1. Система должна хранить события, которые в последующем будут отправляться сервису событий
2. События характеризуются важностью (аналитик готов выставлять важность в целых числах)
3. События характеризуются критериями возникновения. Событие возникает только если выполнены все критерии его возникновения. Для простоты все критерии заданы так: <критерий>=<значение>

Таким образом предположим, что аналитик заносит в систему следующие события:
{
priority: 1000,
conditions: {
param1 = 1
},
event: {
::event::
},
},
{
priority: 2000,
conditions: {
param1 = 2,
param2 = 2
},
event: {
::event::
},
},
{
priority: 3000,
conditions: {
param1 = 1,
param2 = 2
},
event: {
::event::
},
},

От пользователя приходит запрос:
{
params: {
param1 = 1,
param2 = 2
}
}

Под этот запрос подходят первая и третья запись, т.к. в них обеих выполнены все условия, но приоритетнее третья, так как имеет больший priority.

Написать систему, которая будет уметь:
1) добавлять новое событие в систему хранения событий
2) очищать все доступные события
3) отвечать на запрос пользователя наиболее подходящим событием
4) использовать для хранения событий redis
MySQL и форки
после занятия вы сможете:
применять MySQL.
6 декабря, 20:00 — 21:30
PHP и базы данных
объединять код и данные;
повысить уровень общения кода с БД;
отвязать код от конкретной БД;
работать с БД как с абстракцией.
9 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Паттерны работы с данными. Необходимо реализовать один из паттернов: Table Data Gateway, Raw Data Gateway, Active Record, DataMapper для произвольной таблицы. Паттерн должен содержать метод массового получения информации из таблицы, результат которого возвращается в виде коллекции.
Дополнительно можно использовать паттерн Identity Map для устранения дублирования объектов, ссылающихся на одну строку в БД или Lazy Load для отложенной загрузки связанных записей в таблице или коллекции.
Практики разработки
Модуль изучает всевозможные правила, рекомендации и практики, применяемые в современной разработке: начиная от именования переменных и заканчивая паттернами и алгоритмами, студенты знакомятся с правильной организацией кода PHP-приложений.
Парадигмы программирования
после занятия вы сможете:
использовать фундаментальные принципами построения приложений.
13 декабря, 20:00 — 21:30
Архитектура кода
после занятия вы сможете:
использовать принципы построения взаимодействия сущностей в коде.
16 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Анализ кода. Выберите один из своих проектов.
Проведите анализ на предмет соответствия изученным принципам.
Предложите свои варианты исправления.
Design patterns. Часть 1
улучшить понимание паттернов проектирования кода.
20 декабря, 20:00 — 21:30
Design patterns. Часть 2
находить в коде паттерны;
понимать и применять их.
23 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Паттерны проектирования. 1. Выберите пять из 12 паттернов:
1.1. Абстрактная фабрика
1.2. Адаптер
1.3. Декоратор
1.4. Инверсия зависимости
1.5. Фабричный метод
1.6. Итератор
1.7. Маппер
1.8. Наблюдатель
1.9. Прокси
1.10. Прототип
1.11. Стратегия
1.12. Посетитель

2. Запросите задачи у преподавателя
3. Реализуйте паттерн на базе предложенного кода.
Практики хорошего кода
после занятия вы сможете:
проанализировать понятие "хорошего кода".
27 декабря, 20:00 — 21:30
Введение в тестирование
после занятия вы сможете:
объяснить, почему тестирование - залог крепкого сна команды разработки.
30 декабря, 20:00 — 21:30
Unit-тестирование
после занятия вы сможете:
рассмотреть один из аспектов автоматического тестирования.
10 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разработка кейсов тестирования. 1. Скачать файл с заданием https://drive.google.com/file/d/1yAtmj9DE2yFeGh26WxDwr42j7RVbB_PI/view?usp=sharing
2. Внутри файла содержится задача, результат выполнения задачи необходимо сохранить в md-файл или doc-файл.
3. Полученный файл выложить в git, Google Drive или любой другой файлообменник.
4. Ссылку на файл прислать в чат с преподавателем.
Практикум по тестированию
применение разноуровневых тестов на практике;
работа вместе с преподавателем.
13 января, 20:00 — 21:30
Алгоритмы
получить фундаментальные знания о классических алгоритмах;
использовать деревья, графы и алгоритмы их обработки.
17 января, 20:00 — 21:30
Архитектуры и HighLoad-системы
Модуль посвящён расширению приложения, его отказоустойчивости, вариантам организации взаимодействия с другими приложениями, а также способам доставки функциональности до Production.
Профилирование, логирование и мониторинг
анализировать работу приложения;
строить системы наблюдения за приложениями и серверами.
20 января, 20:00 — 21:30
Очереди. Часть 1
после занятия вы сможете:
использовать основной инструмент работы асинхронных отказоустойчивых приложений - очереди.
24 января, 20:00 — 21:30
Очереди. Часть 2
настраивать RabbitMQ;
использовать встроенные механизмы RabbitMQ;
работать с Apache Kafka.
27 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
Работа с очередью. Пишем приложение обработки отложенных запросов.

1. Создать простое веб-приложение, принимающее POST запрос из формы от пользователя. Например, запрос на генерацию банковской выписки за указанные даты.
1.1. Обычно такие запросы (в реальных системах) работают довольно долго, поэтому пользователя надо оповестить о том, что запрос принят в обработку
1.2. Форма должна подразумевать отправку оповещения по результатам работы
2. Передать тело запроса в очередь
3. Написать скрипт, который будет читать сообщения из очереди и выводить информацию о них в консоль
4*. Реализация оповещения
4.1. Сгенерированный ответ отправить через email или telegram

Приложить инструкцию по запуску системы
Проектирование API
после занятия вы сможете:
объяснить, что такое API и зачем он нужен.
31 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
API. Необходимо реализовать Rest API с использованием очередей.
Ваши клиенты будут отправлять запросы на обработку, а вы будете складывать их в очередь и возвращать номер запроса.
В фоновом режиме вы будете обрабатывать запросы, а ваши клиенты периодически, используя номер запроса, будут проверять статус его обработки.

Разрешается
- Использование Composer-зависимостей
- Использование микрофреймворков (Lumen, Silex и т.п.)
Репликация
после занятия вы сможете:
использовать важный инструмент обеспечения отказоустойчивости БД.
3 февраля, 20:00 — 21:30
Шардинг
после занятия вы сможете:
усиливать отказоустойчивость хранилищ.
7 февраля, 20:00 — 21:30
Кеширование
после занятия вы сможете:
усилить знания о кэшировании в Highload-системах.
10 февраля, 20:00 — 21:30
Deploy приложений
после занятия вы сможете:
объяснить понятия деплоя и сборок.
14 февраля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Скрипт деплоя. Используя выбранный инструмент автоматического деплоя, необходимо реализовать автоматическую выкатку написанного ранее мини-приложения на собственный виртуальный сервер.
Практикум по разворачиванию приложений
создавать пайплайны деплоя;
настраивать бесшовную доставку ПО.
17 февраля, 20:00 — 21:30
Site Reliability Engineering
после занятия вы сможете:
использовать best practices обеспечения производительности и отказоустойчивости.
21 февраля, 20:00 — 21:30
Проектный модуль
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

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

Например:
1. Система для обучения работы на PHP (аналог CodeAcademy + HackerRank)
2. Bot в телеграмм, позволяющий найти перелеты/отели
3. Анализ GitHub на наличие интересных проектов (рост коммитов, звездочек). Как продолжение поиск лучших контрибьютеров
4. Создать масштабируемую новостную ленту с множеством интеграций
5. Свой проект
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
3 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проектная работа. 1. Предложить идею;
2. Собрать команду разработки;
3. Утвердить идею и команду с преподавателем;
4. За неделю до защиты прислать презентацию и скринкаст по проекту;
5. Защитить проект.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
7 марта, 20:00 — 21:30
Защита проектных работ
защитить проект и получить рекомендации экспертов.
10 марта, 20:00 — 21:30
Подведение итогов
узнать, как получить сертификат об окончании курса, как взаимодействовать после окончания курса с OTUS и преподавателями, какие вакансии и позиции есть для выпускников (опционально - в России и за рубежом) и на какие компании стоит обратить внимание.
14 марта, 20:00 — 21:30

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

Артём Пулявин
Артём Пулявин – специалист по разработке серверных приложений на PHP.
Deputy CTO & VP of Engineering в Unitemp.
Десятилетний опыт Back-end 
 разработки на PHP.
Участвовал в проектах различных уровней сложности от конструкторов сайта до реализации с нуля новой платформы в области FoodTech за 6 месяцев.
Принимал участие в разработке высоконагруженных web-проектов и отказоустойчивых распределенных систем. 

В качестве TeamLead выстроил процесс разработки по методологии Scrum: внедрил ежедневные stand-up митинги, планирование и эстимейтинг задач, а также проведение ретроспектив
.

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

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