Гайд · Backend · Senior

Полный гайд Senior Backend Developer

Универсальный материал — язык не важен. После прохождения: PHP → Python → Go.


ОГЛАВЛЕНИЕ

  1. Что такое Senior — модель компетенций
  2. Computer Science фундамент
  3. Структуры данных и алгоритмы
  4. Операционные системы и Linux глубоко
  5. Сети и протоколы
  6. Базы данных (реляционные)
  7. NoSQL, кэши, поисковые движки
  8. Архитектура приложений
  9. Архитектурные стили и паттерны
  10. Distributed Systems
  11. Микросервисы
  12. Message brokers и event-driven
  13. API: REST, GraphQL, gRPC
  14. Безопасность (AppSec) глубоко
  15. Криптография
  16. SDLC и Secure SDLC (SSDLC)
  17. DevOps, CI/CD, IaC
  18. Контейнеризация и оркестрация
  19. Облака
  20. Observability: логи, метрики, трейсы
  21. Тестирование
  22. Performance, profiling, optimization
  23. Soft skills и работа Senior
  24. План изучения (роадмап на 12 месяцев)
  25. Литература

1. ЧТО ТАКОЕ SENIOR — МОДЕЛЬ КОМПЕТЕНЦИЙ

Senior — это не "много лет опыта". Это уровень самостоятельности и влияния.

Шкала уровней (industry-standard)

  • Junior: выполняет задачи под руководством, нужен ревью каждого PR.
  • Middle: самостоятельно решает поставленные задачи, может декомпозировать. Ревью на архитектурном уровне.
  • Senior: ставит задачи себе и другим. Принимает архитектурные решения. Отвечает за результат компонента/подсистемы. Ментор.
  • Staff/Principal: влияет на несколько команд, технические стратегии всей компании.
  • Architect: проектирует системы в целом, не пишет код ежедневно.

Что должен УМЕТЬ Senior (не "знать", а делать)

  1. Декомпозировать требование бизнеса до уровня задач разработчикам.
  2. Проектировать компонент: API, схема данных, инварианты, отказоустойчивость.
  3. Оценивать сроки, риски, технический долг — реалистично.
  4. Читать чужой код быстро. Видеть в нём проблемы и потенциал.
  5. Делать code review — конструктивно, не за стиль, а за дизайн.
  6. Дебажить прод — логи, метрики, дампы, профайлинг.
  7. Объяснять технические решения нетехническим людям.
  8. Говорить "нет" — обосновывая риски, а не из лени.
  9. Менторить — растить middle до senior.
  10. Балансировать скорость/качество/долг.

Что должен ЗНАТЬ Senior

  • Фундамент CS (структуры данных, сложности, ОС, сети).
  • Несколько парадигм программирования (ООП, функциональная, процедурная).
  • Минимум 2 языка глубоко + ещё 2-3 на уровне читать.
  • БД: SQL, индексы, транзакции, репликация, шардирование.
  • Архитектурные паттерны: monolith, modular monolith, SOA, microservices, event-driven.
  • DDD (Domain-Driven Design) — хотя бы тактические паттерны.
  • Concurrency и parallelism.
  • Распределённые системы: CAP, consensus, eventual consistency.
  • Безопасность: OWASP, threat modeling, криптография на уровне применения.
  • DevOps: CI/CD, Docker, Kubernetes хотя бы концептуально.
  • Observability: structured logging, metrics, distributed tracing.

2. COMPUTER SCIENCE ФУНДАМЕНТ

2.1 Системы счисления и битовые операции

  • Двоичная, восьмеричная, шестнадцатеричная.
  • Big-endian vs Little-endian.
  • AND, OR, XOR, NOT, сдвиги влево/вправо.
  • Использование битов: флаги, маски, оптимизации, контроль чётности.
  • Two's complement (представление отрицательных чисел).
  • IEEE 754 — float, double, проблемы с точностью.

2.2 Память

  • Стек vs Куча (heap).
  • Что хранится где: локальные переменные на стеке, объекты в куче.
  • Stack overflow, heap overflow.
  • Garbage Collection vs ручное управление (malloc/free, new/delete, RAII).
  • Reference counting (PHP, Python, Swift).
  • Mark-and-sweep (Java, Go).
  • Memory leaks: что это, как искать (Valgrind, ASAN, pprof).
  • Cache levels (L1/L2/L3), cache locality, false sharing.

2.3 Процессы и потоки

  • Процесс = адресное пространство + ресурсы. Поток = поток выполнения внутри процесса.
  • Контекстное переключение (context switch) — стоит дорого.
  • Зелёные потоки (goroutine, корутины) — управляются runtime'ом, дешевле.
  • Synchronization primitives: Mutex, RWMutex, Semaphore, Condition Variable, Barrier, Spinlock.
  • Atomics (CAS — Compare-And-Swap).
  • Race conditions, deadlock, livelock, starvation, priority inversion.
  • Producer-Consumer, Reader-Writer, Dining Philosophers.

2.4 Concurrency vs Parallelism

  • Concurrency — управление множеством задач одновременно (могут быть на одном CPU).
  • Parallelism — реальное одновременное выполнение на нескольких CPU.
  • Модели: threads (pthreads), event loop (Node.js, Python asyncio), green threads (Go), Actor model (Erlang, Akka), CSP (Go, Clojure core.async).

2.5 Сложность алгоритмов

  • Big-O notation: O(1), O(log n), O(n), O(n log n), O(n²), O(2ⁿ), O(n!).
  • Big-Θ (тэта) — точная асимптотика. Big-Ω (омега) — нижняя граница.
  • Амортизированная сложность (пример: dynamic array push).
  • Space complexity.

3. СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ

3.1 Линейные структуры

  • Array — фиксированный размер, O(1) доступ по индексу.
  • Dynamic Array (vector, list в Python, slice в Go, ArrayList в Java) — амортизированно O(1) append.
  • Linked List (singly, doubly, circular) — O(1) вставка/удаление при наличии указателя, O(n) доступ.
  • Stack (LIFO) — push/pop O(1). Применения: рекурсия, undo, expression evaluation.
  • Queue (FIFO), Deque (двусторонняя), Priority Queue (heap-based).

