Перейти к содержимому

Глоссарий

Рабочий словарь пути: каждый термин дан одной-двумя строками — вспомнить суть на собеседовании, но не вместо глав. По ключевым терминам — ссылки на разборы «под капотом».

Event Loop — механизм исполнения асинхронного кода: сначала весь синхронный код, потом все микрозадачи (промисы), потом одна макрозадача (таймеры, I/O), и по кругу. См. в браузере и в Node.js.

Замыкание (closure) — функция, помнящая переменные из области, где была создана, даже после выхода из неё. Основа приватности и фабрик в JS. См. замыкания.

Контекст исполнения — окружение выполнения кода: лексическая область, this, переменные. Стек таких контекстов образует стек вызовов. См. контекст исполнения.

Прототипы — модель наследования в JS: объект ссылается на объект-прототип и наследует его свойства. Классы — синтаксический сахар над ними. См. прототипы.

this — значение, определяемое способом вызова функции, а не местом объявления. Стрелочные функции его не имеют — берут из внешнего окружения..

Promise — объект-представление результата асинхронной операции: pending → fulfilled или rejected. Состояние меняется один раз и необратимо. См. Promise в глубину.

async/await — синтаксис поверх промисов: await приостанавливает функцию, не блокируя поток; ошибки ловятся через try/catch..

Дженерики (generics) — параметризация типов: функция или класс работает с T, сохраняя связь типов «вход → выход». Главный инструмент переиспользования без any. См. дженерики.

Discriminated union — объединение типов с общим литеральным полем-тегом (status: 'ok' | 'error'), по которому TS сужает тип. Паттерн результатов операций.

Branded types — типы-марки поверх примитивов (UserId вместо string), не дающие перепутать идентификаторы..

Virtual DOM — лёгкое дерево-описание UI в памяти. React сравнивает его со снимком и применяет минимальные изменения к реальному DOM. См. рендеринг в React.

Reconciliation — алгоритм сравнения двух деревьев Virtual DOM. Список из key-пропсов идентифицирует элементы — без ключей состояние «прыгает» между соседями.

Хук (hook) — функция, подключающая компонент к возможностям React (состояние, эффекты, контекст). Работает только на верхнем уровне компонента. См. хуки в глубину.

useState / useEffect — базовая пара хуков: локальное состояние и побочные эффекты с жизненным циклом зависимостей. useEffect — для синхронизации с внешними системами.

Мемоизация — кэширование результата по входным данным: useMemo, useCallback, React.memo. Убирает лишние перерендеры, но не бесплатна. См. memo, ref, reducer.

Контекст (Context) — канал передачи данных вниз по дереву без пропс-дриллинга. Меняется значение — перерендериваются все потребители.

Server Components (RSC) — компоненты, исполняющиеся только на сервере: в бандл не попадают, могут обращаться к БД напрямую. Основа App Router. См. Server Components.

Гидратация (hydration) — на клиенте React «оживляет» серверный HTML, навешивая обработчики; до неё страница не интерактивна.

SSR / SSG / ISR — стратегии рендеринга: на каждый запрос, при сборке, и гибрид (статика с фоновым обновлением). Выбор — компромисс свежести и скорости. См. стратегии рендеринга.

Server Actions — асинхронные функции, исполняющиеся на сервере и вызываемые из компонентов. Мутации + ревалидация кэша из коробки. См. Server Actions.

Streaming — отправка HTML частями по мере готовности: медленные участки в <Suspense> не блокируют первый байт..

CJS / ESM — два формата модулей Node.js: require/module.exports и import/export. ESM — современный стандарт, экосистема на переходе. См. модули CJS и ESM.

Стримы (streams) — потоковая обработка данных по кускам вместо загрузки всего в память. Паттерн для файлов, сети и больших ответов. См. стримы и backpressure.

Backpressure — быстрый производитель замедляется, если потребитель не успевает. Без неё буфер растёт и сервер падает по памяти.

Инверсия управления (IoC) / DI — зависимости не создаются внутри класса, а передаются снаружи через контейнер. Основа NestJS и тестируемости. См. фундамент NestJS.

