Проходил 14 декабря 2017 года в 20:00

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

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

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

Запись

О курсе

Backend разработчик на PHP
48 000 ₽
5 месяцев
Начало 23 июля
Более 80% сайтов всего мира используют PHP, что позволяет сказать, что он является лидирующим языком программирования для реализации веб-приложений. Высокая скорость разработки и простота эксплуатации, но при этом высокая производительность, позволяют использовать его в проектах любой степени сложности от простого сайта-визитки до крупной социальной сети. Изначально позиционирующийся как набор CGI-скриптов для отслеживания посещений веб-резюме Расмуса Лердорфа, язык PHP прошёл долгий ...
Программа курса
Модуль 1
General Knowledge
Модуль 2
Databases
Модуль 3
Developing
Модуль 4
Architecture & HighLoad
General Knowledge
Подготовка к курсу
Подготовимся к прохождению курса, вспомним Git и GitHub. Поговорим об истории развития PHP от PHP/FI до PHP7, узнаем, куда делся PHP6 и перейдём к внутреннему устройству интерпретатора. Затронем zval и garbage collector.
23 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Вам необходимо создать библиотеку, которая реализует один из предложенных алгоритмов и разместить её в packagist.
Менеджеры пакетов
Продолжим узнавать устройство интерпретатора PHP, обсудим подходы к его конфигурированию. После этого перейдём к модулям и менеджерам пакетов, в частности, обсудим Zend Extensions, работу с PEAR и PECL, научимся собирать свой собственный PHAR. Отдельное внимание уделим менеджеру зависимостей composer. Поговорим об autoloading и SEMVER.
25 июля, 20:00 — 21:30
Linux
Перед запуском PHP сценариев в режиме CLI, обсудим необходимый минимум устройства Linux. Узнаем, что такое процессы и потоки, и чем они отличаются друг от друга. Поговорим о FHS, пользователях, группах и привилегиях. Начнём разбираться с утилитами из GNU Coreutils.
30 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Вам необходимо создать socket-сервер, который будет выступать клиентским интерфейсом к вашей написанной библиотеке. Он будет принимать соединения на указанном порту, ждать числа от клиента, передавать его библиотеке и возвращать полученный результат.
PHP in CLI
Немного коснёмся языка bash. Продолжим разбираться с утилитами из GNU Coreutils. Научимся использовать grep и xargs. Начнём запускать PHP скрипты из командной строки, научимся демонизировать процессы, а также использовать для запуска cron, screen и supervisord. Поговорим о IPC (pipe, shared memory, signals, unix sockets).
1 августа, 20:00 — 21:30
Виртуализация и контейнеризация
Поговорим о подходах к виртуализации и паравиртуализации. Посмотрим на xen, kvm/qemu и перейдём к контейнеризации. Научимся работать с Docker и посмотрим как он работает внутри.
6 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо “завернуть” ваш написанный проект в Docker-образ..
Networking
Коснёмся нужных нам в работе тем о сетях. В частности, поговорим об OSI, остановимся на TCP/IP. Посмотрим, как устроена маршрутизация и коммутация, как работает ARP. Поговорим о DNS и SMTP и детально изучим HTTP.
8 августа, 20:00 — 21:30
FastCGI
Рассмотрим способы запуска PHP-сценариев для web. В частности, изучим протокол FastCGI. Детально обсудим возможности nginx и научимся его использовать. А также посмотрим, как устроены JavaServlets и WSGI.
13 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Клиент для вашей библиотеки должен работать по протоколу HTTP.. Для этого, используя docker compose, вы создадите два контейнера, один с nginx, а второй с php-fpm и приложением, использующим библиотеку.
PHP WebServers
Изучим php-fpm и его связку с nginx. Поговорим о моделях обработки запросов веб-серверами (синхронно, асинхронно) и напишем свой маленький асинхронный web-сервер.
15 августа, 20:00 — 21:30
Безопасность
Поговорим о безопасности. В частности, рассмотрим симметричные и ассиметричные алгоритмы шифрования AES, RSA, Blowfish. Digest-алгоритмы sha и md5. И детально рассмотрим TOP10 видов уязвимостей web-приложений по OWASP (в частности SQL-injections, XSS, CSRF).
20 августа, 20:00 — 21:30
Databases
Основные понятия баз данных
Обсудим модели данных и ранние подходы к организации данных, в частности, иерархические и сетевые базы данных. Научимся описывать концептуальные схемы предметной области при помощи ER-модели. Остановимся на реляционной модели и погрузимся в реляционную алгебру. Поговорим о SQL, его истории, стандартах и совместимости.
22 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо спроектировать схему базы данных для одного из предложенных проектов..
PostgreSQL для администратора
Полное погружение в PostgreSQL. Поговорим об администрации кластера, ролях, атрибутах, привилегиях, схемах, табличных пространствах и системном каталоге. Для всего этого изучим DDL.
27 августа, 20:00 — 21:30
PostgreSQL для разработчика
Продолжим изучение PostgreSQL, но уже в качестве клиентского разработчика. Изучим DML, поговорим о типах данных, функциях и операторах. Узнаем как устроены индексы и работают транзакции. Обсудим ACID, MVCC и уровни изоляции.
29 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Вам будет предоставлена реальная база данных фильмов и ряд SQL-запросов для получения различных данных из этой базы. Необходимо оптимизировать эти запросы.
Как устроен PostgreSQL
Перестанем бояться чудодейственной магии PostgreSQL и детально разберём как база данных работает “под капотом”. В этом занятии будет буферный кеш, журнал упреждающей записи, контрольная точка, страницы и версии строк, LRU, снимки и блокировки, а также Vacuum. Используя EXPLAIN, посмотрим как PostreSQL выполняет запрос и попытаемся оптимизировать его выполнение.
3 сентября, 20:00 — 21:30
Другие SQL-решения
Посмотрим на другие SQL-решения, в частности, сделаем детальный обзор возможностей MySQL и SQLite. Поговорим о колоночных базах данных на примере ClickHouse.
5 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо реализовать тестовый стенд для сравнения производительности агрегационных запросов в MongoDB и ClickHouse.
MongoDB
Рассмотрим not only SQL-решения на примере MongoDB. Познакомимся с CRUD операциями. Поговорим о Aggregation Pipeline и MapReduce. Поработаем с MongoDB из кода на PHP.
10 сентября, 20:00 — 21:30
Redis
Поговорим о Redis как о базе данных. Изучим типы данных и способы работы с ними из кода на PHP. Сравним Redis с Memcached.
12 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо реализовать веб-сервис для поиска значения по хешу, использующего для радужную таблицу. Сервис состоит из демона, который генерирует пару (строка, хеш) и кладёт её в Redis, и веб-интерфейса, который по указанному хешу ищет строку в Redis.
PHP и базы данных
Изучим все способы работы кода на PHP с изученными базами данных. Как дань истории будут показаны устаревшие драйверы, но остановимся на PDO. Рассмотрим ООП-подход для работы с базами данных. Научимся реализовать и применять такие паттерны как DAO, ActiveRecord, ORM, ODM. Поговорим об их плюсах и минусах.
17 сентября, 20:00 — 21:30
Developing
Парадигмы программирования
Когда мы пишем код - мы придерживаемся какой-то парадигмы. В этом занятии мы обсудим различные парадигмы программирования и увидим, что не ООП-единым, на примере использования функциональной парадигмы. Посмотрим на функции высшего порядка, каррирование, замыкания и монады. После чего детально остановимся на ООП.
19 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Используя DI-контейнер необходимо реализовать мини-приложение, которое будет получать запрос от клиента. На основании запроса фабричный метод будет отдавать необходимый контроллер, у которого вы будете вызвать нужный action-метод, который, в свою очередь, возвращает результат клиенту.
Архитектура кода
Погрузимся в архитектуру кода. UML, SOLID, SoC, DRY, KISS, YAGNI, DI и DI-контейнеры.
24 сентября, 20:00 — 21:30
Design patterns
Рассмотрим часто встречающиеся проблемы при проектировании ООП-программ и, как способ их решения, шаблоны проектирования. Обсудим порождающие, структурные, поведенческие шаблоны, а также коснёмся шаблонов GRASP.
26 сентября, 20:00 — 21:30
Практики хорошего кода
Поговорим о том, как писать хороший код, о принципах CQRS и Fluent interface. Обсудим coding styles и необходимость документирования кода. Рассмотрим PHP the Right way и стандарты из PHP-FIG.
1 октября, 20:00 — 21:30
Введение в тестирование
Поговорим о тестировании - его видах и какие проблемы призван решить каждый вид. В частности, обсудим acceptance, integration и unit тестирование. Узнаем, что такое test case и как он должен выглядеть. Научимся писать интеграционные тесты на codeception.
3 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разработанное ранее мини приложение необходимо покрыть unit-тестами, используя PHPUnit и добиться code coverage в минимум 70%
Unit-тестирование
Поговорим о том, что такое тестируемый код и как его писать. Научимся писать Unit-тесты с использованием PHPUnit. Поговорим об A-TRIP, TDD и Red-Green-Refactor. Рассмотрим идеологии CI/CD и запустим автоматический прогон наших тестов в Travis.
8 октября, 20:00 — 21:30
Алгоритмы. Начало
Поговорим об алгоритмах и структурах данных. Детально рассмотрим асимптотический анализ. Рассмотрим алгоритмы сортировки, в частности: сортировка Шелла, быстрая сортировка и сортировка слиянием. Изучим стек и очередь на примере реализаций из SPL. Детально рассмотрим связанные списки и способы их обхода.
10 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо реализовать один из предложенных алгоритмов на деревьях..
Алгоритмы. Продолжение
Продолжим говорить об алгоритмах. Рассмотрим такие структуры данных как двоичные и сбалансированные деревья поиска. Обсудим хеш-таблицы и способы борьбы с коллизиями. Закончим алгоритмами на графах - поиск в ширину и алгоритм Дейкстры.
15 октября, 20:00 — 21:30
Architecture & HighLoad
Очереди
Рассмотрим асинхронный подход обработки данных на основе очередей. Разберём несколько стандартных сценариев использования очередей (отправка уведомлений, инвалидация кеша). Реализуем работу с очередями, используя различные инструменты (очереди на базе, Redis Pub/Sub, Gearman, Beanstalkd). Детально изучим протокол AMPQ и одну из его прикладных реализаций - RabbitMQ.
17 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Используя мини-приложение, разработанное в прошлом модуле, необходимо реализовать Rest API с использованием очередей. Ваши клиенты будут отправлять запросы на обработку, а вы будете складывать их в очередь и возвращать номер запроса. В фоновом режиме вы будете обрабатывать запросы, а ваши клиенты периодически, используя номер запроса, будут проверять статус его обработки.
Проектирование API
Научимся проектировать API для web и mobile используя Rest и RPC-протоколы. Обсудим JSON, XML, Protocol Buffers. Детально остановимся на Rest и способе его описания, используя RAML. Получим представление о WebSockets.
22 октября, 20:00 — 21:30
Профилирование и логирование
Скрипт тормозит? Научимся находить узкие места, используя инструменты профилирования. Также детально обсудим логирование, чтобы понимать что делает наш скрипт. Затронем уровни логирования (по PSR-3), библиотеку Monolog и сбор логов в ELK.
24 октября, 20:00 — 21:30
Репликация
Получим полное представление о репликации: о её видах (Master-Slave, Master-Master), о способе синхронизации изменений (sync, async), о формате изменений (SBR, RBR), о модели передачи изменений (push, pull) и о том, как с этим работать на уровне PHP кода.
29 октября, 20:00 — 21:30
Шардинг
Поймём, что такое шардинг и когда его стоит применять. Обсудим виды шардинга (горизонтальный и вертикальный). Поговорим о перебалансировке и решардинге. Затронем партиционирование.
31 октября, 20:00 — 21:30
Кеширование
Поговорим зачем приложению нужен кеш. Рассмотрим Redis и Memcached в качестве кеш-серверов. Поговорим о кеш-тегах и инвалидации кеша.
5 ноября, 20:00 — 21:30
Deploying
Обсудим возможные способы доставки вашего приложения в production-окружение - от ручного git pull до инструментов автоматизации этого процесса в лице (mina и capistrano).
7 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Используя выбранный инструмент автоматического деплоя, необходимо реализовать автоматическую выкатку написанного ранее мини-приложения на собственный виртуальный сервер.
Командная разработка
Обсудим модели разработки программного обеспечения (итеративная, спиральная, каскадная). Подробно поговорим о гибких методологиях разработки, в частности SCRUM.
12 ноября, 20:00 — 21:30

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

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