Программирование

Get Started. It's Free
or sign up with your email address
Программирование by Mind Map: Программирование

1. Фишки и конструкции языка

1.1. Виртуальные столбцы

2. Принципы

2.1. SOLID

2.1.1. Открытости-закрытости

2.1.2. Единственной обязаности

2.1.3. Разделение интерфейсов

2.1.4. Принцип Барбары Лисков

2.1.5. Инверсия зависимости

2.2. DRY (Don't repeat yourself)

2.3. KISS (Делай проще, не усложняй)

2.4. TDD

2.5. ООП

2.5.1. Инкапсуляция

2.5.2. Наследование

2.5.3. Полиморфизм

2.6. ABAC vs RBAC

2.7. Другие

2.7.1. Ограниченные контексты

2.7.2. Декомпозиция от большего к меньшему

2.7.3. Избегать преждевременной декомпозиции

2.8. ACID

3. Паттерны

3.1. Порождающие

3.1.1. Singlenton

3.1.2. Prototype

3.1.3. Factory Method

3.1.4. Builder

3.1.5. Abstract Factory

3.2. Структурирующие

3.2.1. Facade

3.2.2. Decorator

3.2.3. Composite

3.2.4. Bridge

3.2.5. Adapter

3.3. Поведенческие

3.3.1. Strategy

3.3.2. State

3.3.3. Observer

3.3.4. Memento (Хранитель)

3.3.5. Mediator

3.3.6. Command

3.3.7. Chain of Responsibility

3.3.8. Visitor

3.3.9. Template Method

4. HightLoad

4.1. Кластеризация

4.1.1. Load Balancing

4.1.2. Шардинг БД

4.1.2.1. MySQL > 5.7 поддерживает автоматический шардинг

4.1.2.2. PostgresQL поддерживает автоматический шардинг

4.1.2.3. При добавлении нового шарда, необходимо делать перебалансировку данных на уровне приложения

4.1.2.4. Выборка усложняется, нельзя сделать выборку по нескольким таблица. Можно ввести ElasticSearch для выборок данных

4.1.2.5. Вертикальный шардинг

4.1.2.6. Горизонтальный шардинг

4.1.3. Репликация

4.1.3.1. Rsync

4.1.3.2. Особая файловая система

4.1.3.3. ОС поддерживающая события на изменения файлов

4.1.4. Партиционирование таблиц БД

4.2. Брокеры очередей

4.2.1. Apache Kafka

4.2.2. RabbitMQ

4.3. Оптимизация

4.3.1. HipHop php

4.3.2. Оптимизация БД: индексы, партиционирование, оптимизация SQL, денормализация

4.4. Проблемы

4.4.1. Блокировка сессий

5. Linux

5.1. Сигналы

5.2. Команды CLI

5.3. Bash

5.4. Ngnix

5.4.1. Самый часто вызыввемемые хосты

5.5. Apache

5.5.1. mod_php

5.6. fpm-php

5.6.1. slowlog

5.7. VMware

5.8. Управление конфигурациями

5.8.1. Puppet

5.9. swaping

6. Деплой и CI

6.1. Jenkis

6.2. Docker

6.2.1. pupet

6.2.2. Chief

6.2.3. Docker SWAMP

6.2.4. Consul

6.2.5. Kubernetes

6.3. Amazon AWS

7. Технологии

8. Frontend

8.1. Тестирование

8.1.1. Cross Browser Testing Tool. 1000+ Browsers, Mobile, Real IE.

9. Алгоритмы

9.1. Поиска

9.1.1. Бинарный поиск

9.2. Динамического программирования

9.3. Графы

9.3.1. Поиск в ширину (не взвешеные)

9.3.2. Взвешеные и не взвешенные графы

9.3.3. Алгоритм Дейкстры (взвешеные графы)

9.4. Сортировка

9.4.1. Быстрая сортировка (быстрая константа)

9.4.2. Сортировка слиянием (медленная константа)

9.4.3. Сортировка выбором

9.5. Справка по сложности (скорости) алгоритмов

10. БД

10.1. SQL

10.1.1. MySQL

10.1.1.1. Движки

10.1.1.1.1. InnoDB

10.1.1.1.2. MySAM

10.1.1.2. Блокировки

10.1.1.2.1. Явные

10.1.1.2.2. Неявные

10.1.1.2.3. READ BLOCK

10.1.1.2.4. WRITE BLOCK

10.1.1.3. Оптимизация

10.1.1.3.1. EXPLAIN SELECT

10.1.1.3.2. Порядок индексов

10.1.1.3.3. Денормализация

10.1.1.3.4. Тюнинг настроек БД

10.1.1.3.5. Профилирование

10.1.1.3.6. Анализ логов

10.1.2. Индексы

10.1.2.1. Составные

10.1.2.1.1. Нужно составлять в правильном порядке (селективность), сначала те которые дают более узкий диапозон значений, а потом уже остальные

10.1.2.2. Кластерные

10.1.2.2.1. Бинарное дерево

10.1.2.2.2. Хранит значение поля

10.1.2.2.3. Более медленный т.к новые данные вставляются не в конец а в конкретный узел в дереве O(log n)

10.1.2.3. Некластерные

10.1.2.3.1. Бинарный поиск делением на два

10.1.2.3.2. Хранится как отсортированый список

10.1.3. Конструкции языка

10.1.3.1. Group BY

10.1.3.2. SELECT INTO

10.1.4. Триггеры

10.1.5. Хранимые процедуры

10.1.6. Функции

10.1.7. Виртуальные таблицы (Интерфейсы)

10.1.8. Номализация

10.1.9. PostgreSQL

10.1.9.1. PL/pgSQL

10.1.9.2. Книга-справочник

10.1.9.3. Индексы

10.1.9.4. MMCV

10.1.9.5. Параллелизация запросов на чтение и запись

10.1.9.6. Пулл подключений

10.2. NoSQL

10.2.1. ElasticSearch

10.2.2. MongoDB

10.2.3. Выборки с помощью MapReduce и клиенстких библиотек, которые предоставляют возможность выборки с группировкой, агрегацией и фильтрацией

10.3. BigData

10.3.1. MapReduce

10.3.1.1. Hadoop

10.3.1.2. Apache Spark

10.3.2. mahout

11. ЯП

11.1. PHP

11.1.1. Позднее статическое связывание

11.1.2. Traits

11.1.2.1. Решение конфликтов имен в методах трэйтов с помощью переопределения обоасти видимости в использующем классе или конструкции instedof в use, трейты не создают иерархию классов, класс используемый трейт не является членом этого класса

11.1.3. Frameworks&Labraries

11.1.3.1. Zend2

11.1.3.2. Symphony

11.1.3.3. Laravel

11.1.3.4. Yii

11.1.4. Документирование

11.1.4.1. PHPDoc

11.1.4.2. API : swagger, spotlight для написания документации в визуальном редакторе и выгрузки его yaml

11.1.5. Дебаг

11.1.5.1. Xdebug

11.1.5.2. Monolog

11.1.5.3. Sentry

11.1.6. PSR

11.1.7. Процесс интерпритации

11.1.8. Профилирование

11.1.8.1. xdebug

11.1.8.2. xhprof

11.1.8.3. tideways

11.1.9. Zend Engine

11.1.9.1. OpCodes (operation codes)

11.1.9.2. OpCache

11.1.9.2.1. eAccelerator

11.1.9.2.2. xCache

11.1.9.2.3. Zend Optimizator

11.1.10. PCNTL forks (Для многопоточности в php)

11.1.11. HIP-HOP php (трансляция php в C++)

11.1.12. Zval

11.1.13. Code Playground | SoloLearn: Learn to code for FREE!

11.1.14. SPL

11.1.14.1. Стандартная библиотека PHP, с версии 5.0 поставляется вместе с ядром, содержит много полезных интерфейсов и их готовых реализаций, для работы с разными струтурами данных (очереди, стэки, кучи) и другие классы

11.2. Общая теория

11.2.1. Структуры данных

11.2.1.1. Массив

11.2.1.1.1. Быстрый поиск O(log n)

11.2.1.1.2. Медленное удаление и вставка O(n)

11.2.1.2. Хэш-таблицы

11.2.1.2.1. Коллизии

11.2.1.2.2. Хэш-функция

11.2.1.2.3. Мнгновенное чтение, втавка и удаление O(1). Быстрые ребята, эти хэш таблицы

11.2.1.3. Связанные списки

11.2.1.3.1. Медленный поиск O(n)

11.2.1.3.2. Быстрое удаление и чвставка O(1)

11.2.1.4. Стэк

11.2.1.5. Очередь

11.2.1.6. Коллекция

11.2.1.7. Куча

11.2.1.8. Бинарное дерево

11.2.1.8.1. Красно-черные деревья O(log n)

11.2.1.8.2. Обычное бинарное дерево, в худ. случае - O(n) (дерево не сбалансировано и перекошено), в лучшем - O(log n)

11.2.2. Виды

11.2.2.1. Компилируемые

11.2.2.2. Интерпритируемые

11.2.2.3. Иперативные

11.2.2.4. Декларативные

11.2.3. Типизация

11.2.3.1. Статическая / динамическая

11.2.3.2. Строгая / нестрогая

11.2.3.3. Явная / неявная

12. Мониторинг

12.1. tcpdump

12.2. god

12.3. Zabbix

12.4. Nagios

12.5. Логгирование Sentry

12.6. nmon (ресурсы)

13. git

13.1. commands

13.1.1. Rebase

13.1.2. Merge

13.1.3. Cherry-pick

14. Тестирование

14.1. Unit

14.2. Функциональное

14.3. Автоматизация тестирования

15. Протоколы

15.1. Авторизации

15.1.1. OAuth2

15.1.2. JWT

15.1.3. Сессии

15.1.4. ABAC

15.1.4.1. XACML

15.2. Сетевые

15.2.1. WebRTCP

15.2.2. HTTP

15.2.3. UDP

15.2.4. TCP

15.2.5. RTP

15.2.6. SIP

15.3. SSH

15.4. FTP

15.5. CGI

15.5.1. Как работает

15.6. FastCGI

15.7. REST

15.7.1. swagger

15.7.2. Иммутабельность засчет версионирования

15.7.3. Документирование

15.7.3.1. RAML

15.7.3.2. API Docs

15.7.3.3. OAS

16. Безопасность

16.1. Экранизация вывода

16.2. Фиьлтрация ввода

16.3. Межсайтовый скриптинг

16.4. Fail2ban

16.5. Iptables

17. Методы разработки

17.1. TDD

18. Agile

18.1. scrum

18.2. canban