Middleware / Guard / Interceptor / Pipe — слои конвейера запроса в NestJS: мидлвары — до роутинга, гварды — авторизация, интерсепторы — вокруг обработчика, пайпы — валидация.

REST — стиль API поверх HTTP: ресурсы + методы (GET/POST/PUT/DELETE), коды состояния, версии. См. проектирование REST API.

Идемпотентность — повторный вызов даёт тот же результат, что и первый. Делает ретраи безопасными — ключевое свойство для API и обработчиков очередей.

WebSocket — полнодуплексное соединение поверх TCP, инициируемое HTTP-upgrade: сервер и клиент шлют сообщения в любой момент. Чаты, коллаборативность, live-данные. См. асинхронность и реальное время.

SSE (Server-Sent Events) — односторонний поток сервер → клиент по обычному HTTP: клиент держит соединение и получает события. Проще WebSocket, автоматический реконнект. См. async-realtime.

gRPC / GraphQL — альтернативные протоколы: gRPC — бинарный RPC на protobuf со стримингом, GraphQL — клиент сам описывает нужные поля.

Индекс (B-tree) — структура, ускоряющая поиск по колонке. В PostgreSQL — сбалансированное дерево; чем левее условие в запросе, тем лучше индекс используется.

ACID — атомарность, согласованность, изолированность, долговечность транзакции. База гарантирует: частично применённых изменений не бывает. См. транзакции PostgreSQL.

Уровни изоляции — READ COMMITTED, REPEATABLE READ, SERIALIZABLE: насколько транзакция видит чужие изменения. Ниже уровень — выше параллелизм и больше аномалий.

MVCC — многоверсионность в PostgreSQL: каждая транзакция видит снимок данных, читатели не блокируют писателей. Отсюда bloat и необходимость VACUUM.

Репликация — копирование данных с primary на replica. Синхронная — надёжнее, асинхронная — быстрее, но реплика отстаёт (replication lag).

Шардирование — горизонтальное разделение данных по узлам по ключу. Спасает от роста таблицы, усложняет джойны и маршрутизацию.

N+1 — классическая проблема ORM: запрос за списком + N запросов за связями каждой строки. Лечится пакетной загрузкой. См. ORM: Prisma и Drizzle.

Cache-Aside — схема кэширования в Redis: читаешь из кэша → промах → читаешь из БД и кладёшь в кэш с TTL. Самый частый паттерн. См. паттерны Redis.

Брокер сообщений — посредник асинхронного обмена событиями (RabbitMQ, Kafka, NATS): продюсер не знает о консьюмерах, очередь сглаживает пики.

Outbox — паттерн надёжной доставки событий: сообщение пишется в таблицу outbox в той же транзакции, что и изменение данных, а отдельный процесс отправляет его в брокер. Иначе «БД записала, брокер лёг» теряет события. См. outbox и надёжность.

Retry — повтор неудачной операции с задержкой (exponential backoff + jitter). Ретраят только временные сбои; после N попыток сообщение уходит в DLQ. См. messaging и outbox.

DLQ (Dead Letter Queue) — очередь «отбракованных» сообщений: после N неудачных ретраев сообщение уходит сюда, чтобы не блокировать очередь и можно было разобрать вручную. В RabbitMQ донор настраивается через x-dead-letter-exchange (DLX — dead-letter exchange).

WAL (Write-Ahead Log) — журнал предзаписи: PostgreSQL сначала пишет изменение в WAL, потом применяет к данным. Даёт надёжность при крэше и, при непрерывном WAL archiving (архивировании), базу для PITR.

PITR (Point-In-Time Recovery) — восстановление БД на произвольный момент времени: базовая копия + архив WAL. Останавливает и случайный DELETE без WHERE. См. бэкапы PostgreSQL.

RPO / RTO — целевые показатели восстановления: RPO (Recovery Point Objective) — сколько данных допустимо потерять во времени, RTO (Recovery Time Objective) — как быстро система должна вернуться в строй. Принимает бизнес, а не инженер. См. управление инцидентами.

