
1. Фишки и конструкции языка
1.1. Виртуальные столбцы
2. БД
2.1. SQL
2.1.1. MySQL
2.1.1.1. Движки
2.1.1.1.1. InnoDB
2.1.1.1.2. MySAM
2.1.1.2. Блокировки
2.1.1.2.1. Явные
2.1.1.2.2. Неявные
2.1.1.2.3. READ BLOCK
2.1.1.2.4. WRITE BLOCK
2.1.1.3. Оптимизация
2.1.1.3.1. EXPLAIN SELECT
2.1.1.3.2. Порядок индексов
2.1.1.3.3. Денормализация
2.1.1.3.4. Тюнинг настроек БД
2.1.1.3.5. Профилирование
2.1.1.3.6. Анализ логов
2.1.2. Индексы
2.1.2.1. Составные
2.1.2.1.1. Нужно составлять в правильном порядке (селективность), сначала те которые дают более узкий диапозон значений, а потом уже остальные
2.1.2.2. Кластерные
2.1.2.2.1. Бинарное дерево
2.1.2.2.2. Хранит значение поля
2.1.2.2.3. Более медленный т.к новые данные вставляются не в конец а в конкретный узел в дереве O(log n)
2.1.2.3. Некластерные
2.1.2.3.1. Бинарный поиск делением на два
2.1.2.3.2. Хранится как отсортированый список
2.1.3. Конструкции языка
2.1.3.1. Group BY
2.1.3.2. SELECT INTO
2.1.4. Триггеры
2.1.5. Хранимые процедуры
2.1.6. Функции
2.1.7. Виртуальные таблицы (Интерфейсы)
2.1.8. Номализация
2.1.9. PostgreSQL
2.1.9.1. PL/pgSQL
2.1.9.2. Книга-справочник
2.1.9.3. Индексы
2.1.9.4. MMCV
2.1.9.5. Параллелизация запросов на чтение и запись
2.1.9.6. Пулл подключений
2.2. NoSQL
2.2.1. ElasticSearch
2.2.2. MongoDB
2.2.3. Выборки с помощью MapReduce и клиенстких библиотек, которые предоставляют возможность выборки с группировкой, агрегацией и фильтрацией
2.3. BigData
2.3.1. MapReduce
2.3.1.1. Hadoop
2.3.1.2. Apache Spark
2.3.2. mahout
3. ЯП
3.1. PHP
3.1.1. Позднее статическое связывание
3.1.2. Traits
3.1.2.1. Решение конфликтов имен в методах трэйтов с помощью переопределения обоасти видимости в использующем классе или конструкции instedof в use, трейты не создают иерархию классов, класс используемый трейт не является членом этого класса
3.1.3. Frameworks&Labraries
3.1.3.1. Zend2
3.1.3.2. Symphony
3.1.3.3. Laravel
3.1.3.4. Yii
3.1.4. Документирование
3.1.4.1. PHPDoc
3.1.4.2. API : swagger, spotlight для написания документации в визуальном редакторе и выгрузки его yaml
3.1.5. Дебаг
3.1.5.1. Xdebug
3.1.5.2. Monolog
3.1.5.3. Sentry
3.1.6. PSR
3.1.7. Процесс интерпритации
3.1.8. Профилирование
3.1.8.1. xdebug
3.1.8.2. xhprof
3.1.8.3. tideways
3.1.9. Zend Engine
3.1.9.1. OpCodes (operation codes)
3.1.9.2. OpCache
3.1.9.2.1. eAccelerator
3.1.9.2.2. xCache
3.1.9.2.3. Zend Optimizator
3.1.10. PCNTL forks (Для многопоточности в php)
3.1.11. HIP-HOP php (трансляция php в C++)
3.1.12. Zval
3.1.13. Code Playground | SoloLearn: Learn to code for FREE!
3.1.14. SPL
3.1.14.1. Стандартная библиотека PHP, с версии 5.0 поставляется вместе с ядром, содержит много полезных интерфейсов и их готовых реализаций, для работы с разными струтурами данных (очереди, стэки, кучи) и другие классы
3.2. Общая теория
3.2.1. Структуры данных
3.2.1.1. Массив
3.2.1.1.1. Быстрый поиск O(log n)
3.2.1.1.2. Медленное удаление и вставка O(n)
3.2.1.2. Хэш-таблицы
3.2.1.2.1. Коллизии
3.2.1.2.2. Хэш-функция
3.2.1.2.3. Мнгновенное чтение, втавка и удаление O(1). Быстрые ребята, эти хэш таблицы
3.2.1.3. Связанные списки
3.2.1.3.1. Медленный поиск O(n)
3.2.1.3.2. Быстрое удаление и чвставка O(1)
3.2.1.4. Стэк
3.2.1.5. Очередь
3.2.1.6. Коллекция
3.2.1.7. Куча
3.2.1.8. Бинарное дерево
3.2.1.8.1. Красно-черные деревья O(log n)
3.2.1.8.2. Обычное бинарное дерево, в худ. случае - O(n) (дерево не сбалансировано и перекошено), в лучшем - O(log n)
3.2.2. Виды
3.2.2.1. Компилируемые
3.2.2.2. Интерпритируемые
3.2.2.3. Иперативные
3.2.2.4. Декларативные
3.2.3. Типизация
3.2.3.1. Статическая / динамическая
3.2.3.2. Строгая / нестрогая
3.2.3.3. Явная / неявная
4. Принципы
4.1. SOLID
4.1.1. Открытости-закрытости
4.1.2. Единственной обязаности
4.1.3. Разделение интерфейсов
4.1.4. Принцип Барбары Лисков
4.1.5. Инверсия зависимости
4.2. DRY (Don't repeat yourself)
4.3. KISS (Делай проще, не усложняй)
4.4. TDD
4.5. ООП
4.5.1. Инкапсуляция
4.5.2. Наследование
4.5.3. Полиморфизм
4.6. ABAC vs RBAC
4.7. Другие
4.7.1. Ограниченные контексты
4.7.2. Декомпозиция от большего к меньшему
4.7.3. Избегать преждевременной декомпозиции
4.8. ACID
5. Паттерны
5.1. Порождающие
5.1.1. Singlenton
5.1.2. Prototype
5.1.3. Factory Method
5.1.4. Builder
5.1.5. Abstract Factory
5.2. Структурирующие
5.2.1. Facade
5.2.2. Decorator
5.2.3. Composite
5.2.4. Bridge
5.2.5. Adapter
5.3. Поведенческие
5.3.1. Strategy
5.3.2. State
5.3.3. Observer
5.3.4. Memento (Хранитель)
5.3.5. Mediator
5.3.6. Command
5.3.7. Chain of Responsibility
5.3.8. Visitor
5.3.9. Template Method
6. HightLoad
6.1. Кластеризация
6.1.1. Load Balancing
6.1.2. Шардинг БД
6.1.2.1. MySQL > 5.7 поддерживает автоматический шардинг
6.1.2.2. PostgresQL поддерживает автоматический шардинг
6.1.2.3. При добавлении нового шарда, необходимо делать перебалансировку данных на уровне приложения
6.1.2.4. Выборка усложняется, нельзя сделать выборку по нескольким таблица. Можно ввести ElasticSearch для выборок данных
6.1.2.5. Вертикальный шардинг
6.1.2.6. Горизонтальный шардинг
6.1.3. Репликация
6.1.3.1. Rsync
6.1.3.2. Особая файловая система
6.1.3.3. ОС поддерживающая события на изменения файлов
6.1.4. Партиционирование таблиц БД
6.2. Брокеры очередей
6.2.1. Apache Kafka
6.2.2. RabbitMQ
6.3. Оптимизация
6.3.1. HipHop php
6.3.2. Оптимизация БД: индексы, партиционирование, оптимизация SQL, денормализация
6.4. Проблемы
6.4.1. Блокировка сессий
7. Мониторинг
7.1. tcpdump
7.2. god
7.3. Zabbix
7.4. Nagios
7.5. Логгирование Sentry
7.6. nmon (ресурсы)
8. Linux
8.1. Сигналы
8.2. Команды CLI
8.3. Bash
8.4. Ngnix
8.4.1. Самый часто вызыввемемые хосты
8.5. Apache
8.5.1. mod_php
8.6. fpm-php
8.6.1. slowlog
8.7. VMware
8.8. Управление конфигурациями
8.8.1. Puppet
8.9. swaping
9. git
9.1. commands
9.1.1. Rebase
9.1.2. Merge
9.1.3. Cherry-pick
10. Деплой и CI
10.1. Jenkis
10.2. Docker
10.2.1. pupet
10.2.2. Chief
10.2.3. Docker SWAMP
10.2.4. Consul
10.2.5. Kubernetes
10.3. Amazon AWS
11. Тестирование
11.1. Unit
11.2. Функциональное
11.3. Автоматизация тестирования
12. Технологии
13. Протоколы
13.1. Авторизации
13.1.1. OAuth2
13.1.2. JWT
13.1.3. Сессии
13.1.4. ABAC
13.1.4.1. XACML
13.2. Сетевые
13.2.1. WebRTCP
13.2.2. HTTP
13.2.3. UDP
13.2.4. TCP
13.2.5. RTP
13.2.6. SIP
13.3. SSH
13.4. FTP
13.5. CGI
13.5.1. Как работает
13.6. FastCGI
13.7. REST
13.7.1. swagger
13.7.2. Иммутабельность засчет версионирования
13.7.3. Документирование
13.7.3.1. RAML
13.7.3.2. API Docs
13.7.3.3. OAS
14. Frontend
14.1. Тестирование
14.1.1. Cross Browser Testing Tool. 1000+ Browsers, Mobile, Real IE.
15. Безопасность
15.1. Экранизация вывода
15.2. Фиьлтрация ввода
15.3. Межсайтовый скриптинг
15.4. Fail2ban
15.5. Iptables
16. Методы разработки
16.1. TDD
17. Agile
17.1. scrum
17.2. canban
18. Алгоритмы
18.1. Поиска
18.1.1. Бинарный поиск
18.2. Динамического программирования
18.3. Графы
18.3.1. Поиск в ширину (не взвешеные)
18.3.2. Взвешеные и не взвешенные графы
18.3.3. Алгоритм Дейкстры (взвешеные графы)
18.4. Сортировка
18.4.1. Быстрая сортировка (быстрая константа)
18.4.2. Сортировка слиянием (медленная константа)
18.4.3. Сортировка выбором