3.2 Хэш-таблицы

  • Hash function — детерминированная, равномерная.
  • Collision resolution: chaining (списки в bucket'ах), open addressing (linear/quadratic probing, double hashing).
  • Load factor, rehashing.
  • Применение: map, set, кэш, dedup.
  • В реальности: HashMap в Java, dict в Python (Python 3.7+ сохраняет порядок вставки), map в Go (порядок случайный, специально), array в PHP (упорядочен).

3.3 Деревья

  • Binary Tree — каждый узел до 2 детей.
  • Binary Search Tree (BST) — left < root < right.
  • Balanced trees: AVL, Red-Black. Гарантируют O(log n) на операциях.
  • B-Tree, B+ Tree — используются в БД (InnoDB, PostgreSQL) для индексов. Высокий fan-out → меньше дисковых чтений.
  • Heap (Min/Max) — для priority queue, heapsort.
  • Trie (prefix tree) — для автодополнений, поиска по префиксу.
  • Segment Tree, Fenwick Tree — для range queries (нужны редко, но полезно знать).

3.4 Графы

  • Представления: матрица смежности, список смежности.
  • DFS (depth-first), BFS (breadth-first).
  • Dijkstra (кратчайший путь, неотрицательные веса).
  • Bellman-Ford (есть отрицательные веса).
  • A* (с эвристикой).
  • Topological sort (для DAG — например, зависимости задач).
  • Union-Find (Disjoint Set Union) — для кластеризации, Kruskal MST.
  • Tarjan/Kosaraju — strongly connected components.

3.5 Сортировки

  • Bubble, Insertion, Selection — O(n²), учебные.
  • Merge Sort — O(n log n), стабильная, нужна доп. память.
  • Quick Sort — в среднем O(n log n), худшее O(n²), in-place.
  • Heap Sort — O(n log n), in-place, не стабильна.
  • Counting Sort, Radix Sort — O(n), для целых чисел в ограниченном диапазоне.
  • Timsort — гибрид merge+insertion, используется в Python и Java.
  • В реальной работе: вызываешь стандартную sort(), но понимаешь сложность и стабильность.

3.6 Поиск

  • Linear O(n).
  • Binary search O(log n) — массив должен быть отсортирован.
  • Hashing O(1) среднее.
  • Знать когда какой использовать.

3.7 Парадигмы алгоритмов

  • Divide and Conquer — Merge Sort, Quick Sort, Binary Search.
  • Greedy — Dijkstra, Huffman coding, activity selection.
  • Dynamic Programming — мемоизация, перекрывающиеся подзадачи (Fibonacci, knapsack, edit distance).
  • Backtracking — N-Queens, sudoku, поиск с откатом.
  • Two pointers, Sliding window — массивы/строки.

4. ОПЕРАЦИОННЫЕ СИСТЕМЫ И LINUX

4.1 Архитектура ОС

  • Kernel space vs User space.
  • Syscalls — системные вызовы (read, write, open, fork, exec, mmap, ioctl).
  • strace — следить за syscall'ами процесса.
  • Прерывания (interrupts), сигналы (signals).
  • Планировщик процессов (CFS в Linux).

4.2 Процессы и сигналы

  • fork() — создаёт копию процесса.
  • exec() — заменяет образ процесса.
  • wait() / waitpid() — родитель ждёт ребёнка.
  • Zombie process — завершён, но не сжат.
  • Orphan process — родитель умер, ребёнка усыновляет init.
  • Daemon — фоновый процесс, отвязанный от терминала.
  • Signals: SIGTERM (мягко), SIGKILL (жёстко), SIGHUP (reload), SIGINT (Ctrl+C), SIGSEGV (segfault), SIGPIPE.

4.3 Файловая система

  • inode — метаданные файла (права, владелец, размер, указатели на блоки).
  • Hard link vs Symlink.
  • File descriptor — целое число, указывающее на открытый файл.
  • 0=stdin, 1=stdout, 2=stderr.
  • Pipes (|), redirection (>, <, >>, 2>&1).
  • /proc/<pid>/ — информация о процессах.
  • /sys — sysfs.

4.4 Память в Linux

  • Virtual memory, page tables, MMU.
  • Swap — когда RAM кончается, страницы выгружаются на диск.
  • OOM killer — убивает процессы при нехватке памяти.
  • mmap — отображение файла в память.
  • Shared memory.
  • Cgroups — лимитирование ресурсов (используется в Docker).
  • Namespaces — изоляция (PID, NET, MNT, USER, UTS, IPC, CGROUP). Основа контейнеров.

4.5 Ввод-вывод (I/O)

  • Blocking I/O — поток ждёт.
  • Non-blocking I/O — возврат сразу, опрос.
  • I/O multiplexing — select, poll, epoll (Linux), kqueue (BSD/macOS), IOCP (Windows).
  • Async I/O (aio, io_uring).
  • epoll — масштабируется лучше select. Основа async runtime'ов.

4.6 Команды Linux, которые должен знать Senior

  • Навигация: ls, cd, pwd, find, locate.
  • Тексты: cat, less, head, tail, grep, sed, awk, sort, uniq, wc, tr, cut.
  • Процессы: ps, top, htop, kill, pkill, nice, renice, nohup, &.
  • Сеть: ss (вместо netstat), ip (вместо ifconfig), tcpdump, nmap, curl, wget, dig, nslookup, host, traceroute, mtr.
  • Диск: df, du, lsblk, mount, umount, fdisk, mkfs.
  • Производительность: vmstat, iostat, mpstat, sar, free, uptime, dstat.
  • Системное: uname, uptime, dmesg, journalctl, systemctl.
  • Архивы: tar, gzip, gunzip, zip, unzip.
  • Сравнение: diff, cmp.
  • Контроль: strace, ltrace, perf.

4.7 Bash для Senior

  • Переменные, кавычки (одинарные vs двойные).
  • Подстановки: $(cmd), cmd, ${var}.
  • Условия: [[ ]], if/elif/else.
  • Циклы: for, while, until.
  • Функции.
  • Trap (обработка сигналов в скрипте).
  • set -euo pipefail — безопасный bash.

5. СЕТИ И ПРОТОКОЛЫ

5.1 OSI/TCP/IP модели

  • 7 слоёв OSI: Physical, Data Link, Network, Transport, Session, Presentation, Application.
  • TCP/IP модель: Link, Internet, Transport, Application.
  • Senior должен ориентироваться в L2-L7.

5.2 IP, маршрутизация

  • IPv4: 4 байта, 32 бита. Адреса: 0.0.0.0 — 255.255.255.255.
  • Приватные диапазоны: 10/8, 172.16/12, 192.168/16.
  • IPv6: 128 бит.
  • Маски подсетей, CIDR (например, /24 = 255.255.255.0).
  • Маршрутизация: routing table, default gateway.
  • NAT — Network Address Translation.
  • ARP (IP → MAC).

5.3 TCP

  • Connection-oriented, надёжный, упорядоченный.
  • Three-way handshake: SYN, SYN-ACK, ACK.
  • Four-way teardown: FIN, ACK, FIN, ACK.
  • Sliding window, congestion control (slow start, AIMD).
  • TCP states: LISTEN, ESTABLISHED, TIME_WAIT, CLOSE_WAIT, etc.
  • Keep-alive.
  • Nagle's algorithm, TCP_NODELAY.

5.4 UDP

  • Connectionless, без гарантий.
  • Применения: DNS, VoIP, видео, игры, QUIC.

5.5 DNS

  • A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, PTR.
  • Recursive vs iterative resolver.
  • TTL.
  • DNS over HTTPS (DoH), DNS over TLS (DoT).
  • Senior должен уметь дебажить DNS через dig/nslookup.

5.6 HTTP/HTTPS

  • HTTP/1.0, 1.1, 2, 3 (QUIC).
  • Методы: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACE.
  • Идемпотентность: GET, PUT, DELETE — идемпотентны; POST, PATCH — нет.
  • Безопасность методов: GET, HEAD, OPTIONS — safe (не меняют состояние).
  • Status codes: 1xx info, 2xx success, 3xx redirect, 4xx client error, 5xx server error.
  • Подробно: 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 409, 422, 429, 500, 502, 503, 504.
  • Заголовки: Content-Type, Content-Length, Authorization, Cookie, Set-Cookie, Cache-Control, ETag, Last-Modified, If-None-Match, If-Modified-Since, Accept, Accept-Encoding, User-Agent, Origin, Referer, X-Forwarded-For, X-Real-IP.
  • Cookies: HttpOnly, Secure, SameSite (Strict/Lax/None), Domain, Path, Expires/Max-Age.
  • CORS: preflight (OPTIONS), Access-Control-Allow-Origin/Methods/Headers/Credentials.
  • HTTP/2: бинарный, мультиплексирование, server push.
  • HTTP/3: на UDP/QUIC, без head-of-line blocking.

5.7 TLS/SSL

  • TLS handshake.
  • X.509 сертификаты, цепочки доверия, CA.
  • Let's Encrypt — бесплатные сертификаты, ACME протокол.
  • Forward secrecy.
  • mTLS (mutual TLS) — двусторонняя аутентификация.
  • TLS termination — обычно на reverse proxy (nginx, Envoy, LB).

5.8 WebSockets, SSE, gRPC streams

  • WebSockets — двусторонняя связь поверх HTTP, upgrade в начале.
  • SSE (Server-Sent Events) — однонаправленный поток от сервера.
  • gRPC streaming — bidi/server/client.
  • Long polling vs WebSocket.

5.9 Reverse proxy и Load Balancing

  • L4 vs L7 балансировка.
  • Алгоритмы: round-robin, least connections, IP hash, weighted, random.
  • nginx, HAProxy, Envoy, Traefik.
  • Sticky sessions.
  • Health checks.

6. БАЗЫ ДАННЫХ (РЕЛЯЦИОННЫЕ)

6.1 SQL фундамент

  • DDL: CREATE, ALTER, DROP, TRUNCATE.
  • DML: SELECT, INSERT, UPDATE, DELETE, MERGE.
  • DCL: GRANT, REVOKE.
  • TCL: BEGIN, COMMIT, ROLLBACK, SAVEPOINT.
  • JOINs: INNER, LEFT, RIGHT, FULL OUTER, CROSS, SELF.
  • Subqueries, CTE (WITH ... AS), recursive CTE.
  • Window functions: ROW_NUMBER(), RANK(), DENSE_RANK(), LAG, LEAD, SUM() OVER ().
  • GROUP BY, HAVING, аггрегаты.
  • ORDER BY, LIMIT/OFFSET.
  • DISTINCT, UNION/UNION ALL, INTERSECT, EXCEPT.
  • CASE WHEN.

6.2 Нормализация

  • 1NF — атомарность.
  • 2NF — нет частичных зависимостей от составного ключа.
  • 3NF — нет транзитивных зависимостей.
  • BCNF.
  • Когда денормализовать ради производительности — это решение Senior.

6.3 Индексы

  • B-Tree — стандарт. Для =, <, >, BETWEEN, ORDER BY, LIKE 'prefix%'.
  • Hash — для =.
  • GIN, GiST (PostgreSQL) — full-text, JSON, arrays.
  • BRIN — для очень больших таблиц с упорядоченными данными.
  • Covering index, include columns.
  • Partial index (с WHERE).
  • Composite index — порядок колонок важен!
  • Cluster index (InnoDB) — таблица физически упорядочена по PK.
  • Non-clustered index.
  • Что НЕ использует индекс: функции на колонке (WHERE LOWER(col) = '...'), LIKE '%suffix', неявное приведение типов.
  • EXPLAIN/EXPLAIN ANALYZE — обязан читать.

6.4 Транзакции и ACID

  • Atomicity — всё или ничего.
  • Consistency — БД переходит из одного валидного состояния в другое.
  • Isolation — параллельные транзакции не мешают.
  • Durability — после commit изменения сохранены.

6.5 Уровни изоляции

  • Read Uncommitted — dirty reads возможны.
  • Read Committed (default в PostgreSQL) — нет dirty reads.
  • Repeatable Read (default в MySQL InnoDB) — нет non-repeatable reads.
  • Serializable — нет phantom reads, полная сериализуемость.
  • Снэпшотная изоляция (MVCC) — PostgreSQL, Oracle, MySQL InnoDB.
  • Аномалии: dirty read, non-repeatable read, phantom read, lost update, write skew.

6.6 Блокировки

  • Shared (S) vs Exclusive (X).
  • Row-level vs Table-level.
  • Optimistic vs Pessimistic concurrency control.
  • SELECT FOR UPDATE.
  • Deadlock detection.

6.7 Репликация

  • Master-Slave (Primary-Replica): чтение масштабируется.
  • Master-Master: возможны конфликты.
  • Synchronous vs Asynchronous.
  • Semi-sync.
  • Logical vs Physical replication.
  • Read replicas, lag.

6.8 Шардирование (горизонтальное разделение)

  • По ключу (hash, range, list).
  • Consistent hashing.
  • Проблема rebalancing.
  • Vitess, Citus.

6.9 Партиционирование

  • В пределах одной БД, разделение таблицы на части.
  • Range, list, hash partitioning.
  • PostgreSQL declarative partitioning.

6.10 Конкретные СУБД

  • PostgreSQL: MVCC, богатые типы (JSONB, arrays, hstore), CTE, window functions, custom functions (PL/pgSQL, PL/Python), extensions (PostGIS, TimescaleDB, pgvector), wal, replication.
  • MySQL/MariaDB: InnoDB (default), MyISAM, репликация bin-log based, GTID. Особенности: REPEATABLE READ как default, gap locks.
  • Oracle, MS SQL — энтерпрайз, часто в крупных компаниях.

6.11 ORM

  • Active Record (Eloquent в Laravel, Doctrine можно, но Doctrine — DataMapper). Single Table Inheritance.
  • DataMapper (Doctrine, SQLAlchemy в режиме core).
  • N+1 проблема — самая частая. EAGER vs LAZY loading.
  • Identity map.
  • Unit of Work.
  • Когда ORM плох: тяжёлые отчёты, сложные агрегации — пиши SQL руками.

6.12 Миграции схемы

  • Forward-only.
  • Backward-compatible migrations (для zero-downtime deploy).
  • Liquibase, Flyway, Alembic, Doctrine Migrations.

7. NOSQL, КЭШИ, ПОИСКОВИКИ

7.1 Классификация NoSQL

  • Key-Value: Redis, Memcached, etcd.
  • Document: MongoDB, Couchbase.
  • Column-family: Cassandra, HBase, ScyllaDB.
  • Graph: Neo4j, Dgraph.
  • Time-series: InfluxDB, TimescaleDB, Prometheus.
  • Search: Elasticsearch, OpenSearch, Meilisearch.
  • Vector: pgvector, Weaviate, Pinecone (для AI).

7.2 Redis

  • Структуры: string, list, hash, set, sorted set (zset), stream, bitmap, hyperloglog, geo.
  • Persistence: RDB (snapshot), AOF (append-only file).
  • Pub/Sub.
  • Streams — как мини-Kafka.
  • Sentinel — HA.
  • Cluster — шардирование (hash slots).
  • Lua scripting.
  • Pipelining, transactions (MULTI/EXEC).
  • Применения: cache, rate limiting, session store, leaderboard, queue, pub/sub.

7.3 Кэширование

  • Стратегии: cache-aside, read-through, write-through, write-behind/write-back.
  • Eviction: LRU, LFU, FIFO, random, TTL.
  • Cache stampede / dogpile / thundering herd — когда тысячи запросов одновременно идут в БД при инвалидации кэша.
  • Решения: locks (Redis SET NX EX), early refresh, request coalescing, probabilistic early expiration.
  • Cache invalidation — одна из двух самых сложных вещей в CS (по шутке Phil Karlton). Думай про инвалидацию ДО введения кэша.

7.4 Elasticsearch

  • Inverted index.
  • Mapping, analyzers, tokenizers.
  • Queries: match, term, bool, range, nested.
  • Aggregations.
  • Sharding, replicas.

8. АРХИТЕКТУРА ПРИЛОЖЕНИЙ

8.1 Принципы (внутрикодовые)

  • SOLID:
    • Single Responsibility — у класса одна причина для изменения.
    • Open/Closed — открыт для расширения, закрыт для модификации.
    • Liskov Substitution — подкласс заменяет родителя без поломок.
    • Interface Segregation — много мелких интерфейсов лучше одного большого.
    • Dependency Inversion — зависим от абстракций, не от конкретики.
  • DRY — не повторяйся.
  • KISS — keep it simple.
  • YAGNI — не делай того, что "может пригодиться".
  • Law of Demeter — не дёргай детей детей.
  • Composition over inheritance.

8.2 Объектно-ориентированные паттерны (GoF)

  • Порождающие: Factory Method, Abstract Factory, Builder, Prototype, Singleton.
  • Структурные: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
  • Поведенческие: Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.

8.3 Архитектурные стили слоистости

  • Layered (N-tier): Presentation → Application → Domain → Infrastructure.
  • Hexagonal (Ports & Adapters) — Alistair Cockburn. Изоляция бизнес-логики от внешнего мира.
  • Onion — Jeffrey Palermo, концентрические круги.
  • Clean Architecture — Robert Martin (Uncle Bob). Dependency Rule: зависимости направлены внутрь.
  • Все три похожи по сути: домен в центре, инфраструктура снаружи.

8.4 DDD — Domain-Driven Design

  • Strategic patterns:
    • Ubiquitous Language — единый язык бизнеса и разработки.
    • Bounded Context — границы модели.
    • Context Map — отношения между контекстами (Shared Kernel, Customer/Supplier, Conformist, Anti-Corruption Layer, Open Host Service, Published Language).
  • Tactical patterns:
    • Entity — объект с identity.
    • Value Object — без identity, неизменяемый, сравнивается по значению.
    • Aggregate — кластер связанных entities с одним корнем (Aggregate Root). Транзакционная граница.
    • Repository — абстракция хранения агрегата.
    • Domain Service — операция, которая не принадлежит ни Entity, ни VO.
    • Domain Event — что произошло в домене.
    • Factory — создание сложных объектов.

8.5 CQRS — Command Query Responsibility Segregation

  • Команды (меняют состояние) и запросы (читают) — разные модели.
  • Часто с разными хранилищами: write-side (нормализованная БД) + read-side (денормализованные представления, materialized views).
  • Сложнее, чем обычное CRUD. Применяй когда сложная домен-логика и тяжёлые отчёты конкурируют.

8.6 Event Sourcing

  • Состояние = поток событий, а не текущий снимок.
  • Любой state можно восстановить, проиграв события.
  • Снимки (snapshots) для оптимизации.
  • Сложно, но даёт полный аудит + возможность строить любые проекции.

9. АРХИТЕКТУРНЫЕ СТИЛИ ПРИЛОЖЕНИЯ В ЦЕЛОМ

9.1 Monolith

  • Один процесс, одна БД, один deploy.
  • Плюсы: простой деплой, простой дебаг, низкая операционная сложность.
  • Минусы: масштабируется только вертикально; одна команда правит весь код; долгий старт; одна точка отказа.

9.2 Modular Monolith

  • Монолит, но разделённый на модули с чёткими границами и публичными API.
  • Компромисс между монолитом и микросервисами.
  • Можно потом отрезать модули в сервисы.
  • Часто это правильный выбор для small/medium проектов.

9.3 SOA (Service-Oriented Architecture)

  • Сервисы с контрактами, часто SOAP/ESB.
  • Предшественник микросервисов.

9.4 Microservices

  • Маленькие, независимо деплоящиеся сервисы.
  • Каждый сервис — со своей БД.
  • Связь по сети (HTTP, gRPC, события).
  • Плюсы: независимый деплой, изоляция отказов, разные стеки, масштабирование по сервисам.
  • Минусы: сложная операционка, distributed system проблемы, network latency, debugging сложен, нужна observability и DevOps зрелость.
  • Когда НЕ нужны микросервисы: команда <30 человек, нет DevOps зрелости, нет SRE/observability. У вас будет distributed monolith — худшее из обоих миров.

9.5 Serverless

  • FaaS (Functions-as-a-Service): AWS Lambda, Cloud Functions.
  • Платишь за вызовы, не за серверы.
  • Cold start.
  • Vendor lock-in.
  • BaaS (Backend-as-a-Service): Firebase, Supabase.

9.6 Event-Driven Architecture

  • Сервисы взаимодействуют через события (Kafka, RabbitMQ).
  • Producer публикует событие → consumer'ы реагируют.
  • Слабая связанность.
  • Сложнее дебажить — нужен distributed tracing.

10. DISTRIBUTED SYSTEMS

10.1 Фундаментальные теоремы

  • CAP теорема (Brewer): из {Consistency, Availability, Partition tolerance} в условиях сетевого разделения выбираешь 2 из 3. Сеть всегда может разделиться, поэтому реально выбор между CP и AP.
  • PACELC: расширение CAP. P → A/C; иначе (E) → Latency/Consistency.
  • FLP impossibility: в асинхронной системе с одним падающим узлом невозможен детерминированный consensus.
  • Two Generals' Problem: невозможна полная договорённость через ненадёжный канал.

10.2 Consistency models

  • Strong consistency (linearizability) — все операции видны как один глобальный порядок.
  • Sequential consistency — порядок операций каждого процесса сохраняется.
  • Causal consistency — причинно-связанные операции упорядочены.
  • Eventual consistency — рано или поздно все реплики сойдутся.
  • Read your writes, monotonic reads, monotonic writes.

10.3 Consensus алгоритмы

  • Paxos — классика, сложен.
  • Raft — современный, понятнее. Используется в etcd, Consul, CockroachDB.
  • Zab — Zookeeper.
  • PBFT, Tendermint — Byzantine fault tolerance.

10.4 Распределённые транзакции

  • 2PC (Two-Phase Commit) — блокирующий, координатор — single point of failure.
  • 3PC — менее блокирующий, но всё равно проблемы.
  • Saga pattern — последовательность локальных транзакций с компенсациями.
  • Outbox pattern — события публикуются через ту же транзакцию, что и бизнес-данные.
  • Inbox pattern — идемпотентная обработка входящих сообщений.

10.5 Гарантии доставки сообщений

  • At-most-once — может не дойти, но не повторится.
  • At-least-once — точно дойдёт, но может повториться. Идемпотентность обязательна.
  • Exactly-once — мифическая, реально достигается через идемпотентность + at-least-once.

10.6 Идемпотентность

  • Операция может выполниться много раз с тем же результатом.
  • Idempotency key в API.
  • Дедупликация по идентификаторам.

10.7 Часы и порядок событий

  • Wall clock — ненадёжен, может прыгать.
  • Monotonic clock — для измерения интервалов.
  • Lamport timestamps — логические часы.
  • Vector clocks — для causal consistency.
  • Hybrid Logical Clocks (HLC) — CockroachDB.

10.8 Партиционирование (sharding)

  • Range-based — простое, но hotspots.
  • Hash-based — равномерно, но range queries дорого.
  • Consistent hashing — минимизирует rebalancing при изменении числа узлов.

10.9 Реплики

  • Single leader (Primary-Replica).
  • Multi-leader (multi-master).
  • Leaderless (Dynamo-style, Cassandra) — кворум на чтение/запись (R + W > N).

10.10 Failure detection

  • Heartbeats.
  • Gossip protocols (SWIM).
  • Phi accrual failure detector.

10.11 Backpressure и rate limiting

  • Token bucket, leaky bucket.
  • Circuit Breaker (Hystrix, resilience4j).
  • Bulkhead — изоляция пулов ресурсов.
  • Timeout, retry с экспоненциальным backoff + jitter.

11. МИКРОСЕРВИСЫ — ПРАКТИКА

11.1 Декомпозиция

  • По бизнес-возможностям (capability).
  • По bounded context (DDD).
  • По данным (data ownership).
  • НЕ по технической функции (auth-service, db-service — это плохо).

11.2 Inter-service communication

  • Sync: HTTP/REST, gRPC.
  • Async: messages (RabbitMQ, Kafka), events.
  • Async лучше для слабой связанности.

11.3 Service Discovery

  • Client-side (Eureka).
  • Server-side (Consul + DNS, Kubernetes Services).

11.4 API Gateway

  • Единая точка входа.
  • Аутентификация, rate limiting, routing, aggregation.
  • Kong, Tyk, AWS API Gateway, Ambassador.

11.5 Service Mesh

  • Istio, Linkerd, Consul Connect.
  • mTLS между сервисами.
  • Observability (tracing, metrics).
  • Traffic management (canary, retry).

11.6 Distributed Tracing

  • OpenTelemetry — стандарт.
  • Trace ID, Span ID.
  • Jaeger, Zipkin, Tempo, Honeycomb.

11.7 Паттерны устойчивости

  • Circuit Breaker — обрывает запросы к падающему сервису.
  • Retry с backoff и jitter.
  • Timeout (всегда!).
  • Fallback.
  • Bulkhead.
  • Throttling.
  • Hedged requests.

11.8 Версионирование API

  • URI versioning: /v1/, /v2/.
  • Header versioning: Accept: application/vnd.api.v2+json.
  • Сохранять обратную совместимость как можно дольше.

11.9 Антипаттерны микросервисов

  • Distributed monolith — сервисы, которые нельзя деплоить независимо.
  • Shared database — несколько сервисов в одной БД.
  • Chatty services — много round-trip'ов между сервисами.
  • Anaemic services — без своей бизнес-логики.

12. MESSAGE BROKERS И EVENT-DRIVEN

12.1 RabbitMQ

  • AMQP протокол.
  • Exchange (direct, topic, fanout, headers) → Queue → Consumer.
  • Routing keys, bindings.
  • Acknowledgements (ack/nack).
  • Dead Letter Exchange.
  • Confirmations (publisher confirms).
  • Priority queues.
  • TTL.
  • Кластеризация, mirrored queues, quorum queues.

12.2 Apache Kafka

  • Распределённый лог.
  • Topic → Partitions.
  • Producer → Broker → Consumer Group.
  • Offsets, consumer group rebalancing.
  • Replication factor, ISR (in-sync replicas).
  • Log compaction.
  • Kafka Streams, ksqlDB.
  • Schema Registry (Avro, Protobuf, JSON Schema).
  • Exactly-once semantics в Kafka (через идемпотентный producer + транзакции).
  • Когда Kafka, когда RabbitMQ:
    • Kafka — большие потоки данных, аналитика, event sourcing, retention важен.
    • RabbitMQ — задачи (jobs), низкая latency, сложный routing.

12.3 Другие брокеры

  • NATS, NATS JetStream.
  • Redis Streams.
  • AWS Kinesis, SQS, SNS.
  • Google Pub/Sub.
  • Pulsar.

12.4 Event-driven паттерны

  • Event Notification — событие только сигнал.
  • Event-Carried State Transfer — событие несёт нужные данные.
  • Event Sourcing.
  • CQRS + EDA.
  • Choreography vs Orchestration.

13. API: REST, GRAPHQL, GRPC

13.1 REST

  • Resource-oriented.
  • HTTP методы соответствуют CRUD (хотя это упрощение).
  • Statelessness.
  • HATEOAS — спорно, мало кто реально делает.
  • Richardson Maturity Model: уровни 0-3.
  • Идемпотентность методов.
  • Pagination: offset/limit, cursor-based (лучше для больших данных).
  • Filtering, sorting, fields selection.
  • Error responses: Problem Details (RFC 7807).
  • Rate limiting headers (X-RateLimit-*).

13.2 OpenAPI/Swagger

  • Описание API в YAML/JSON.
  • Кодогенерация клиентов и серверов.
  • Документация автогенерируется.

13.3 GraphQL

  • Один эндпоинт, клиент описывает запрос.
  • Query, Mutation, Subscription.
  • Types, schema.
  • Resolvers.
  • DataLoader для N+1 проблемы.
  • Проблемы: сложный auth, кэширование, depth/complexity limits, DoS.

13.4 gRPC

  • HTTP/2 + Protocol Buffers.
  • 4 типа: unary, server streaming, client streaming, bidi streaming.
  • Сильная типизация.
  • Кодогенерация.
  • Идеально для inter-service связи.
  • Плохо для браузеров (нужен grpc-web).

13.5 WebHooks

  • Сервер вызывает callback URL клиента.
  • Безопасность: подпись (HMAC), retry, идемпотентность.

14. БЕЗОПАСНОСТЬ (APPSEC) ГЛУБОКО

14.1 Threat Modeling

  • STRIDE:
    • Spoofing — подмена личности.
    • Tampering — подмена данных.
    • Repudiation — отказ от действий.
    • Information Disclosure — утечка инфы.
    • Denial of Service.
    • Elevation of Privilege.
  • DREAD (для оценки рисков): Damage, Reproducibility, Exploitability, Affected users, Discoverability.
  • PASTA, OCTAVE, VAST — другие методологии.
  • Attack Tree.

14.2 OWASP Top 10 (2021)

  1. Broken Access Control — IDOR, missing auth checks, privilege escalation.
  2. Cryptographic Failures — weak crypto, hardcoded keys, no HTTPS, weak hashing (MD5/SHA1 для паролей).
  3. Injection — SQL, NoSQL, OS Command, LDAP, XPath. ORM не панацея — raw queries и dynamic queries опасны.
  4. Insecure Design — отсутствие threat modeling, business logic flaws.
  5. Security Misconfiguration — defaults, открытые админки, debug в проде.
  6. Vulnerable and Outdated Components — старые библиотеки с CVE.
  7. Identification and Authentication Failures — слабые пароли, отсутствие MFA, broken session management.
  8. Software and Data Integrity Failures — supply chain (зависимости), несподписанные updates, deserialization.
  9. Security Logging and Monitoring Failures — нет логов важных событий, нет алертов.
  10. Server-Side Request Forgery (SSRF).

14.3 OWASP API Security Top 10 (2023)

  1. Broken Object Level Authorization (BOLA / IDOR).
  2. Broken Authentication.
  3. Broken Object Property Level Authorization.
  4. Unrestricted Resource Consumption.
  5. Broken Function Level Authorization.
  6. Unrestricted Access to Sensitive Business Flows.
  7. SSRF.
  8. Security Misconfiguration.
  9. Improper Inventory Management.
  10. Unsafe Consumption of APIs.

14.4 SQL Injection

  • Классическая: ' OR '1'='1.
  • Union-based, error-based, boolean blind, time-based blind.
  • Защита: prepared statements (параметризованные запросы), ORM, escape если нет другого пути.
  • Stored procedures не гарантируют защиты (если внутри dynamic SQL).

14.5 XSS (Cross-Site Scripting)

  • Reflected — пейлоад в URL/параметре, возвращается в ответе.
  • Stored — пейлоад сохранён в БД.
  • DOM-based — манипуляция DOM на клиенте.
  • Защита: output encoding (HTML escape), CSP (Content-Security-Policy), HttpOnly cookies (от кражи через document.cookie), фреймворки с auto-escape (Twig, Jinja2, Razor).
  • Не доверять user input. Никогда.

14.6 CSRF (Cross-Site Request Forgery)

  • Атакующий заставляет браузер жертвы сделать запрос от её имени.
  • Защита: CSRF tokens (synchronizer token pattern, double submit cookie), SameSite cookies.

14.7 SSRF

  • Сервер делает запрос на URL, контролируемый атакующим.
  • Атака на внутренние сервисы (cloud metadata 169.254.169.254 — AWS, GCP).
  • Защита: allowlist, запрет приватных сетей.

14.8 XXE (XML External Entity)

  • Парсер XML подгружает внешние сущности.
  • Утечка файлов, SSRF.
  • Защита: отключить external entities в парсере.

14.9 Deserialization vulnerabilities

  • PHP unserialize(), Python pickle, Java ObjectInputStream.
  • Atomized control flow / RCE.
  • Защита: не десериализовывать недоверенные данные. JSON безопаснее.

14.10 Path Traversal

  • ../../etc/passwd.
  • Защита: canonicalize path, allowlist, chroot.

14.11 Race conditions (TOCTOU)

  • Time of Check, Time of Use — состояние меняется между проверкой и использованием.
  • Atomic операции, locks, оптимистичная конкурентность (version field).

14.12 Authentication

  • Что-то знаешь (пароль) + что-то имеешь (токен/телефон) + чем-то являешься (биометрия).
  • MFA / 2FA.
  • TOTP (RFC 6238), HOTP (RFC 4226).
  • WebAuthn / FIDO2 / passkeys.
  • Password hashing: bcrypt, scrypt, argon2 (argon2id предпочтительно). НЕ MD5, НЕ SHA1, НЕ голый SHA256.
  • Salt — обязательно. Pepper — опционально.

14.13 Session management

  • Server-side session storage (Redis).
  • Stateless tokens (JWT).
  • Session fixation, session hijacking.
  • Secure, HttpOnly, SameSite cookies.
  • Logout — invalidate session серверно.

14.14 JWT

  • Header.Payload.Signature.
  • Алгоритмы: HS256 (symmetric), RS256 (asymmetric), ES256 (ECDSA).
  • Атаки: alg=none, key confusion (RS256 → HS256 с public key), JWK injection.
  • Не хранить секреты в payload (он не зашифрован, только подписан).
  • Срок жизни короткий, refresh tokens отдельно.
  • Logout — проблема, нужен blacklist (теряется stateless).

14.15 OAuth 2.0 и OpenID Connect

  • OAuth 2.0 — авторизация (доступ к ресурсам).
  • OIDC — аутентификация поверх OAuth (получение identity).
  • Flows:
    • Authorization Code (с PKCE) — для web/mobile/SPA.
    • Client Credentials — service-to-service.
    • Device Authorization — для устройств без клавиатуры.
    • Implicit, Password Grant — устарели, не использовать.
  • PKCE (Proof Key for Code Exchange) — обязательно для public clients.
  • Refresh tokens — rotation.

14.16 RBAC, ABAC, ReBAC

  • RBAC — Role-Based: пользователь → роль → разрешения.
  • ABAC — Attribute-Based: разрешения вычисляются по атрибутам.
  • ReBAC — Relationship-Based (Google Zanzibar) — на основе графов отношений.
  • Casbin, OPA (Open Policy Agent), Cerbos.

14.17 Secrets management

  • НЕ в коде, НЕ в git, НЕ в env-файлах в репозитории.
  • HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager.
  • Rotation.
  • .env только для локальной разработки.

14.18 TLS правильно

  • TLS 1.3 (или минимум 1.2 с правильными cipher suites).
  • HSTS заголовок.
  • Cert pinning — для mobile.
  • mTLS для inter-service.

14.19 Rate limiting и DDoS защита

  • На API: rate limits per IP/user/key.
  • WAF (Cloudflare, AWS WAF).
  • CDN.
  • Captcha при подозрении.

14.20 Supply chain security

  • SCA — Software Composition Analysis (Dependabot, Snyk, Renovate).
  • SBOM — Software Bill of Materials (CycloneDX, SPDX).
  • Lock-файлы (composer.lock, package-lock.json, go.sum) — коммитить.
  • Signed commits.
  • Dependency confusion attacks.

14.21 Container security

  • Минимальные базовые образы (Alpine, distroless, scratch).
  • Non-root user в контейнере.
  • Read-only filesystem.
  • Без secrets в образе.
  • Сканирование (Trivy, Grype, Clair).
  • Image signing (Cosign, Notary).

14.22 OWASP ASVS

  • Application Security Verification Standard.
  • 3 уровня: 1 (basic), 2 (standard), 3 (advanced).
  • Чек-листы для всех аспектов AppSec.

15. КРИПТОГРАФИЯ — ПРИКЛАДНАЯ

15.1 Хэш-функции

  • Свойства: deterministic, fast, preimage resistance, second preimage resistance, collision resistance.
  • SHA-2 (SHA-256, SHA-512), SHA-3 (Keccak), BLAKE2/BLAKE3.
  • MD5, SHA-1 — сломаны, не использовать для безопасности.
  • HMAC — хэш с ключом для message authentication.

15.2 Хэширование паролей

  • bcrypt, scrypt, argon2id (предпочтительно), PBKDF2.
  • Параметры стоимости (cost / time / memory) — обновлять каждые 2-3 года.
  • Salt уникальный для каждого пароля.

15.3 Симметричная криптография

  • AES-128, AES-256.
  • Режимы: ECB (НЕ использовать), CBC, CTR, GCM (предпочтительно — auth+encryption), ChaCha20-Poly1305.
  • IV/Nonce — уникальный, никогда не повторять с тем же ключом.
  • Padding (PKCS#7) — уязвимости (Padding Oracle).
  • AEAD (Authenticated Encryption with Associated Data) — обязательно для современных применений.

15.4 Асимметричная криптография

  • RSA — старая, но рабочая. 2048 минимум, 3072+ предпочтительно. RSA-OAEP для шифрования, RSA-PSS для подписи.
  • ECC — Elliptic Curve. P-256 (secp256r1), Curve25519, secp256k1 (Bitcoin).
  • ECDH — Diffie-Hellman на эллиптических кривых для key exchange.
  • EdDSA (Ed25519) — современная подпись, быстрая.
  • Post-Quantum: Kyber (KEM), Dilithium (signatures) — стандартизированы NIST в 2024.

15.5 Гибридные схемы

  • Асимметрика для key exchange + симметрика для шифрования данных.
  • TLS работает так.

15.6 PKI и сертификаты

  • X.509.
  • CSR → CA → Certificate.
  • Chain of trust.
  • CRL, OCSP — отзыв.
  • ACME (Let's Encrypt).

15.7 Генерация случайных чисел

  • CSPRNG обязательно для криптографии: /dev/urandom, getrandom(), CryptGenRandom, random_bytes() в PHP, secrets в Python, crypto/rand в Go.
  • PRNG (math.random, rand()) — НЕ для криптографии.

15.8 Common pitfalls

  • Roll your own crypto = wrong.
  • Использовать проверенные библиотеки: libsodium, BoringSSL, Bouncy Castle.
  • Constant-time сравнения для секретов (hash_equals в PHP, hmac.compare_digest в Python, subtle.ConstantTimeCompare в Go).
  • Timing attacks, padding oracle, BEAST/CRIME/BREACH.

16. SDLC И SECURE SDLC (SSDLC)

16.1 SDLC модели

  • Waterfall — последовательный, тяжёлый. Подходит для систем с фиксированными требованиями (госы, embedded).
  • V-Model — Waterfall с явным тестированием на каждом этапе.
  • Iterative / Incremental.
  • Agile — итерации, фокус на работающем ПО (Scrum, Kanban, XP).
  • Lean — устранение потерь, поток ценности.
  • DevOps / DevSecOps — слияние разработки, операционки и безопасности.

16.2 Фазы классического SDLC

  1. Planning / Requirements.
  2. Analysis & Design.
  3. Implementation.
  4. Testing.
  5. Deployment.
  6. Maintenance & Operations.

16.3 SSDLC — встраивание безопасности в каждую фазу

Requirements

  • Security requirements: compliance (GDPR, 152-ФЗ, PCI DSS, HIPAA), бизнес-требования по безопасности.
  • Abuse cases / misuse cases — как этим можно навредить.

Design

  • Threat modeling (STRIDE).
  • Security architecture review.
  • Defining trust boundaries.
  • Choosing secure defaults.

Implementation

  • Secure coding standards (CERT, OWASP Cheat Sheets).
  • Code review с фокусом на security.
  • Static analysis (SAST).
  • Pre-commit hooks (secret scanning, linters).
  • Dependency scanning (SCA).

Testing

  • DAST (Dynamic Analysis).
  • IAST.
  • Fuzzing.
  • Penetration testing.
  • Bug bounty.

Deployment

  • Infrastructure as Code review.
  • Container image scanning.
  • Secrets management — не зашивать в образы.
  • Least privilege для service accounts.

Operations

  • Logging, monitoring, alerting.
  • WAF, IDS/IPS.
  • Vulnerability management (CVE tracking, patching).
  • Incident response.
  • Forensics.

16.4 Инструменты SSDLC

  • SAST: SonarQube, Semgrep, CodeQL, Checkmarx, Veracode, AppScreener (РФ), PVS-Studio.
  • DAST: OWASP ZAP, Burp Suite, Acunetix, Netsparker.
  • IAST: Contrast, Seeker.
  • SCA: Snyk, Dependabot, OWASP Dependency-Check, Dependency-Track, CodeScoring (РФ), AppSec.Track.
  • Container scanning: Trivy, Grype, Clair, Anchore.
  • Secret scanning: gitleaks, trufflehog, GitHub secret scanning.
  • IaC scanning: Checkov, tfsec, KICS.
  • Fuzzing: AFL++, libFuzzer, go-fuzz, jazzer.

16.5 Compliance и стандарты

  • ISO 27001 — Information Security Management System.
  • SOC 2 — для SaaS, доверие к контролям безопасности.
  • PCI DSS — для обработки платежных карт.
  • GDPR — защита персональных данных в ЕС.
  • 152-ФЗ (РФ) — обработка персональных данных. УЗ-1..4. ПП 1119, Приказ ФСТЭК 21, Приказ ФСБ 378.
  • HIPAA — медицина в США.
  • NIST 800-53, 800-218 (SSDF).
  • OWASP SAMM — Software Assurance Maturity Model.
  • BSIMM — Building Security In Maturity Model.

16.6 Управление инцидентами

  • IR процесс: Detect → Triage → Contain → Eradicate → Recover → Lessons Learned.
  • Постмортемы blameless.
  • Runbooks.
  • Forensics.

17. DEVOPS, CI/CD, IAC

17.1 DevOps принципы

  • CALMS: Culture, Automation, Lean, Measurement, Sharing.
  • Three Ways (Phoenix Project / DevOps Handbook):
    1. Поток слева направо.
    2. Быстрая обратная связь справа налево.
    3. Культура экспериментов и обучения.
  • DORA metrics:
    • Deployment Frequency.
    • Lead Time for Changes.
    • Change Failure Rate.
    • Time to Restore Service (MTTR).

17.2 CI (Continuous Integration)

  • Каждый коммит → автоматическая сборка + тесты.
  • Быстрый фидбек.
  • Trunk-based development vs Git Flow vs GitHub Flow.
  • Build artifacts — immutable.

17.3 CD (Continuous Delivery / Deployment)

  • Delivery — готов к деплою в любой момент, деплой — кнопкой.
  • Deployment — автоматический деплой в прод.

17.4 Стратегии деплоя

  • Recreate — остановить старое, поднять новое. Downtime.
  • Rolling update — постепенная замена. Без downtime.
  • Blue/Green — два окружения, переключение трафика.
  • Canary — небольшой процент трафика на новую версию, постепенный рост.
  • A/B testing — параллельные версии для разных групп.
  • Shadow / dark launch — новая версия получает трафик, но ответы не возвращаются.
  • Feature flags — переключение фич без деплоя (LaunchDarkly, Unleash).

17.5 Git

  • Branching models: Git Flow, GitHub Flow, Trunk-based.
  • Merge vs Rebase. Squash.
  • Cherry-pick, bisect, reflog, stash.
  • Hooks: pre-commit, pre-push, commit-msg.
  • Conventional Commits.
  • Signed commits.

17.6 CI/CD платформы

  • GitLab CI, GitHub Actions, Jenkins, CircleCI, TeamCity, Drone, Argo Workflows.
  • Build matrix, parallel jobs, caching.

17.7 Infrastructure as Code

  • Terraform / OpenTofu — провижининг.
  • Pulumi — IaC на обычных языках.
  • Ansible, Chef, Puppet, SaltStack — configuration management.
  • CloudFormation (AWS), ARM/Bicep (Azure), Deployment Manager (GCP).
  • Версионировать инфраструктуру. State в S3+DynamoDB, не локально.

17.8 Конфиг-менеджмент vs провижининг

  • Provisioning (Terraform) — создание инфраструктуры.
  • Configuration management (Ansible) — настройка существующих машин.
  • На современных подходах оба заменяются immutable infrastructure: образ + replace.

18. КОНТЕЙНЕРИЗАЦИЯ И ОРКЕСТРАЦИЯ

18.1 Docker

  • Контейнер vs виртуальная машина.
  • Image, container, layer, registry.
  • Dockerfile: FROM, RUN, COPY, ADD, CMD, ENTRYPOINT, ENV, ARG, VOLUME, EXPOSE, USER, WORKDIR, HEALTHCHECK.
  • Multi-stage build — уменьшение размера.
  • BuildKit, кэширование слоёв.
  • Docker Compose для локальной разработки.
  • Тонкости:
    • CMD vs ENTRYPOINT.
    • .dockerignore.
    • Не кэшируется COPY package.json — лайфхак для node/composer/pip.
    • Не root!
    • Минимальные образы (alpine, distroless, scratch).
    • Один процесс на контейнер.
    • PID 1 проблема (init, dumb-init, tini).
    • signal handling.

18.2 OCI стандарты

  • Open Container Initiative.
  • Image spec, runtime spec, distribution spec.
  • Альтернативы Docker: Podman, containerd, CRI-O.

18.3 Kubernetes (K8s)

Объекты

  • Pod — минимальная единица, 1+ контейнеров.
  • ReplicaSet — гарантирует количество реплик.
  • Deployment — управляет ReplicaSet, обновления.
  • StatefulSet — для stateful сервисов (БД).
  • DaemonSet — по одному поду на каждой ноде.
  • Job / CronJob — задачи.
  • Service — стабильный endpoint (ClusterIP, NodePort, LoadBalancer, ExternalName).
  • Ingress — HTTP routing.
  • ConfigMap, Secret.
  • PersistentVolume, PersistentVolumeClaim, StorageClass.
  • Namespace — изоляция.
  • NetworkPolicy — firewall между подами.
  • HorizontalPodAutoscaler, VerticalPodAutoscaler.

Архитектура

  • Control plane: kube-apiserver, etcd, kube-scheduler, kube-controller-manager.
  • Node: kubelet, kube-proxy, container runtime.
  • CNI (Calico, Cilium, Flannel).
  • CSI (Container Storage Interface).
  • CRI (Container Runtime Interface).

Управление

  • kubectl, k9s.
  • Helm — package manager.
  • Kustomize — overlays.
  • Operators (CRDs).
  • ArgoCD, FluxCD — GitOps.

K8s Security

  • RBAC.
  • Pod Security Standards (privileged, baseline, restricted).
  • OPA Gatekeeper, Kyverno — policy engines.
  • Network Policies.
  • Service mesh (Istio, Linkerd) для mTLS.
  • Запрет привилегированных контейнеров.
  • Read-only filesystem.
  • Distroless images.
  • Image signing.

K8s Networking

  • Pod-to-pod, pod-to-service, ingress.
  • DNS внутри кластера (CoreDNS).
  • Service mesh.

19. ОБЛАКА

19.1 Модели

  • IaaS — виртуалки, сети, диски.
  • PaaS — runtime для кода (Heroku, App Engine, ECS, Cloud Run).
  • SaaS — готовые продукты (Google Workspace).
  • FaaS — serverless functions.

19.2 AWS ключевые сервисы

  • Compute: EC2, ECS, EKS, Lambda, Fargate.
  • Storage: S3, EBS, EFS, Glacier.
  • Networking: VPC, Route53, CloudFront, ELB (ALB/NLB/CLB), API Gateway.
  • Databases: RDS (Postgres/MySQL/Aurora), DynamoDB, ElastiCache, Redshift.
  • Messaging: SQS, SNS, Kinesis, EventBridge, MSK.
  • IAM, KMS, Secrets Manager, Parameter Store.
  • CloudWatch, X-Ray.

19.3 GCP, Azure, Yandex Cloud, VK Cloud

  • Аналогичные сервисы под другими именами.
  • На РФ-рынке актуальны Yandex Cloud, VK Cloud, Selectel.

19.4 Multi-cloud, hybrid cloud

  • Vendor lock-in.
  • Стоимость vs flexibility.

20. OBSERVABILITY: LOGS, METRICS, TRACES

20.1 Три столпа

  • Logs — дискретные события.
  • Metrics — числовые ряды во времени.
  • Traces — путь запроса через систему.
  • Четвёртое — profiling (continuous profiling: Pyroscope, Parca).

20.2 Structured logging

  • JSON, ключ-значение.
  • Уровни: TRACE, DEBUG, INFO, WARN, ERROR, FATAL.
  • Контекст: trace_id, user_id, request_id.
  • НЕ логировать секреты, пароли, PII (или маскировать).
  • Loki, ELK (Elasticsearch+Logstash+Kibana), Splunk, Datadog Logs.

20.3 Metrics

  • Counter — только растёт (количество запросов).
  • Gauge — может расти и падать (использование памяти).
  • Histogram — распределение значений (latency percentiles).
  • Summary — pre-aggregated quantiles.
  • Prometheus — pull-based.
  • StatsD — push-based.
  • Grafana — визуализация.
  • VictoriaMetrics — Prometheus-совместимая, быстрее.

20.4 Метрики, которые нужно собирать

  • RED: Rate, Errors, Duration.
  • USE: Utilization, Saturation, Errors (для ресурсов).
  • Golden Signals: Latency, Traffic, Errors, Saturation.
  • Business metrics: signups, orders, revenue.

20.5 Tracing

  • OpenTelemetry — стандарт.
  • Trace, Span, Span context, baggage.
  • Sampling.
  • Jaeger, Zipkin, Tempo, Honeycomb.

20.6 Alerting

  • Symptom-based, не cause-based.
  • SLI/SLO/SLA:
    • SLI — Service Level Indicator (метрика).
    • SLO — Service Level Objective (цель).
    • SLA — Service Level Agreement (контракт).
  • Error budget.
  • Alertmanager, PagerDuty, OpsGenie, VictorOps.
  • Алерт-усталость — реальная проблема. Меньше, точнее.

20.7 Профилирование

  • CPU profiling, memory profiling, allocation profiling.
  • pprof (Go, Python), perf, py-spy, async-profiler (Java), Xdebug profiler (PHP), Blackfire.
  • Continuous profiling: Pyroscope, Parca, Datadog Continuous Profiler.
  • Flame graphs.

21. ТЕСТИРОВАНИЕ

21.1 Пирамида тестирования

  • Unit (база, много, быстрые).
  • Integration / Component (меньше).
  • E2E (немного, медленные).
  • Альтернатива: Test Trophy (Kent C. Dodds) — больший упор на integration.

21.2 Виды тестов

  • Unit — изолированная функция/класс. Mocks/stubs/fakes/spies.
  • Integration — несколько компонентов вместе.
  • Contract testing — Pact, между сервисами.
  • End-to-End — через весь стек, browser-tests (Playwright, Selenium, Cypress).
  • Smoke — базовая работоспособность.
  • Regression — старое не сломалось.
  • Load / Performance — k6, Locust, JMeter, Gatling, Artillery.
  • Stress — выше предела нагрузки.
  • Soak / Endurance — долго.
  • Spike — резкие пики.
  • Chaos engineering — Chaos Monkey, Litmus.
  • Security testing — DAST, pentest, fuzzing.
  • Accessibility — a11y.

21.3 TDD, BDD

  • TDD: Red → Green → Refactor.
  • BDD: Given/When/Then, Cucumber/Gherkin.

21.4 Test doubles

  • Dummy — заглушка, не используется.
  • Stub — возвращает фиксированные данные.
  • Fake — упрощённая реальная реализация (in-memory DB).
  • Mock — проверяет, что был вызван правильно.
  • Spy — записывает вызовы.

21.5 Code coverage

  • Statement, branch, function, line coverage.
  • 100% покрытие ≠ 100% качество.
  • Mutation testing (Stryker, PIT) — проверка качества тестов.

21.6 Test data

  • Фикстуры, фабрики (factory_bot, faker).
  • Test containers (testcontainers) — настоящие БД в Docker для тестов.
  • Snapshot testing.
  • Property-based testing (Hypothesis, fast-check, jqwik).

22. PERFORMANCE, PROFILING, OPTIMIZATION

22.1 Правила оптимизации

  • "Premature optimization is the root of all evil" (Knuth).
  • Сначала измерь, потом оптимизируй.
  • 80/20 — большинство времени в малой части кода.
  • Алгоритмическая сложность важнее микрооптимизаций.

22.2 Профилирование

  • CPU-bound vs I/O-bound vs memory-bound.
  • Wall time vs CPU time.
  • Sampling vs Instrumentation profilers.

22.3 Database performance

  • Индексы, EXPLAIN.
  • N+1 queries.
  • Connection pooling (pgbouncer, ProxySQL).
  • Read replicas для масштабирования чтений.
  • Caching на разных уровнях.
  • Prepared statements.
  • Batch operations.

22.4 Caching layers

  • Client (browser cache).
  • CDN.
  • Reverse proxy (varnish, nginx).
  • Application cache (in-memory, Redis).
  • DB query cache.
  • Application-level memoization.

22.5 Application performance

  • Hot loops — минимизировать аллокации.
  • String concatenation — использовать builders (StringBuilder, strings.Builder).
  • Lazy initialization.
  • Object pooling.
  • Connection pooling.
  • Pagination, lazy loading.

22.6 HTTP performance

  • HTTP/2, HTTP/3.
  • Compression (gzip, brotli).
  • Caching headers (ETag, Cache-Control).
  • CDN.
  • Connection reuse (keep-alive).

22.7 Concurrency performance

  • Lock contention.
  • False sharing.
  • Atomic ops vs mutex.
  • Lock-free data structures.

22.8 Memory

  • Allocations — дорого, особенно с GC.
  • Object pooling.
  • Зачем нужна Escape analysis (Go) — стек дешевле кучи.
  • Memory leaks (event listeners, circular refs, неосвобождённые ресурсы).

23. SOFT SKILLS И РАБОТА SENIOR

23.1 Коммуникация

  • Pull, не push: спрашивай контекст вместо предположений.
  • Письменная коммуникация — RFC, ADR (Architecture Decision Records), design docs.
  • Asynchronous-first.
  • Уважительная конкретика.

23.2 Code review

  • Хвалить хорошее, не только критиковать.
  • "Why" важнее "what".
  • Различай: must-fix vs suggestion vs nitpick.
  • Не личное.
  • Если есть автоматизация (форматтеры, линтеры) — не комментируй стиль.
  • Спрашивай вопросы, не давай приказов.

23.3 Менторство

  • Не давать решения, задавать наводящие вопросы.
  • Pair programming.
  • Делегировать сложные задачи, не только простые.

23.4 Принятие решений

  • Two-way doors vs One-way doors (Bezos).
  • Reversible решения — принимай быстро.
  • Irreversible — основательно.
  • "Disagree and commit".
  • ADR (Architecture Decision Records) — фиксировать решения и контекст.

23.5 Управление техдолгом

  • Boy Scout Rule — оставь код лучше, чем нашёл.
  • Time boxing рефакторинга.
  • Не "всё переписать" — постепенно.
  • Strangler Fig pattern для legacy.

23.6 Оценка задач

  • Story points, t-shirt sizes.
  • 3-point estimation (optimistic/realistic/pessimistic).
  • Учитывать неизвестные.
  • Если "не знаю" — выделить spike/research.

23.7 Анти-выгорание

  • Sustainable pace.
  • Реалистичные сроки.
  • "Нет" — нормальное слово.
  • Отпуск без рабочего ноутбука.

23.8 On-call

  • Runbook'и.
  • Rotation.
  • Post-incident review без обвинения (blameless).

24. РОАДМАП НА 12 МЕСЯЦЕВ (PHP → PYTHON → GO)

Месяц 1-4: PHP Senior

  • Язык: PHP 8.x (typed properties, enums, readonly, attributes, fibers, match, named args).
  • Фреймворки: Symfony (или Laravel) — глубоко. Doctrine ORM, dependency injection container, event dispatcher.
  • Стандарты: PSR-1, 4, 7, 12, 15, 17, 18. Composer.
  • Тестирование: PHPUnit, Pest, Mockery, Codeception.
  • Качество: PHPStan/Psalm на максимальном уровне, PHP-CS-Fixer.
  • Производительность: OPcache, JIT, profiling через Blackfire/Xdebug.
  • Безопасность: SQL injection защита через PDO, password_hash, random_bytes, hash_equals.
  • Проекты для портфолио:
    1. REST API на Symfony с auth (JWT), документация OpenAPI, тесты, Docker.
    2. Event-driven сервис с RabbitMQ.
    3. Доработка существующего Symfony-проекта (luchmarket.ru) — добавить рефакторинг, тесты, CI.
  • Книги: "PHP Right Way", Fowler "Patterns of Enterprise Application Architecture", Evans "Domain-Driven Design".

Месяц 5-8: Python Senior

  • Язык: Python 3.11+ (type hints, dataclasses, asyncio, walrus, match-case, generics).
  • Фреймворки: FastAPI (предпочтительно для API), Django REST Framework (если работа с full-stack).
  • Async: asyncio глубоко, event loop, await/async, asyncpg, httpx, aiohttp.
  • Тестирование: pytest, pytest-asyncio, hypothesis, factory-boy, freezegun, responses.
  • Качество: mypy strict, ruff, black, bandit, pre-commit hooks.
  • Производительность: cProfile, py-spy, scalene. Numpy/Pandas если data.
  • Безопасность: bandit, safety, secrets module, password hashing (passlib + argon2).
  • Проекты:
    1. FastAPI сервис с PostgreSQL (asyncpg + SQLAlchemy 2.0 async), Alembic миграции, JWT, тесты, Dockerfile, docker-compose.
    2. Celery worker для фоновых задач, Redis как broker.
    3. Скрипт data processing (Pandas) с tests и mypy.
  • Книги: Ramalho "Fluent Python", Slatkin "Effective Python", "Architecture Patterns with Python" (Cosmic Python).

Месяц 9-12: Go Senior

  • Язык: Go 1.22+. Goroutines, channels, select, context, generics, errors wrapping.
  • Стандартная библиотека: net/http, database/sql, encoding/json, sync, io, bufio, os/exec, testing.
  • Идиомы: error handling (нет исключений), composition, interfaces small.
  • Фреймворки и тулы: chi/gin/echo для HTTP, sqlx/pgx, golang-migrate, viper, zap/zerolog/slog, testify.
  • Concurrency: глубоко — race detector, sync.Pool, errgroup, context cancellation, leaks goroutine.
  • gRPC: protobuf, codegen, streaming.
  • Качество: golangci-lint (включить все строгие линтеры), gosec.
  • Производительность: pprof, benchmarks (testing.B), escape analysis (-gcflags="-m"), trace tool.
  • Безопасность: crypto/rand, crypto/tls, gosec.
  • Проекты:
    1. HTTP API на стандартной библиотеке (или chi), PostgreSQL через pgx, миграции, тесты с testcontainers, structured logging, Prometheus metrics, OpenTelemetry tracing.
    2. gRPC сервис с генерацией кода из proto, mTLS.
    3. CLI tool с cobra.
  • Книги: Donovan/Kernighan "The Go Programming Language", Tsoukalos "Mastering Go", Cox-Buday "Concurrency in Go", Bodner "Learning Go".

Параллельно весь год

  • CS фундамент: алгоритмы по leetcode (medium), 3-5 задач в неделю.
  • System Design: ByteByteGo, Designing Data-Intensive Applications (DDIA) — обязательно.
  • Безопасность: PortSwigger Web Security Academy (бесплатно, отличная), OWASP ASVS читать целиком.
  • Linux: ежедневно использовать, ковырять /proc, strace, perf.
  • Сети: tcpdump, Wireshark — разбирать реальный трафик.
  • Один pet-project, который ты ведёшь весь год — туда складываешь применение новых знаний.
  • Открытый блог / Хабр — 1 статья в месяц о том, что выучил. Это и портфолио, и закрепление.
  • Контрибуции в open source — хотя бы 1-2 PR в популярный репозиторий.

Маяки прогресса

  • К концу 4 мес: можешь спроектировать и реализовать в одиночку production-ready API на PHP с тестами, CI/CD, мониторингом.
  • К концу 8 мес: то же на Python + асинхронный код, worker'ы, integration с message broker.
  • К концу 12 мес: то же на Go + concurrent processing, gRPC, profiling, ты можешь в любом из 3 языков выходить на собес как Senior.

25. ЛИТЕРАТУРА (МУСТ-РИДЫ для Senior)

Фундамент CS / System Design

  • "Designing Data-Intensive Applications" — Martin Kleppmann. Самая важная книга для senior backend.
  • "Database Internals" — Alex Petrov.
  • "Operating Systems: Three Easy Pieces" — Remzi Arpaci-Dusseau (бесплатно онлайн).
  • "Computer Systems: A Programmer's Perspective" — Bryant/O'Hallaron.
  • "TCP/IP Illustrated" — W. Richard Stevens.
  • "High Performance Browser Networking" — Ilya Grigorik (бесплатно онлайн).

Distributed Systems

  • "Designing Distributed Systems" — Brendan Burns.
  • "Distributed Systems" — Maarten van Steen, Andrew Tanenbaum (бесплатно онлайн).
  • Roberto Vitillo — "Understanding Distributed Systems".
  • Papers: Dynamo, MapReduce, Bigtable, Spanner, Raft, Kafka.

Архитектура

  • "Clean Architecture" — Robert Martin.
  • "Patterns of Enterprise Application Architecture" — Martin Fowler.
  • "Domain-Driven Design" — Eric Evans (synий кирпич).
  • "Implementing Domain-Driven Design" — Vaughn Vernon (красный).
  • "Building Microservices" — Sam Newman.
  • "Monolith to Microservices" — Sam Newman.
  • "Software Architecture: The Hard Parts" — Ford/Richards/Sadalage/Dehghani.
  • "Fundamentals of Software Architecture" — Mark Richards, Neal Ford.

Качество кода

  • "Refactoring" — Martin Fowler.
  • "Clean Code" — Robert Martin (спорная, но базовая).
  • "The Pragmatic Programmer" — Hunt, Thomas.
  • "Code Complete" — Steve McConnell.
  • "A Philosophy of Software Design" — John Ousterhout.

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

  • "The Web Application Hacker's Handbook" — Stuttard, Pinto.
  • "Real-World Cryptography" — David Wong.
  • "Cryptography Engineering" — Ferguson, Schneier, Kohno.
  • "Black Hat Python" — Justin Seitz.
  • "The Tangled Web" — Michał Zalewski.

SRE / DevOps

  • "Site Reliability Engineering" — Google (бесплатно).
  • "The Site Reliability Workbook" — Google (бесплатно).
  • "The Phoenix Project" — Gene Kim.
  • "The DevOps Handbook" — Gene Kim et al.
  • "Accelerate" — Forsgren, Humble, Kim.
  • "Continuous Delivery" — Humble, Farley.

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

  • "Test Driven Development" — Kent Beck.
  • "Growing Object-Oriented Software, Guided by Tests" — Freeman, Pryce.
  • "Working Effectively with Legacy Code" — Michael Feathers.
  • "Unit Testing Principles, Practices, and Patterns" — Vladimir Khorikov.

Soft Skills / Управление

  • "The Manager's Path" — Camille Fournier.
  • "Staff Engineer" — Will Larson.
  • "An Elegant Puzzle" — Will Larson.
  • "The Five Dysfunctions of a Team" — Patrick Lencioni.

Языко-специфичные

  • PHP: "Modern PHP" (Josh Lockhart), "PHP Objects, Patterns, and Practice" (Matt Zandstra).
  • Python: "Fluent Python" (Luciano Ramalho), "Effective Python" (Brett Slatkin), "Architecture Patterns with Python" (Cosmic Python).
  • Go: "The Go Programming Language" (Donovan/Kernighan), "Learning Go" (Jon Bodner), "Concurrency in Go" (Katherine Cox-Buday), "100 Go Mistakes and How to Avoid Them" (Teiva Harsanyi).

Бесплатные ресурсы

  • PortSwigger Web Security Academy — портал по AppSec, бесплатно.
  • High Scalability blog — кейсы архитектур.
  • InfoQ Architecture — статьи.
  • The Morning Paper — обзоры CS papers.
  • AWS Well-Architected Framework — официальный гайд.
  • Google SRE books — бесплатно.
  • OWASP Cheat Sheet Series — практические рекомендации.

ПРАКТИКА И САМОПРОВЕРКА — ЧТО ДОЛЖЕН УМЕТЬ SENIOR

Перед каждой темой, прежде чем читать дальше, ответь себе: смог бы я объяснить это junior'у на собеседовании за 5 минут?

Самопроверка по темам:

  1. Опиши, что происходит между моментом, когда ты ввёл google.com в браузер, и появлением страницы. От keystroke до rendering.
  2. Нарисуй на бумаге, как работает TCP handshake.
  3. Объясни, почему индекс ускоряет SELECT, но замедляет INSERT/UPDATE.
  4. Объясни разницу между процессом и потоком на примере fork/exec.
  5. Опиши, как работает GC и где он может быть проблемой.
  6. Что такое race condition? Приведи пример из реальной работы.
  7. Что такое idempotency и почему она критична в распределённых системах?
  8. Объясни CAP теорему через пример конкретной БД.
  9. Что значит "eventual consistency"? Где её нельзя использовать?
  10. Опиши OAuth Authorization Code flow с PKCE.
  11. Как защититься от SQL injection? Почему prepared statements решают проблему?
  12. Что такое 2PC и почему он плохо работает в реальных распределённых системах?
  13. Чем canary deployment отличается от blue/green?
  14. Что такое cardinality в Prometheus и почему высокая cardinality убивает БД метрик?
  15. Опиши, как ты будешь дебажить ситуацию "сервис тормозит в проде".

Если ты можешь свободно ответить на эти 15 вопросов — ты на уровне Senior. Если на 2-3 запинаешься — нужно ещё месяц подготовки.


ЗАКЛЮЧЕНИЕ

Senior — это не звание, а способ работы. Главное не в том, чтобы выучить каждую технологию из списка. Главное:

  1. Глубоко понимать фундамент (CS, сети, БД, ОС).
  2. Видеть систему целиком, а не отдельные функции.
  3. Принимать решения с учётом trade-off'ов, а не "потому что так модно".
  4. Брать ответственность за прод, а не только за свои PR'ы.
  5. Учиться постоянно. Технологии меняются, фундамент остаётся.

Иди по роадмапу. Не пытайся выучить всё сразу. Один день — одна концепция. Месяц — один большой проект. Год — один новый язык до production-уровня.

Удачи.