OWASP Top 10 — десятка самых критичных уязвимостей веб-приложений. Проверочный список перед продом. См. безопасность веб-приложений.

XSS (Cross-Site Scripting) — внедрение вредоносного скрипта через неэкранированный ввод. Лечится экранированием, sanitizing и CSP. См. web-security.

CSRF (Cross-Site Request Forgery) — подделка запроса от лица авторизованного пользователя через чужой сайт. Лечится CSRF-токенами и SameSite-куками.

SQL-инъекция — внедрение SQL-кода через строковый ввод. Лечится только параметризованными запросами — конкатенация запрещена всегда.

JWT (JSON Web Token) — подписанный токен с claims: header.payload.signature. Это носитель данных, а не шифрование — payload читается кем угодно.

OAuth 2.0 / OIDC — протокол делегированного доступа: приложение действует от имени пользователя через токены; OIDC добавляет идентификацию (id_token). См. аутентификация: JWT и OAuth.

TLS / mTLS — шифрование трафика сертификатами; в mTLS обе стороны предъявляют сертификат — основа сервисной аутентификации внутри сети.

Секрет — пароль, токен, ключ: всё, что даёт доступ. Не хранится в коде и git, живёт в менеджере секретов с аудитом. См. управление секретами.

Supply Chain Security — защита цепочки поставки ПО: зависимости, базовые образы, артефакты сборки. Пиннинг версий, сканирование, подпись артефактов. См. безопасность цепочки поставок.

SBOM (Software Bill of Materials) — «опись» состава ПО: все зависимости с версиями в машиночитаемом виде. Отвечает на вопрос «уязвимы ли мы к очередной дыре в библиотеке?» за минуты. См. supply-chain-security.

SLSA (Supply-chain Levels for Software Artifacts) — уровни (1–3; условный «0» — никаких гарантий) зрелости защиты сборки: от «собрано как-нибудь» до изолированной билд-системы с верифицируемым provenance.

Provenance — криптографически подписанное описание того, как артефакт собран: исходники, коммит, команды сборки. Без него легитимный релиз не отличить от подменённого. См. supply-chain-security.

Cosign — инструмент подписи и верификации контейнерных образов (Sigstore): подписал в CI — кластер отклоняет неподписанное. См. supply-chain-security.

systemd — система инициализации и управления сервисами Linux: юниты, зависимости, автоперезапуск, журнал. Сервисы — unit-файлы, а не «запуск в screen». См. systemd и сети.

Права Unix (chmod/chown) — модель rwx для владельца, группы и остальных. Ключи — 600, конфиги — 640. Ошибка прав — причина половины «не работает» на Linux.

SSH / туннель — удалённый доступ по ключам и форвардинг портов (-L, -R). Основной канал работы с инфраструктурой.

Namespace / cgroups — технологии изоляции контейнера: namespace отделяют сеть, процессы, ФС; cgroups ограничивают CPU и память. Контейнер — процесс с изоляцией, не мини-ВМ. См. Docker в глубину.

Multi-stage build — сборка в стадии: тяжёлые тулчейны остаются в промежуточной, в финальный образ попадает только артефакт. Сотни мегабайт экономии. См. Docker в глубину.

Healthcheck — проверка живости сервиса изнутри контейнера: оркестратор по ней решает, перезапускать ли процесс и пускать ли трафик.

Docker Compose — декларативное описание нескольких контейнеров (app + БД + кэш) и их сети/томов. Для локальной среды и малых деплоев. См. Compose в проде.

Под (Pod) — минимальная единица Kubernetes: один или несколько контейнеров с общим сетевым namespace и томами. Поды смертны — управляет ими Deployment. См. фундаменталы K8s.

Deployment — контроллер желаемого состояния: N реплик подов, стратегия обновления, откат на предыдущую ревизию.

Service / Ingress — Service — стабильная точка входа (VIP/DNS) на набор подов; Ingress — HTTP-маршрутизация снаружи кластера, обычно с TLS..

ConfigMap / Secret — внешние конфигурации и секреты, монтируемые в поды отдельно от образа. Нативные Secrets — только base64, не шифрование. См. secrets-management.

HPA (Horizontal Pod Autoscaler) — автомасштабирование числа подов по метрикам (CPU, кастомные). Реагирует на нагрузку, а не на расписание.

IaC (Infrastructure as Code) — инфраструктура описана кодом: версионируется, ревьюится, воспроизводится с нуля. Terraform — декларативный пример, Ansible — императивный. См. Terraform.

Пайплайн (CI/CD) — автоматизированная цепочка: lint → тесты → сборка → деплой. Чем раньше этап, тем быстрее он должен быть. См. GitHub Actions и GitLab CI / GitOps.

GitOps — деплой из git как единственного источника правды: агент в кластере сам приводит состояние к манифестам из репозитория. Откат = откат коммита.

Логи / Метрики / Трейсы — три столба наблюдаемости: события (логи), числа во времени (метрики), путь запроса сквозь сервисы (трейсы). Без всех трёх инциденты разбираются вслепую. См. логирование и метрики.

Prometheus / Grafana — сбор и хранение метрик + визуализация дашбордов. Prometheus тянет метрики по pull-модели, алерты строятся на PromQL-запросах.

SLI / SLO / SLA — индикатор (что меряем), цель (p95 < 300 мс за 30 дней), соглашение (что платим за нарушение). SLO — инженерный инструмент, SLA — юридический.

Canary / Blue-Green деплой — стратегии безопасного выката: canary — 1% трафика на новую версию с постепенным ростом; blue-green — две среды с мгновенным переключением.

SOPS (Secrets OPerationS) — редактор секретов поверх YAML/JSON с шифрованием отдельных полей через Age/KMS/PGP. Секреты живут в git в зашифрованном виде — диффы, ревью, история. См. управление секретами.

Vault (HashiCorp Vault) — централизованный сервис секретов с динамической выдачей: секрет с TTL, аудит, ротация. См. secrets-management.

External Secrets Operator — мост между внешним хранилищем секретов (Vault, облачные KMS) и нативными Secret Kubernetes: синхронизация в кластер, в git секреты не попадают никогда. См. secrets-management.

Горизонтальное / вертикальное масштабирование — больше машин против более мощной машины. Горизонтальное предпочтительнее: дешевле, устойчивее к отказу узла. См. фундаменталы системного дизайна.

CAP-теорема — распределённая система гарантирует два из трёх: согласованность (C), доступность (A), устойчивость к разделению сети (P). P неизбежен — выбираем между C и A.

Балансировщик нагрузки (LB) — точка распределения трафика по инстансам: L4 (TCP, быстро) или L7 (HTTP, умно). Терминирует TLS, проверяет healthcheck’и. См. nginx и деплой.

Circuit Breaker — «прерыватель»: если зависимость систематически падает, вызовы прекращаются на время (fast fail), чтобы не утащить за собой весь сервис. См. паттерны системного дизайна.

Монорепозиторий (monorepo) — много пакетов и приложений в одном репозитории: атомарные рефакторинги сквозь проекты, единая история. Требует инструментария (Turborepo, Nx). См. монорепозитории и DX.

Affected builds — сборка и тесты только пакетов, затронутых изменением (по графу зависимостей от diff’а). Превращает CI монорепы из часов в минуты. См. monorepos-dx.

Инцидент (incident) — событие, ухудшающее работу сервиса для пользователей. Управляется по процессу: детект → эскалация → митигация → разбор → действия. См. управление инцидентами.

Postmortem — разбор инцидента после стабилизации: хронология, коренная причина, action items с владельцами. Без обвинений (blameless) — культура, а не бюрократия. См. incident-management.

Правило 3-2-1 для бэкапов — минимум 3 копии данных, на 2 разных носителях, 1 вне основной площадки. И бэкап, который не восстанавливали, — не бэкап. См. бэкапы PostgreSQL.