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

Глоссарий

Термины, которые встречаются в ответах. В тексте они подчёркнуты пунктиром и открываются по нажатию.

.editorconfig

Файл настроек в репозитории, общий для IDE и сборки: отступы, стиль кода и важность правил анализаторов (dotnet_diagnostic.CA2016.severity = error). Действует на папку, где лежит, и вложенные.

.NET Core (современный .NET)

Кроссплатформенная реализация .NET с открытым кодом, появилась в 2016 году. С версии 5 называется просто .NET и выходит каждый ноябрь.

.NET Framework

Исходная реализация .NET только для Windows, входит в состав ОС. Последняя версия — 4.8.1; поддерживается, пока поддерживается Windows, но новых возможностей не получает.

.NET Hosting Bundle

Установщик для Windows-сервера с IIS: ставит рантайм .NET, ASP.NET Core и ASP.NET Core Module. Без него IIS не умеет запускать приложения ASP.NET Core.

.NET SDK

Набор для разработки: компилятор, MSBuild, шаблоны и команда dotnet с build, test, publish. Рантайм нужен только для запуска готового приложения, а версию SDK для репозитория фиксируют в global.json.

.NET Standard

Формальная спецификация API, доступных в нескольких реализациях .NET. Последняя версия — 2.1; netstandard2.0 — последняя, которую поддерживает .NET Framework.

«Банда четырёх» (Gang of Four, GoF)

Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — авторы книги «Design Patterns» (1994), где описаны 23 классических паттерна в трёх группах.

Абсолютное истечение (absolute expiration)

Запись удаляется из кеша в заданный момент или через заданное время после добавления, сколько бы её ни читали.

Абстрактная фабрика (Abstract Factory)

Порождающий паттерн: интерфейс с методами создания целого семейства согласованных объектов без указания их конкретных классов. Пример в .NET — DbProviderFactory.

Абстрактный класс (abstract class)

Класс с модификатором abstract: создать его экземпляр нельзя, только унаследоваться. Может содержать поля, конструкторы, готовые методы и абстрактные члены без тела, которые наследник обязан реализовать.

Абстракция (abstraction)

Принцип ООП: наружу виден только существенный для клиента контракт — что объект умеет, а не как он это делает. В C# абстракцию задают интерфейсы и абстрактные классы.

Автокоммит (autocommit)

Режим, в котором каждый оператор — отдельная транзакция и фиксируется сразу после выполнения. Режим по умолчанию в SQL Server, SqlClient и PostgreSQL.

Авторизация (authorization)

Решение, что разрешено уже известному пользователю: какой endpoint вызвать, какой документ открыть. Отказ вошедшему пользователю — 403, невошедшему — 401.

Авторизация по ресурсу (resource-based authorization)

Проверка доступа к конкретному объекту — документу, заявке — после его загрузки. В ASP.NET Core выполняется в коде вызовом IAuthorizationService.AuthorizeAsync(user, resource, policy).

Агрегат (aggregate)

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

Агрегатная функция

Функция, которая сворачивает набор строк в одно значение: COUNT, SUM, AVG, MIN, MAX. Все они, кроме COUNT(*), пропускают NULL.

Адаптер (Adapter)

Структурный паттерн: обёртка реализует интерфейс, который ждёт клиент, и переводит вызовы в API другого объекта с несовместимым интерфейсом.

Адаптер платформы (platform adapter)

Слой, через который NestJS работает с HTTP-библиотекой: @nestjs/platform-express (по умолчанию) или @nestjs/platform-fastify. Код на декораторах NestJS от выбора адаптера не зависит.

Амортизированная сложность (amortized complexity)

Средняя стоимость операции на длинной серии вызовов. List<T>.Add иногда копирует весь массив за O(n), но в среднем стоит O(1), потому что ёмкость растёт удвоением.

Анализ null-состояния (null-state analysis)

Статический анализ компилятора, который отслеживает для каждого выражения состояние not-null или maybe-null с учётом проверок, присваиваний и атрибутов вроде [NotNullWhen].

Анализатор Roslyn (Roslyn analyzer)

Расширение компилятора C#, которое проверяет код во время сборки и в IDE и выдаёт диагностики вроде CA2016 или IDE0161. Анализаторы качества кода встроены в .NET SDK с .NET 5.

Анемичная модель предметной области (anemic domain model)

Модель, в которой сущности — только данные со свойствами, а вся логика и проверки живут в сервисах. Фаулер считает её антипаттерном; она не связана с выбором слоёной или чистой архитектуры.

Аннотация типа (type hint)

Указание типа параметра, переменной или результата функции: item_id: int, -> dict. Интерпретатор её не проверяет, но её читают mypy, IDE и библиотеки вроде FastAPI и Pydantic.

Аномалии изменения (update anomalies)

Ошибки, которые возникают, когда один факт хранится в нескольких строках: при обновлении меняют не все копии, при удалении теряют лишние данные, а при вставке не могут завести запись без связанной.

Анонимный метод (anonymous method)

Процедура или функция без имени, которую можно присвоить переменной типа reference to procedure или передать параметром. Это замыкание: оно захватывает внешние переменные (не значения) и продлевает им жизнь. Появились в Delphi 2009.

Антипаттерн (anti-pattern)

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

Антисоединение (anti semi join)

Соединение, которое возвращает строки левой таблицы, не имеющие ни одной пары справа. В SQL его пишут через NOT EXISTS; NOT IN даёт тот же результат, только если в подзапросе нет NULL.

Артефакт сборки (build artifact)

Результат конвейера, который сохраняют и выкладывают: архив с результатом dotnet publish, NuGet-пакет или образ контейнера. Его собирают один раз и продвигают по окружениям без пересборки.

Асимптотическая сложность (O-нотация)

Оценка того, как растёт время или память операции с ростом числа элементов n. O(1) — не зависит от n, O(log n) — растёт очень медленно, O(n) — пропорционально n.

Асинхронный запрос-ответ (asynchronous request-reply)

Паттерн для долгих операций по HTTP: сервер сразу отвечает 202 Accepted с адресом статуса, а клиент опрашивает его или получает уведомление, когда результат готов.

Асинхронный поток (async stream)

Последовательность IAsyncEnumerable<T>, элементы которой приходят асинхронно. Создаётся методом async с yield return, читается через await foreach; появилась в C# 8.

Атомарная операция

Операция, которая выполняется целиком: другие потоки видят либо состояние до неё, либо после, но не промежуточное. В .NET атомарны чтение и запись выровненных значений до размера указателя и методы Interlocked.

Атрибут [ApiController]

Атрибут контроллера, который включает поведение для API: обязательную маршрутизацию атрибутами, автоматический ответ 400 при ошибках валидации, вывод источников параметров и ProblemDetails для кодов ошибок.

Аутентификация (authentication)

Проверка того, кто делает запрос: по паролю, сертификату, учётной записи Windows или токену. В ASP.NET Core её результат — ClaimsPrincipal в HttpContext.User.

Балансировщик нагрузки (load balancer)

Компонент, который распределяет входящий трафик между экземплярами сервиса и исключает неисправные. L4 работает с TCP/UDP-соединениями, L7 — с HTTP-запросами.

Барьер памяти (memory barrier)

Инструкция, которая запрещает компилятору и процессору переносить обращения к памяти через неё. Полный барьер в .NET дают Interlocked и Thread.MemoryBarrier.

Безопасная точка (safe point)

Место в коде, где рантайм точно знает, где лежат ссылки, и может остановить поток для сборки. Блокирующая сборка ждёт, пока потоки дойдут до таких точек; поток в нативном коде не останавливают, но вернуться в управляемый код до конца сборки он не сможет.

Безопасный метод HTTP

Метод, который по семантике не меняет состояние сервера: GET, HEAD, OPTIONS, TRACE. Такие запросы можно кешировать и повторять без последствий.

Блок @defer (deferrable views)

Блок шаблона, код которого загружается отдельным чанком по триггеру: появление в области видимости, простой браузера, взаимодействие. Блоки @placeholder и @loading показывают заглушку. Появился в Angular 17.

Блокировка Sch-M (schema modification)

Блокировка, которую берёт DDL при изменении объекта. Несовместима ни с одной другой блокировкой, поэтому пока она ждёт или удерживается, все запросы к таблице стоят.

Блокирующий ресурс (render-blocking resource)

Ресурс, без которого браузер не начнёт отрисовку: стили в head и синхронные скрипты. Скрипты с defer, async и модули не блокируют.

Блочная модель (box model)

Представление каждого элемента в CSS как прямоугольника из содержимого, внутреннего отступа (padding), рамки (border) и внешнего отступа (margin). Что входит в width, задаёт box-sizing.

Божественный объект (God object)

Антипаттерн: один класс знает и делает слишком много — проверки, расчёты, доступ к данным, интеграции. Его меняют в каждой задаче, и он тянет за собой десятки зависимостей.

Большой ком грязи (Big Ball of Mud)

Система без различимой архитектуры, выросшая из сиюминутных решений. Описана Брайаном Футом и Джозефом Йодером в 1997 году.

Брокер сообщений (message broker)

Промежуточный сервер, который принимает сообщения от отправителей, хранит их и доставляет получателям. Отправителю не нужно, чтобы получатель был доступен в момент отправки. Примеры — RabbitMQ, Apache Kafka, Azure Service Bus.

Быстрая сортировка (quicksort)

Сортировка, которая выбирает опорный элемент, раскладывает остальные на меньшие и большие и рекурсивно сортирует части. В среднем O(n log n) на месте, в худшем O(n²); нестабильная.

Версионирование строк (row versioning)

Механизм, при котором изменение строки сохраняет её прежнюю зафиксированную версию. Читатели берут подходящую версию вместо ожидания блокировок; на нём построены RCSI и SNAPSHOT.

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

Поддержка нескольких версий контракта одновременно, чтобы ломающие изменения не затрагивали старых клиентов. Версию передают в пути, query-параметре, заголовке или media type.

Ветка (branch)

Подвижный указатель на коммит. При новом коммите текущая ветка автоматически сдвигается на него, поэтому создать ветку — значит записать один хеш, а не копировать файлы.

Ветка удалённого отслеживания (remote-tracking branch)

Локальная ссылка вида origin/main, которая запоминает, где была ветка на сервере при последнем fetch. Вы не коммитите в неё напрямую: её обновляют fetch и pull.

Взаимоблокировка (deadlock)

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

Взрыв ролей (role explosion)

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

Видимость членов класса в Delphi

Разделы private, protected, public и published. private и protected в Delphi видны всему модулю, поэтому для доступа только из класса есть strict private и strict protected, а published дополнительно генерирует RTTI.

Виртуальная прокрутка (virtual scrolling)

Приём, при котором в DOM есть только видимые строки длинного списка, а остальные подставляются при прокрутке. В Angular — cdk-virtual-scroll-viewport из CDK или встроенный режим таблиц библиотек компонентов.

Виртуальное окружение (venv)

Каталог со ссылкой на интерпретатор Python и собственным набором пакетов. Изолирует зависимости одного проекта от системы и других проектов.

Виртуальный метод (virtual method)

Метод с модификатором virtual или abstract, который наследник может переопределить через override. Какая реализация вызовется, решает реальный тип объекта во время выполнения.

Витрина данных (data mart)

Отдельная база или схема под отчёты одного направления: продажи, склад, финансы. Её наполняет ETL, а структура заточена под агрегаты, а не под запись.

Включённые колонки (INCLUDE)

Неключевые колонки некластерного индекса, которые хранятся только на листовом уровне. Они не сортируются и не участвуют в поиске, зато покрывают запрос, не расширяя ключ.

Владелец компонента (Owner)

Компонент, переданный в конструктор TComponent.Create(AOwner). Владелец хранит список своих компонентов и освобождает их в своём деструкторе, поэтому кнопки формы освобождаются вместе с формой.

Владелец компонента (Owner)

Компонент, переданный в конструктор Create(AOwner). Хранит список своих компонентов в Components и освобождает их при своём уничтожении.

Вложенные группы

Группы AD, входящие в другие группы. Член вложенной группы получает права внешней; Windows-токен и атрибут tokenGroups уже содержат такое транзитивное членство, а memberOf — только прямое.

Внедрение зависимостей (dependency injection, DI)

Приём, при котором объект получает свои зависимости снаружи, обычно через конструктор, а не создаёт их сам. В ASP.NET Core зависимости создаёт и передаёт встроенный контейнер.

Внедрение через конструктор (constructor injection)

Способ DI, при котором зависимости приходят параметрами конструктора. Все зависимости класса видны в его сигнатуре, а объект не может существовать без них.

Внедрение через свойства (property injection)

Способ DI, при котором контейнер присваивает зависимости публичным свойствам уже созданного объекта. Встроенный контейнер .NET его не поддерживает, Autofac — поддерживает.

Внешнее соединение (LEFT, RIGHT, FULL JOIN)

Соединение, которое сохраняет строки одной или обеих таблиц даже без пары и подставляет NULL вместо колонок другой стороны. LEFT сохраняет левую таблицу, RIGHT — правую, FULL — обе.

Внутреннее соединение (INNER JOIN)

Соединение, которое возвращает только пары строк двух таблиц, для которых выполнилось условие в ON. Строки без пары в результат не попадают.

Внутрипроцессный COM-сервер (in-process COM server)

COM-объект в DLL, который загружается в процесс клиента. Поэтому его разрядность должна совпадать с разрядностью клиента, в отличие от внепроцессного сервера в EXE.

Водяной знак загрузки (watermark)

Сохранённая граница последней загрузки: максимальная rowversion или дата изменения. Следующий запуск читает только строки за этой границей — так строится инкрементальная загрузка.

Временная мёртвая зона (TDZ)

Участок от начала блока до объявления let, const или class, где переменная уже существует, но обращение к ней выбрасывает ReferenceError.

Временный доступ (just-in-time access)

Права, которые действуют ограниченное время: выдаются с датой окончания или активируются по запросу на несколько часов. Пример — Microsoft Entra Privileged Identity Management.

Временный сбой (transient fault)

Ошибка, которая проходит сама через короткое время: обрыв сети, перезапуск сервиса, ответ 503 или 429. Такие ошибки имеет смысл повторять с паузой.

Время жизни сервиса (service lifetime)

Правило, по которому контейнер решает, когда создать новый экземпляр сервиса и когда его освободить. В .NET три варианта — Transient, Scoped и Singleton.

Встраиваемая табличная функция (inline TVF)

Функция вида RETURNS TABLE AS RETURN (SELECT ...). Оптимизатор подставляет её текст в запрос, как параметризованное представление, и строит общий план.

Встроенный control flow (@if, @for, @switch)

Синтаксис шаблонов Angular 17+ для условий и циклов вместо директив *ngIf, *ngFor и ngSwitch. В @for обязателен track, есть блок @empty; старые директивы deprecated с v20.

Выделение памяти запросу (memory grant)

Память, которую запрос резервирует до старта под сортировки и хеш-таблицы, исходя из оценки числа строк. Завышенная оценка заставляет другие запросы ждать памяти, заниженная ведёт к сбросу данных в tempdb (spill).

Выражение with (with expression)

Создаёт копию record или структуры с изменёнными свойствами: p with { X = 1 }. Копия поверхностная: ссылочные поля указывают на те же объекты.

Выровненный индекс (aligned index)

Индекс, секционированный так же, как его таблица: та же функция или функция с теми же границами и колонкой. Только с выровненными индексами возможно переключение секций.

Вычисляемая колонка (computed column)

Колонка, значение которой задано выражением от других колонок. Детерминированную вычисляемую колонку можно проиндексировать, и оптимизатор использует индекс для запросов с тем же выражением.

Генератор (generator)

Функция с yield: её вызов возвращает итератор, который выполняет тело по частям, до очередного yield. Значения вычисляются лениво, по одному.

Генератор исходного кода (source generator)

Расширение компилятора Roslyn, которое во время сборки добавляет в проект сгенерированный код. Заменяет рефлексию в рантайме: так работают [LoggerMessage], [OptionsValidator] и [GeneratedRegex].

Генератор коллекции (comprehension)

Выражение, которое строит список, словарь или множество из итерируемого объекта с фильтром: [x * x for x in items if x > 0]. Аналог Select и Where из LINQ.

Гидратация (hydration)

Восстановление приложения в браузере поверх HTML, отрисованного на сервере (SSR): Angular переиспользует готовый DOM, а не строит его заново. Стабильна с v17, инкрементальная — с v20.

Гидратация (hydration)

Привязка React к HTML, пришедшему с сервера: React строит дерево компонентов и подключает обработчики событий к готовой разметке. Первый клиентский рендер должен совпасть с HTML сервера.

Гистограмма статистики (histogram)

Часть статистики: до 200 шагов по значениям первой колонки. Для каждого шага известно, сколько строк равно его границе и сколько лежит внутри диапазона.

Главный поток VCL

Поток, в котором создаются окна и работает цикл сообщений приложения. VCL не потокобезопасна, поэтому контролы меняют только из него.

Голодание пула потоков (thread pool starvation)

Состояние, когда у пула нет свободных потоков для новой работы, потому что существующие заблокированы. Проявляется ростом задержек при низкой загрузке CPU.

Горизонт xmin (xmin horizon)

Номер самой старой транзакции, чей снимок ещё может понадобиться: открытой транзакции, слота репликации или реплики. VACUUM не удаляет версии строк новее горизонта, поэтому одна долгая транзакция вызывает bloat во всей базе.

Горизонтальное масштабирование (scale out)

Рост пропускной способности добавлением экземпляров сервиса, а не усилением одного сервера (вертикальное, scale up). Требует, чтобы экземпляры не хранили состояние у себя.

Горячий путь (hot path)

Участок кода, который выполняется очень часто и заметно влияет на производительность. Только на нём оправданы микрооптимизации вроде ValueTask.

Граф (graph)

Набор вершин и рёбер между ними: города и дороги, задачи и зависимости, пользователи и связи. Рёбра бывают направленными и взвешенными; готового типа графа в .NET нет.

Граф дедлока (deadlock graph)

XML-отчёт о дедлоке: участники, удерживаемые и ожидаемые ресурсы, режимы блокировок, тексты запросов и жертва. В SQL Server его по умолчанию пишет сессия Extended Events system_health (событие xml_deadlock_report).

Группа доступности Always On (availability group)

Механизм высокой доступности SQL Server: первичная реплика отправляет журнал вторичным, и при сбое одна из них становится первичной. В Enterprise вторичные реплики можно открыть для чтения.

Группа маршрутов (route group)

Набор эндпоинтов Minimal API с общим префиксом, созданный через MapGroup (.NET 7+). Фильтры, авторизация и метаданные, заданные группе, применяются ко всем её эндпоинтам.

Группа потребителей (consumer group)

Набор потребителей Kafka с общим group.id, которые вместе читают топик. Партиции делятся между участниками, а позиция чтения у группы общая.

Группа SignalR

Именованный набор соединений, которым можно отправить сообщение одним вызовом Clients.Group(name). Хранится в памяти и не сохраняется при переподключении.

Грязное чтение (dirty read)

Аномалия, при которой транзакция читает изменения другой транзакции, ещё не зафиксированные и способные откатиться. Возможно только на READ UNCOMMITTED, в том числе через NOLOCK.

Два указателя (two pointers)

Приём, при котором два индекса движутся по массиву навстречу друг другу или в одну сторону. Решает задачи на отсортированных массивах за O(n) и O(1) памяти: пара с заданной суммой, палиндром, слияние.

Двоичная куча (binary heap)

Дерево, хранящееся в массиве, где каждый родитель не больше своих потомков, поэтому минимум лежит в корне. Вставка и извлечение минимума — O(log n). В .NET на куче построен PriorityQueue<TElement, TPriority>.

Двоичное дерево поиска (binary search tree)

Дерево, где у каждого узла ключи слева меньше, а справа больше. Поиск, вставка и удаление стоят O(высоты): O(log n) у сбалансированного дерева и O(n) у вырожденного.

Двойная запись (dual write)

Запись одного изменения в две системы без общей транзакции, например в базу и в брокер. При сбое между записями системы расходятся: событие теряется или описывает откатившееся изменение.

Двухфазный коммит (two-phase commit, 2PC)

Протокол распределённой транзакции: координатор сначала спрашивает всех участников о готовности, затем рассылает commit или rollback. Участники держат блокировки до решения координатора.

Девиртуализация (devirtualization)

Оптимизация JIT: виртуальный или интерфейсный вызов заменяется прямым, если точный тип известен, например у sealed-класса. После этого метод можно встроить (inline).

Дедупликация сообщений

Отбрасывание повторно доставленных сообщений по их id или бизнес-ключу. Обычно это таблица обработанных id с уникальным ключом, которая пополняется в одной транзакции с изменением данных.

Декоратор (decorator)

Паттерн, при котором объект оборачивает другой объект с тем же интерфейсом и добавляет поведение до или после вызова: кеш, логирование, повторы. Встроенный контейнер .NET декораторы не поддерживает.

Декоратор (decorator)

Функция, которая принимает функцию или класс и возвращает замену. Запись @d над def f равна f = d(f); обёртку оформляют через functools.wraps.

Делегат (delegate)

Тип, экземпляр которого ссылается на метод и, если метод экземплярный, на объект. Готовые делегаты — Func<...> и Action<...>.

Делегирование (delegation)

Приём композиции: объект переадресует вызов своему компоненту, иногда добавляя поведение до или после. Не путать с делегатами C# — типами-ссылками на методы.

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

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

Дерево выражений (expression tree)

Представление кода в виде объектов System.Linq.Expressions. Лямбда, присвоенная Expression<Func<...>>, становится деревом, которое провайдер может разобрать и перевести, например, в SQL.

Дерево доступности (accessibility tree)

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

Диапазонная блокировка (key-range lock)

Блокировка диапазона ключей индекса между существующими строками. Её ставит SERIALIZABLE или хинт HOLDLOCK, чтобы в прочитанный диапазон нельзя было вставить строку, то есть чтобы не было фантомов.

Динамический батчинг (dynamic batching)

Приём сервера инференса: запросы, пришедшие почти одновременно, собираются в одну пачку и проходят через модель за один вызов. Повышает загрузку GPU ценой небольшой задержки.

Динамический метод (dynamic)

Переопределяемый метод, который вызывается через таблицу DMT: она хранит только методы, объявленные или переопределённые в самом классе. По смыслу равен virtual, но экономит память ценой более медленного вызова.

Динамический прокси (dynamic proxy)

Тип-заместитель, сгенерированный во время выполнения, который перехватывает вызовы методов. Так работают Castle DynamicProxy, моки Moq, ленивая загрузка EF Core и DispatchProxy.

Динамическое программирование (dynamic programming)

Метод решения задач, которые складываются из перекрывающихся подзадач: ответ каждой подзадачи вычисляют один раз и переиспользуют. Превращает экспоненциальный перебор в полиномиальный алгоритм.

Директива 'use cache'

Директива Next.js (Cache Components), которая кеширует результат асинхронной функции, компонента или всех экспортов файла. Ключ кеша — аргументы и захваченные значения, срок задаёт cacheLife, метки для сброса — cacheTag.

Директива Angular

Класс с декоратором @Directive, который добавляет поведение существующему элементу, например меняет классы или атрибуты. Компонент — частный случай директивы со своим шаблоном.

Доменное событие (domain event)

Объект, который описывает значимый для бизнеса факт в прошедшем времени: OrderSubmitted. Другие части системы реагируют на него, не связываясь с источником напрямую.

Допуск расхождения часов (clock skew)

Запас времени при проверке exp и nbf на случай, если часы издателя и API расходятся. В TokenValidationParameters.ClockSkew по умолчанию 5 минут.

Драйверный адаптер Prisma (driver adapter)

Пакет, через который Prisma Client выполняет запросы обычным драйвером базы, например @prisma/adapter-pg поверх pg. С Prisma 7 адаптер обязателен, а пул соединений настраивается в драйвере.

Европейский акт о доступности (European Accessibility Act, EAA)

Директива ЕС 2019/882, которая с 28 июня 2025 года требует доступности ряда продуктов и услуг: интернет-магазинов, банков, транспорта, электронных книг. Техническая опора — EN 301 549.

Единая точка отказа (single point of failure)

Компонент, отказ которого останавливает всю систему: единственный экземпляр шлюза, базы или балансировщика. Устраняется резервированием в разных зонах отказа.

Единица работы (unit of work)

Набор операций, которые выполняются и сохраняются вместе, как одна бизнес-транзакция. В EF Core единицу работы представляет экземпляр DbContext.

Единый язык (ubiquitous language)

Общий словарь разработчиков и экспертов предметной области внутри одного ограниченного контекста. Одни и те же слова звучат в разговорах, требованиях, именах классов и методов.

Естественный ключ

Ключ из атрибутов предметной области: код товара, ИНН, ISO-код валюты. Понятен человеку, но может меняться и бывает длинным.

Жадная загрузка (eager loading)

Загрузка связанных данных в том же запросе, что и основные: в EF Core — Include и ThenInclude, которые превращаются в JOIN или, со split query, в отдельные запросы.

Жёсткий лимит кучи (GCHeapHardLimit)

Максимальный объём памяти, который может занять куча GC. В контейнере с лимитом памяти по умолчанию равен большему из 20 МБ и 75 % лимита; задаётся через GCHeapHardLimit или GCHeapHardLimitPercent.

Журнал транзакций (write-ahead log, WAL)

Последовательный журнал изменений, который пишется на диск раньше страниц данных. При коммите база ждёт записи журнала, а после сбоя восстанавливает по нему зафиксированное и откатывает незафиксированное.

Зависть к функциям (feature envy)

Запах кода из каталога Фаулера: метод работает с данными чужого класса больше, чем со своими. Обычно его стоит перенести в тот класс.

Задача (Task)

Объект, который описывает асинхронную работу и её будущий результат. По умолчанию делегат задачи выполняется на пуле потоков, а задача от асинхронного I/O может вообще не занимать поток.

Задача asyncio (Task)

Обёртка, которая ставит корутину в очередь цикла событий и выполняет её независимо от вызывающего кода. Создаётся через asyncio.create_task(); цикл держит на задачи только слабые ссылки.

Задержка event loop (event loop delay)

Насколько позже запланированного цикл событий успевает выполнить колбэк. Рост задержки значит, что главный поток занят синхронной работой; её измеряет perf_hooks.monitorEventLoopDelay().

Закон Деметры (Law of Demeter)

Правило «говори только с ближайшими друзьями»: метод вызывает методы своего объекта, параметров, созданных в нём объектов и полей, но не ходит по цепочке a.B.C.D().

Закон Конвея (Conway's law)

Наблюдение Мелвина Конвея (1968): организации проектируют системы, структура которых копирует структуру коммуникаций в самой организации. Поэтому границы сервисов обычно совпадают с границами команд.

Закрепление (pinning)

Запрет GC перемещать объект, чтобы передать его адрес в нативный код: fixed, GCHandle с типом Pinned или аллокация в POH. Закреплённые объекты мешают уплотнению и фрагментируют кучу.

Заместитель (Proxy)

Структурный паттерн: объект с тем же интерфейсом, что и реальный, управляет доступом к нему — создаёт лениво, вызывает удалённо, проверяет права или кеширует.

Заморозка фич (feature freeze)

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

Замыкание (closure)

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

Замыкание (closure)

Вложенная функция вместе с переменными объемлющей функции, которые она использует. Переменные хранятся в ячейках (__closure__) и живут, пока жива функция; перепривязать их можно через nonlocal.

Замыкание в JavaScript (closure)

Функция вместе со ссылкой на лексическое окружение, в котором её создали. Захваченные переменные живут, пока жива функция, и видны ей по ссылке, а не копией значения.

Зацепление (coupling)

Мера зависимости модулей или классов друг от друга: насколько изменение одного требует изменения другого. Стремятся к слабому зацеплению: зависеть от узкого контракта, а не от устройства.

Защитная копия (defensive copy)

Скрытая копия структуры, которую компилятор делает при вызове её метода через readonly-поле или in-параметр, чтобы метод не изменил исходное значение. Не возникает у readonly struct.

Значимый тип (value type)

Тип, переменная которого содержит само значение; при присваивании значение копируется. В C# это struct, enum и встроенные числовые типы.

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

Свойство операции, при котором повторное выполнение даёт тот же результат, что и однократное. Нужна везде, где возможны повторы: фоновые задачи, сообщения, ретраи HTTP.

Идемпотентный producer

Режим producer Kafka (enable.idempotence=true), в котором брокер по producer id и номеру последовательности отбрасывает повторные отправки. Убирает дубли от ретраев и сохраняет порядок; в Confluent.Kafka по умолчанию выключен.

Иерархические инжекторы

Устройство DI в Angular: инжекторы элементов повторяют дерево компонентов, а над ними стоят инжекторы маршрутов, корневой и платформенный. Провайдер ищется снизу вверх, и место его объявления задаёт, кто делит экземпляр.

Изменяемый объект (mutable)

Объект, состояние которого можно изменить на месте: list, dict, set. Неизменяемые (int, str, tuple, frozenset) при каждой «правке» дают новый объект. Изменяемость задаётся типом.

Изоляция SNAPSHOT (snapshot isolation)

Уровень изоляции SQL Server на версиях строк: вся транзакция видит данные на момент своего первого обращения к ним. При попытке изменить строку, которую уже изменили после этого момента, транзакция падает с ошибкой 3960.

Именованные опции (named options)

Несколько экземпляров одного класса настроек под разными именами, например для двух платёжных шлюзов. Читаются через Get(name) у IOptionsSnapshot<T> или IOptionsMonitor<T>.

Имперсонация (impersonation)

Выполнение кода от имени другого пользователя Windows. В ASP.NET Core — WindowsIdentity.RunImpersonated и RunImpersonatedAsync, только на Windows.

Инвалидация кеша

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

Инвариантность (invariance)

Generic-тип допускает только точно тот аргумент, с которым объявлен: List<string> нельзя использовать как List<object>. Так ведут себя все классы и структуры и интерфейсы без in/out.

Инверсия управления (inversion of control, IoC)

Принцип, по которому управление потоком программы или созданием объектов передаётся фреймворку: не ваш код вызывает библиотеку, а фреймворк вызывает ваш код. DI — частный случай IoC.

Индекс (staging area)

Промежуточная область между рабочей копией и репозиторием: в неё командой git add кладут изменения, которые войдут в следующий коммит. Позволяет закоммитить только часть правок.

Индекс по выражению (expression index)

Индекс по результату выражения или функции, например lower(email). Используется, только если запрос содержит то же выражение; в SQL Server для этого нужен вычисляемый столбец.

Индексированное представление (indexed view)

Представление с уникальным кластерным индексом: SQL Server хранит его результат и обновляет в той же транзакции, что и базовые таблицы. Ускоряет агрегаты ценой более дорогой записи.

Инкапсуляция (encapsulation)

Принцип ООП: данные объекта и правила их изменения собраны в одном классе, а состояние меняется только через его методы. Так класс сам защищает свои инварианты.

Инспектор Node.js (--inspect)

Встроенный протокол отладки и профилирования, к которому подключаются Chrome DevTools и VS Code. Включается флагом --inspect и по умолчанию слушает 127.0.0.1:9229.

Инструмент метрики (instrument)

Объект System.Diagnostics.Metrics, через который код записывает измерения: Counter<T>, UpDownCounter<T>, Histogram<T>, Gauge<T> и их observable-варианты. Создаётся из Meter.

Интеграционная шина (ESB)

Центральная платформа интеграции с адаптерами, маршрутизацией и преобразованием сообщений между системами, например BizTalk Server. Сокращает число связей точка-точка, но становится центральной зависимостью.

Интеграционный тест

Тест, который проверяет несколько частей системы вместе: например, HTTP-конвейер, DI и настоящую базу. Медленнее модульного, зато ловит ошибки на стыках.

Интерактивная транзакция Prisma

Вызов prisma.$transaction(async (tx) => ...): все запросы через tx идут в одной транзакции, а между ними можно выполнять свою логику. Исключение откатывает транзакцию; по умолчанию таймаут 5 секунд.

Интерактивный rebase (interactive rebase)

git rebase -i: rebase, при котором вы редактируете список коммитов — меняете порядок, объединяете (squash, fixup), правите сообщения или удаляете коммиты. Служит для чистки своей ветки перед pull request.

Интернирование (interning)

Хранение одного объекта на каждое значение: CPython кеширует целые от −5 до 256 и интернирует часть строк, sys.intern делает это явно. Это деталь реализации, на is для значений полагаться нельзя.

Интернирование строк (string interning)

Хранение одного экземпляра на каждое уникальное значение строки в пуле рантайма (intern pool). string.Intern добавляет строку в пул; интернированные строки живут до завершения процесса.

Интроспективная сортировка (introsort)

Гибридная сортировка в Array.Sort: quicksort, который на маленьких участках переключается на вставки, а при слишком глубоком разбиении — на heapsort. Даёт O(n log n) в худшем случае, нестабильна.

Интроспекция токена

Запрос API к серверу авторизации «действителен ли этот токен и что в нём» (RFC 7662). Даёт мгновенный отзыв ценой сетевого вызова на каждую проверку.

Исключение секций (partition elimination)

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

Источник отмены (CancellationTokenSource)

Объект, который выдаёт токены и отменяет их вызовом Cancel или по таймауту через CancelAfter. Реализует IDisposable, после использования его освобождают.

Исчерпываемость (exhaustiveness)

Свойство switch-выражения: его ветки покрывают все возможные значения входа. Если нет, компилятор выдаёт предупреждение CS8509.

Итератор (iterator)

Метод с yield return, который возвращает элементы последовательности по одному. Компилятор превращает его в класс, реализующий IEnumerable<T> и IEnumerator<T>.

Кадр стека (stack frame)

Участок стека, который занимает один вызов метода: адрес возврата, сохранённые регистры, локальные переменные и часть аргументов. Снимается при возврате из метода.

Как минимум один раз (at-least-once)

Гарантия доставки или выполнения, при которой работа не теряется, но после сбоя может выполниться повторно. Обработчик должен быть идемпотентным.

Каналы (System.Threading.Channels)

Асинхронные очереди производитель — потребитель: запись и чтение ждут через await и не блокируют потоки. Бывают ограниченные и неограниченные.

Канареечный релиз (canary release)

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

Каноническая модель данных

Общий формат сообщений, в который каждая система переводит свои данные. Вместо маппинга каждой пары систем нужен один маппинг на систему.

Кардинальность метрики

Число уникальных комбинаций значений меток метрики, то есть число временных рядов. Метка с id пользователя или полным URL даёт миллионы рядов и перегружает хранилище.

Каскадный отказ (cascading failure)

Отказ, который распространяется по системе: сбой одного компонента перегружает или выключает другие. Пример — readiness-проба на общую БД, которая при её сбое выводит из балансировки все экземпляры сразу.

Категория лога (log category)

Строка, с которой создан логгер; у ILogger<T> это полное имя типа T. По префиксу категории в конфигурации задают уровни логирования.

Кворум (quorum)

Минимальное число реплик, которое должно подтвердить запись (W) или ответить на чтение (R). При W + R больше числа реплик N чтение пересекается хотя бы с одной свежей репликой.

Кеш в памяти (IMemoryCache)

Кеш внутри процесса приложения: хранит объекты по ссылке, без сериализации. У каждого экземпляра приложения он свой и пропадает при перезапуске.

Кеш планов (plan cache)

Область памяти, где SQL Server хранит скомпилированные планы для повторного использования. План находится по тексту запроса с объявлениями параметров и по SET-параметрам сессии.

Кешированные обновления (cached updates)

Режим, в котором изменения записей копятся в журнале на клиенте и отправляются в базу одним вызовом ApplyUpdates, а не при каждом Post.

Класс данных (dataclass)

Класс с декоратором @dataclass, для которого Python генерирует __init__, __repr__ и __eq__ по аннотированным полям. Параметры frozen=True и slots=True делают его неизменяемым и компактным.

Класс замыкания (display class)

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

Кластерный индекс (clustered index)

Индекс, в листьях которого лежат сами строки таблицы, упорядоченные по ключу. У таблицы он один; PRIMARY KEY по умолчанию создаёт именно его.

Клиентская оценка (client evaluation)

Выполнение части запроса EF Core в памяти приложения, а не в базе. С EF Core 3.0 разрешена только в финальной проекции Select, в остальных местах непереводимое выражение вызывает исключение.

Клиентский компонент (Client Component)

Компонент из модуля с директивой 'use client'. Рендерится на сервере в HTML и в браузере, его JS попадает в бандл, поэтому ему доступны state, эффекты и события.

Ключ идемпотентности (idempotency key)

Уникальный ключ, который клиент передаёт с запросом, обычно заголовком Idempotency-Key. Сервер сохраняет результат первой обработки и на повтор с тем же ключом возвращает его, не выполняя операцию снова.

Ключ кластеризации (clustering key)

Колонки кластерного индекса. Ключ копируется в каждый некластерный индекс как указатель на строку, поэтому его делают узким, уникальным и неизменяемым.

Ключевое слово field

Контекстное ключевое слово C# 14: обращение к сгенерированному компилятором полю свойства прямо в аксессоре, без объявления своего поля.

Ковариантность (covariance)

Возможность использовать generic-тип с более производным аргументом там, где ждут более общий: IEnumerable<string> вместо IEnumerable<object>. Объявляется out T у интерфейсов и делегатов.

Кодовая страница (code page)

Таблица, которая сопоставляет байтам символы однобайтовой кодировки. Для кириллицы в Windows это обычно 1251; символы, которых нет в таблице, при преобразовании теряются.

Коллизия хешей (hash collision)

Ситуация, когда разные ключи дают одинаковый хеш-код или попадают в одну корзину хеш-таблицы. Коллизии неизбежны; их разрешают сравнением через Equals, но при их избытке поиск деградирует до O(n).

Команда (Command)

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

Командная инъекция (command injection)

Данные пользователя попадают в командную строку оболочки и добавляют свою команду, например & del *. Защита — запуск процесса без оболочки и передача аргументов списком.

Коммит (commit)

Зафиксированный снимок всех файлов проекта вместе с автором, датой, сообщением и ссылкой на родительский коммит. Идентифицируется хешем и после создания не меняется.

Компаратор равенства (IEqualityComparer)

Объект с методами Equals и GetHashCode, который задаёт равенство ключей для Dictionary, HashSet и LINQ. По умолчанию используется EqualityComparer<T>.Default.

Компенсирующее действие (compensating transaction)

Операция, которая отменяет бизнес-эффект уже зафиксированного шага, например возврат денег после списания. Это не откат, а новое действие, и его результат виден в системе.

Компилированный запрос (compiled query)

LINQ-запрос, заранее превращённый в делегат через EF.CompileQuery или EF.CompileAsyncQuery. При вызове EF не строит и не сравнивает дерево выражений, что экономит время на горячих путях.

Композитинг (compositing)

Сборка кадра из готовых слоёв в отдельном потоке композитора. Изменения transform и opacity слоя обходятся без layout и paint.

Композиция (composition)

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

Компонент Angular

Класс TypeScript с декоратором @Component, HTML-шаблоном и стилями. Основной строительный блок интерфейса: приложение — дерево компонентов, вложенных друг в друга через шаблоны.

Конвейер запросов (request pipeline)

Цепочка middleware, через которую проходит каждый HTTP-запрос: в порядке регистрации на входе и в обратном порядке на выходе. Собирается один раз при старте приложения.

Конвейер CI/CD (pipeline)

Описанная кодом последовательность шагов, которую CI-система выполняет на каждое изменение: restore, сборка, тесты, анализ, публикация и выкладка. В GitHub Actions это workflow в YAML, в Jenkins — Jenkinsfile.

Конкурентность (concurrency)

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

Конкурентные коллекции

Потокобезопасные коллекции из System.Collections.Concurrent: ConcurrentDictionary, ConcurrentQueue, ConcurrentStack, ConcurrentBag и BlockingCollection.

Контейнерный запрос (container query)

Условие @container, которое проверяет размер ближайшего предка с container-type, а не окна. Позволяет компоненту подстраиваться под место, куда его поставили.

Контекст выполнения (ExecutionContext)

«Окружающие» данные потока, например значения AsyncLocal<T>, которые переносятся через await, Task.Run и другие асинхронные переходы. Течёт всегда, независимо от ConfigureAwait.

Контекст синхронизации (SynchronizationContext)

Абстракция, которая планирует выполнение кода в нужном окружении, например в UI-потоке. await по умолчанию возвращает продолжение метода в захваченный контекст.

Контекстный менеджер (context manager)

Объект с методами __enter__ и __exit__ для оператора with. __exit__ вызывается при любом выходе из блока, в том числе по исключению, — аналог using в C#.

Контравариантность (contravariance)

Возможность использовать generic-тип с более общим аргументом там, где ждут более производный: Action<object> вместо Action<string>. Объявляется in T у интерфейсов и делегатов.

Контракт (design by contract)

Описание поведения метода через предусловия (что верно до вызова), постусловия (что гарантировано после) и инварианты (что верно всегда). Подход Бертрана Мейера; на нём держится LSP.

Контрактный тест (contract test)

Тест, который проверяет, что поставщик API и его потребитель соблюдают общую договорённость о запросах и ответах. В consumer-driven подходе контракт пишет потребитель; инструмент — Pact (PactNet).

Контролируемый компонент (controlled component)

Поле формы, значение которого задаёт state: value берётся из state, а onChange его обновляет. Источник правды — React, а не DOM.

Контроллер (API controller)

Класс-наследник ControllerBase, публичные методы которого (action) обрабатывают HTTP-запросы. Маршруты задаются атрибутами, а запрос проходит конвейер MVC: фильтры, привязку модели, валидацию и форматирование ответа.

Контрольные группы (cgroups)

Механизм ядра Linux, который ограничивает и учитывает ресурсы группы процессов: CPU, память, ввод-вывод. Лимиты контейнера задаются через cgroups, и .NET читает их при старте.

Конфиденциальный клиент

Клиент, который хранит секрет или ключ на сервере и аутентифицируется у сервера авторизации: серверное веб-приложение, BFF, сервис.

Кооперативная отмена

Модель отмены в .NET: инициатор только запрашивает отмену, а операция сама проверяет токен и решает, как остановиться. Принудительного прерывания нет.

Корень GC (GC root)

Ссылка, с которой GC начинает обход графа объектов: локальная переменная или регистр потока, статическое поле, GC-хендл, запись очереди финализации. Всё, что недостижимо от корней, считается мусором.

Корневой провайдер (root service provider)

IServiceProvider, который создаёт builder.Build(). Живёт всё время работы приложения, хранит singleton-сервисы и освобождает их при остановке.

Короткое замыкание конвейера (short-circuit)

Ситуация, когда middleware отвечает сам и не вызывает next, и остальная часть конвейера не выполняется. Так, например, работает отдача статических файлов.

Корректная остановка (graceful shutdown)

Остановка, при которой приложение перестаёт принимать новую работу, доделывает начатую и освобождает ресурсы, а не обрывается посреди операции. Время на неё ограничено HostOptions.ShutdownTimeout.

Коррелированный подзапрос

Подзапрос, который ссылается на колонки внешнего запроса и поэтому логически вычисляется для каждой его строки. Оптимизатор часто переписывает его в соединение.

Корутина (coroutine)

Функция, объявленная через async def, и объект, который возвращает её вызов. Код выполняется, только когда корутину ждут через await или оборачивают в задачу; на каждом await она может приостановиться.

Красно-чёрное дерево (red-black tree)

Самобалансирующееся двоичное дерево поиска: вставка, удаление и поиск занимают O(log n). На нём построены SortedSet<T> и SortedDictionary<TKey, TValue>.

Критическая секция (critical section)

Участок кода, который работает с общими данными и поэтому должен выполняться не более чем одним потоком одновременно. В C# её обычно ограничивают оператором lock.

Критический путь отрисовки (critical rendering path)

Шаги браузера от получения HTML до первого кадра: DOM, CSSOM, дерево отрисовки, layout, paint, composite. Его длину определяют блокирующие CSS и скрипты.

Курсор

Объект T-SQL, который проходит результат запроса по одной строке (DECLARE CURSOR, FETCH NEXT). Нужен для действий, которые нельзя выразить одной инструкцией; если он нужен, его объявляют LOCAL FAST_FORWARD.

Куча (heap)

Таблица без кластерного индекса. Строки лежат без определённого порядка, а некластерные индексы ссылаются на них по физическому адресу RID — файл, страница, слот.

Лексическая область видимости (lexical scope)

Правило, по которому доступность переменной определяется местом её объявления в коде, а не местом вызова. В JavaScript области бывают глобальные, модульные, функциональные и блочные.

Ленивая загрузка (lazy loading)

Загрузка навигационного свойства отдельным запросом при первом обращении к нему. В EF Core включается пакетом Microsoft.EntityFrameworkCore.Proxies и UseLazyLoadingProxies() и легко приводит к N+1.

Ленивая инициализация (lazy initialization)

Создание объекта при первом обращении, а не заранее. В .NET для этого есть Lazy<T>: по умолчанию он потокобезопасен и кеширует исключение фабрики.

Ленивый маршрут (lazy-loaded route)

Маршрут, код которого выносится в отдельный чанк и загружается при первом переходе: через loadComponent или loadChildren с динамическим import(). Уменьшает начальный бандл.

Линеаризуемость (linearizability)

Самая сильная гарантия согласованности одного объекта: система ведёт себя как одна копия, и завершённую запись видят все последующие чтения. Именно это C в теореме CAP.

Лог событий (event log, commit log)

Упорядоченный журнал, в который записи только дописываются в конец и не удаляются при чтении. Каждый читатель хранит свою позицию и может перечитать историю в пределах срока хранения. Так устроены топики Kafka.

Логический порядок обработки запроса

Порядок, в котором SQL связывает части SELECT: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Он определяет, какие имена видны на каждом шаге, а физический порядок выполнения выбирает оптимизатор.

Ломающее изменение (breaking change)

Изменение контракта, после которого существующий клиент перестаёт работать: удаление или переименование поля, смена типа, новый обязательный параметр, другой смысл кода ответа.

Макрос FireDAC (substitution variable)

Подстановка в текст SQL до отправки на сервер: &Name или !Name. Нужна там, где параметр не работает, например для имени таблицы; ввод пользователя в макрос не подставляют.

Маппинг входящих claims (MapInboundClaims)

Переименование коротких claims из токена в длинные типы WS-Federation: sub становится ClaimTypes.NameIdentifier. В JwtBearerOptions включено по умолчанию, выключается MapInboundClaims = false.

Массив зависимостей (dependency array)

Второй аргумент useEffect, useMemo и useCallback. React сравнивает его элементы через Object.is и перезапускает эффект или пересчитывает значение, только если что-то изменилось.

Материализация запроса

Выполнение ленивого запроса с сохранением результата в коллекцию: ToList(), ToArray(), ToDictionary(). После неё повторные обращения не выполняют запрос снова.

Машина состояний (state machine)

Тип, который компилятор генерирует из async-метода. Хранит номер текущего шага и локальные переменные, а метод MoveNext продолжает выполнение с места последнего await.

Медиазапрос (media query)

Условие @media, при котором применяются стили: ширина окна, ориентация, тип устройства, тёмная тема. Основа адаптивной вёрстки.

Мелкозернистая блокировка (fine-grained locking)

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

Мемоизация (memoization)

Кеширование результатов функции по аргументам: повторный вызов с теми же аргументами берёт ответ из словаря или массива. Это ДП сверху вниз — рекурсия плюс кеш.

Мёртвая версия строки (dead tuple)

Версия строки, удалённая или заменённая завершённой транзакцией, которую уже не видит ни одна активная транзакция. Занимает место в таблице и индексах, пока её не уберёт VACUUM.

Метаданные декораторов (emitDecoratorMetadata)

Сведения о типах, которые TypeScript сохраняет для декорированных классов при флаге emitDecoratorMetadata, например design:paramtypes — типы параметров конструктора. NestJS читает их через reflect-metadata и по ним понимает, что внедрять.

Метаданные endpoint'а (endpoint metadata)

Произвольные объекты, прикреплённые к endpoint'у: атрибуты [Authorize], политики CORS, свои маркеры через WithMetadata. Их читают middleware после UseRouting через context.GetEndpoint().

Метод расширения (extension method)

Статический метод статического класса с this перед первым параметром (C# 3). Вызывается как метод экземпляра; компилятор превращает вызов в обычный статический.

Метод цепочек (separate chaining)

Способ разрешения коллизий, при котором элементы одной корзины хеш-таблицы связаны в цепочку. В Dictionary цепочка — это индексы внутри массива записей, а не отдельные объекты-узлы.

Метод RED

Набор метрик для сервиса, обрабатывающего запросы: Rate (запросов в секунду), Errors (ошибки), Duration (время ответа). Предложен Томом Уилки как дополнение к USE.

Метод USE

Набор метрик для каждого ресурса: Utilization (загрузка), Saturation (насыщение, очередь ожидающей работы), Errors (ошибки). Предложен Бренданом Греггом для анализа производительности.

Миграция EF Core

Класс с методами Up и Down, который переводит схему базы от одной версии модели к следующей. Создаётся командой dotnet ef migrations add по разнице модели и снапшота.

Микрозадача (microtask)

Короткий колбэк, который выполняется сразу после текущей задачи, до следующей задачи и отрисовки: реакции промисов, продолжения после await, queueMicrotask. Очередь микрозадач выполняется целиком.

Микросервисы (microservices)

Архитектурный стиль, в котором система состоит из небольших сервисов. Каждый владеет своими данными, выпускается независимо и общается с другими по сети.

Многооператорная табличная функция (multi-statement TVF)

Функция, которая заполняет табличную переменную несколькими инструкциями и возвращает её. Оптимизатор не видит её содержимое и оценивает результат в фиксированные 100 строк, а до SQL Server 2014 — в одну.

Многоэтапная сборка (multi-stage build)

Dockerfile с несколькими FROM: на одних этапах собирают, в последний копируют только результат через COPY --from. Инструменты сборки не попадают в итоговый образ.

Модель памяти .NET

Правила того, какие перестановки чтений и записей разрешены компилятору, JIT и процессору и что видят другие потоки. Описана в спецификации Memory-model.md в репозитории dotnet/runtime.

Модель чтения (read model)

Данные, подготовленные под конкретные запросы: плоские таблицы, документы, кеш. В CQRS их обновляют по событиям или изменениям модели записи, поэтому они могут отставать.

Модель EF Core

Метаданные о сущностях: свойства, ключи, связи, имена таблиц и типы столбцов. EF строит её один раз на тип контекста по соглашениям, атрибутам и Fluent API и по ней генерирует SQL и миграции.

Модуль Delphi (unit)

Файл .pas — единица компиляции Delphi. Секция interface объявляет то, что видно другим модулям, implementation содержит код, а необязательные initialization и finalization выполняются при старте и завершении программы.

Модуль NestJS (@Module)

Класс с декоратором @Module(), который объединяет контроллеры и провайдеры одной области, импортирует другие модули и через exports решает, чем они могут пользоваться. Приложение — дерево модулей от корневого AppModule.

Модульный монолит (modular monolith)

Одно развёртываемое приложение, код которого разбит на модули по бизнес-возможностям. Модуль открывает другим только публичный контракт и владеет своими данными.

Модульный тест (unit test)

Автоматический тест, который проверяет одно поведение небольшой части кода в изоляции от базы, сети и файловой системы. Выполняется за миллисекунды.

Мок (mock object)

Дублёр, по которому тест проверяет взаимодействие: был ли вызов, сколько раз и с какими аргументами. В .NET их создают NSubstitute и Moq.

Мутационное тестирование

Способ оценить качество тестов: инструмент вносит в код маленькие изменения (мутанты) и проверяет, падают ли тесты. Выживший мутант — непроверенное поведение. В .NET — Stryker.NET.

Наблюдаемость (observability)

Свойство системы, позволяющее понять её внутреннее состояние по данным, которые она отдаёт наружу: метрикам, трейсам и логам. В отличие от мониторинга, отвечает и на вопросы, о которых не думали заранее.

Наблюдатель (Observer)

Поведенческий паттерн: издатель оповещает всех подписчиков об изменении. В .NET это события (event) и интерфейсы IObservable<T> и IObserver<T>.

Нагрузочное тестирование

Проверка сервиса под заданным или растущим потоком запросов, чтобы найти предел пропускной способности, рост задержек и точку деградации. Инструменты — k6, NBomber, JMeter, bombardier.

Накопление прав (privilege creep)

Постепенный рост прав сотрудника: при переводах и новых проектах права выдают, а старые не забирают. Лечится пересмотром доступа и отзывом прав при смене должности.

Намеренная блокировка (intent lock)

Блокировка на верхнем уровне иерархии (страница, таблица), которая сообщает, что ниже уже стоят S или X. Позволяет быстро понять, можно ли заблокировать всю таблицу, не проверяя каждую строку.

Нарушение контроля доступа (broken access control)

Пользователь читает или меняет то, что ему не положено: чужие заказы, админские функции. Первая категория OWASP Top 10 в редакциях 2021 и 2025 годов.

Наследование (inheritance)

Механизм, при котором новый класс получает члены базового и может их расширить или переопределить. В C# у класса один базовый класс, а интерфейсов — сколько угодно.

Не более одного раза (at-most-once)

Гарантия доставки, при которой сообщение не обрабатывается повторно, но может потеряться. Получается, если подтвердить сообщение до обработки.

Небезопасная десериализация

Десериализатор создаёт типы, указанные в самих данных, и атакующий подбирает тип, конструктор или сеттер которого выполняет нужный ему код. Классические примеры — BinaryFormatter и TypeNameHandling в Newtonsoft.Json.

Небезопасная ссылка [unsafe]

Атрибут ссылки, который отключает для неё подсчёт ссылок полностью: ни _AddRef, ни обнуления при уничтожении объекта. Бесплатна, но после уничтожения объекта указывает на освобождённую память.

Неизменяемая коллекция (immutable collection)

Коллекция из System.Collections.Immutable, которую нельзя изменить после создания: Add и Remove возвращают новый экземпляр. Её безопасно передавать между потоками без блокировок.

Неизменяемый тип (immutable type)

Тип, состояние экземпляра которого нельзя изменить после создания: «изменяющие» методы возвращают новый экземпляр. Примеры — string, DateTime, readonly record struct.

Некластерный индекс (nonclustered index)

Отдельная от таблицы структура: ключ индекса и указатель на строку — ключ кластеризации или RID. Колонки, которых нет в индексе, сервер дочитывает из таблицы.

Необработанное отклонение (unhandled rejection)

Отклонённый промис, к которому не подключили обработчик ошибки. Браузер генерирует событие unhandledrejection, а Node.js с версии 15 по умолчанию завершает процесс.

Неограниченное делегирование

Режим Kerberos, при котором клиент пересылает серверу свой TGT и сервер может действовать от имени пользователя перед любой службой. Опасен; Credential Guard его блокирует.

Неповторяемое чтение (non-repeatable read)

Аномалия, при которой повторное чтение той же строки в транзакции даёт другое значение, потому что её изменила и зафиксировала другая транзакция.

Непрерывная интеграция (continuous integration, CI)

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

Непрерывная поставка (continuous delivery, CD)

Продолжение CI: каждая проверенная сборка автоматически упаковывается и выкладывается на тестовые окружения, так что в прод её можно выпустить в любой момент — по ручному подтверждению.

Непрерывное развёртывание (continuous deployment)

Вариант CD без ручного шага: каждое изменение, прошедшее все проверки конвейера, автоматически уходит в прод. Требует надёжных автотестов, мониторинга и быстрого отката.

Непрозрачный токен (reference token)

Случайная строка без данных внутри. API узнаёт, что за ней стоит, через introspection у сервера авторизации: такой токен отзывается мгновенно, но требует сетевого запроса.

Нестабильный тест (flaky test)

Тест, который на одном и том же коде то проходит, то падает. Обычные причины — время, общее состояние, параллельность, внешние сервисы.

Неуправляемый ресурс (unmanaged resource)

Ресурс вне управляемой кучи, о котором GC ничего не знает: дескриптор файла или окна, сокет, нативная память. Его нужно освобождать явно — через Dispose или SafeHandle.

Нефункциональные требования

Требования не к тому, что система делает, а к тому, как: нагрузка, задержка, доступность, согласованность, безопасность, срок хранения данных. Именно они определяют архитектуру.

Неявное преобразование типов (implicit conversion)

Приведение типов, которое SQL Server делает сам при сравнении значений разных типов; в плане оно видно как CONVERT_IMPLICIT. Если преобразуется колонка, а не параметр, seek по её индексу обычно невозможен.

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

Проектирование таблиц так, чтобы каждый факт хранился в одном месте. Ступени нормализации называют нормальными формами: 1НФ, 2НФ, 3НФ, BCNF.

Область внедрения (injection scope)

Время жизни провайдера в NestJS: DEFAULT — один экземпляр на приложение, REQUEST — на каждый запрос, TRANSIENT — свой экземпляр каждому потребителю. Область REQUEST переходит на всех, кто зависит от такого провайдера.

Обнаружение изменений (change detection)

Механизм, который сравнивает значения выражений в шаблонах с прошлыми и обновляет изменившиеся части DOM. Запускается по сигналу zone.js или по уведомлениям сигналов и событий.

Обработчик авторизации (authorization handler)

Реализация IAuthorizationHandler, обычно наследник AuthorizationHandler<TRequirement>: проверяет requirement и вызывает context.Succeed или context.Fail. Регистрируется в DI; у одного requirement может быть несколько handlers.

Обработчик интерполированных строк (interpolated string handler)

Механизм C# 10: выражение $"..." компилируется в вызовы AppendLiteral и AppendFormatted<T> специального типа, например DefaultInterpolatedStringHandler. Аргументы не упаковываются, буфер берётся из пула.

Образ контейнера (container image)

Неизменяемый шаблон, из которого запускают контейнеры: файлы приложения, рантайм, системные библиотеки и команда запуска. Состоит из слоёв и хранится в реестре под именем с тегом.

Обратное давление (backpressure)

Механизм, при котором переполненный потребитель замедляет производителя, а не копит работу в памяти. В каналах его даёт ограниченный канал с режимом Wait.

Обратный прокси (reverse proxy)

Сервер перед приложением, который принимает запросы из сети и пересылает их приложению. Обычно расшифровывает TLS, балансирует нагрузку и позволяет нескольким приложениям делить порты 80 и 443.

Общая база данных (shared database)

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

Объект Git (blob, tree, commit, tag)

Единица хранения в базе .git/objects, адресуемая хешем своего содержимого: blob — содержимое файла, tree — каталог, commit — снимок с метаданными, tag — аннотированный тег. Объекты неизменяемы.

Объект-значение (value object)

Объект без собственной идентичности, который определяется значениями полей: Money, Address, DateRange. Неизменяемый и сравнивается по значению; в C# его удобно делать record.

Обязательный член (required member)

Свойство или поле с модификатором required (C# 11): его нужно задать в инициализаторе объекта, иначе ошибка компиляции. Помогает с NRT, когда объект создаётся без конструктора с параметрами.

Ограничение маршрута (route constraint)

Условие на параметр маршрута: {id:int}, {name:alpha}, {slug:regex(...)}. Если значение не подходит, маршрут не совпадает. Нужно, чтобы различать маршруты, а не чтобы проверять ввод.

Ограничение параметра типа (generic constraint)

Требование к параметру типа в предложении where T : ...: ссылочный или значимый тип, наличие конструктора, базовый класс, интерфейс. Даёт компилятору право вызывать соответствующие члены у T.

Ограничение частоты запросов (rate limiting)

Защита сервиса, которая отклоняет запросы сверх лимита, обычно с кодом 429. В ASP.NET Core с .NET 7 есть middleware с алгоритмами fixed window, sliding window, token bucket и concurrency.

Ограниченное делегирование (KCD)

Kerberos Constrained Delegation: учётке фронтенда разрешено получать билеты от имени пользователя только к перечисленным SPN (атрибут msDS-AllowedToDelegateTo). Работает через расширение S4U2Proxy.

Ограниченный контекст (bounded context)

Граница, внутри которой у модели и её терминов одно значение. «Товар» на складе и в каталоге — разные модели в разных контекстах; контекст — естественный кандидат в модуль или сервис.

Одиночка (Singleton)

Порождающий паттерн: у класса ровно один экземпляр и глобальная точка доступа к нему. В .NET «один экземпляр» обычно задают регистрацией AddSingleton в DI, а не статическим свойством.

Оконная функция

Функция с OVER (...), которая считает значение по набору строк, связанных с текущей, и, в отличие от GROUP BY, не сворачивает строки. Примеры — ROW_NUMBER, LAG, SUM() OVER.

Окружение (hosting environment)

Имя среды выполнения — Development, Staging, Production или своё. Задаётся переменной ASPNETCORE_ENVIRONMENT или DOTNET_ENVIRONMENT, по умолчанию Production, и определяет файл appsettings.{Environment}.json и поведение приложения.

Оператор ?? (nullish coalescing)

a ?? b возвращает b, только если a равно null или undefined. В отличие от || не заменяет 0, '' и false.

Оператор подавления null (null-forgiving operator)

Постфиксный !, например x!.Length: говорит компилятору, что выражение не null, и подавляет предупреждение. В рантайме ничего не проверяет.

Оператор APPLY (CROSS APPLY, OUTER APPLY)

Оператор T-SQL, который вычисляет табличное выражение справа для каждой строки слева, и это выражение может ссылаться на её колонки. CROSS APPLY отбрасывает строки с пустым результатом, OUTER APPLY сохраняет их с NULL; в PostgreSQL аналог — LATERAL.

Операторы высшего порядка (switchMap, mergeMap, concatMap, exhaustMap)

Операторы RxJS, которые превращают каждое значение во внутренний поток, например HTTP-запрос, и решают, что делать с ним, если прошлый ещё не завершён: отменить, выполнить параллельно, поставить в очередь или проигнорировать новое.

Оптимизатор запросов (query optimizer)

Компонент СУБД, который по тексту запроса, статистике и индексам выбирает план выполнения с наименьшей оценочной стоимостью. Запрос описывает, что нужно получить, а оптимизатор решает, как это сделать.

Оптимистическая блокировка (optimistic concurrency)

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

Оркестрация (orchestration)

Способ координации саги, при котором оркестратор хранит её состояние, рассылает команды участникам и запускает компенсации при сбое.

Основная теорема о рекуррентных соотношениях (master theorem)

Готовый ответ для рекуррентных соотношений вида T(n) = a·T(n/b) + f(n), которые описывают алгоритмы «разделяй и властвуй». Например, сортировка слиянием T(n) = 2T(n/2) + O(n) даёт O(n log n).

Основной и фоновый поток (foreground/background thread)

Процесс не завершится, пока работает хотя бы один основной (foreground) поток, а фоновые потоки останавливаются вместе с ним. Потоки пула фоновые, new Thread по умолчанию основной.

Отзыв токена

Признание токена недействительным до истечения срока. Самодостаточный JWT API проверяет локально, поэтому для отзыва нужен список отозванных jti или интроспекция.

Отложенное выполнение (deferred execution)

Запрос LINQ выполняется не при объявлении, а при переборе результата, и выполняется заново при каждом переборе. Так работают методы, возвращающие IEnumerable<T>: Where, Select, OrderBy.

Отображённый тип (mapped type)

Тип вида { [K in keyof T]: ... }, который перебирает ключи и строит из них новый объектный тип. Умеет добавлять и снимать readonly и ? и переименовывать ключи через as.

Отчёт о доставке (delivery receipt, DLR)

Асинхронное уведомление от SMS-центра о финальном статусе сообщения: доставлено, истёк срок, не доставлено. В SMPP приходит операцией deliver_sm; формат текста зависит от SMSC.

Оценка кардинальности (cardinality estimation)

Прогноз оптимизатора, сколько строк вернёт каждый оператор плана. Строится по статистике; от неё зависят выбор соединений, порядок операций и объём выделенной памяти.

Оценка на салфетке (back-of-the-envelope)

Быстрый расчёт порядка величин по допущениям: запросы в секунду, объём данных, трафик, память под кеш. Нужна точность до порядка, а не до процента.

Очередь задач (task queue, macrotask)

Очередь, из которой event loop берёт по одной задаче: колбэки setTimeout, события пользователя, сообщения сети. Между задачами выполняются все микрозадачи.

Очередь недоставленных сообщений (dead letter queue, DLQ)

Отдельная очередь или топик для сообщений, которые не удалось обработать после всех попыток. Не даёт «ядовитому» сообщению блокировать поток и сохраняет его для разбора.

Очередь сообщений UI-потока (message loop)

Цикл, в котором UI-поток по очереди обрабатывает сообщения: ввод, перерисовку, делегаты из SynchronizationContext.Post. Пока UI-поток занят, очередь стоит и интерфейс не отвечает.

Очередь финализации (finalization queue)

Внутренний список CLR с объектами, у которых есть финализатор. Недостижимые объекты из него переходят в очередь f-reachable, их финализаторы выполняет поток финализации, а память освобождается при следующей сборке.

Очистка эффекта (cleanup)

Функция, которую возвращает setup эффекта. React вызывает её перед повторным запуском эффекта и при размонтировании, чтобы отписаться, остановить таймер или закрыть соединение.

Пакетирование SaveChanges (batching)

Отправка нескольких команд INSERT, UPDATE, DELETE за один сетевой round trip. На SQL Server EF Core по умолчанию кладёт в пакет до 42 команд; предел задаёт MaxBatchSize.

Пакетный режим (batch mode)

Режим выполнения, в котором оператор обрабатывает пачку строк за раз, а не по одной. Основной режим для columnstore; с SQL Server 2019 на уровне совместимости 150 доступен и для обычных таблиц.

Параллельная эксплуатация (parallel run)

Старая и новая версии системы работают одновременно на одних данных. Результаты сравнивают, а старая версия остаётся путём отката, пока новая не докажет эквивалентность.

Параметризованный тест

Один тестовый метод, который запускается на нескольких наборах входных данных. В xUnit это [Theory] с [InlineData] или [MemberData], в NUnit — [TestCase], в MSTest — [DataRow].

Параметрический полиморфизм

Один и тот же код работает с любым типом, переданным как параметр. В C# это generics: List<T>, Max<T>(T a, T b).

Партиционирование таблицы (секционирование)

Хранение одной логической таблицы секциями по диапазонам значений колонки, например по месяцам. Границы задаёт функция секционирования, размещение по файловым группам — схема секционирования.

Партиция (partition)

Часть топика Kafka — отдельный упорядоченный лог на одном из брокеров. Порядок записей гарантирован только внутри партиции, а в группе потребителей одну партицию читает один потребитель.

Паттерн проектирования (design pattern)

Именованное типовое решение часто встречающейся задачи проектирования: роли классов, связи между ними и последствия. Это не готовый код, а схема, которую реализуют под свою задачу.

Передача по ссылке на объект (call by sharing)

Способ передачи аргументов в Python: параметр функции становится ещё одним именем того же объекта. Изменения объекта видны вызывающему, а перепривязка параметра — нет.

Переключение секций (partition switching)

ALTER TABLE ... SWITCH: перенос секции в другую таблицу или из неё сменой метаданных, без копирования строк. Основа архивации «скользящим окном» и быстрой загрузки.

Перекрёстное соединение (CROSS JOIN)

Декартово произведение: каждая строка одной таблицы соединяется с каждой строкой другой, без условия. Используют для сеток вроде «магазин × день».

Переполнение счётчика транзакций (XID wraparound)

Номера транзакций в PostgreSQL 32-битные и сравниваются по кругу, поэтому через ~2 млрд транзакций старые строки показались бы «из будущего». VACUUM заранее замораживает их; если не успевает, база перестаёт принимать пишущие транзакции.

Пересмотр доступа (access review)

Регулярная проверка выданных прав: руководитель или владелец ресурса подтверждает, что права ещё нужны, или отзывает их. Другие названия — recertification, attestation.

Переход (transition)

Обновление, помеченное несрочным через startTransition или useTransition. React может прервать его ради ввода и пока показывает прежний UI.

Перечислитель (enumerator)

Объект с методом MoveNext() и свойством Current, через который foreach перебирает коллекцию. Его возвращает GetEnumerator() у IEnumerable<T>.

Перцентиль (p50, p95, p99)

Значение, ниже которого лежит заданная доля измерений: p99 = 200 мс значит, что 99% запросов быстрее 200 мс. В метриках перцентили считают приближённо по бакетам гистограммы.

Пессимистическая конкуренция (pessimistic concurrency)

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

Пирамида тестов (test pyramid)

Модель Майка Кона: много быстрых модульных тестов, меньше интеграционных и совсем немного сквозных. Чем выше уровень, тем тест медленнее, дороже и хрупче.

Пирамидальная сортировка (heapsort)

Сортировка, которая строит кучу из массива и раз за разом извлекает из неё крайний элемент. O(n log n) в худшем случае и O(1) дополнительной памяти, но нестабильная.

План выполнения (execution plan)

Дерево операторов, которыми SQL Server выполняет запрос: доступ к таблицам, соединения, сортировки. Оценочный план — результат компиляции, фактический добавляет реальное число строк и выполнений.

Планировщик задач (TaskScheduler)

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

Плотность страниц (page density)

Насколько заполнены страницы индекса — avg_page_space_used_in_percent. Полупустые страницы требуют больше чтений и памяти буферного пула для тех же данных.

Поведенческий паттерн (behavioral pattern)

Паттерн, который распределяет обязанности между объектами и описывает их взаимодействие. В GoF их одиннадцать, среди них Strategy, Observer, Command, Iterator, Template Method.

Поверхностная копия (shallow copy)

Новый контейнер с теми же вложенными объектами: copy.copy, list(a), a[:]. Глубокая копия (copy.deepcopy) рекурсивно копирует и вложенные объекты.

Повторный вход (reentrancy)

Ситуация, когда обработчик вызывается снова, пока предыдущий вызов ещё не завершился. В VCL возникает при Application.ProcessMessages внутри обработчика события.

Под (Pod)

Минимальная единица запуска в Kubernetes: один или несколько контейнеров с общим IP и томами. Поды эфемерны — их создают и удаляют контроллеры вроде Deployment.

Подмена алгоритма (algorithm confusion)

Атака, при которой атакующий меняет alg в заголовке: на none или с RS256 на HS256, подписывая токен открытым ключом как HMAC-секретом. Защита — фиксированный набор алгоритмов, привязанный к ключу.

Поднятие (hoisting)

Объявления обрабатываются до выполнения кода области. Функции-объявления доступны целиком, var — со значением undefined, а let, const и class до строки объявления находятся во временной мёртвой зоне.

Подсказки Query Store (Query Store hints)

Подсказки вроде RECOMPILE или MAXDOP, которые прикрепляются к запросу в Query Store через sys.sp_query_store_set_hints, не меняя его текст. Доступны с SQL Server 2022.

Подсчёт ссылок (reference counting)

Основной механизм управления памятью CPython: у каждого объекта есть счётчик ссылок, и объект освобождается сразу, как только он падает до нуля. Циклы ссылок так не освобождаются.

Подсчёт ссылок в Delphi (reference counting)

Модель времени жизни, в которой у значения есть счётчик ссылок: компилятор увеличивает его при присваивании и уменьшает, когда ссылка исчезает, а при нуле память освобождается. В Delphi так живут строки, динамические массивы, интерфейсы и анонимные методы.

Подъём состояния (lifting state up)

Перенос state в ближайшего общего родителя компонентов, которым он нужен. Родитель передаёт детям значение и функцию изменения через props.

Поиск в глубину (DFS, depth-first search)

Обход графа, который идёт по одной ветви до конца и возвращается назад, через рекурсию или явный стек. O(V + E); основа для поиска циклов, компонент связности и топологической сортировки.

Поиск в ширину (BFS, breadth-first search)

Обход графа слоями через очередь: сначала все соседи, потом соседи соседей. Находит кратчайший путь по числу рёбер в невзвешенном графе за O(V + E).

Поиск представлений (view discovery)

Процесс, которым MVC находит файл представления по имени. По умолчанию сначала Views/{Controller}/{View}.cshtml, затем Views/Shared/{View}.cshtml.

Поколение GC (generation)

Логическая часть управляемой кучи по возрасту объектов: 0 — новые, 1 — пережившие одну сборку, 2 — долгоживущие. Молодые поколения собираются часто и быстро, сборка поколения 2 — полная.

Покрывающий индекс (covering index)

Индекс, в котором есть все колонки, нужные запросу, — в ключе или среди включённых. Запрос читает только его и не обращается к таблице.

Покрытие кода (code coverage)

Доля строк или ветвей кода, которые выполнились во время тестов. Показывает непроверенный код, но не доказывает, что выполненный код проверен. В .NET его считают coverlet и Microsoft Code Coverage.

Полиморфизм (polymorphism)

Способность одного кода работать с объектами разных типов. В ООП обычно имеют в виду полиморфизм подтипов: вызов виртуального метода выбирает реализацию по реальному типу объекта.

Политика авторизации (authorization policy)

Именованный набор требований (requirements) в ASP.NET Core. Регистрируется через AddAuthorizationBuilder().AddPolicy, применяется атрибутом [Authorize(Policy = "...")] или RequireAuthorization и выполнена, когда выполнены все её требования.

Политика одного источника (same-origin policy)

Правило браузера: скрипт может читать ответы только своего источника — той же схемы, хоста и порта. Отправлять запросы на чужие источники он может, читать ответы — нет.

Политика по умолчанию (default policy)

Политика, которую ASP.NET Core применяет к [Authorize] и RequireAuthorization() без имени политики. По умолчанию требует только аутентифицированного пользователя, меняется через SetDefaultPolicy.

Полусоединение (semi join)

Соединение, которое возвращает строки левой таблицы, у которых есть хотя бы одна пара справа, не размножая их и не добавляя колонок. В SQL его выражают через EXISTS или IN.

Получатель (receiver)

Значение, «на котором» вызывается член расширения: параметр this у классического метода или параметр блока extension(...) в C# 14.

Порождающий паттерн (creational pattern)

Паттерн, который отделяет код, использующий объект, от решения, какой объект создать и как. В GoF их пять: Abstract Factory, Builder, Factory Method, Prototype, Singleton.

Порты и адаптеры (гексагональная архитектура)

Стиль Алистера Кокберна: приложение общается с внешним миром только через порты — интерфейсы, которые оно само объявляет. Адаптер реализует порт под конкретную технологию: контроллер, репозиторий на EF Core, SMTP-клиент.

Порядок разрешения методов (MRO)

Порядок классов, в котором Python ищет атрибут при наследовании; доступен как Cls.__mro__. Строится C3-линеаризацией, по нему же работает super().

Посетитель (visitor)

Поведенческий паттерн GoF: операции над иерархией выносятся в отдельный класс-посетитель с методом на каждый тип, а элементы вызывают нужный метод через Accept. Добавлять операции легко, новые типы — трудно.

Последовательность (sequence)

Объект базы, который выдаёт возрастающие числа через nextval. Работает вне транзакций: откат не возвращает выданные значения, поэтому в ключах бывают пропуски. На последовательностях построены identity и serial.

Постоянные поля (persistent fields)

Объекты TField, созданные в Fields Editor и сохранённые в .dfm. Дают типизированный доступ и позволяют добавить вычисляемые и lookup-поля, но должны совпадать с колонками запроса по имени и типу.

Потерянное обновление (lost update)

Аномалия, при которой две транзакции читают одно значение, изменяют его и записывают, и запись последней затирает изменение первой. Типична для шаблона «прочитал в приложении — записал новое значение».

Поток данных (stream)

Объект Node.js для обработки данных порциями по мере поступления: Readable — источник, Writable — приёмник, Duplex — и то и другое, Transform — преобразование по дороге. Соединяют потоки через pipeline.

Потоковая загрузка компонентов (streaming)

Механизм VCL, который сохраняет published-свойства компонентов в .dfm и восстанавливает их: TReader создаёт объекты по именам классов и присваивает свойства через RTTI.

Поэтапная выкладка (rolling deployment)

Стратегия, при которой экземпляры за балансировщиком обновляются по одному или небольшими группами. Лишние серверы не нужны, но на время выкладки старая и новая версии работают одновременно.

Правила защиты ветки (branch protection)

Настройки репозитория, которые запрещают слияние в ветку вроде main, пока не пройдены обязательные проверки конвейера и не получено одобрение ревьюеров. В GitHub — protected branches и rulesets.

Правила отображения типов (MapRules)

Коллекция FormatOptions.MapRules в FireDAC: каждое правило заменяет тип данных, который вернул драйвер, на тип, удобный приложению. Ими подгоняют типы полей под старую библиотеку при миграции.

Правила claims (claim rules)

Правила ADFS на собственном языке: условие, затем => и действие issue или add. Определяют, какие claims попадут в токен и откуда взять их значения, например из атрибутов AD.

Правило сортировки (collation)

Правила сравнения и сортировки строк для языка. В PostgreSQL обычные collation детерминированные и различают регистр; поиск без учёта регистра даёт недетерминированная ICU-collation, тип citext или lower().

Правило трёх (rule of three)

Эвристика рефакторинга: два похожих фрагмента терпят, на третьем выносят общее. Приписывается Дону Робертсу, популяризирована Мартином Фаулером в книге «Рефакторинг».

Префиксные суммы (prefix sums)

Массив, где элемент i — сумма первых i элементов исходного. После подготовки за O(n) сумма любого отрезка считается за O(1) как разность двух префиксов.

Приведение типов (type coercion)

Автоматическое преобразование значения к другому типу, которое JavaScript делает сам: в ==, арифметике, if и шаблонных строках. Например, '5' * 2 даёт 10.

Привязка данных (data binding)

Связь шаблона с классом компонента: интерполяция {{ }}, привязка свойства [prop], события (event) и двусторонняя [(prop)]. Angular сам обновляет DOM при изменении значения.

Привязка к потоку (thread affinity)

Свойство примитива, который должен освободить тот же поток, что его захватил. Она есть у Monitor, Lock, Mutex и ReaderWriterLockSlim, поэтому их нельзя держать через await.

Привязка конфигурации (configuration binding)

Заполнение свойств объекта значениями из секции конфигурации: строки приводятся к типам свойств. По умолчанию работает через рефлексию, с .NET 8 есть генератор привязки для AOT.

Привязка модели (model binding)

Заполнение параметров action или обработчика значениями из запроса: маршрута, строки запроса, заголовков, формы или тела. Источник задают атрибуты [From...] или правила вывода.

Примитив (primitive)

Значение JavaScript, которое не является объектом и не имеет методов: string, number, bigint, boolean, undefined, null, symbol. Примитивы неизменяемы и сравниваются по значению.

Примитивная одержимость (primitive obsession)

Запах кода: понятия предметной области — email, деньги, идентификаторы — хранятся в string, decimal и int. Проверки размазываются по коду; лечится рефакторингом Replace Primitive with Object.

Принцип единственной ответственности (SRP)

Буква S в SOLID: у модуля одна причина для изменения. В формулировке Мартина из «Clean Architecture» — модуль отвечает перед одним актором, то есть перед одной группой людей, которые просят изменений.

Принцип инверсии зависимостей (DIP)

Буква D в SOLID: модули верхнего уровня не зависят от модулей нижнего уровня, оба зависят от абстракций. Внедрение зависимостей — практический способ его соблюдать.

Принцип наименьших привилегий (least privilege)

Пользователь или процесс получает только те права, которые нужны для его задачи, и только на нужное время. В NIST SP 800-53 это контроль AC-6.

Принцип открытости/закрытости (OCP)

Буква O в SOLID: модуль открыт для расширения и закрыт для изменения. Сформулирован Бертраном Мейером в 1988 году; Мартин достигает его через абстракции и полиморфизм.

Принцип подстановки Лисков (LSP)

Принцип SOLID: объект подтипа должен подходить везде, где ожидается базовый тип, без изменения правильности программы. Классический контрпример — квадрат, унаследованный от прямоугольника.

Принцип разделения интерфейсов (ISP)

Буква I в SOLID: клиент не должен зависеть от методов, которыми не пользуется. Широкий интерфейс делят на несколько узких по нуждам клиентов.

Приоритет типов данных (data type precedence)

Правило, по которому SQL Server выбирает общий тип для сравнения: тип с меньшим приоритетом приводится к большему. nvarchar старше varchar, int старше строковых типов.

Приоритет шаблона маршрута (route precedence)

Правило выбора среди нескольких подходящих маршрутов: побеждает более конкретный шаблон. Литерал сильнее параметра, параметр с ограничением сильнее параметра без него, catch-all слабее всех.

Проблема выражения (expression problem)

Термин Филипа Вадлера (1998): трудно сделать так, чтобы без правки старого кода можно было добавлять и новые варианты данных, и новые операции. ООП облегчает первое, функции с pattern matching — второе.

Проблема N+1

Антипаттерн доступа к данным: один запрос загружает список из N элементов, а затем для каждого выполняется ещё один запрос за связанными данными. Типичная причина — ленивая загрузка в цикле.

Провайдер базы данных EF Core

NuGet-пакет, который учит EF Core работать с конкретной СУБД: переводит запросы в её диалект SQL, сопоставляет типы и генерирует миграции. Например, Microsoft.EntityFrameworkCore.SqlServer и Npgsql.EntityFrameworkCore.PostgreSQL.

Провайдер запросов (query provider)

Реализация IQueryProvider, которая строит и выполняет запросы IQueryable<T>: переводит дерево выражений в язык источника данных. Пример — провайдер EF Core, который генерирует SQL.

Провайдер конфигурации (configuration provider)

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

Провайдер логирования (logging provider)

Реализация ILoggerProvider, которая доставляет записи в конкретное место: консоль, Debug, EventSource, файл или внешнюю систему. Один логгер пишет во все подключённые провайдеры.

Провайдер NestJS (provider)

Всё, что DI-контейнер NestJS умеет создать и внедрить: сервис, репозиторий, фабрика, значение. Обычно это класс с @Injectable(), зарегистрированный в providers модуля.

Проверка scope (ValidateScopes)

Опция ServiceProviderOptions, при которой контейнер запрещает разрешать scoped-сервисы из корневого провайдера и внедрять их в singleton. По умолчанию включена в окружении Development.

Проверщик типов (type checker)

Инструмент статического анализа, который проверяет аннотации типов без запуска кода: mypy, pyright. Сам интерпретатор аннотации не проверяет.

Провижининг (provisioning)

Автоматическое создание учётных записей и выдача прав в целевых системах — AD, SaaS, внутренних приложениях — и обратный процесс, отзыв. Стандартный протокол для этого — SCIM (RFC 7643, RFC 7644).

Продолжение (continuation)

Код, который выполняется после завершения задачи. Для async-метода это оставшаяся часть метода после await.

Проекция (projection)

Выбор из источника только нужных полей, например Select в DTO в LINQ-запросе. EF Core тогда читает из базы лишь эти столбцы и не отслеживает сущности.

Производитель — потребитель (producer-consumer)

Схема, где одни потоки кладут работу в общую очередь, а другие забирают и обрабатывают. Очередь развязывает темп производства и обработки.

Промис (Promise)

Объект с результатом асинхронной операции, который будет выполнен (fulfilled) значением или отклонён (rejected) ошибкой. Колбэки then, catch и finally выполняются как микрозадачи.

Пространства имён Linux (namespaces)

Механизм ядра Linux, который даёт процессу собственное представление о ресурсах: списке процессов, сети, точках монтирования, hostname. Основа изоляции контейнеров.

Протокол (typing.Protocol)

Описание интерфейса для структурной типизации (PEP 544, Python 3.8): класс совместим с протоколом, если у него есть нужные методы, без явного наследования. Проверяется mypy и pyright.

Профили Compose (profiles)

Метки сервисов в Compose: сервис с профилем запускается, только если профиль включён через --profile или COMPOSE_PROFILES. Сервисы без профиля запускаются всегда.

Публикация образа средствами SDK (PublishContainer)

Сборка образа командой dotnet publish /t:PublishContainer без Dockerfile и Docker-демона. SDK сам выбирает базовый образ, пользователя и порт; настройки — свойства Container* в проекте.

Публичный клиент

Клиент, который не может хранить секрет: SPA, мобильное или десктопное приложение. Его код доступен пользователю, поэтому PKCE для него обязателен.

Пул контекстов (DbContext pooling)

Переиспользование экземпляров DbContext: при освобождении контекст сбрасывается и возвращается в пул. Включается AddDbContextPool или PooledDbContextFactory; с пулом соединений ADO.NET не связан.

Пул потоков (thread pool)

Набор фоновых потоков, которые CLR создаёт по мере нужды и переиспользует для коротких задач. Сюда попадают Task.Run, продолжения async-методов и колбэки таймеров.

Пул потоков FastAPI

Пул, в котором FastAPI выполняет эндпоинты и зависимости, объявленные через обычный def. Работает через AnyIO и по умолчанию ограничен 40 одновременными вызовами на процесс.

Пул потоков libuv (UV_THREADPOOL_SIZE)

Общий на процесс пул потоков, где libuv выполняет операции без неблокирующего API ОС: файлы, dns.lookup, часть crypto и асинхронный zlib. По умолчанию 4 потока, максимум 1024, размер задаёт переменная окружения UV_THREADPOOL_SIZE.

Пул приложений IIS (application pool)

Группа сайтов IIS, которую обслуживают рабочие процессы w3wp.exe с общими настройками: учётная запись, разрядность, рециклинг. Для in-process ASP.NET Core нужен свой пул на каждое приложение.

Пул процессов (ProcessPoolExecutor)

Исполнитель из concurrent.futures, который запускает функции в отдельных процессах. У каждого процесса свой интерпретатор и свой GIL, а аргументы и результаты передаются через pickle.

Равенство по значению (value equality)

Два экземпляра равны, если у них один тип и равные значения полей, даже если это разные объекты. Так по умолчанию сравниваются структуры и records, а классы — по ссылке.

Разброс срока жизни (TTL jitter)

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

Разбухание таблицы (bloat)

Место в таблице или индексе, занятое мёртвыми версиями и пустотами после них. Запросы читают лишние страницы; обычный VACUUM место переиспользует, но ОС не возвращает.

Разделение кода (code splitting)

Разбиение бандла на части, которые загружаются по требованию через динамический import(): по маршрутам или по редко используемым функциям. Уменьшает стартовый объём JS.

Разделение обязанностей (separation of duties, SoD)

Правило, по которому критичную операцию не выполняет целиком один человек: кто создаёт платёж, тот его не утверждает. В RBAC — запрет конфликтных ролей у одного пользователя (статический) или в одной сессии (динамический).

Разделение страницы (page split)

Вставка в заполненную страницу индекса: SQL Server выделяет новую страницу и переносит в неё часть строк. Это лишняя запись в журнал, фрагментация и полупустые страницы.

Разделение структуры (structural sharing)

Приём неизменяемых структур данных: новая версия переиспользует неизменённые части старой. ImmutableList<T>.Add создаёт O(log n) новых узлов дерева, а остальные узлы общие.

Размеченное объединение (discriminated union)

Union объектных типов с общим полем-меткой литерального типа, например kind или status. Проверка метки сужает значение до одного варианта.

Размотка стека (stack unwinding)

Вторая фаза обработки исключения: рантайм снимает кадры стека от места выброса до найденного обработчика и по пути выполняет блоки finally.

Рамка окна (ROWS, RANGE)

Часть OVER, которая задаёт, какие строки относительно текущей входят в расчёт. ROWS считает физические строки, RANGE — значения ключа сортировки; при ORDER BY без рамки действует RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Распределённая блокировка

Блокировка, общая для нескольких процессов или узлов, обычно в Redis или базе данных. Требует таймаута, потому что держатель может упасть, не сняв её.

Распределённая система контроля версий (DVCS)

Система контроля версий, в которой у каждого участника полная копия репозитория со всей историей. Коммиты создаются локально, а с сервером и другими копиями обмениваются отдельными командами. Примеры — Git и Mercurial; SVN, наоборот, централизованная.

Распределённая транзакция (distributed transaction)

Транзакция над несколькими ресурсами (базами, соединениями), которую координатор фиксирует двухфазным коммитом. В Windows это MSDTC; в .NET 7+ поддерживается только на Windows и включается явно.

Распределённая трассировка (distributed tracing)

Запись пути одного запроса через все сервисы в виде дерева спанов с общим trace id. Показывает, где тратится время и где произошла ошибка.

Распределённый кеш (IDistributedCache)

Кеш во внешнем хранилище (Redis, SQL Server, Postgres), общий для всех экземпляров приложения. Хранит массивы байт, поэтому сериализация лежит на приложении.

Распределённый монолит (distributed monolith)

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

Расширенный RTTI и атрибуты

Информация о типах во время выполнения из модуля System.Rtti: поля, методы и свойства класса, а не только published. Хранит атрибуты вроде [Test], по которым работают сериализаторы, ORM и DUnitX. Появился в Delphi 2010.

Реализация по умолчанию в интерфейсе (default interface method)

Член интерфейса с телом (C# 8). Используется, если тип не дал свою реализацию; вызывается только через ссылку типа интерфейса. Требует рантайма .NET Core 3.0+.

Ребалансировка (rebalance)

Перераспределение партиций между участниками группы потребителей, когда участник приходит, уходит или перестаёт отвечать. Записи, обработанные, но не закоммиченные до ребалансировки, приходят повторно.

Ревизия Alembic

Файл миграции с идентификатором revision, ссылкой на родителя down_revision и функциями upgrade() и downgrade(). Ревизии образуют граф версий схемы.

Регрессионное тестирование

Повторная проверка уже работавшей функциональности после изменений. При миграции им убеждаются, что новая версия ведёт себя так же, как старая.

Реентерабельная блокировка (reentrant lock)

Блокировка, в которую поток-владелец может войти повторно, не дожидаясь сам себя; выйти нужно столько же раз. Monitor и Lock реентерабельны, SemaphoreSlim — нет.

Реестр образов (container registry)

Сервис хранения и раздачи образов: Docker Hub, mcr.microsoft.com, Azure Container Registry, GitHub Container Registry. Образ адресуют по тегу (изменяемый) или по digest (неизменяемый).

Режим блокировки (lock mode)

Тип блокировки, который определяет, с какими другими блокировками она совместима. Основные режимы SQL Server — S (чтение), U (чтение перед изменением), X (изменение) и намеренные IS, IX, SIX.

Рекурсивный CTE

CTE, который ссылается сам на себя: якорная часть даёт начальные строки, а рекурсивная через UNION ALL повторяется, пока возвращает строки. Им обходят иерархии; в SQL Server глубину ограничивает MAXRECURSION, по умолчанию 100.

Рекурсия (recursion)

Приём, при котором функция вызывает саму себя для меньшей подзадачи. Нужны базовый случай без рекурсии и шаг, который к нему приближает; каждый вызов занимает кадр стека.

Реплика для чтения (readable secondary)

Вторичная реплика группы доступности Always On, к которой разрешены read-only подключения. Данные отстают от первичной на время доставки и применения журнала, запросы идут под snapshot isolation.

Рециклинг пула (app pool recycling)

Плановый или вынужденный перезапуск рабочего процесса IIS: по расписанию, по лимиту памяти, при изменении конфигурации. По умолчанию новый процесс стартует до остановки старого (overlapped recycle).

Ровно один раз (exactly-once)

Гарантия, при которой каждое сообщение обрабатывается ровно один раз. В Kafka достигается идемпотентным producer и транзакциями, но только для записей внутри Kafka; для внешних систем её заменяют at-least-once и дедупликацией.

Родительский контрол (Parent)

Оконный контрол (TWinControl), внутри которого отображается контрол. Отвечает за положение и отрисовку дочерних контролов и тоже освобождает их вместе с собой.

Ролевой интерфейс (role interface)

Интерфейс, который описывает одну роль объекта для конкретного клиента, а не все его публичные методы. Противоположность — заголовочный интерфейс (header interface), копирующий класс целиком.

Ротация ключей подписи

Плановая замена ключа, которым издатель подписывает токены. Новый ключ публикуют в JWKS заранее, а старый держат, пока не истекут подписанные им токены, — иначе проверяющие с кешем отвергнут токены.

Ротация refresh-токенов

Сервер авторизации выдаёт новый refresh-токен при каждом обновлении, а старый делает недействительным. Повторное предъявление старого — признак кражи, и сервер отзывает всю цепочку.

Сага (saga)

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

Сборка (assembly)

Файл .dll или .exe с IL-кодом, метаданными и манифестом. Единица развёртывания, версионирования и загрузки кода в .NET.

Сборщик мусора (garbage collector, GC)

Часть CLR, которая выделяет память в управляемой куче и автоматически освобождает память объектов, недостижимых от корней. В .NET это трассирующий сборщик с поколениями и уплотнением.

Сверка (reconciliation)

Периодическое сравнение данных двух систем: количество, суммы и номера документов за период. Находит то, что потерялось или задвоилось, несмотря на квитанции и повторы.

Свойство Delphi (property)

Член класса, который выглядит как поле, но читается и пишется через спецификаторы read и write: напрямую из поля или через метод. Без write свойство доступно только для чтения.

Связанность по времени (temporal coupling)

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

Связанный источник отмены (linked token source)

CancellationTokenSource, созданный через CreateLinkedTokenSource: он отменяется вместе с любым из родительских токенов. Его обязательно освобождают, иначе подписка на родителя остаётся.

Связность (cohesion)

Мера того, насколько члены модуля или класса работают на одну задачу. Высокая связность — данные и методы, которые с ними работают, вместе; низкая — классы вроде Utils.

Связный список (linked list)

Цепочка узлов, где каждый узел хранит элемент и ссылки на соседей. Вставка и удаление по известному узлу — O(1), но доступа по индексу нет. В .NET это двусвязный LinkedList<T>.

Связывание имени (name binding)

Присваивание в Python привязывает имя к объекту, а не кладёт значение в ячейку. b = a даёт второе имя тому же объекту, копии не создаётся.

Сглаживание нагрузки очередью (queue-based load leveling)

Паттерн, при котором запросы кладут в очередь, а обработчики разбирают её с постоянной скоростью. Пик превращается в рост очереди и задержку, а не в перегрузку сервиса.

Семантика acquire/release

Порядок для пары операций: после чтения с acquire последующие обращения не выполняются раньше него, а до записи с release предыдущие обращения не задерживаются после неё. Так работают Volatile.Read и Volatile.Write.

Семантический HTML

Разметка элементами по смыслу: button, nav, main, label, заголовки — вместо div и span. Даёт роль, поведение клавиатуры и структуру для скринридеров без дополнительного кода.

Семантическое версионирование (SemVer)

Схема версий MAJOR.MINOR.PATCH: major растёт при ломающих изменениях, minor — при новых обратно совместимых возможностях, patch — при исправлениях. Суффикс через дефис помечает предварительную версию, через плюс — метаданные сборки.

Сервер авторизации (authorization server)

Сервис, который аутентифицирует пользователя и выдаёт токены: Keycloak, Microsoft Entra ID, ADFS, Duende IdentityServer. В терминах OIDC — OpenID Provider.

Серверное состояние (server state)

Копия данных, владелец которых — сервер. Она устаревает без ведома клиента, поэтому её кешируют, перезапрашивают и инвалидируют, а не хранят как обычный state.

Серверные компоненты (React Server Components, RSC)

Компоненты, которые выполняются только на сервере или при сборке. Могут быть async и читать данные напрямую, их код не попадает в браузер, но state и обработчиков событий у них нет.

Серверный рендеринг (SSR)

Формирование HTML страницы на сервере на каждый запрос. Пользователь сразу видит содержимое, а JS затем делает страницу интерактивной.

Сервисный билет (service ticket)

Билет Kerberos к конкретной службе, который KDC выдаёт по TGT. Зашифрован ключом учётки, на которой зарегистрирован SPN службы, поэтому служба проверяет его сама, без обращения к KDC.

Сигнал (signal)

Обёртка над значением, которая сообщает потребителям о его изменении: signal() для записываемого значения, computed() для производного, effect() для побочных действий. Стабильны с Angular 17.

Сигнальные входы и выходы (input, output, model)

Функции input(), output() и model(), которые заменяют декораторы @Input() и @Output(). Вход — сигнал только для чтения, model() — двусторонняя привязка. Стабильны с Angular 19.

Симптомный алерт

Алерт на то, что видит пользователь: ошибки, задержка, недоступность. Противоположность причинному алерту на внутренний показатель вроде загрузки CPU.

Синхронные реплики (in-sync replicas, ISR)

Реплики партиции, которые не отстают от лидера. С acks=all запись подтверждается, когда её получили все ISR, а min.insync.replicas задаёт, сколько их должно быть минимум.

Скалярная пользовательская функция (scalar UDF)

Функция T-SQL, которая возвращает одно значение. До SQL Server 2019 вызывается на каждую строку и запрещает параллельный план; с 2019 на уровне совместимости 150 подходящие функции встраиваются в запрос.

Сквозная функциональность (cross-cutting concern)

Логика, нужная многим частям приложения независимо от бизнес-задачи: логирование, авторизация, кеширование, обработка ошибок. Её выносят в middleware, фильтры или декораторы.

Скользящее истечение (sliding expiration)

Запись удаляется, если к ней не обращались заданный интервал; каждое чтение продлевает срок. Без абсолютного истечения часто читаемая запись не устареет никогда.

Скользящее окно (sliding window)

Приём для задач о подотрезках: окно [left, right] расширяется вправо и сжимается слева, когда нарушено условие. Каждый индекс сдвигается не больше одного раза, поэтому O(n).

Скринридер (screen reader)

Программа, которая озвучивает интерфейс или выводит его на брайлевский дисплей: NVDA, JAWS, VoiceOver, TalkBack. Читает дерево доступности, а не пиксели.

Скрытие метода (method hiding)

Объявление в наследнике члена с тем же именем, что у базового класса, без override; модификатор new делает это явным. Какой метод вызовется, решает статический тип переменной.

Слабая ссылка [weak]

Атрибут интерфейсной ссылки, который не увеличивает счётчик ссылок. Когда объект уничтожается, рантайм обнуляет все такие ссылки; за это платят учётом слабых ссылок. На Win32 и Win64 доступен с Delphi 10.1 Berlin.

Слоёная архитектура (layered, n-tier)

Код делится на горизонтальные слои: представление, бизнес-логика, доступ к данным. Каждый слой обращается только к нижнему, поэтому бизнес-логика зависит от слоя данных.

Сложность по памяти (space complexity)

Оценка того, сколько дополнительной памяти требует алгоритм с ростом входа n, без учёта самого входа. Проход с HashSet<T> — O(n) памяти, двойной цикл без коллекций — O(1).

Слой образа (image layer)

Набор изменений файловой системы, который даёт одна инструкция Dockerfile (RUN, COPY, ADD). Слои только для чтения, адресуются хешем и кешируются: неизменённые слои не пересобираются.

Случайная сложность (accidental complexity)

Сложность, которую вносит решение, а не задача: лишние слои, абстракции, инструменты. Противопоставлена существенной сложности в эссе Фреда Брукса «No Silver Bullet» (1986).

Смещение (offset)

Номер записи внутри партиции Kafka. Группа потребителей коммитит offset следующей непрочитанной записи во внутренний топик __consumer_offsets и после перезапуска продолжает с него.

Снапшот (snapshot) в event sourcing

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

Снапшот модели (model snapshot)

Файл <Context>ModelSnapshot.cs с описанием модели после последней миграции. С ним EF сравнивает текущую модель, чтобы сгенерировать следующую миграцию; в командной работе он источник конфликтов.

Снимок кучи (heap snapshot)

Файл .heapsnapshot со всеми объектами кучи V8 и ссылками между ними. Два снимка сравнивают в Chrome DevTools, чтобы найти растущие объекты и то, что их удерживает.

Событие (event)

Член класса на основе делегата, который снаружи разрешает только подписку += и отписку -=. Вызвать событие может только объявивший его тип.

Согласование (reconciliation) в React

Алгоритм, которым React сравнивает новое дерево элементов с прошлым и решает, какие узлы DOM обновить, создать или удалить. Элементы списка сопоставляются по key.

Согласованность в конечном счёте (eventual consistency)

Модель, в которой данные разных узлов или сервисов могут какое-то время расходиться, но сходятся, когда все изменения доставлены. Цена отказа от распределённых транзакций.

Соль (salt)

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

Сопоставление с образцом (pattern matching)

Проверка значения по шаблону — типу, свойствам, диапазону, списку — с одновременным извлечением данных в переменные. Работает в is, switch и switch-выражениях.

Сортировка слиянием (merge sort)

Сортировка, которая делит массив пополам, сортирует половины и сливает их. Всегда O(n log n) и стабильна, но требует O(n) дополнительной памяти.

Состояние гонки (race condition)

Ошибка, при которой результат программы зависит от того, в каком порядке потоки обращаются к общим данным. Классический пример — потерянное увеличение при count++ из двух потоков.

Состояние компонента (state)

Данные, которые React хранит для экземпляра компонента между рендерами. Меняются только через функцию из useState, и каждое изменение запускает новый рендер.

Состояние набора данных (State)

Значение свойства State — dsBrowse, dsEdit, dsInsert и другие, — которое определяет, что можно делать с текущей записью. Методы Edit, Insert, Post и Cancel переключают состояния.

Состояние сущности (EntityState)

Метка, по которой EF Core решает, что делать с сущностью при SaveChanges: Added — вставить, Modified — обновить, Deleted — удалить, Unchanged и Detached — ничего.

Спан (span)

Одна операция внутри трейса: входящий запрос, SQL-запрос или HTTP-вызов. У спана есть имя, начало, длительность, атрибуты и ссылка на родительский спан. В .NET спан — это Activity.

Спекулятивная общность (speculative generality)

Запах кода из каталога Фаулера: абстракции, параметры и хуки «на будущее», которыми никто не пользуется. Лечится удалением лишнего.

Специфичность селектора (specificity)

Вес селектора в каскаде — тройка «id, классы и атрибуты и псевдоклассы, теги и псевдоэлементы». При равном происхождении и слое побеждает правило с большей специфичностью.

Списковый шаблон (list pattern)

Шаблон вида [1, .., var last] (C# 11), который сопоставляет элементы массива, списка или Span<T> по позициям; .. означает любое число элементов.

Список смежности (adjacency list)

Способ хранить граф: для каждой вершины — список её соседей, в C# обычно Dictionary<T, List<T>>. Занимает O(V + E) памяти и подходит для разреженных графов.

Срок хранения (retention)

Политика, по которой брокер удаляет старые данные лога: по времени (retention.ms, по умолчанию 7 дней), по размеру или уплотнением по ключу. Чтение данные не удаляет.

Ссылка (ref) и HEAD

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

Ссылочное равенство (reference equality)

Две ссылки указывают на один и тот же объект. Проверяется object.ReferenceEquals; так же по умолчанию работают == и Equals у классов.

Ссылочный тип (reference type)

Тип, переменная которого содержит ссылку на объект в управляемой куче; при присваивании копируется ссылка. В C# это class, interface, string, массивы и делегаты.

Стаб (stub)

Дублёр, который возвращает заранее заданные ответы и так управляет входными данными тестируемого кода. Тест по стабу ничего не проверяет.

Стабильная сортировка (stable sort)

Сортировка, которая сохраняет исходный порядок элементов с равными ключами. Enumerable.OrderBy стабилен, а Array.Sort и List<T>.Sort — нет.

Стандартные claims (iss, sub, aud, exp)

Зарегистрированные поля полезной нагрузки JWT: iss — издатель, sub — субъект, aud — для кого токен, exp и nbf — границы времени жизни, iat — время выпуска, jti — идентификатор токена. Проверять нужно подпись вместе с iss, aud и exp, иначе чужой токен пройдёт.

Статистика (statistics)

Объект с распределением значений колонок: гистограмма по первой колонке и плотность по префиксам. По ней оптимизатор оценивает, сколько строк вернёт условие.

Статическая лямбда (static lambda)

Лямбда с модификатором static (C# 9), которой запрещено захватывать локальные переменные и this. Гарантирует, что не появится замыкание и делегат можно кешировать.

Статический абстрактный член интерфейса (static abstract member)

Статический метод, свойство или оператор, который интерфейс требует от реализующего типа (C# 11). Вызывается через параметр типа, например T.Zero; на этом построена generic math.

Стек вызовов (call stack)

Память потока, куда каждый вызов метода кладёт свой кадр с параметрами, локальными переменными и адресом возврата. Освобождается автоматически при выходе из метода; размер ограничен, а переполнение завершает процесс.

Стек вызовов JavaScript (call stack)

Стек кадров выполняемых функций в единственном потоке JavaScript. Пока он не пуст, event loop не берёт новых задач; переполнение выбрасывает RangeError.

Степень параллелизма (degree of parallelism)

Максимальное число операций, которые выполняются одновременно. В Parallel.ForEachAsync её задают через ParallelOptions.MaxDegreeOfParallelism.

Стирание типов (type erasure)

Компилятор TypeScript удаляет аннотации типов при выводе JavaScript. В рантайме типов нет: их нельзя проверить, получить рефлексией или использовать как значение.

Сторонние cookie (third-party cookies)

Cookie другого сайта, загруженного внутри страницы, например в iframe. Safari их блокирует, Firefox изолирует по сайту верхнего уровня, в Chrome их может отключить пользователь.

Стратегия (Strategy)

Поведенческий паттерн: семейство взаимозаменяемых алгоритмов за общим интерфейсом, нужный передаётся снаружи. В C# стратегией часто служит делегат или IComparer<T>.

Стрелочная функция (arrow function)

Краткая запись функции (x) => x * 2. Не имеет своих this, arguments и super — берёт их из внешней области — и не может быть вызвана через new.

Стрельба дробью (shotgun surgery)

Запах кода: одно логическое изменение требует мелких правок во многих классах. Лечится сбором связанной логики в один модуль, например рефакторингами Move Function и Combine Functions into Class.

Стриминг HTML (streaming SSR)

Серверный рендеринг, при котором HTML отправляется частями: сначала оболочка с fallback, затем готовые фрагменты в том же ответе. Медленные данные не задерживают всю страницу.

Строгий режим TypeScript (strict)

Флаг tsconfig.json, который включает семейство строгих проверок: strictNullChecks, noImplicitAny, strictFunctionTypes и другие. С TypeScript 6.0 включён по умолчанию.

Строгое равенство (===)

Сравнение без приведения типов: значения разных типов не равны, объекты равны только при совпадении ссылки. Единственная странность — NaN === NaN даёт false.

Строитель (Builder)

Порождающий паттерн: сложный объект собирается пошаговыми вызовами отдельного объекта-сборщика, а итоговый метод Build проверяет данные и возвращает результат.

Структурная типизация (structural typing)

Совместимость типов определяется набором членов, а не именем или объявленным наследованием. Так работает TypeScript; C# и Java используют номинальную типизацию.

Структурное логирование (structured logging)

Запись логов как событий со свойствами, а не как готовых строк. По свойствам можно искать, фильтровать и строить агрегаты в Elastic, Seq или другом хранилище.

Структурный паттерн (structural pattern)

Паттерн, который описывает, как собирать классы и объекты в более крупные структуры. В GoF их семь: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.

Сужение типа (narrowing)

Уточнение типа переменной компилятором по проверкам в коде: после typeof x === 'string', instanceof, in или сравнения с литералом в ветке известен более узкий тип.

Суррогатный ключ

Искусственный идентификатор строки без смысла в предметной области: число из IDENTITY или SEQUENCE, GUID. Не меняется, поэтому удобен для внешних ключей.

Схема «звезда» (star schema)

Модель хранилища: в центре таблица фактов с мерами и ключами (продажи), вокруг — денормализованные таблицы измерений (дата, магазин, товар). Запрос — один уровень соединений и агрегат.

Схема аутентификации

Именованная регистрация обработчика аутентификации в ASP.NET Core: Cookies, OpenIdConnect, Bearer. Схема определяет, как аутентифицировать запрос, выполнить challenge, вход и выход.

Схема Prisma (schema.prisma)

Файл на языке схем Prisma с источником данных, генераторами и моделями. Из него Prisma Migrate строит SQL-миграции, а генератор — типизированный клиент.

Таблица виртуальных методов (vtable)

Структура типа в рантайме со слотами адресов его виртуальных методов. Виртуальный вызов берёт адрес из слота таблицы реального типа объекта.

Таблица виртуальных методов Delphi (VMT)

Структура класса со слотами адресов всех его виртуальных методов, включая унаследованные. Каждый объект начинается с указателя на VMT своего класса, и вызов virtual-метода берёт адрес из нужного слота.

Таблица истории миграций

Служебная таблица __EFMigrationsHistory в базе со списком применённых миграций и версией EF. По ней database update, bundle и идемпотентный скрипт определяют, что ещё не применено.

Таблица-куча (heap)

Таблица, строки которой хранятся без упорядочивания по ключу. В PostgreSQL все таблицы — кучи, а индексы, включая первичный ключ, ссылаются на физический адрес версии строки (ctid).

Табличный параметр (table-valued parameter, TVP)

Параметр пользовательского табличного типа (CREATE TYPE ... AS TABLE), через который клиент передаёт набор строк одним вызовом. В процедуре объявляется READONLY, статистики по его колонкам нет.

Табуляция (tabulation)

ДП снизу вверх: таблицу ответов заполняют циклом от базовых случаев к целевому, без рекурсии. Позволяет хранить только последние строки таблицы и экономить память.

Таймаут запроса (request timeout)

Middleware ASP.NET Core (.NET 8+), которое по истечении заданного времени отменяет токен HttpContext.RequestAborted. Если приложение не обработало отмену, клиент получает 504.

Теги кеша

Метки, которыми помечают записи кеша, чтобы сбросить всю группу одним вызовом: EvictByTagAsync в output cache, RemoveByTagAsync в HybridCache.

Теорема CAP

Утверждение Brewer, доказанное Gilbert и Lynch в 2002 году: при сетевом разделении распределённая система не может одновременно сохранить линеаризуемость (C) и ответ каждого работающего узла (A).

Терминальный middleware

Middleware, который сам формирует ответ и не вызывает следующий компонент, например app.Run. Всё, что зарегистрировано после него в той же ветке, не выполняется.

Терминация TLS (TLS termination)

Расшифровка HTTPS на прокси или балансировщике, после которой запрос идёт к приложению уже по HTTP. Сертификат нужен только в точке терминации.

Тест архитектуры (architecture test)

Автоматический тест, который проверяет правила зависимостей в коде: например, что домен не ссылается на EF Core, а один модуль не обращается к внутренностям другого. В .NET их пишут на NetArchTest или ArchUnitNET.

Тестовый модуль NestJS (Test.createTestingModule)

API пакета @nestjs/testing, который собирает модуль приложения для теста и позволяет подменить провайдеры через overrideProvider. Из него создают и полноценное приложение для e2e-тестов.

Тип never

Тип без значений: результат функции, которая не возвращается, и остаток после исчерпывающего сужения. Присваивание в never в ветке default проверяет, что switch обработал все варианты.

Типизированный хаб (Hub<T>)

Хаб, у которого методы клиента описаны интерфейсом. Вместо SendAsync("Name", ...) вызывается метод интерфейса, и опечатку в имени ловит компилятор.

Токен внедрения (injection token)

Ключ, по которому контейнер NestJS находит провайдер, когда типа класса недостаточно: строка, Symbol или абстрактный класс. Регистрируется как { provide: TOKEN, useClass: Impl }, внедряется через @Inject(TOKEN).

Токен конкурентности (concurrency token)

Свойство, исходное значение которого EF Core добавляет в WHERE при UPDATE и DELETE. Если строку успели изменить, затронуто ноль строк, и EF бросает DbUpdateConcurrencyException. На SQL Server обычно rowversion, в PostgreSQL — xmin.

Токен отмены (CancellationToken)

Структура, через которую операция узнаёт о запросе отмены. Сам токен отменить нельзя — только проверить IsCancellationRequested или подписаться через Register.

Токен, привязанный к отправителю (sender-constrained)

Токен, которым может воспользоваться только владелец определённого ключа: через сертификат mTLS (RFC 8705) или подпись DPoP (RFC 9449). Украденный без ключа токен бесполезен.

Только именованный параметр (keyword-only)

Параметр после * в сигнатуре, который можно передать только по имени. Параметры до / (с Python 3.8) — наоборот, только позиционные.

Том (volume)

Хранилище данных вне записываемого слоя контейнера, которым управляет Docker. Переживает удаление контейнера; в отличие от bind mount не привязан к папке хоста.

Топологическая сортировка (topological sort)

Упорядочивание вершин ориентированного графа без циклов так, чтобы каждое ребро шло от более ранней вершины к более поздней. Алгоритм Кана делает это за O(V + E) и заодно находит циклы.

Точка невозврата (pivot transaction)

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

Точка-точка (point-to-point)

Модель обмена сообщениями, в которой каждое сообщение очереди получает ровно один из конкурирующих получателей. Так распределяют работу между экземплярами сервиса.

Транзакция

Группа операций с базой, которая выполняется как одно целое: либо фиксируется полностью (COMMIT), либо полностью отменяется (ROLLBACK).

Транзитивная зависимость

Пакет, который попал в проект не напрямую, а как зависимость другого пакета. NuGet выбирает для неё одну версию на весь проект.

Трансформация claims (IClaimsTransformation)

Интерфейс ASP.NET Core: его TransformAsync вызывается после успешной аутентификации и может дополнить principal данными приложения. Срабатывает на каждом запросе, иногда несколько раз, поэтому должен быть идемпотентным.

Трассировка стека (stack trace)

Список вызовов от места выброса исключения до места перехвата, сохранённый в Exception.StackTrace. throw; его сохраняет, throw ex; начинает заново.

Требование авторизации (authorization requirement)

Класс с маркерным интерфейсом IAuthorizationRequirement: описывает правило и его параметры, например нужное право или минимальный возраст. Саму проверку выполняют handlers.

Трекер изменений (change tracker)

Часть DbContext, которая хранит отслеживаемые сущности, их состояния и исходные значения. По разнице между исходными и текущими значениями SaveChanges строит INSERT, UPDATE и DELETE.

Трёхзначная логика

В SQL условие бывает TRUE, FALSE или UNKNOWN. Любое сравнение с NULL даёт UNKNOWN, а WHERE, ON и HAVING пропускают только TRUE — отсюда ловушки NOT IN и <>.

Удалённый репозиторий (remote)

Именованная ссылка на другую копию репозитория, обычно на сервере: origin создаётся при git clone. С ним обмениваются коммитами командами fetch, pull и push.

Уплотнение кучи (compaction)

Фаза сборки, в которой GC сдвигает выжившие объекты вплотную друг к другу и обновляет все ссылки на них. Убирает фрагментацию, но стоит дороже, чем просто внести мёртвые участки в список свободных блоков (sweep).

Уплотнение лога (log compaction)

Политика хранения топика Kafka (cleanup.policy=compact), при которой для каждого ключа остаётся последняя запись. Запись с ключом и пустым значением (tombstone) удаляет ключ.

Управляемая идентичность (managed identity)

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

Управляемая куча (managed heap)

Область памяти, где CLR размещает объекты ссылочных типов. Память в ней выделяет и освобождает сборщик мусора.

Управляемый тип Delphi (managed type)

Тип, временем жизни которого управляет компилятор: длинные строки, динамические массивы, интерфейсы, варианты, а также записи с полями таких типов. Компилятор сам инициализирует их, считает ссылки и освобождает через неявный try..finally.

Уровень изоляции (isolation level)

Настройка транзакции, которая определяет, какие изменения параллельных транзакций она видит и какие аномалии допустимы. Стандарт SQL задаёт четыре уровня: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE.

Ускоренное восстановление базы данных (ADR)

Механизм SQL Server 2019+, который хранит версии строк в самой базе. Откат и восстановление после сбоя становятся почти мгновенными, а журнал усекается даже при долгих транзакциях.

Условная компиляция

Директивы {$IFDEF}, {$IF} и {$ENDIF}, которые включают или исключают участки кода при сборке. Символ UNICODE позволяет держать один исходный код для старой и новой Delphi.

Условный оператор if в выражениях

Тернарный оператор Delphi 13: X := if A > B then A else B;. Работает внутри любого выражения, а его тип — общий тип обеих ветвей.

Условный тип (conditional type)

Тип вида T extends U ? X : Y, который выбирает результат по совместимости типов. С infer извлекает часть типа; над union по умолчанию распределяется по вариантам.

Устаревшее замыкание (stale closure)

Функция, которая захватила props или state старого рендера и продолжает работать с ними. Типично для эффектов и таймеров с неполным массивом зависимостей.

Утечка памяти (memory leak)

Рост потребления памяти из-за объектов, которые больше не нужны, но остаются достижимыми, или из-за неосвобождённых неуправляемых ресурсов. В .NET это обычно забытые подписки на события, статические коллекции и кеши без ограничений.

Утиная типизация (duck typing)

Объект подходит, если у него есть нужные методы и атрибуты, независимо от его типа: «если крякает как утка — это утка». Основной стиль Python-кода.

Фабрика регистрации (implementation factory)

Делегат Func<IServiceProvider, T>, который передают в AddSingleton, AddScoped или AddTransient вместо типа реализации. Контейнер вызывает его, чтобы создать сервис, и освобождает возвращённый объект как созданный им самим.

Фабричный метод (Factory Method)

Порождающий паттерн: базовый класс объявляет метод создания объекта, а подкласс решает, какой конкретный класс вернуть.

Файл формы (.dfm)

Ресурс с описанием компонентов формы и значений их published-свойств. Подключается к модулю директивой {$R *.dfm} и читается при создании формы; бывает текстовым и бинарным.

Файловый обмен (file transfer)

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

Фантомная зависимость (phantom dependency)

Пакет, который код импортирует, хотя его нет в собственном package.json: он доступен только потому, что npm поднял чужую транзитивную зависимость в плоский node_modules. Ломается при обновлении того пакета, который её притащил.

Фантомное чтение (phantom read)

Аномалия, при которой повторный запрос с тем же условием возвращает новые или пропавшие строки: другая транзакция вставила или удалила подходящие записи.

Фасад (Facade)

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

Фейк (fake)

Упрощённая, но рабочая реализация зависимости: репозиторий на словаре, почта в список, FakeTimeProvider. Ведёт себя как настоящая, но не годится для продакшена.

Фикстура pytest (fixture)

Функция с декоратором @pytest.fixture, которая готовит данные или ресурс для теста. Тест получает её результат параметром с тем же именем, а код после yield выполняется как teardown.

Фильтр исключений (exception filter)

Условие when (...) у блока catch (C# 6). Выполняется до размотки стека; если оно ложно, исключение идёт дальше, как будто этого catch нет.

Фильтр эндпоинта (endpoint filter)

Аналог фильтра MVC для Minimal API (.NET 7+): код до и после обработчика с доступом к его аргументам через EndpointFilterInvocationContext. Подключается через AddEndpointFilter.

Фильтр MVC

Код, который MVC вызывает вокруг action на определённом этапе: authorization, resource, action, exception или result. В отличие от middleware, видит контекст action — аргументы, ModelState и результат.

Фильтрованный индекс (filtered index)

Некластерный индекс с условием WHERE, который хранит только подходящие строки. Он меньше и дешевле полного индекса, но используется, только если запрос гарантированно попадает в фильтр.

Финализатор (finalizer)

Метод ~ClassName(), который GC вызывает перед освобождением памяти недостижимого объекта. Вызывается недетерминированно, служит страховкой для неуправляемых ресурсов.

Фоновая сборка (background GC)

Сборка поколения 2 на выделенном потоке параллельно с работой приложения; эфемерные сборки в это время идут как обычно. Включена по умолчанию.

Форсирование плана (plan forcing)

Закрепление конкретного плана из Query Store за запросом процедурой sp_query_store_force_plan. Сервер компилирует запрос с этим планом, пока форсирование не снимут или план не станет невозможным.

Фрагментация индекса (index fragmentation)

Расхождение логического порядка страниц индекса с физическим из-за расщеплений страниц. Мешает большим последовательным чтениям; на SSD обычно важнее плотность страниц.

Фрейм (TFrame)

Контейнер с компонентами и кодом, который проектируют отдельно и вставляют в несколько форм. Изменения фрейма видны во всех местах использования, кроме свойств, переопределённых на форме.

Функции ранжирования

ROW_NUMBER, RANK, DENSE_RANK и NTILE — оконные функции, которые нумеруют строки внутри секции. Они различаются обработкой равных значений.

Функциональная зависимость

Связь X → Y: значение набора колонок X однозначно определяет значение Y. На функциональных зависимостях строятся определения нормальных форм.

Хаб SignalR (hub)

Класс-наследник Hub, через который клиенты вызывают методы сервера, а сервер — методы клиентов. Экземпляр создаётся на каждый вызов метода.

Характеризующий тест (characterization test)

Тест, который фиксирует фактическое поведение существующего кода, а не требуемое. Термин Майкла Фэзерса; такие тесты страхуют рефакторинг и перенос legacy.

Хвостовая задержка (tail latency)

Время ответа самых медленных запросов, обычно перцентили p95, p99 и p99.9. Под нагрузкой первыми растут именно они, а среднее значение это скрывает.

Хвостовой вызов (tail call)

Вызов, который стоит последним действием функции, поэтому её кадр стека можно переиспользовать. Компилятор C# такую оптимизацию не гарантирует, поэтому глубокую рекурсию в C# переписывают циклом.

Хеш-таблица (hash table)

Структура данных, которая по хеш-коду ключа вычисляет место элемента в массиве и находит его в среднем за O(1). В .NET на ней построены Dictionary<TKey, TValue> и HashSet<T>.

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

Хранение пароля в виде результата медленной функции (PBKDF2, bcrypt, scrypt, Argon2) с солью. Медленность специальная: перебор утёкшей базы становится дорогим.

Хешируемый объект (hashable)

Объект, у которого хеш не меняется за время жизни и который сравнивается через __eq__. Только такие объекты могут быть ключами dict и элементами set.

Хореография (choreography)

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

Хранилище версий (version store)

Место, где SQL Server хранит прежние версии строк для RCSI, SNAPSHOT, триггеров и онлайн-перестроения индексов. Без ADR — в tempdb, с ADR — в persistent version store самой базы.

Хранилище секретов (secret store)

Внешний сервис для паролей, ключей и сертификатов с контролем доступа, аудитом и ротацией: Azure Key Vault, AWS Secrets Manager, HashiCorp Vault. Приложение читает секреты при старте через провайдер конфигурации.

Хранилище событий (event store)

База для event sourcing: только дописывает события в потоки, хранит номер версии потока и отклоняет запись, если ожидаемая версия не совпала. Примеры — KurrentDB (бывшая EventStoreDB), Marten поверх PostgreSQL.

Хранимая процедура

Именованный набор инструкций T-SQL на сервере с параметрами. Может менять данные, управлять транзакциями и возвращать несколько наборов строк; план кешируется при первом выполнении.

Хрупкий базовый класс (fragile base class)

Проблема наследования реализации: безобидное на вид изменение базового класса ломает наследников, потому что они зависят от его внутреннего устройства, например от того, какие методы вызывают друг друга.

Худший случай (worst case)

Оценка сложности на самом неудачном входе данного размера. Даёт гарантию для любого ввода: quicksort в среднем O(n log n), но в худшем случае O(n²).

Хук preStop

Действие, которое kubelet выполняет перед отправкой SIGTERM контейнеру: команда, HTTP-запрос или пауза sleep. Время хука входит в terminationGracePeriodSeconds.

Хуки жизненного цикла NestJS (lifecycle hooks)

Методы провайдеров и модулей, которые NestJS вызывает при старте (onModuleInit, onApplicationBootstrap) и остановке (onModuleDestroy, beforeApplicationShutdown, onApplicationShutdown). Хуки остановки по сигналу работают только после enableShutdownHooks().

Хуки React (hooks)

Функции с именем на use (useState, useEffect, useContext), которые подключают к компоненту состояние и возможности React. Вызываются только на верхнем уровне компонента или своего хука.

Хэш-код (GetHashCode)

Число, по которому хэш-таблицы (Dictionary, HashSet) выбирают корзину. Равные по Equals объекты обязаны иметь равные хэш-коды.

Цепочка обязанностей (Chain of Responsibility)

Поведенческий паттерн: запрос проходит по цепочке обработчиков, и каждый решает, обработать его, передать дальше или остановить. Пример в .NET — конвейер middleware ASP.NET Core.

Цепочка поставок ПО (software supply chain)

Всё, из чего собирается приложение: пакеты, их зависимости, образы контейнеров, CI/CD. Уязвимый или подменённый пакет даёт атакующему код внутри вашего процесса.

Цепочка сертификатов (chain of trust)

Сертификат сайта подписан промежуточным центром сертификации, тот — корневым, которому клиент доверяет заранее. Сервер отправляет свой и промежуточные сертификаты, клиент проверяет подписи до корня.

Цикл событий (event loop)

Механизм среды выполнения JavaScript: когда стек вызовов пуст, он выполняет все микрозадачи, а затем берёт следующую задачу из очереди. Благодаря ему один поток обслуживает таймеры, события и ввод-вывод.

Цикл событий asyncio (event loop)

Диспетчер asyncio в одном потоке: выполняет готовые задачи до их следующего await, а затем спрашивает ОС, какой ввод-вывод завершился. Запускается через asyncio.run().

Циклический сборщик мусора (cyclic GC)

Модуль gc в CPython: дополняет подсчёт ссылок и находит группы объектов, которые ссылаются друг на друга, но недостижимы. Работает по поколениям.

Частичный индекс (partial index)

Индекс только по строкам, удовлетворяющим условию WHERE в его определении. Меньше полного и используется запросами с совместимым условием; аналог фильтрованного индекса SQL Server.

Четыре золотых сигнала

Метрики из Google SRE Book для сервиса, видимого пользователям: задержка, трафик, ошибки и насыщение. Если можно мерить только четыре вещи, мерить нужно их.

Чистая архитектура (clean architecture)

Стиль, в котором доменное ядро находится в центре, а все зависимости в исходном коде направлены к нему. Инфраструктура и UI подключаются снаружи через интерфейсы, объявленные в ядре. Близкие варианты — гексагональная и onion-архитектура.

Чистая функция (pure function)

Функция, результат которой зависит только от аргументов и которая не имеет побочных эффектов: не меняет поля, не пишет в файлы и базу. Её легко тестировать и вызывать параллельно.

Шаблон маршрута (route template)

Строка вида /orders/{id:int}, которая описывает, какие URL подходят endpoint'у. Содержит литералы, параметры в фигурных скобках, ограничения, значения по умолчанию и catch-all.

Шаблон сообщения (message template)

Текст лога с именованными плейсхолдерами, например Order {OrderId} created. Значения сохраняются как отдельные свойства, а сам шаблон служит ключом группировки одинаковых событий.

Шаблонный метод (Template Method)

Поведенческий паттерн: базовый класс задаёт скелет алгоритма в одном методе, а отдельные шаги оставляет подклассам через виртуальные или абстрактные методы.

Шардирование (sharding)

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

Шов (seam)

Термин Майкла Фэзерса: место, где можно изменить поведение программы, не редактируя код в этом месте, — виртуальный метод, параметр-интерфейс, конфигурация. Через швы legacy-код покрывают тестами.

Шторм повторов (retry storm)

Лавина запросов, когда повторы на нескольких уровнях перемножаются или все клиенты повторяют одновременно. Добивает и без того перегруженный сервис.

Экспоненциальная задержка (exponential backoff)

Пауза между повторами, которая растёт в разы с каждой попыткой: 1, 2, 4, 8 секунд. Даёт перегруженному сервису время восстановиться.

Эскалация блокировок (lock escalation)

Замена множества мелких блокировок одной блокировкой таблицы или секции. SQL Server пытается её выполнить, когда одна инструкция держит 5000 и больше блокировок на одном объекте.

Эффект (useEffect)

Код, который React выполняет после отрисовки, чтобы синхронизировать компонент с внешней системой: подпиской, таймером, соединением, сторонним виджетом.

Явная типизация JWT

Указание вида токена в заголовке typ, например at+jwt для access-токена. Не даёт выдать id_token или другой JWT того же издателя за access-токен (RFC 8725, раздел 3.11).

ABAC (доступ на основе атрибутов)

Attribute-based access control: решение принимает правило над атрибутами субъекта, объекта, операции и окружения — отдел, гриф, время, сеть. Модель описана в NIST SP 800-162.

Access-токен (токен доступа)

Токен, с которым клиент вызывает API. Адресован ресурсному серверу и ограничен scopes, аудиторией и коротким сроком жизни.

ACID

Четыре свойства транзакции: атомарность (всё или ничего), согласованность (соблюдены ограничения), изоляция (параллельные транзакции не видят промежуточных состояний) и долговечность (зафиксированное переживёт сбой).

Action (действие) в React 19

Асинхронная функция, запущенная внутри перехода, например переданная в <form action>. React отслеживает её ожидание и ошибки и поддерживает оптимистичные обновления.

Action (метод действия)

Публичный метод контроллера, который обрабатывает запрос по маршруту. Возвращает IActionResult, например представление, редирект или JSON.

ActivatorUtilities

Вспомогательный класс, который создаёт объект незарегистрированного типа, беря параметры конструктора из IServiceProvider. Созданным объектом владеет вызывающий код, а не контейнер.

Active Directory (AD)

Служба каталогов Microsoft: хранит учётные записи пользователей и компьютеров, группы и политики домена. Контроллеры домена проверяют пароли и выдают билеты Kerberos.

Activity

Тип .NET для одного шага распределённого трейса (спана): имя, время, теги, TraceId и SpanId. Текущий спан доступен через Activity.Current, создаются спаны через ActivitySource.

Ad hoc полиморфизм

Разное поведение для разных типов через отдельные реализации с одним именем: перегрузку методов и операторов. Нужную версию компилятор выбирает по статическим типам аргументов.

ADFS (Active Directory Federation Services)

Роль Windows Server — служба выдачи токенов: проверяет пользователя в AD и выдаёт приложениям подписанные токены по WS-Federation, SAML 2.0 или OpenID Connect. Microsoft рекомендует переходить с неё на Microsoft Entra ID.

ADO (dbGo)

Компоненты Delphi TADOConnection, TADOQuery, TADOStoredProc поверх COM-библиотеки Microsoft ActiveX Data Objects. К SQL Server обращаются через OLE DB-провайдер.

ADO.NET

Базовый API доступа к данным в .NET: DbConnection, DbCommand, DbDataReader, параметры и транзакции. На нём построены провайдеры вроде Microsoft.Data.SqlClient и Npgsql, а поверх — EF Core и Dapper.

AggregateException

Исключение-контейнер для нескольких ошибок. В него оборачивают исключения задачи .Wait() и .Result, а await выбрасывает исходное исключение без обёртки.

Alembic

Инструмент миграций схемы для SQLAlchemy от тех же авторов. Хранит миграции Python-файлами, а применённую версию — в таблице alembic_version.

Anti-corruption layer (предохранительный слой)

Слой-переводчик между своей моделью и внешней или legacy-системой. Он преобразует чужие модели, коды и ошибки, чтобы они не расползались по вашему коду.

Antiforgery-токен

Пара связанных токенов: один в cookie, другой в скрытом поле формы или заголовке. Сервер сверяет их, и запрос с чужого сайта, не знающего значение поля, отклоняется.

Apache Kafka

Брокер на основе распределённого журнала: сообщения пишутся в партиции топика и хранятся заданное время, а потребители читают их по смещению и могут перечитать заново. Порядок гарантируется внутри партиции, а не топика целиком.

API (программный интерфейс)

Договор, по которому одна программа вызывает другую: набор операций, их параметры, ответы и ошибки. Контракт важнее реализации — несовместимое изменение ломает всех потребителей сразу, поэтому его версионируют.

API Gateway (шлюз API)

Единая точка входа перед набором сервисов: маршрутизирует запросы, проверяет аутентификацию, ограничивает частоту и агрегирует ответы. В .NET шлюз часто строят на YARP.

APM (application performance monitoring)

Мониторинг производительности приложений: сбор трейсов, метрик и ошибок с привязкой к запросам. Примеры — Elastic APM, Application Insights, Datadog.

App Router

Маршрутизатор Next.js на основе папки app/: папки задают сегменты URL, page.tsx — страницу, layout.tsx — общий каркас. Построен на React Server Components.

AppDomain (домен приложения)

Изолированная область внутри процесса .NET Framework для загрузки и выгрузки кода. В современном .NET дополнительные домены создавать нельзя; для изоляции используют процессы, для плагинов — AssemblyLoadContext.

Application builder

Сборщик Angular CLI на esbuild с dev-сервером на Vite, по умолчанию в новых проектах с v17. Заменяет сборщики на Webpack, которые в v22 объявлены deprecated.

ARC в Delphi (Automatic Reference Counting)

Модель, в которой объекты, как и строки, освобождались по счётчику ссылок. Её использовали мобильные компиляторы Delphi и, с 10.2 Tokyo, компилятор Linux; в 10.4 Sydney для объектов её убрали на всех платформах.

Arrange-Act-Assert (AAA)

Схема теста из трёх шагов: подготовить объекты и данные, выполнить проверяемое действие, проверить результат. Делает тест читаемым и отделяет действие от проверок.

Array DML

Выполнение одной параметризованной команды с массивами значений параметров: СУБД выполняет её для каждой строки массива, а клиент обращается к серверу один раз. В FireDAC — Params.ArraySize и Execute.

ArrayPool<T>

Пул переиспользуемых массивов: Rent выдаёт массив не меньше запрошенной длины, Return возвращает его в пул. Снижает аллокации буферов; после Return массив использовать нельзя.

AS2 (Applicability Statement 2)

Протокол передачи EDI-документов по HTTP с подписью и шифрованием S/MIME и подписанной квитанцией о доставке MDN. Описан в RFC 4130.

ASGI

Asynchronous Server Gateway Interface — стандарт связи асинхронного веб-сервера с приложением Python. Приложение — корутина, которую сервер вызывает на каждое соединение.

ASP.NET Core Module (ANCM)

Нативный модуль IIS, который запускает приложение ASP.NET Core внутри рабочего процесса w3wp.exe (in-process) или отдельным процессом с Kestrel (out-of-process). Ставится вместе с .NET Hosting Bundle.

Aspire (ранее .NET Aspire)

Платформа Microsoft для локальной оркестрации и наблюдаемости распределённых приложений. Топологию описывают кодом в AppHost; Aspire запускает сервисы, прокидывает строки подключения и даёт дашборд.

AssemblyLoadContext

Контекст загрузки сборок в .NET: в одном контексте — одна версия сборки с данным именем. Отдельные контексты позволяют загружать разные версии и выгружать плагины.

Assertion rewriting

Переписывание инструкций assert при импорте тестовых модулей. Благодаря ему pytest при падении показывает значения обеих сторон сравнения без специальных методов проверки.

async pipe

Пайп шаблона, который подписывается на Observable или Promise, отдаёт последнее значение и отписывается при уничтожении компонента. Заодно вызывает markForCheck(), поэтому работает с OnPush.

async void

Асинхронный метод, который возвращает void вместо Task. Его нельзя дождаться, а необработанное исключение уходит в SynchronizationContext или в пул потоков и может завершить процесс.

async/await

Пара ключевых слов C#: async помечает метод, который компилятор превращает в машину состояний, а await приостанавливает его до готовности результата и возвращает управление вызывающему. Поток при ожидании не блокируется — продолжение выполнится, когда операция завершится.

AsyncLocalStorage

Класс Node.js из модуля node:async_hooks, который хранит данные, доступные во всей цепочке асинхронных вызовов одного запроса. Аналог AsyncLocal<T> в .NET; в NestJS через него передают пользователя и id запроса без request scope.

Audience (аудитория токена)

Claim aud: для какого получателя выпущен токен. API обязан отклонять токены с чужой аудиторией, иначе токен одного сервиса подойдёт к другому.

Authorization code flow

Поток OAuth, в котором браузер получает одноразовый код, а клиент меняет его на токены прямым запросом к /token. Основной поток для входа пользователя.

auto_explain

Модуль PostgreSQL, который автоматически пишет в лог планы запросов дольше заданного порога (auto_explain.log_min_duration). Позволяет увидеть план медленного запроса в проде без ручного запуска.

Autofac

Популярный сторонний DI-контейнер для .NET. Подключается к ASP.NET Core через UseServiceProviderFactory и добавляет модули, декораторы, внедрение через свойства и scope с тегами.

AutoFixture

Библиотека, которая генерирует тестовые данные: создаёт объекты с заполненными свойствами, чтобы тест задавал только значимые для него значения. Расширения подставляют дублёров NSubstitute или Moq и передают данные в параметры теста.

Autogenerate (Alembic)

Режим alembic revision --autogenerate, который сравнивает MetaData моделей со схемой базы и пишет черновик миграции. Не видит переименований и ограничений без имени.

Awaiter

Объект, который возвращает GetAwaiter() и через который работает await. Предоставляет IsCompleted, OnCompleted и GetResult.

Azure SignalR Service

Управляемый сервис Azure, который принимает клиентские соединения SignalR вместо вашего сервера и пересылает сообщения. Снимает необходимость в sticky sessions и backplane.

B-дерево (B+-tree)

Сбалансированное дерево страниц, в котором SQL Server хранит обычные (rowstore) индексы: корень, промежуточные уровни и листья. Путь от корня до любого листа одинаковой длины, поэтому поиск по ключу стоит несколько чтений страниц даже в огромной таблице.

Backends for Frontends (BFF)

Паттерн Сэма Ньюмена: отдельный бэкенд под каждый тип клиента — веб, мобильное приложение — который агрегирует вызовы сервисов и форматирует ответы под этот клиент. Им владеет команда клиента.

Backfill (дозаполнение)

Заполнение новой колонки или таблицы историческими данными после её добавления. На больших таблицах выполняется пакетами, чтобы транзакции оставались короткими.

BackgroundService

Базовый класс для долгоживущей фоновой работы в хосте .NET: логику пишут в ExecuteAsync, а регистрируют через AddHostedService, то есть как singleton.

Backplane (общая шина) SignalR

Канал, через который серверы SignalR пересылают друг другу сообщения для клиентов, подключённых к другим серверам. Стандартная реализация — Redis pub/sub.

base64url

Вариант base64 для URL и заголовков: символы - и _ вместо + и /, без = в конце. Это кодирование, а не шифрование: строку декодирует любой.

Bearer-токен

Токен доступа, обычно JWT, который клиент отправляет в заголовке Authorization: Bearer .... Браузер не прикладывает его сам, поэтому CSRF к нему неприменим.

BenchmarkDotNet

Библиотека для микробенчмарков .NET: прогрев, статистика, сравнение рантаймов. Атрибут [MemoryDiagnoser] показывает аллокации на операцию, [DisassemblyDiagnoser] — машинный код от JIT.

BFF (Backend for Frontend)

Серверная часть SPA на том же сайте: выполняет OIDC-вход как конфиденциальный клиент, хранит токены у себя и проксирует вызовы API, а браузеру выдаёт только HttpOnly-cookie.

Binding redirect

Настройка в app.config приложения .NET Framework, которая перенаправляет запросы к одним версиям сборки на другую. В современном .NET не используется.

Blameless postmortem

Разбор инцидента без поиска виноватых: хронология, влияние, причины и действия с владельцами. Ищут, почему система и процессы позволили ошибке случиться.

Blazor

Модель ASP.NET Core, в которой интерфейс пишется на C# компонентами Razor. Blazor Server держит состояние на сервере и гоняет события по SignalR, Blazor WebAssembly выполняет код в браузере, а с .NET 8 режим отрисовки выбирается для каждого компонента.

BlockingCollection

Синхронная потокобезопасная очередь с ограничением ёмкости: Add и Take блокируют поток, когда очередь полна или пуста. Внутри по умолчанию ConcurrentQueue.

Blue-green deployment

Стратегия с двумя полными копиями среды: новая версия разворачивается рядом со старой без трафика, проходит проверки, и балансировщик переключается на неё. Старая копия остаётся для мгновенного отката.

Boxing (упаковка)

Копирование значения значимого типа в новый объект в куче, чтобы работать с ним как с object или интерфейсом. Обратная операция — unboxing.

BRIN-индекс

Индекс диапазонов блоков (Block Range Index): хранит минимум и максимум для каждой группы соседних страниц таблицы. Очень маленький, но полезен, только если значения коррелируют с физическим порядком строк, как время в журнале.

Bulkhead (переборка)

Изоляция ресурсов по зависимостям: ограничение числа одновременных вызовов одной зависимости, чтобы её зависание не забрало все потоки и соединения. В Polly v8 — ограничитель конкурентности.

Burn rate (скорость расхода бюджета)

Во сколько раз сервис тратит error budget быстрее допустимого: доля ошибок, делённая на 1 − SLO. При burn rate 1 бюджет закончится ровно к концу окна SLO.

C-расширение (extension module)

Модуль, написанный на C, C++ или Rust с использованием C API Python и загружаемый как обычный модуль. Работает без интерпретатора байт-кода и может отпускать GIL — так устроены NumPy и многие ML-библиотеки.

Cache stampede (лавина промахов)

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

Cache-aside (ленивая загрузка)

Паттерн, при котором приложение само читает кеш, на промахе загружает данные из источника и кладёт их в кеш, а при изменении данных удаляет ключ.

Cache-Control

HTTP-заголовок с директивами кеширования: public, private, max-age, no-cache, no-store. В запросе его задаёт клиент, в ответе — сервер.

CancelledError

Исключение, которое task.cancel() бросает внутрь корутины в точке await. Наследует BaseException; после очистки его нужно пробросить дальше, иначе отмена не сработает.

Captive dependency (захваченная зависимость)

Ошибка конфигурации, при которой долгоживущий сервис держит зависимость с более коротким временем жизни, например singleton держит scoped-сервис. Зависимость начинает жить столько же, сколько её владелец.

Card table

Битовая карта участков памяти старших поколений, в которые записывали ссылки. Её заполняет write barrier при записи ссылки в поле, а GC при сборке молодых поколений просматривает только помеченные участки.

Cartesian explosion (декартов взрыв)

Рост числа строк результата, когда один запрос соединяет несколько коллекций одного уровня: строки каждой коллекции умножаются друг на друга. Заказ с 10 строками и 10 платежами даёт 100 строк.

CDN (content delivery network)

Сеть серверов в точках присутствия по всему миру, которая кеширует и отдаёт статику и кешируемые ответы рядом с пользователем. Снимает нагрузку с источника и сокращает задержку.

Central Package Management (CPM)

Управление версиями NuGet-пакетов всего репозитория в одном файле Directory.Packages.props. С transitive pinning задаёт версии и транзитивным зависимостям.

Challenge (запрос аутентификации)

Действие схемы аутентификации, когда анонимному пользователю нужен вход: cookie-схема редиректит на страницу входа, OIDC — к провайдеру, JWT bearer отвечает 401.

Change data capture (CDC)

Захват изменений из журнала транзакций базы и передача их потребителям как поток событий «до и после». В SQL Server это встроенный механизм с таблицами изменений (нужен SQL Server Agent), в PostgreSQL — логическое декодирование; Debezium превращает такой поток в события Kafka.

Change token (IChangeToken)

Объект-сигнал «данные изменились». Файловые провайдеры конфигурации срабатывают через него при перезагрузке файла, а IOptionsMonitor<T> по нему сбрасывает кеш настроек.

Change tracking (отслеживание изменений)

Механизм SQL Server, который синхронно с каждой DML-операцией запоминает ключи изменённых строк и номер версии. Отвечает на вопрос «что изменилось после версии N», но старые значения не хранит.

Cherry-pick

Команда git cherry-pick, которая применяет изменения одного коммита поверх текущей ветки и создаёт новый коммит с тем же содержимым правки. С ключом -x в сообщение добавляется ссылка на исходный коммит.

Chiseled-образ (Ubuntu Chiseled)

Distroless-вариант образов .NET на Ubuntu: только пакеты, нужные рантайму, без shell и пакетного менеджера, с non-root пользователем по умолчанию. Без ICU и tzdata, если не взять вариант -extra.

Circuit breaker (автоматический выключатель)

Стратегия, которая после доли ошибок перестаёт вызывать зависимость и сразу отклоняет вызовы, а через паузу пропускает пробный. Три состояния — closed, open, half-open.

Claim (утверждение о субъекте)

Пара «тип — значение» о пользователе или сервисе, выданная доверенным издателем: имя, email, отдел, роль. Описывает, кто субъект, а не что ему можно; в .NET это класс Claim.

ClaimsIdentity

Набор claims, полученных одним способом аутентификации. Хранит AuthenticationType (без него identity не считается аутентифицированной), а также NameClaimType и RoleClaimType.

ClaimsPrincipal

Пользователь в .NET: одна или несколько ClaimsIdentity. В ASP.NET Core это HttpContext.User; методы IsInRole, HasClaim и FindFirst ищут по claims всех его identity.

Client credentials

Поток OAuth 2.0, в котором приложение получает токен от своего имени по client_id и секрету или сертификату, без пользователя. Применяется для вызовов между сервисами и фоновых задач.

CLR (Common Language Runtime)

Среда выполнения .NET: загружает сборки, компилирует IL в машинный код, управляет памятью, исключениями и потоками. Реализация в современном .NET называется CoreCLR.

CLS (Cumulative Layout Shift)

Мера неожиданных сдвигов вёрстки: самая большая серия сдвигов за время жизни страницы. Хорошо — до 0,1.

cluster

Модуль Node.js, который запускает несколько процессов-копий приложения на одном порту: главный процесс принимает соединения и раздаёт их рабочим. Память у процессов не общая.

Code smell («запах кода»)

Признак проблемы в поддерживаемости кода, который не ломает его прямо сейчас: слишком длинный метод, дублирование, сложное условие. SonarQube относит такие замечания к сопровождаемости (maintainability).

Collation в SQL Server (параметры сортировки)

Правила сравнения и сортировки строк: кодовая страница, учёт регистра и диакритики. Windows-collation (Cyrillic_General_CI_AS) сравнивает varchar и nvarchar по одним правилам, SQL-collation (SQL_Latin1_General_CP1_CI_AS) — по разным.

Collection expression

Синтаксис создания коллекций в квадратных скобках из C# 12: int[] a = [1, 2, 3];, [..first, ..second]. Работает для массивов, Span<T>, списков и других коллекций.

Columnstore-индекс

Индекс, который хранит данные по колонкам в сжатых сегментах по группам до 1 048 576 строк. Ускоряет агрегаты по большим таблицам за счёт сжатия, пропуска сегментов и пакетного режима.

CommonJS

Исходная система модулей Node.js: импорт через require(), экспорт через module.exports. Модуль загружается и выполняется синхронно при первом вызове require, результат кешируется.

Compare-and-swap (CAS)

Атомарная операция «записать новое значение, только если текущее равно ожидаемому». В .NET это Interlocked.CompareExchange; на ней строят lock-free алгоритмы.

Composition root (корень композиции)

Единственное место приложения, где собирается граф объектов: регистрации сервисов и выбор реализаций. В ASP.NET Core это Program.cs и методы расширения Add..., которые он вызывает.

ConfigureAwait(false)

Настройка await, при которой продолжение не возвращается в захваченный SynchronizationContext или TaskScheduler. Её используют в библиотеках общего назначения.

ConfigureAwaitOptions

Флаги для Task.ConfigureAwait в .NET 8+: ContinueOnCapturedContext, SuppressThrowing и ForceYielding.

conftest.py

Файл, фикстуры и хуки из которого pytest автоматически делает доступными всем тестам этого каталога и вложенных, без импорта.

Confused deputy («запутанный заместитель»)

Ситуация, когда сервис с широкими правами выполняет запрос клиента своими правами и не проверяет права самого клиента. Клиент получает через сервис доступ, которого у него нет.

Connascence (сонаследие)

Мера связи Мейлира Пейдж-Джонса: два элемента связаны, если изменение одного требует изменения другого. Виды упорядочены по силе — от имени и типа до порядка, значения, алгоритма и времени.

Content-Security-Policy (CSP)

Заголовок ответа со списком разрешённых источников скриптов, стилей и других ресурсов. Браузер блокирует остальное, поэтому внедрённый скрипт не выполнится, даже если кодирование где-то пропустили.

Context (контекст React)

Механизм передачи значения всему поддереву без props. При смене значения перерисовываются все компоненты, которые его читают.

Core Web Vitals

Три метрики Google для пользовательского опыта: LCP (скорость загрузки), INP (отклик) и CLS (стабильность вёрстки). Оцениваются по 75-му перцентилю реальных визитов.

CoreWCF

Порт серверной части WCF на современный .NET, проект .NET Foundation с поддержкой Microsoft. Нужен для переноса существующих SOAP-сервисов; для новых Microsoft советует gRPC.

CORS (Cross-Origin Resource Sharing)

Механизм, которым сервер заголовками Access-Control-Allow-* разрешает браузеру отдать ответ скрипту с другого источника. Ослабляет same-origin policy и не защищает сам сервер.

CPU-bound операция

Операция, которая упирается в вычисления процессора. Ускорить её можно только параллелизмом, а из UI-потока её выносят через Task.Run.

CQRS (Command Query Responsibility Segregation)

Разделение модели записи (команды меняют состояние) и модели чтения (запросы возвращают данные). Модели могут жить в одной базе или в разных.

Cron-выражение

Строка расписания из полей «минуты, часы, день месяца, месяц, день недели»: 0 2 * * * — каждый день в 02:00. В Quartz первым полем идут секунды.

CSRF (межсайтовая подделка запроса)

Атака, при которой чужой сайт заставляет браузер отправить запрос на ваш сайт от имени вошедшего пользователя. Работает, потому что браузер сам прикладывает cookie.

CSS Grid

Модуль раскладки CSS для двух осей: контейнер с display: grid задаёт строки и колонки, а дети занимают ячейки и области сетки.

CSSOM (CSS Object Model)

Дерево правил, которое браузер строит из всех стилей страницы. Вместе с DOM оно нужно, чтобы построить дерево отрисовки, поэтому CSS блокирует первый показ страницы.

CTE (обобщённое табличное выражение)

Именованный подзапрос, объявленный через WITH перед инструкцией и видимый только в ней. В SQL Server результат CTE не сохраняется: каждое обращение выполняет определение заново.

CTS (Common Type System)

Общая система типов .NET: единые для всех языков платформы правила объявления и использования типов. Благодаря ей C#, F# и VB.NET используют типы друг друга.

CUPID

Свойства «приятного» кода, предложенные Дэном Нортом как альтернатива SOLID: Composable, Unix philosophy, Predictable, Idiomatic, Domain-based. Это свойства, к которым код приближается, а не правила, которые он соблюдает.

Custom managed record

Запись с операторами Initialize, Finalize и, при необходимости, Assign, которые компилятор вызывает автоматически при создании, уничтожении и копировании. Позволяет писать RAII-обёртки. Появилась в Delphi 10.4 Sydney.

Dapper

Micro-ORM от авторов Stack Overflow: методы расширения над IDbConnection (Query, Execute), которые выполняют ваш SQL с параметрами и раскладывают столбцы по свойствам объектов. Не отслеживает изменения и не генерирует SQL.

Data Protection (защита данных ASP.NET Core)

Подсистема шифрования и подписи данных, на которой держатся cookie аутентификации и antiforgery-токены. В ферме серверов ей нужно общее хранилище ключей.

Data-aware контрол

Визуальный компонент (TDBGrid, TDBEdit, TDBLookupComboBox), который через TDataSource показывает и редактирует поля текущей записи набора данных.

Data-oriented design

Подход, в котором структуру данных проектируют под то, как процессор их читает: плотные массивы значений вместо графа объектов, последовательный доступ к памяти. Применяют на горячих участках.

DataAnnotations

Атрибуты из System.ComponentModel.DataAnnotations для декларативных правил проверки: [Required], [Range], [StringLength], [EmailAddress] и другие.

DATAS (dynamic adaptation to application sizes)

Режим Server GC, который меняет число куч и бюджет поколения 0 так, чтобы размер кучи соответствовал объёму живых данных. Появился в .NET 8, включён по умолчанию с .NET 9.

DbContext

Главный класс EF Core: сессия работы с базой, которая выполняет запросы, отслеживает изменения сущностей и сохраняет их через SaveChanges. Рассчитан на одну единицу работы и не потокобезопасен.

dbExpress

Библиотека лёгких драйверов Delphi с однонаправленными наборами без буферизации и редактирования. Embarcadero объявила её устаревшей и рекомендует переходить на FireDAC.

DDD (Domain-Driven Design)

Предметно-ориентированное проектирование — подход Эрика Эванса (2003), в котором код строят вокруг модели бизнеса и языка его экспертов. Делится на стратегический (границы контекстов) и тактический (агрегаты, value objects, события) уровни.

Debezium

Open source платформа CDC на основе Kafka Connect: читает журнал транзакций базы и публикует изменения строк в Kafka. Outbox Event Router превращает строки outbox в события.

DelegatingHandler

Базовый класс обработчика сообщений HttpClient, который передаёт запрос следующему обработчику через base.SendAsync. Из таких обработчиков собирают цепочку: логирование, повторы, заголовки.

Delta store

Обычное B-дерево внутри columnstore-индекса, куда попадают мелкие вставки. Когда в группе набирается 1 048 576 строк, фоновый процесс tuple mover сжимает её в колоночный формат.

Depends (зависимости FastAPI)

Механизм FastAPI, который вызывает функцию-зависимость перед эндпоинтом и передаёт её результат параметром. Результат кешируется в пределах запроса, а зависимость с yield выполняет код очистки после ответа.

Developer Exception Page

Страница с подробностями необработанного исключения: стек, заголовки, query, cookies. Включается автоматически в окружении Development и не должна работать в продакшене.

Device code flow (device authorization grant)

Поток OAuth для устройств без браузера или клавиатуры (RFC 8628): устройство показывает код и адрес, пользователь входит на другом устройстве, а исходное опрашивает /token.

DI-контейнер (контейнер служб)

Объект, который по зарегистрированным правилам создаёт сервисы, передаёт им зависимости и управляет их временем жизни. В .NET регистрации собирают в IServiceCollection, а контейнер — это IServiceProvider.

Diagnostic port

Канал, через который диагностические инструменты общаются с рантаймом .NET: именованный канал на Windows или Unix-сокет в каталоге временных файлов на Linux. В контейнере к нему нужен общий доступ с sidecar.

diagnostics_channel

Модуль Node.js для публикации диагностических событий по именованным каналам. Библиотеки и встроенные модули сообщают о запросах, а APM и OpenTelemetry подписываются без подмены кода.

Dictionary (словарь)

Хеш-таблица .NET: по ключу — значение, в среднем O(1) на поиск и вставку. Ключу нужны согласованные GetHashCode и Equals, а менять ключ после вставки нельзя — объект потеряется в своей корзине. Для параллельного доступа есть ConcurrentDictionary.

Discovery-документ (метаданные провайдера)

JSON по адресу /.well-known/openid-configuration с адресами endpoints, jwks_uri, поддерживаемыми потоками и алгоритмами. Клиент настраивается по нему автоматически.

Discovery-документ OpenID Connect

JSON по адресу /.well-known/openid-configuration у сервера авторизации: issuer, адреса эндпоинтов и jwks_uri. По нему AddJwtBearer сам находит ключи для проверки подписи.

Disposable transient

Transient-сервис, реализующий IDisposable или IAsyncDisposable. Контейнер хранит ссылку на каждый такой экземпляр до конца scope, поэтому при разрешении из корня они копятся до остановки приложения.

Dispose pattern

Стандартная схема освобождения ресурсов: Dispose() вызывает Dispose(true) и GC.SuppressFinalize, финализатор вызывает Dispose(false), а protected virtual void Dispose(bool) освобождает управляемые ресурсы только при true.

DML-триггер

Процедура, которую SQL Server вызывает сам при INSERT, UPDATE или DELETE. Срабатывает один раз на инструкцию, а изменённые строки доступны в псевдотаблицах inserted и deleted.

Docker

Инструмент, который собирает приложение в образ и запускает его контейнером — процессом с собственной файловой системой, сетью и лимитами ресурсов. Образ одинаков на машине разработчика и в продакшене, поэтому «у меня работает» перестаёт быть аргументом.

Docker Compose

Инструмент, который по файлу compose.yaml создаёт и запускает набор связанных контейнеров с общей сетью, томами и порядком старта. Работает в пределах одного хоста.

DOM (Document Object Model)

Дерево объектов, в которое браузер разбирает HTML-страницу; через него скрипты читают и меняют содержимое. Каждое изменение может вызвать пересчёт стилей и раскладки, поэтому правки группируют и измеряют отдельно от записи.

dotnet-counters

CLI-инструмент для наблюдения за метриками работающего .NET-процесса в реальном времени: размер кучи, число сборок, паузы GC, пул потоков, исключения.

dotnet-dump

CLI-инструмент для снятия и анализа полного дампа памяти .NET-процесса. Команда analyze открывает дамп с командами SOS: dumpheap, gcroot, finalizequeue.

dotnet-gcdump

CLI-инструмент, который снимает граф объектов управляемой кучи живого процесса через EventPipe. Для этого вызывает полную сборку; файл .gcdump открывают в Visual Studio или PerfView.

dotnet-monitor

Инструмент для продакшена, обычно sidecar-контейнер: по HTTP API снимает дампы, трейсы, логи и метрики .NET-процессов, а по правилам-триггерам собирает их сам и выгружает в хранилище.

dotnet-trace

CLI-инструмент для записи трейса событий работающего .NET-процесса через EventPipe: сэмплы стеков, события GC, JIT, исключений. Результат открывают в PerfView, Visual Studio или speedscope.

Double hop

Проблема второго прыжка: приложение, получившее пользователя по Kerberos, не может от его имени пройти аутентификацию на следующем сервере, потому что у него есть только билет к себе. Решается делегированием Kerberos.

DPoP (Demonstrating Proof of Possession)

Механизм (RFC 9449), который привязывает токен к ключу клиента: каждый запрос сопровождается подписанным доказательством владения ключом. Украденный без ключа токен бесполезен.

DRY (Don't Repeat Yourself)

Принцип из книги «The Pragmatic Programmer» (1999): каждое знание должно иметь единственное, однозначное, авторитетное представление в системе. Касается знаний и правил, а не одинаковых строк кода.

DTO (Data Transfer Object)

Простой объект только с данными для передачи между слоями или по сети, без бизнес-логики. В API это модели запросов и ответов, отделённые от сущностей базы данных.

Dunder-метод (special method)

Метод с именем в двойных подчёркиваниях, который вызывает сам язык: __init__, __eq__, __len__, __iter__. Через них класс поддерживает операторы и встроенные функции.

Dynamic PGO

Оптимизация по профилю во время работы: JIT собирает статистику горячих путей и типов и использует её при перекомпиляции метода. Включена по умолчанию с .NET 8.

EAV (entity–attribute–value)

Схема, в которой атрибуты хранятся строками вида «сущность, имя атрибута, значение» вместо отдельных колонок. Гибкая, но неудобная для запросов и без типизации; JSONB часто заменяет её.

EDI (electronic data interchange)

Электронный обмен стандартными документами между компаниями — заказами, уведомлениями об отгрузке, счетами — в машиночитаемом формате, обычно через EDI-провайдера.

ELK (Elasticsearch, Logstash, Kibana)

Стек для сбора, хранения и поиска логов: Logstash или Beats доставляют события, Elasticsearch индексирует их, Kibana даёт поиск и дашборды. Открытый форк Elasticsearch — OpenSearch.

Endpoint

Единица обработки запроса в ASP.NET Core: делегат RequestDelegate плюс коллекция метаданных. Endpoint'ы — это обработчики MapGet, action контроллеров, Razor Pages, хабы SignalR.

Endpoint routing (маршрутизация по endpoint'ам)

Основная система маршрутизации ASP.NET Core с версии 3.0: UseRouting выбирает endpoint по URL и методу, а UseEndpoints выполняет его. Middleware между ними видят выбранный endpoint и его метаданные.

Engine (SQLAlchemy)

Точка подключения SQLAlchemy к базе: знает диалект и драйвер, держит пул соединений. Создаётся один раз на процесс через create_engine.

Enricher в Serilog

Компонент, который добавляет свойства к каждому событию: имя машины, id потока, данные из LogContext. Подключается через Enrich.With... или Enrich.FromLogContext().

EqualityContract

Синтезированное свойство record class, которое возвращает runtime-тип записи. Сгенерированный Equals сравнивает его первым, поэтому записи разных типов одной иерархии не равны даже при одинаковых данных.

Error budget (бюджет ошибок)

Допустимая доля неудач за окно SLO: 100% − SLO. При SLO 99,9% за 30 дней — около 43 минут полного простоя. Пока бюджет есть, команда тратит его на изменения.

ES-модули (ESM)

Стандартная система модулей JavaScript: import и export. Граф импортов строится до выполнения кода, загрузка асинхронная, поддерживается top-level await. В Node.js включается расширением .mjs или полем "type": "module" в package.json.

Escape analysis (escape-анализ)

Анализ JIT, который определяет, может ли объект пережить метод, где он создан. Если не может, JIT вправе разместить его на стеке; в .NET 9–10 так размещаются «коробки», маленькие массивы и делегаты.

ETag

Заголовок ответа с версией представления ресурса. Клиент передаёт его в If-None-Match для кеширования или в If-Match для оптимистичной блокировки, получая 412, если ресурс изменился.

ETL (extract, transform, load)

Процесс переноса данных: извлечь из источников, преобразовать к формату цели и загрузить. В экосистеме SQL Server классический инструмент — SSIS, облачный — Azure Data Factory.

Event sourcing

Хранение состояния как последовательности событий, а не как текущего снимка. Текущее состояние получают, проигрывая события по порядку.

EventEmitter

Базовый класс Node.js для объектов с событиями: on подписывает слушателя, emit синхронно вызывает всех слушателей. Событие 'error' без слушателя выбрасывается как исключение.

EventPipe

Встроенный в рантайм .NET механизм трассировки, одинаковый на всех ОС. Через него работают dotnet-counters, dotnet-trace и dotnet-monitor без внешнего профилировщика.

Exception filter (фильтр исключений) в NestJS

Класс с декоратором @Catch() и методом catch, который превращает исключение в HTTP-ответ. Встроенный глобальный фильтр обрабатывает HttpException, а неизвестные ошибки превращает в 500.

ExecuteUpdate и ExecuteDelete

Методы EF Core 7+, которые выполняют UPDATE или DELETE по LINQ-фильтру одной командой, без загрузки сущностей и без трекера изменений. Возвращают число затронутых строк.

Expand/contract (parallel change)

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

EXPLAIN ANALYZE

Команда PostgreSQL, которая выполняет запрос и выводит план с фактическими временем, числом строк и проходов на каждом узле. С опцией BUFFERS (с версии 18 — по умолчанию) показывает и чтения страниц.

Extension members

Расширения C# 14, которые объявляются блоком extension. Кроме методов позволяют добавлять к существующим типам свойства, статические члены и операторы.

Failover (переключение на резерв)

Автоматический перевод нагрузки с отказавшего компонента или провайдера на резервный. Решение обычно принимают по доле ошибок, таймаутам или проверкам здоровья.

Fallback policy (резервная политика)

Политика для эндпоинтов без метаданных авторизации. По умолчанию её нет, и такие эндпоинты открыты; SetFallbackPolicy с RequireAuthenticatedUser закрывает всё, что не помечено явно.

Fast-forward (перемотка вперёд)

Вид слияния, когда целевая ветка не содержит новых коммитов и Git просто сдвигает её указатель на вершину вливаемой ветки. Коммит слияния не создаётся.

FastAPI

Веб-фреймворк Python для HTTP API поверх Starlette и Pydantic. Параметры, тело и ответ описываются аннотациями типов, а валидация и документация OpenAPI строятся по ним автоматически.

FastMM

Менеджер памяти Delphi для Win32 и Win64, встроенный по умолчанию с Delphi 2006. Умеет сообщать об утечках при выходе (ReportMemoryLeaksOnShutdown), а полная версия в режиме отладки ловит обращения к освобождённой памяти.

Feature toggle (флаг функциональности)

Переключатель в конфигурации, который включает или выключает ветку кода без нового развёртывания: для части пользователей, по проценту или полностью. В .NET есть библиотека Microsoft.FeatureManagement.

File-based app

Приложение из одного .cs-файла без проекта, запускается командой dotnet run app.cs (с .NET 10). Пакеты и настройки подключаются директивами #:package и #:property.

Fire-and-forget («запустил и забыл»)

Запуск асинхронной операции без ожидания её результата. Без явной обработки исключения из такой операции теряются или роняют процесс.

FireDAC

Универсальная библиотека доступа к данным RAD Studio с компонентами TFDConnection, TFDQuery, TFDStoredProc. Даёт управление выборкой, Array DML, макросы, пул соединений и трассировку.

Flexbox

Модуль раскладки CSS для одной оси: дети контейнера с display: flex выстраиваются в строку или колонку и делят свободное место по flex-grow и flex-shrink.

Fluent API

Конфигурация модели EF Core кодом в OnModelCreating или в классах IEntityTypeConfiguration<T>: HasKey, HasMaxLength, HasOne().WithMany(). Имеет приоритет над атрибутами и соглашениями.

FluentAssertions

Библиотека проверок в стиле result.Should().Be(5). До версии 7 включительно — Apache 2.0, с версии 8 (2025) — лицензия Xceed, платная для коммерческого использования.

Forward secrecy (прямая секретность)

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

Forwarded headers (X-Forwarded-*)

Заголовки X-Forwarded-For, X-Forwarded-Proto и X-Forwarded-Host, в которых прокси передаёт исходные IP клиента, схему и хост. В ASP.NET Core их применяет UseForwardedHeaders, доверяя только известным прокси.

Free-threaded сборка (free threading)

Сборка CPython без GIL (PEP 703, python3.13t и новее): потоки выполняют Python-код параллельно. Экспериментальная в 3.13, официально поддерживается с 3.14, но не по умолчанию.

Frozen-коллекция

FrozenDictionary<TKey, TValue> и FrozenSet<T> из .NET 8: неизменяемые коллекции, которые долго строятся, зато очень быстро ищут. Подходят для справочников, созданных один раз при старте.

GC.Collect

Ручной запуск сборки мусора. В коде приложения почти всегда вреден: выжившие объекты продвигаются в старшие поколения, а самонастройка порогов сбивается. Уместен в тестах, бенчмарках и диагностике — обычно вместе с GC.WaitForPendingFinalizers.

Generic Host (универсальный хост)

Объект IHost, который владеет конфигурацией, логированием, DI-контейнером и hosted services и управляет запуском и остановкой приложения. На нём построены ASP.NET Core и Worker Service.

Generics в Delphi

Обобщённые типы и методы с параметрами типа: TList<T>, TDictionary<TKey, TValue>. Появились в Delphi 2009; компилятор создаёт код для каждого набора аргументов типа и проверяет ограничения вроде class или constructor.

GIL (Global Interpreter Lock)

Глобальная блокировка интерпретатора CPython: в каждый момент байт-код выполняет только один поток. Отпускается на блокирующем вводе-выводе и в C-расширениях.

GIN-индекс

Обратный индекс (Generalized Inverted Index): для каждого элемента — слова, элемента массива, ключа JSONB — хранит список строк, где он встречается. Быстро отвечает на «содержит», но дорог на запись.

GiST-индекс

Обобщённое дерево поиска (Generalized Search Tree) — каркас для индексов по геометрии, диапазонам и полнотекстовым данным. Поддерживает пересечение, вложение и поиск ближайших соседей.

git bisect

Команда для бинарного поиска коммита, который внёс ошибку: вы отмечаете хорошую и плохую версии, а Git на каждом шаге делит диапазон пополам. git bisect run проверяет коммиты скриптом или тестом автоматически.

git filter-repo

Инструмент для переписывания всей истории репозитория: удаляет файлы, заменяет строки, меняет пути. Документация Git рекомендует его вместо git filter-branch с его многочисленными подводными камнями, в том числе для удаления секретов.

Git Flow

Модель ветвления Винсента Дриссена (2010): долгоживущие main и develop, ветки feature/*, release/* и hotfix/*. Рассчитана на версионируемые продукты; для continuous delivery автор советует модель проще.

Git LFS (Large File Storage)

Расширение Git для больших бинарных файлов: в репозитории хранится маленький текстовый указатель, а содержимое — на отдельном LFS-сервере и скачивается только для нужных версий.

git push --force-with-lease

Принудительная отправка, которая перезаписывает ветку на сервере, только если та указывает на тот же коммит, что ваша ветка удалённого отслеживания. Защищает от затирания чужих коммитов после rebase.

GitHub Flow

Простая модель ветвления: короткая ветка от main, pull request с ревью и проверками, слияние в main и удаление ветки. main всегда готов к выкладке.

global.json

Файл в репозитории, который фиксирует версию .NET SDK для сборки и правило её подбора (rollForward).

gMSA (group Managed Service Account)

Доменная учётка службы, пароль которой AD генерирует и меняет сам. Её используют пулы IIS, службы Windows и Windows-контейнеры; длинный случайный пароль защищает от Kerberoasting.

Google Zanzibar

Глобальная система авторизации Google, описанная в статье на USENIX ATC 2019. Хранит отношения кортежами «объект#отношение@пользователь», обслуживает Drive, YouTube, Cloud и другие сервисы и стала образцом для OpenFGA и SpiceDB.

GROUPING SETS, ROLLUP и CUBE

Расширения GROUP BY, которые в одном запросе считают агрегаты по нескольким наборам колонок: например, по магазину, по региону и общий итог. Функция GROUPING() отличает строку итога от обычной группы.

Groups overage

Поведение Microsoft Entra ID, когда у пользователя больше групп, чем помещается в токен (200 для JWT, 150 для SAML): claim groups не выдаётся, вместо него приходит ссылка на Microsoft Graph.

gRPC

Фреймворк удалённого вызова процедур поверх HTTP/2. Контракт описывается в файле .proto, по нему генерируются сервер и клиент, сообщения кодируются в Protobuf. Поддерживает потоковую передачу в обе стороны и дедлайны.

gRPC-Web

Вариант протокола gRPC, который работает из браузера по HTTP/1.1 и HTTP/2. Поддерживает только unary-вызовы и потоки от сервера; в ASP.NET Core включается пакетом Grpc.AspNetCore.Web.

Guard (страж) в NestJS

Класс с методом canActivate, который решает, пропускать ли запрос к обработчику. Видит ExecutionContext и метаданные маршрута, поэтому в нём делают аутентификацию и проверку ролей; false даёт ответ 403.

GUID интерфейса

16-байтный идентификатор в объявлении интерфейса: ['{...}']. Нужен для QueryInterface, оператора as и функции Supports; без него компилятор выдаёт ошибку E2232. В редакторе генерируется сочетанием Ctrl+Shift+G.

Hangfire

Библиотека фоновых задач для .NET: сериализует вызовы методов в хранилище (SQL Server, Redis), выполняет их на серверах Hangfire, повторяет при ошибках и показывает в веб-дашборде.

Hash Match

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

HATEOAS

Принцип REST, по которому ответ содержит ссылки на связанные ресурсы и доступные действия, и клиент переходит по ним, а не собирает URL сам.

Health check (проверка здоровья)

HTTP-эндпоинт, который сообщает состояние экземпляра приложения: Healthy, Degraded или Unhealthy. По нему балансировщик и оркестратор решают, слать ли трафик и перезапускать ли процесс.

Health check publisher

Реализация IHealthCheckPublisher, которую фоновый сервис ASP.NET Core периодически вызывает с отчётом о проверках. Используется, чтобы отправлять статус в лог, метрики или систему мониторинга без внешнего опроса.

Healthcheck контейнера

Команда, которую Docker периодически выполняет внутри контейнера, чтобы определить его состояние: starting, healthy или unhealthy. В Compose по нему работает condition: service_healthy.

Hill climbing (алгоритм инъекции потоков)

Эвристика пула потоков .NET: она меняет число рабочих потоков и оставляет то, при котором пропускная способность выше. Работает постепенно, поэтому резкую нехватку потоков не компенсирует.

Hosted service (IHostedService)

Служба, жизнью которой управляет хост .NET: StartAsync вызывается при запуске приложения, StopAsync — при остановке. Регистрируется через AddHostedService как singleton; на этом же механизме работает веб-сервер.

HOT-обновление (heap-only tuple)

Обновление, при котором новая версия строки ложится на ту же страницу и не создаёт записей в индексах. Возможно, если не изменилась ни одна индексированная колонка и на странице есть место.

HSTS (HTTP Strict Transport Security)

Заголовок Strict-Transport-Security, после которого браузер обращается к сайту только по HTTPS в течение max-age. С preload домен попадает в список, встроенный в браузеры.

HTTP

Протокол «запрос — ответ» поверх TCP, на котором работает веб: клиент шлёт метод, путь и заголовки, сервер отвечает кодом состояния и телом. Состояния между запросами протокол не хранит, поэтому сессию переносят в куки, токены или заголовки.

HTTP-интерцептор

Функция в цепочке HttpClient, которая видит каждый запрос и ответ: добавляет заголовки и токен, логирует, обрабатывает ошибки. С Angular 15 — функциональные интерцепторы через withInterceptors.

HTTP.sys

Драйвер режима ядра Windows, который принимает HTTP-запросы для IIS и других серверов. В ASP.NET Core есть одноимённый сервер — альтернатива Kestrel только для Windows, с общим портом и Windows-аутентификацией.

HttpClient

Класс .NET для исходящих HTTP-запросов. Создавать его на каждый запрос нельзя — сокеты копятся в TIME_WAIT; держать один статический экземпляр тоже плохо — он не замечает смену DNS. Штатный способ — IHttpClientFactory.

HybridCache

API кеширования из .NET 9: L1 в памяти процесса плюс L2 в IDistributedCache, защита от stampede, сериализация и инвалидация по тегам. Реализация — пакет Microsoft.Extensions.Caching.Hybrid.

I/O-bound операция

Операция, время которой уходит на ожидание ввода-вывода — сети, диска, базы данных, — а не на работу процессора. Её выполняют асинхронно через await, не занимая поток.

IActionResult (результат действия)

Объект, который action возвращает вместо готового ответа. Фреймворк выполняет его после action: ViewResult рендерит представление, RedirectResult отправляет редирект.

IAsyncDisposable

Интерфейс с методом DisposeAsync, который возвращает ValueTask, для асинхронной очистки, например со сбросом буфера или закрытием соединения. Используется через await using (C# 8, .NET Core 3.0).

IConfiguration

Интерфейс доступа к конфигурации приложения: плоский набор строковых пар «ключ — значение» с иерархическими ключами через двоеточие, например Payments:TimeoutSeconds.

ID-токен

JWT, который OpenID Connect выдаёт клиенту после входа: кто пользователь (sub), кто выпустил токен (iss), для какого клиента (aud) и когда. В API его не отправляют.

Identity map

Словарь сессии «первичный ключ → объект»: одна строка базы представлена в сессии одним объектом, а повторный session.get по тому же ключу не идёт в базу.

Identity resolution

Гарантия, что одна строка базы представлена в контексте одним объектом. Отслеживающие запросы EF Core возвращают уже загруженный экземпляр; AsNoTracking создаёт новый объект на каждое вхождение строки.

Identity-столбец (GENERATED AS IDENTITY)

Столбец, значения которого база генерирует сама из привязанной к нему последовательности. В PostgreSQL объявляется как GENERATED ALWAYS AS IDENTITY или GENERATED BY DEFAULT AS IDENTITY (с версии 10) и заменяет устаревший serial; аналог IDENTITY(1,1) в SQL Server.

IDisposable

Интерфейс с единственным методом Dispose для детерминированного освобождения ресурсов: файлов, сокетов, соединений, неуправляемой памяти. Вызывается явно или через using.

IDOR (небезопасная прямая ссылка на объект)

Insecure Direct Object Reference — доступ к чужому объекту подменой идентификатора в запросе, например /orders/43 вместо /orders/42, когда сервер не проверяет владельца.

IExceptionHandler

Интерфейс (.NET 8+) для обработки известных исключений в одном месте. Реализации регистрируются через AddExceptionHandler<T>() и вызываются middleware UseExceptionHandler по очереди, пока одна не вернёт true.

IHostApplicationLifetime

Сервис с событиями жизненного цикла приложения — ApplicationStarted, ApplicationStopping, ApplicationStopped — и методом StopApplication() для остановки из кода.

IHostedLifecycleService

Расширение IHostedService из .NET 8 с методами StartingAsync, StartedAsync, StoppingAsync и StoppedAsync, которые выполняются до и после запуска и остановки служб.

IHostLifetime

Компонент, который решает, когда хост стартует и когда начинает остановку. ConsoleLifetime реагирует на Ctrl+C и SIGTERM, WindowsServiceLifetime — на команды службы Windows.

IHttpClientFactory

Фабрика HttpClient в .NET: переиспользует обработчики соединений, следит за их временем жизни и позволяет настроить именованных и типизированных клиентов с цепочкой обработчиков, например resilience.

IHubContext

Сервис для отправки сообщений клиентам хаба извне хаба: из контроллера, endpoint или фоновой задачи. Даёт Clients и Groups, но не знает вызывающего клиента.

IInterface

Базовый интерфейс Delphi, от которого наследуются все остальные; на Windows совпадает с COM-интерфейсом IUnknown. Объявляет QueryInterface для запроса других интерфейсов и _AddRef и _Release для подсчёта ссылок.

IIS (Internet Information Services)

Веб-сервер Windows. ASP.NET Core работает за ним через модуль ANCM: IIS принимает запрос и передаёт его Kestrel внутри того же процесса (in-process) или отдельному процессу приложения (out-of-process).

IL (промежуточный язык, CIL)

Платформенно-независимый стековый байт-код, в который компилируются C#, F# и VB.NET. Перед выполнением JIT или AOT-компилятор переводит его в машинный код.

IMemoryOwner<T>

Интерфейс владельца буфера Memory<T>: тот, кто держит ссылку на него, вызывает Dispose или передаёт владение дальше. Его выдаёт, например, MemoryPool<T>.Shared.Rent().

IMiddleware

Интерфейс middleware с методом InvokeAsync(HttpContext, RequestDelegate). Такой middleware регистрируется в DI и создаётся на каждый запрос, поэтому принимает scoped-зависимости в конструкторе.

IMiddlewareFactory

Фабрика, через которую UseMiddleware получает экземпляры IMiddleware на каждый запрос. Стандартная реализация берёт их из DI-scope запроса; свою подключают для стороннего контейнера.

In-process хостинг

Модель хостинга в IIS, при которой приложение работает внутри w3wp.exe, а запросы принимает IISHttpServer вместо Kestrel. Модель по умолчанию с ASP.NET Core 3.0.

Inbox (идемпотентный потребитель)

Шаблон дедупликации на стороне получателя: id обработанного сообщения сохраняется в таблицу той же транзакцией, что и изменения, и повтор с тем же id пропускается.

Index Seek и Index Scan

Два способа прочитать индекс. Seek спускается по B-дереву к нужному диапазону ключей и читает только его, scan читает индекс или таблицу целиком.

Inline-переменная (inline variable)

Переменная, объявленная прямо среди операторов: var I := 0;. Видна до конца своего блока begin..end, а тип может выводиться из инициализатора. Появилась в Delphi 10.3 Rio.

INP (Interaction to Next Paint)

Задержка от клика, касания или нажатия клавиши до следующего кадра, худшая за визит. Хорошо — до 200 мс. В марте 2024 года заменила FID в Core Web Vitals.

Interceptor (перехватчик) в NestJS

Класс с методом intercept, который выполняет код до и после обработчика и работает с его результатом как с RxJS Observable. Применяется для логирования, замера времени, кеша и преобразования ответа.

Interlocked

Статический класс атомарных операций над переменными: Increment, Add, Exchange, CompareExchange и других. Каждая операция — ещё и полный барьер памяти.

IOptionsMonitor<T>

Singleton-доступ к актуальным настройкам: CurrentValue отдаёт текущее значение, OnChange подписывает на изменения конфигурации. Подходит для singleton-сервисов.

IOptionsSnapshot<T>

Scoped-доступ к настройкам: объект создаётся заново в каждом scope, то есть на каждый запрос, и видит перезагруженную конфигурацию. Поддерживает именованные опции.

IServiceScopeFactory

Singleton-сервис, который создаёт новые scopes. Через него singleton и фоновые задачи получают scoped-сервисы: CreateScope() или, с .NET 6, CreateAsyncScope().

IUserIdProvider

Интерфейс, который определяет id пользователя соединения для Clients.User. По умолчанию берёт claim ClaimTypes.NameIdentifier.

IValueTaskSource

Интерфейс переиспользуемого объекта асинхронной операции, на котором ValueTask работает без аллокаций. Используется в высокопроизводительных API, например в Socket.

JIT-компилятор (just-in-time)

Часть CLR, которая переводит IL метода в машинный код при первом вызове с учётом конкретного процессора. В .NET это RyuJIT.

Jitter (случайный разброс задержки)

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

JSON

Текстовый формат обмена данными из объектов, массивов, строк, чисел, true, false и null. Своей схемы у него нет, поэтому контракт описывают отдельно — OpenAPI или JSON Schema, — а в .NET разбирают через System.Text.Json.

jsonb

Тип PostgreSQL для JSON в разобранном двоичном виде: без дублей ключей и исходного порядка, зато с операторами поиска (@>, ?, @?) и поддержкой GIN-индексов. Тип json, наоборот, хранит исходный текст.

jsonpath (SQL/JSON path)

Язык путей из стандарта SQL/JSON для выбора и фильтрации значений внутри JSON, например $.items[*] ? (@.price > 10). В PostgreSQL его понимают операторы @?, @@ и функции jsonb_path_query, JSON_VALUE, JSON_EXISTS.

JSX

Расширение синтаксиса JavaScript для описания разметки внутри кода: <h1>{title}</h1>. Компилятор превращает его в вызовы, создающие React-элементы.

JWE (JSON Web Encryption)

Формат зашифрованных данных (RFC 7516). В компактной форме — пять частей: заголовок, зашифрованный ключ, вектор инициализации, шифротекст и тег. Скрывает payload от всех, кроме владельца ключа.

JWKS (JSON Web Key Set)

Набор открытых ключей издателя в формате JSON (RFC 7517). Каждый ключ помечен kid, по которому проверяющий выбирает ключ для подписи конкретного токена.

JWS (JSON Web Signature)

Формат подписанных данных (RFC 7515). В компактной форме — три части в base64url: заголовок, payload и подпись. Защищает целостность и подлинность, но не скрывает содержимое.

JWT (JSON Web Token)

Компактный токен из JSON-заголовка, JSON-набора claims и подписи, закодированных в base64url и разделённых точками. Стандарт — RFC 7519; чаще всего используется как access-токен для API.

KDC (Key Distribution Center)

Центр выдачи билетов Kerberos. В Active Directory работает на каждом контроллере домена: проверяет пароль пользователя, выдаёт TGT и сервисные билеты.

Kerberos

Сетевой протокол аутентификации по билетам (RFC 4120). Пароль проверяет KDC один раз, дальше клиент предъявляет службам билеты, зашифрованные их ключами. Основной протокол входа в домене Active Directory.

Kestrel

Кроссплатформенный веб-сервер, встроенный в ASP.NET Core. Работает внутри процесса приложения, принимает HTTP/1.1, HTTP/2 и HTTP/3 и передаёт запросы в конвейер middleware.

Key Lookup

Оператор плана, который для каждой строки, найденной в некластерном индексе, ищет недостающие колонки в кластерном индексе. Для кучи его аналог — RID Lookup. Дёшев для десятков строк и дорог для тысяч.

Keyed services (сервисы с ключом)

Регистрации с ключом, появившиеся в .NET 8: AddKeyedSingleton, AddKeyedScoped, AddKeyedTransient. Нужную реализацию получают атрибутом [FromKeyedServices(key)] или методом GetRequiredKeyedService.

Keyset-пагинация (cursor pagination)

Постраничная выборка по последнему ключу предыдущей страницы: WHERE id > @after ORDER BY id. Работает по индексу за одинаковое время на любой странице, но не позволяет прыгнуть на страницу по номеру.

Keytab

Файл с долговременными ключами Kerberos учётной записи службы. На Linux по нему GSSAPI расшифровывает билеты без пароля; путь задаёт переменная KRB5_KTNAME. Перевыпускается при смене пароля учётки.

KISS (Keep It Simple, Stupid)

Принцип инженерной простоты: из работающих решений выбирать самое простое. Фразу приписывают Келли Джонсону, инженеру Lockheed.

KRaft

Встроенный в Kafka протокол консенсуса на основе Raft, через который контроллеры хранят метаданные кластера. С Kafka 4.0 — единственный режим, ZooKeeper больше не используется.

Kubernetes (K8s)

Оркестратор контейнеров: держит заданное число реплик, перезапускает упавшие поды, раздаёт конфигурацию и секреты, балансирует трафик через службы. Под он считает заменяемым и может остановить его в любой момент, поэтому состояние выносят наружу.

LARGEADDRESSAWARE

Флаг в заголовке EXE, который разрешает процессу использовать адреса выше 2 ГБ. 32-битный процесс с этим флагом на 64-битной Windows получает до 4 ГБ адресного пространства.

launchSettings.json

Файл профилей запуска для локальной разработки: окружение, адреса, переменные. Используется Visual Studio и dotnet run, при публикации не разворачивается.

Layout (макет)

Общий каркас страниц: шапка, меню, подвал, подключение стилей и скриптов. Представление вставляется в него через @RenderBody(), а именованные куски — через секции.

Layout thrashing

Чередование записи стилей и чтения геометрии (offsetHeight, getBoundingClientRect), при котором браузер синхронно пересчитывает layout на каждом чтении.

LCP (Largest Contentful Paint)

Время от начала навигации до отрисовки самого крупного изображения или текстового блока в области просмотра. Хорошо — до 2,5 секунды.

LDAP

Протокол доступа к каталогам, в том числе к Active Directory: поиск пользователей, групп и атрибутов. В .NET кроссплатформенный клиент — System.DirectoryServices.Protocols.

libuv

Кроссплатформенная библиотека асинхронного ввода-вывода на C, на которой построен Node.js. Даёт event loop, неблокирующие сокеты через epoll, kqueue и IOCP, таймеры и пул потоков для файлов и DNS.

Lifespan

Асинхронный контекстный менеджер приложения FastAPI: код до yield выполняется при старте процесса, после — при остановке. Заменяет устаревшие события startup и shutdown.

LINQ (Language Integrated Query)

Набор методов и синтаксис запросов C# для фильтрации, проекции, сортировки и группировки данных. LINQ to Objects работает с IEnumerable<T> в памяти, провайдеры вроде EF Core — с IQueryable<T>.

Liveness-проба (liveness probe)

Периодическая проверка Kubernetes, жив ли процесс. После нескольких неудач подряд kubelet перезапускает контейнер, поэтому внешние зависимости в ней не проверяют.

Lock-файл зависимостей

Файл с точными версиями и хешами всех пакетов графа, включая транзитивные. В Python это uv.lock, poetry.lock, закреплённый requirements.txt или стандартный pylock.toml (PEP 751).

Lock-файл пакетов (packages.lock.json)

Файл с полным графом зависимостей проекта и точными версиями, включая транзитивные. С dotnet restore --locked-mode restore берёт ровно эти версии или падает, если граф изменился.

Lock-free (без блокировок)

Алгоритм, который обходится без блокировок и строится на атомарных операциях вроде CompareExchange. Хотя бы один поток всегда продвигается, даже если другие приостановлены.

LOH (large object heap)

Куча для объектов размером от 85 000 байт, обычно больших массивов. Собирается только вместе с поколением 2 и по умолчанию не уплотняется, поэтому склонна к фрагментации.

Long Polling (длинный опрос)

Приём сообщений через HTTP-запрос, который сервер держит открытым до появления данных. После ответа клиент сразу отправляет следующий запрос.

Lookup-поле

Поле, значение которого берётся из другого набора по ключу: значения KeyFields ищутся в LookupKeyFields набора LookupDataSet, а показывается LookupResultField.

LTS (Long Term Support)

Релиз .NET с поддержкой три года. Это чётные версии: .NET 8, .NET 10.

LTS Node.js

Линия Node.js с долгой поддержкой: Active LTS, затем Maintenance, всего около 30 месяцев. До Node 26 LTS становились чётные версии; с Node 27 одна мажорная версия в год, и каждая становится LTS.

Memory<T>

Обычная структура-«окно» на непрерывную память (массив, строку или MemoryManager<T>), которую можно хранить в полях и передавать через await. К данным обращаются через свойство .Span.

MERGE

Инструкция, которая сопоставляет источник с целевой таблицей и за один проход выполняет UPDATE, INSERT или DELETE по веткам WHEN. Требует уникального источника и HOLDLOCK при параллельных upsert.

Merge Join (соединение слиянием)

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

Merge-ревизия

Ревизия Alembic с двумя родителями в down_revision, которая сводит две ветки миграций в одну head. Создаётся командой alembic merge heads.

Microsoft Entra ID

Облачная служба удостоверений Microsoft, бывший Azure Active Directory. Выдаёт токены по OIDC, OAuth 2.0, SAML и WS-Federation; синхронизируется с локальным AD через Entra Connect.

Middleware (промежуточное ПО)

Компонент конвейера запросов ASP.NET Core. Получает HttpContext, выполняет свою работу и передаёт запрос следующему компоненту или формирует ответ сам.

Middleware в NestJS

Функция или класс с NestMiddleware, который вызывается до guards и обработчика с объектами req, res и next, как middleware Express. Не знает, какой обработчик выполнится; подключается в методе configure модуля.

Middleware по соглашению (convention-based)

Класс без интерфейса с конструктором от RequestDelegate и методом Invoke или InvokeAsync. Создаётся один раз при сборке конвейера и живёт всё время работы приложения.

Migration bundle

Исполняемый файл с миграциями проекта, который собирают в CI командой dotnet ef migrations bundle (EF Core 6+). Применяет недостающие миграции без SDK и исходного кода.

Minimal API

Способ описать HTTP-эндпоинты делегатами прямо в Program.cs через MapGet, MapPost и другие методы, без классов-контроллеров. Появился в .NET 6, поддерживает Native AOT.

Misfire (пропущенный запуск)

Срабатывание триггера Quartz, которое не произошло вовремя, например пока планировщик был выключен. Misfire-политика решает, выполнить его сразу, один раз или пропустить.

ModelState

Словарь ModelStateDictionary с результатами привязки и валидации в MVC. ModelState.IsValid показывает, есть ли ошибки, а сами ошибки сгруппированы по полям.

Monitor

Класс .NET для взаимного исключения на любом объекте ссылочного типа. Оператор lock для обычного объекта компилируется в Monitor.Enter и Monitor.Exit в try/finally.

monkeypatch

Встроенная фикстура pytest для временной подмены атрибутов, элементов словарей и переменных окружения. После теста всё возвращается как было.

mTLS (взаимный TLS)

TLS, в котором сертификат предъявляют обе стороны, а не только сервер. Шифрует трафик между сервисами и доказывает, какой именно сервис звонит.

Multi-targeting

Сборка одного проекта под несколько TFM через свойство TargetFrameworks. В NuGet-пакет попадает отдельная сборка для каждой цели.

Multicast-делегат (multicast delegate)

Делегат со списком из нескольких методов, которые вызываются по порядку. Получается через += или Delegate.Combine; возвращает результат последнего метода.

Mutex

Примитив взаимного исключения на основе объекта ядра ОС. Медленнее lock, но именованный Mutex виден другим процессам.

MVC (Model-View-Controller)

Архитектурный шаблон, который делит UI-приложение на модель (данные и логика), представление (отображение) и контроллер (обработка запроса). В ASP.NET Core MVC контроллер выбирает представление и передаёт ему модель.

MVCC (многоверсионное управление параллельным доступом)

Способ изоляции транзакций, при котором база хранит несколько версий строки, и каждая транзакция видит версию, актуальную для её снимка. Читатели не блокируют писателей и наоборот. В PostgreSQL старые версии лежат в самой таблице, в SQL Server с RCSI — в отдельном хранилище версий.

Naming convention (SQLAlchemy)

Шаблоны имён индексов и ограничений в MetaData(naming_convention=...). С ними каждое ограничение получает предсказуемое имя, и Alembic может его изменить или удалить.

Native AOT

Публикация приложения в один нативный исполняемый файл без JIT и без установленного .NET. Быстрый старт и меньше памяти, но нет динамической загрузки сборок и Reflection.Emit, обязателен trimming.

NativeInt

Целый тип Delphi, размер которого равен размеру указателя: 4 байта в Win32 и 8 байт в Win64. В нём хранят указатели и ссылки на объекты, приведённые к числу.

Negotiate (согласование) в SignalR

Первый запрос клиента POST {hub}/negotiate. Сервер возвращает id и токен соединения и список доступных транспортов, а Azure SignalR Service — редирект на свой адрес.

Negotiate (SPNEGO)

Механизм, который выбирает протокол аутентификации: сначала Kerberos, при неудаче NTLM. В HTTP — схема WWW-Authenticate: Negotiate (RFC 4559), в ASP.NET Core — обработчик AddNegotiate().

Nested Loops (вложенные циклы)

Соединение, при котором для каждой строки внешнего входа ищутся совпадения во внутреннем. Эффективно, когда внешний вход мал, а у внутреннего есть индекс по ключу соединения.

ng update

Команда Angular CLI, которая обновляет пакеты на следующую мажорную версию и запускает автоматические миграции кода. Перескакивать через версии нельзя: обновляются по одной.

NgRx SignalStore

Стор из пакета @ngrx/signals, построенный на сигналах: состояние, вычисляемые значения и методы собираются функциями withState, withComputed, withMethods. Легче классического NgRx Store по объёму кода.

NgRx Store

Реализация Redux для Angular: глобальное состояние меняется только через actions и reducers, читается через selectors, побочные эффекты живут в effects. Даёт трассировку в Redux DevTools ценой шаблонного кода.

NOLOCK

Табличный хинт SQL Server, равный READ UNCOMMITTED: чтение без разделяемых блокировок. Даёт грязные данные, пропуски и повторы строк и не снимает блокировок схемы и конфликтов писателей.

Non-root контейнер

Контейнер, процесс которого работает не от root. Образы .NET с версии 8 содержат пользователя app (UID в переменной APP_UID); включается инструкцией USER $APP_UID, в chiseled — по умолчанию.

NonGC heap (frozen heap)

Область памяти в .NET 8+ для объектов, которые живут всё время работы процесса, например строковых литералов. GC их не собирает и не перемещает, а GC.GetGeneration для них может вернуть int.MaxValue.

NTLM

Протокол аутентификации Windows по схеме «вызов — ответ»: клиент доказывает знание хеша пароля, а сервер проверяет ответ через контроллер домена. Не проверяет сервер и не поддерживает делегирование; с 2024 года объявлен deprecated.

NuGet

Менеджер пакетов .NET. Пакет .nupkg содержит сборки под разные TFM и список зависимостей; dotnet restore скачивает пакеты и выбирает их версии.

NuGet Audit

Проверка пакетов на известные уязвимости при каждом restore (.NET 8 SDK+). Выдаёт предупреждения NU1901–NU1904 по уровню опасности; для net10.0 по умолчанию проверяет и транзитивные пакеты.

NuGet-фид (package source)

Сервер или папка, откуда NuGet скачивает пакеты. Приватный фид компании (Azure Artifacts, GitHub Packages, BaGetter, Nexus) хранит внутренние пакеты и часто проксирует nuget.org.

Nullable reference types (NRT)

Возможность C# 8+: ссылочный тип без ? считается не допускающим null, с ? — допускающим. Компилятор предупреждает о возможных NullReferenceException, а в рантайме ничего не проверяется.

Nullable-контекст (nullable context)

Настройка, которая включает аннотации ? и предупреждения о null: enable, warnings, annotations или disable. Задаётся элементом <Nullable> в проекте и директивами #nullable в коде.

OAuth 2.0

Протокол делегирования доступа (RFC 6749): пользователь разрешает приложению обращаться к API от своего имени, а приложение получает access-токен вместо пароля.

Observable (RxJS)

Ленивый поток значений во времени: начинает работу при подписке, может выдать много значений, ошибку или завершение и отменяется отпиской. В Angular его возвращают HttpClient, роутер и формы.

OLAP (online analytical processing)

Аналитическая нагрузка: агрегаты по миллионам строк и срезы по времени, магазинам, товарам. Данные обычно лежат в отдельном хранилище со схемой «звезда» или в кубах.

OLTP (online transaction processing)

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

OnPush

Стратегия обнаружения изменений, при которой компонент проверяется только при новом входе по ссылке, событии внутри, markForCheck() или изменении прочитанного сигнала. С Angular 22 — стратегия по умолчанию.

OpenAPI

Стандарт машиночитаемого описания HTTP API в JSON или YAML: пути, параметры, тела, ответы и схемы. Раньше назывался Swagger; по документу строят документацию, клиентов и тесты.

OpenID Connect (OIDC)

Слой аутентификации поверх OAuth 2.0: scope openid, ID-токен, endpoint UserInfo и discovery-документ. Позволяет приложению узнать, кто вошёл.

OpenTelemetry

Открытый стандарт и набор SDK для сбора трёх сигналов телеметрии — трейсов, метрик и логов — и их отправки в любой совместимый бэкенд. В .NET опирается на Activity, Meter и ILogger.

OperationCanceledException

Исключение, которым операция сообщает об отмене. Async-метод, завершившийся им, получает статус Canceled; TaskCanceledException — его наследник.

Options pattern

Привязка секции конфигурации к типизированному классу настроек, который сервисы получают через DI как IOptions<T>, IOptionsSnapshot<T> или IOptionsMonitor<T>. Поддерживает валидацию.

ORM (объектно-реляционное отображение)

Библиотека, которая сопоставляет классы приложения с таблицами базы: генерирует SQL по операциям с объектами и превращает строки результата в объекты. В .NET это EF Core, NHibernate; Dapper называют micro-ORM.

OSR (on-stack replacement)

Замена кода метода прямо во время его выполнения: долгий цикл в неоптимизированном коде переключается на оптимизированную версию. Включён по умолчанию с .NET 7 на x64 и Arm64.

OTLP (OpenTelemetry Protocol)

Протокол передачи трейсов, метрик и логов OpenTelemetry по gRPC или HTTP. Его принимают коллектор OpenTelemetry и большинство систем наблюдаемости, включая Elastic.

Out-of-process хостинг

Модель хостинга в IIS, при которой ANCM запускает приложение отдельным процессом с Kestrel и пересылает ему запросы по HTTP через loopback.

Output caching

Middleware ASP.NET Core (.NET 7+), которое хранит готовые ответы на сервере по политикам сервера, игнорируя заголовки клиента. Поддерживает теги, блокировку на промахе и Redis.

OWASP Top 10

Рейтинг десяти главных категорий рисков веб-приложений от сообщества OWASP. Обновляется раз в несколько лет; текущая редакция — 2025 года.

PAC (Privilege Attribute Certificate)

Структура внутри билета Kerberos в Active Directory со списком SID пользователя и всех его групп. Из неё сервер строит Windows-токен без запроса к каталогу.

PACELC

Расширение CAP от Daniel Abadi (2010–2012): при разделении (P) система выбирает между доступностью (A) и согласованностью (C), иначе (E) — между задержкой (L) и согласованностью (C).

Package Source Mapping

Настройка nuget.config, которая для каждого шаблона имени пакета задаёт, из какого фида его можно брать. Защищает от подмены внутренних пакетов одноимёнными с nuget.org (dependency confusion).

package-lock.json

Lock-файл npm с точными версиями и контрольными суммами всего дерева зависимостей, включая транзитивные. npm ci ставит строго по нему и падает, если он расходится с package.json.

PAR (Pushed Authorization Requests)

Расширение OAuth (RFC 9126): клиент отправляет параметры авторизации прямым POST и получает request_uri, а браузер переходит на /authorize только с ним. Параметры не видны и не подменяются в браузере.

Parallel Programming Library (PPL)

Модуль System.Threading: задачи TTask и ITask, задачи с результатом IFuture<T> и параллельные циклы TParallel.For, которые выполняются на пуле потоков.

Parameter sniffing (прослушивание параметров)

Поведение оптимизатора: план компилируется под значения параметров первого вызова и переиспользуется для остальных. Полезно при равномерных данных и вредно при перекошенных.

Partial Prerendering (PPR)

Режим рендеринга Next.js: статическая и кешированная часть страницы собирается заранее в статическую оболочку, а динамические части под Suspense стримятся в том же ответе.

Partial view (частичное представление)

Файл .cshtml с повторяющимся куском разметки, который вставляют в другие представления через <partial>. Своей логики не имеет и получает данные от родителя.

PDP и PEP (точки принятия и применения решений)

Policy decision point вычисляет решение «разрешить или запретить», policy enforcement point перехватывает запрос и применяет это решение. Разделение описано в NIST SP 800-162; внешним PDP служат, например, OPA и OpenFGA.

PerfView

Бесплатный профилировщик Microsoft поверх ETW: собирает трассы по CPU, аллокациям, сборкам мусора и исключениям и разбирает их офлайн. Освоить тяжело, но он показывает то, чего не видно по счётчикам и логам.

pg_stat_statements

Расширение PostgreSQL, которое копит статистику выполнения по нормализованным запросам: вызовы, суммарное и среднее время, строки, чтения блоков. Ближайший аналог Query Store, но без хранения планов.

PgBouncer

Лёгкий внешний пул соединений для PostgreSQL. В режиме transaction отдаёт клиенту серверное соединение только на время транзакции, поэтому тысячи клиентских соединений обслуживает небольшое число серверных процессов.

pickle

Встроенный формат сериализации объектов Python в байты. Через него multiprocessing передаёт данные между процессами, поэтому лямбды и локальные функции туда не передать.

Pipe в NestJS

Класс с методом transform, который проверяет или преобразует аргумент обработчика до его вызова. Встроенные — ValidationPipe, ParseIntPipe; ошибка в pipe даёт ответ 400.

PKCE (Proof Key for Code Exchange)

Расширение OAuth (RFC 7636): клиент отправляет хэш случайной строки в запросе авторизации, а саму строку — при обмене кода. Перехваченный код без неё бесполезен.

POH (pinned object heap)

Куча для объектов, которые нельзя перемещать (.NET 5+). Массив создаётся в ней через GC.AllocateArray с pinned: true; собирается вместе с поколением 2 и никогда не уплотняется.

Preflight-запрос

Предварительный запрос OPTIONS, который браузер шлёт перед «непростым» межсайтовым запросом: с методом вроде PUT, телом application/json или своими заголовками. Без разрешения сервера основной запрос не уходит.

Primary constructor (первичный конструктор)

Параметры конструктора прямо в объявлении типа: class Service(ILogger log). Для class и struct появились в C# 12; параметры видны во всём теле типа, но не становятся свойствами.

Prisma Client

Типизированный клиент базы, который prisma generate создаёт по схеме: методы findMany, create, update для каждой модели. Изменений не отслеживает — каждый вызов сразу выполняет запрос.

Prisma Migrate

Инструмент миграций Prisma: prisma migrate dev создаёт SQL-миграции по изменениям схемы, prisma migrate deploy применяет готовые миграции в CI и проде. История хранится в таблице _prisma_migrations.

ProblemDetails

Стандартный JSON-формат ошибки HTTP API по RFC 9457 (ранее RFC 7807) с полями type, title, status, detail и instance. В ASP.NET Core включается через AddProblemDetails().

Prometheus

Система мониторинга и база временных рядов. Сама забирает метрики с HTTP-эндпоинтов сервисов (pull), хранит их и проверяет правила алертов; графики обычно строят в Grafana.

Prop drilling

Передача props через несколько уровней компонентов, которым они не нужны, только чтобы довести значение до глубокого потомка. Лечится Context или композицией через children.

Props (свойства компонента)

Входные параметры React-компонента, которые передаёт родитель. Компонент их только читает; чтобы что-то изменить наверху, он вызывает колбэк из props.

Protocol Buffers (Protobuf)

Бинарный формат сериализации от Google: схема описывается в .proto, а каждое поле кодируется номером и типом. Сообщения компактнее JSON, но без схемы их не прочитать.

PSP optimization (Parameter Sensitive Plan)

Механизм SQL Server 2022 на уровне совместимости 160: для запроса с перекошенными данными сервер держит несколько вариантов плана и выбирает их по диапазону кардинальности текущего значения параметра. Работает с предикатами-равенствами.

Pub/sub (публикация и подписка)

Схема обмена сообщениями: отправитель публикует сообщение в тему или канал, не зная получателей, и его получает каждый подписчик. Хранятся ли сообщения, зависит от системы: Redis pub/sub доставляет только тем, кто подписан сейчас, а Kafka и подписки Service Bus хранят их до прочтения.

Pull request (PR, merge request)

Запрос на слияние ветки в другую ветку на платформе вроде GitHub, GitLab или Azure DevOps. Вокруг него идут ревью, обсуждение и проверки CI; в GitLab он называется merge request.

Pydantic

Библиотека валидации и сериализации данных по аннотациям типов. Модель наследуется от BaseModel; в версии 2 ядро pydantic-core написано на Rust.

pydantic-settings

Пакет с классом BaseSettings: поля настроек заполняются из переменных окружения, .env и файлов секретов, а типы проверяет Pydantic при создании объекта.

pyproject.toml

Стандартный файл описания Python-проекта: метаданные и зависимости в таблице [project] (PEP 621), система сборки и настройки инструментов в таблицах [tool.*]. Аналог .csproj.

Quality gate

Набор порогов, которые результат анализа должен пройти, чтобы считаться годным: например, нет новых замечаний и покрытие нового кода от 80%. В SonarQube статус gate может останавливать конвейер и слияние PR.

Quartz.NET

Планировщик заданий для .NET: задание (IJob) запускается по триггерам — интервалу, cron или календарю. С AdoJobStore хранит расписание в базе и работает кластером.

Query Store

Встроенное в базу хранилище истории запросов, их планов и статистики выполнения. Появился в SQL Server 2016, для новых баз включён по умолчанию с SQL Server 2022; помогает найти регрессию и закрепить план.

Razor

Синтаксис шаблонов, который встраивает C# в HTML через символ @. Файлы .cshtml компилируются в C#-классы при сборке, а выводимые значения автоматически кодируются.

Razor Pages

Модель серверного UI, где страница .cshtml с директивой @page сама отвечает на маршрут, а обработчики OnGet и OnPost лежат рядом в классе PageModel. Построена на инфраструктуре MVC.

RBAC (ролевая модель доступа)

Role-based access control: права собирают в роли, а пользователям назначают роли. Модель NIST закреплена стандартом ANSI INCITS 359 и, кроме базового уровня, описывает иерархии ролей и разделение обязанностей.

RBAR (row by agonizing row)

Ироничное название построчной обработки: курсоры, циклы WHILE и вызовы из приложения на каждую строку. Термин ввёл Джефф Моден.

RBCD (resource-based constrained delegation)

Ограниченное делегирование, которое настраивает владелец целевой службы: на её учётке перечислены учётки, которым можно делегировать к ней. Появилось в Windows Server 2012, работает между доменами.

RCSI (read committed snapshot isolation)

Реализация READ COMMITTED в SQL Server на версиях строк: каждый оператор читает данные, зафиксированные к его началу, без разделяемых блокировок. Включается опцией базы READ_COMMITTED_SNAPSHOT, в Azure SQL Database включена по умолчанию.

React Compiler

Инструмент сборки, который анализирует компоненты и автоматически мемоизирует значения, JSX и колбэки. Стабильная версия 1.0 вышла в октябре 2025.

Read-your-writes

Сессионная гарантия: пользователь всегда видит собственные записи, даже если другие клиенты пока читают старую версию с отстающей реплики.

ReaderWriterLockSlim

Блокировка, которая пускает многих читателей одновременно или одного писателя. Привязана к потоку и по умолчанию не поддерживает рекурсию.

Readiness-проба (readiness probe)

Периодическая проверка Kubernetes, готов ли контейнер принимать трафик. При провале под убирают из EndpointSlice сервиса, но не перезапускают.

ReadyToRun (R2R)

Форма AOT-компиляции, при которой в сборку кроме IL добавляется готовый машинный код. Ускоряет старт; JIT остаётся и перекомпилирует горячие методы.

ReBAC (доступ на основе отношений)

Relationship-based access control: права выводятся из графа отношений между пользователями и объектами — «владелец», «участник группы», «папка содержит документ». Так устроены Google Zanzibar, OpenFGA и SpiceDB.

Rebase (перебазирование)

Перенос коммитов ветки на новую базу: Git заново применяет каждый коммит поверх другой ветки и создаёт его копию с новым хешем. Делает историю линейной, но переписывает её.

Record (запись)

Модификатор record для класса (C# 9) или структуры (C# 10): компилятор генерирует равенство по значению, ToString, Deconstruct для позиционных параметров и поддержку with.

Redis

Хранилище «ключ — значение» в оперативной памяти с необязательным сохранением на диск. Типовые роли — распределённый кеш, счётчики, очереди и блокировки; в ASP.NET Core подключается как IDistributedCache или напрямую через StackExchange.Redis.

Ref safety (безопасность ссылок)

Правила компилятора C#, которые не дают ссылке (ref, Span<T>, любому ref struct) пережить данные, на которые она указывает. Например, нельзя вернуть span на stackalloc-буфер; модификатор scoped сужает время жизни.

ref struct

Структура, которая может жить только на стеке: её нельзя упаковать, сохранить в поле класса или захватить в лямбду. Пример — Span<T>.

Reference-токен

Непрозрачный токен-идентификатор: сами данные хранятся у сервера авторизации, а API получает их интроспекцией. Отзывается сразу и ничего не раскрывает, но требует сетевого вызова.

Reflog (журнал ссылок)

Локальный журнал, в котором Git записывает каждое перемещение HEAD и веток. Через него находят коммиты после reset --hard или удаления ветки; записи по умолчанию живут 90 дней, недостижимые — 30.

Reflow (пересчёт раскладки)

Повторный расчёт размеров и положения элементов (layout) после изменения геометрии или DOM. Дороже repaint, который только перерисовывает пиксели.

Refresh-токен

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

reintroduce

Директива метода, которая явно скрывает виртуальный метод предка с тем же именем и подавляет предупреждение W1010. Аналог модификатора new в C#.

Relying party trust

Запись в ADFS о приложении, которому ADFS выдаёт токены: идентификатор, адрес возврата, протокол, правила claims и политика доступа.

RequestDelegate

Делегат Task RequestDelegate(HttpContext context) — сигнатура звена конвейера и endpoint'а. Весь собранный конвейер — тоже один RequestDelegate.

Requests и limits

Ресурсы контейнера в Kubernetes. Requests — резерв, по которому планировщик выбирает узел; limits — потолок: за превышение памяти процесс убивают (OOMKilled), за превышение CPU — троттлят.

Respawn

Библиотека Джимми Богарда, которая быстро очищает тестовую базу между тестами: удаляет данные из таблиц в порядке внешних ключей и не трогает схему.

Response caching (кеширование ответов по HTTP)

Кеширование HTTP-ответов по стандартным заголовкам: браузер, прокси и CDN хранят ответ по Cache-Control. В ASP.NET Core есть атрибут [ResponseCache] и одноимённый middleware.

REST

Архитектурный стиль API, где URL обозначает ресурс, а действие над ним выражает стандартный HTTP-метод. Результат сообщает статус-код, а состояние клиента между запросами сервер не хранит.

Roll-forward

Правило выбора версии рантайма при запуске приложения. По умолчанию берётся последний установленный патч своей версии, но не новая major-версия; поведение меняет настройка RollForward.

Roslyn

Компилятор C# и Visual Basic с открытым кодом и API для анализа кода. Превращает исходники в IL и метаданные; на нём работают анализаторы и source generators.

Row-level security (RLS)

Механизм СУБД, который фильтрует строки таблицы по политике для текущего пользователя или контекста сессии: CREATE POLICY в PostgreSQL, CREATE SECURITY POLICY в SQL Server.

rowversion

Тип данных SQL Server: 8 байт из счётчика базы, которые автоматически меняются при каждом изменении строки. Используется для оптимистической проверки «строку никто не менял». Синоним timestamp устарел.

RPS (requests per second)

Число запросов в секунду — основная мера нагрузки на сервис. Считают среднее и пик: пик обычно в несколько раз выше среднего.

Ruff

Линтер и форматтер Python от Astral, написанный на Rust. ruff check заменяет flake8, isort и pyupgrade, ruff format — Black.

RUM (real user monitoring)

Сбор метрик производительности в браузерах реальных пользователей и отправка их в аналитику. Даёт полевые данные в отличие от лабораторных замеров Lighthouse.

Runbook

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

SafeHandle

Абстрактная обёртка над дескриптором ОС с критическим финализатором. Гарантирует однократное освобождение дескриптора и не даёт закрыть его во время P/Invoke-вызова.

SAML 2.0

XML-стандарт обмена утверждениями об аутентификации между поставщиком удостоверений и приложением. Распространён в корпоративных продуктах и SaaS; встроенного обработчика в ASP.NET Core нет.

SARGable-условие

Условие, которое оптимизатор может превратить в диапазон поиска по индексу (от search argument). Колонка стоит в нём без функций, вычислений и преобразований типа.

Scope (область доступа)

Строка в запросе токена, которая ограничивает, что клиент может делать от имени пользователя: openid, orders.read, offline_access. Это права клиента, а не пользователя.

Scope (область DI)

Область, внутри которой scoped-сервисы существуют в одном экземпляре и в конце которой контейнер освобождает созданные в ней объекты. В ASP.NET Core scope создаётся на каждый HTTP-запрос.

Scope логирования (log scope)

Блок, открытый через ILogger.BeginScope, свойства которого добавляются ко всем записям внутри него. Хранится в AsyncLocal, поэтому переживает await.

Scrutor

Библиотека расширений для встроенного контейнера .NET: сканирование сборок с регистрацией по соглашениям (Scan) и декораторы (Decorate).

search_path

Параметр PostgreSQL со списком схем, в которых ищутся объекты, указанные без схемы. По умолчанию это схема с именем пользователя и public; ближайший аналог в SQL Server — схема по умолчанию у пользователя, обычно dbo.

Self-contained-публикация

Публикация, при которой рантайм .NET кладётся вместе с приложением. Не требует установленного .NET, но собирается под конкретную ОС и архитектуру.

SemaphoreSlim

Лёгкий семафор внутри одного процесса: пускает одновременно не больше N участников. Умеет ждать асинхронно через WaitAsync и не имеет владельца.

Server Action (серверное действие)

Асинхронная функция с директивой 'use server', которую клиент вызывает POST-запросом для изменения данных, например через <form action>. Это публичный эндпоинт, авторизацию проверяют внутри.

Server GC

Режим GC с отдельной кучей и выделенным потоком сборки на каждый логический процессор. Даёт большую пропускную способность ценой памяти; по умолчанию используется в ASP.NET Core.

Server-Sent Events (SSE)

Стандарт браузера для потока текстовых событий от сервера к клиенту по обычному HTTP (EventSource). В обратную сторону SignalR отправляет данные отдельными POST.

Service Locator (локатор служб)

Паттерн, при котором класс сам запрашивает зависимости у глобального реестра, например через IServiceProvider.GetService. При DI его считают антипаттерном: зависимости не видны в конструкторе, а ошибки переезжают в рантайм.

Service mesh

Инфраструктурный слой для вызовов между сервисами: прокси рядом с каждым сервисом (sidecar) добавляет mTLS, повторы, балансировку и телеметрию без изменения кода. Примеры — Istio, Linkerd.

Session (SQLAlchemy)

Объект ORM SQLAlchemy для работы с объектами в рамках одной единицы работы: загружает их, отслеживает изменения и сохраняет через flush и commit(). Аналог DbContext, не потокобезопасна.

SET XACT_ABORT

Настройка сеанса: при ON любая ошибка выполнения откатывает всю транзакцию. По умолчанию OFF, и часть ошибок откатывает только одну инструкцию, а таймаут клиента оставляет транзакцию открытой.

Set-based подход (работа с множествами)

Стиль, при котором набор строк обрабатывают одной инструкцией (UPDATE ... JOIN, INSERT ... SELECT, MERGE), а не циклом по строкам. Оптимизатор выбирает план для всего набора, а накладные расходы платятся один раз.

ShutdownTimeout

Время, которое Generic Host ждёт остановки служб и сервера (HostOptions.ShutdownTimeout). С .NET 6 по умолчанию 30 секунд, раньше было 5.

SID (Security Identifier)

Постоянный идентификатор учётной записи или группы в Windows, например S-1-5-21-...-1105. Не меняется при переименовании, поэтому проверять права надёжнее по SID, чем по имени.

SignalR

Библиотека ASP.NET Core для обмена сообщениями в реальном времени. Держит постоянное соединение и позволяет серверу и клиенту вызывать методы друг друга.

SIGTERM

Сигнал Unix с просьбой завершить процесс. Его шлют docker stop, Kubernetes и systemd; если процесс не завершился за отведённое время, следует SIGKILL.

Silent renew (тихое обновление)

Получение нового токена без участия пользователя: запрос /authorize с prompt=none в скрытом iframe использует сессию провайдера. Ломается, если браузер блокирует сторонние cookie.

Sink в Serilog

Приёмник событий Serilog — место, куда они записываются: консоль, файл, Seq, Elasticsearch, OTLP. Каждый sink — отдельный NuGet-пакет.

SLI (service level indicator)

Измеряемый показатель качества сервиса, обычно доля хороших событий среди всех: успешных запросов, запросов быстрее порога.

SLO (service level objective)

Целевое значение показателя качества сервиса, например «99,9% запросов успешны» или «p99 меньше 300 мс». SLA — договорное обязательство перед клиентом, обычно мягче внутреннего SLO.

SMPP (Short Message Peer-to-Peer)

Протокол поверх TCP для обмена SMS между приложением (ESME) и SMS-центром оператора или агрегатора. Сообщения отправляют операцией submit_sm, статусы получают через deliver_sm.

SOAP

Протокол обмена XML-сообщениями (конвертами) с контрактом в WSDL. Используется в WCF и корпоративных системах; набор стандартов WS-* добавляет безопасность, надёжную доставку и транзакции.

SOLID

Пять принципов объектного проектирования, собранных Робертом Мартином: единственная ответственность, открытость/закрытость, подстановка Лисков, разделение интерфейсов и инверсия зависимостей. Аббревиатуру предложил Майкл Фэзерс.

SPA (одностраничное приложение)

Приложение, в котором браузер один раз загружает оболочку, а дальше меняет содержимое и адрес без полной перезагрузки. Цена — объём JavaScript, своя маршрутизация и состояние на клиенте, а также отдельная работа над доступностью и индексацией.

Span<T>

ref struct из ссылки на непрерывный участок памяти и длины. Указывает на массив, строку, stackalloc-буфер или неуправляемую память, срезы не копируют данные. Живёт только на стеке.

Split query (разделённый запрос)

Режим EF Core 5+, в котором Include коллекций выполняется отдельными SQL-запросами вместо одного с JOIN. Включается AsSplitQuery(); убирает декартов взрыв ценой лишних round trip и без общей согласованности.

SPN (Service Principal Name)

Имя службы для Kerberos вида HTTP/portal.contoso.com, привязанное к одной учётной записи AD. По нему KDC выбирает ключ, которым шифрует билет; дубликат или SPN не на той учётке ломают вход.

SQL-инъекция

Уязвимость, при которой данные пользователя вклеиваются в текст SQL и меняют сам запрос. Защита — передавать значения параметрами, а не склеивать строки.

SQLAlchemy Core

Нижний уровень SQLAlchemy: таблицы, выражения SQL (select, insert), соединения и транзакции без объектов и отслеживания изменений. ORM построен поверх него.

Squash merge

Способ слить pull request, при котором все коммиты ветки объединяются в один коммит в целевой ветке. История main получается короткой, но промежуточные коммиты в неё не попадают.

SSRF (подделка запроса со стороны сервера)

Server-Side Request Forgery — атакующий заставляет сервер сделать HTTP-запрос по своему адресу, например во внутреннюю сеть или к сервису метаданных облака. В OWASP Top 10:2025 входит в категорию контроля доступа.

Staging-таблица (промежуточная таблица)

Таблица, куда загрузка сначала кладёт сырые данные из источника. Оттуда их проверяют и переносят в целевые таблицы set-based запросом, а при повторе staging просто очищают.

Standalone-компонент

Компонент, который сам перечисляет свои зависимости в imports и не объявляется в NgModule. Появился в Angular 14, стабилен с v15, по умолчанию с v19.

Starlette

Лёгкий ASGI-фреймворк: маршрутизация, middleware, запросы и ответы, WebSocket. FastAPI наследует от него класс приложения и добавляет зависимости, валидацию и OpenAPI.

Startup-проба (startup probe)

Проверка Kubernetes, которая ждёт окончания запуска контейнера. Пока она не прошла, liveness и readiness не выполняются; при провале контейнер перезапускается.

Stateful reconnect (переподключение с состоянием)

Режим SignalR (.NET 8+), при котором сервер и клиент буферизуют неподтверждённые сообщения и после короткого обрыва восстанавливают то же соединение без потерь.

Stateless-сервис

Сервис, который не хранит состояние между запросами в своей памяти: сессии, корзины и файлы лежат во внешнем хранилище. Любой экземпляр может обработать любой запрос.

Sticky sessions (привязка сессии)

Настройка балансировщика, при которой все запросы клиента идут на один и тот же сервер, обычно по cookie или IP. Также называется session affinity.

Strangler fig («фикус-душитель»)

Паттерн постепенной замены системы: новый код встаёт рядом со старым и забирает функции по одной, пока старую систему не станет можно отключить. Название дал Мартин Фаулер.

StrictMode

Режим проверок React в разработке: компоненты рендерятся дважды, а эффекты проходят лишний цикл setup → cleanup → setup. Так находятся нечистый рендер и эффекты без очистки.

StringBuilder

Изменяемый буфер для построения строки по частям. Дописывает символы без промежуточных строк и создаёт итоговую string в ToString().

STS (Standard Term Support)

Релиз .NET с поддержкой 24 месяца (начиная с .NET 9, раньше было 18). Это нечётные версии: .NET 9, .NET 11.

Suspense

Компонент React, который показывает fallback, пока дочерние компоненты ждут данные или код. На сервере его границы задают части, которые стримятся отдельно.

switch-выражение (switch expression)

Выражение x switch { шаблон => результат, ... } (C# 8), которое возвращает значение первой подошедшей ветки. Если не подошла ни одна, бросает SwitchExpressionException.

Sync block

Внутренняя структура CLR, куда переезжает состояние Monitor, когда блокировка на объекте становится конкурентной. Владельцев и ждущих можно увидеть командой syncblk в дампе.

Sync-over-async

Синхронное ожидание асинхронной операции через .Result, .Wait() или GetAwaiter().GetResult(). Блокирует поток на всё время операции и чаще всего вызывает голодание пула.

Synchronizer token pattern

Схема защиты от CSRF: сервер выдаёт клиенту непредсказуемый токен, связанный с пользователем, и принимает изменяющий запрос, только если токен вернулся вместе с ним.

System.Threading.Lock

Выделенный тип блокировки, появившийся в .NET 9. Если выражение в lock имеет этот тип, C# 13 и новее генерируют вызов EnterScope вместо Monitor.

Tag helper

Класс, который на сервере обрабатывает HTML-элемент в Razor-разметке, например <a asp-action="..."> или <input asp-for="...">. Подключается директивой @addTagHelper.

takeUntilDestroyed

Оператор из @angular/core/rxjs-interop, который завершает подписку при уничтожении компонента или сервиса. В injection context берёт DestroyRef сам, вне его — принимает параметром. Стабилен с v19.

TanStack Query (React Query)

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

Task.WhenAll

Метод, который возвращает задачу, завершающуюся после всех переданных задач. Если какие-то из них упали, она содержит все их исключения.

TaskGroup

Асинхронный контекстный менеджер Python 3.11+, который ждёт все запущенные в нём задачи. Если одна падает, остальные отменяются, а ошибки собираются в ExceptionGroup.

TBytes

Динамический массив байтов (array of Byte) в Delphi. С переходом на Unicode двоичные данные хранят в TBytes, а не в строке, потому что строка теперь двухбайтовая и перекодируется.

TDataSet

Абстрактный базовый класс наборов данных в Delphi: курсор по строкам, поля, состояния, события и навигация. От него наследуются наборы ADO, FireDAC, dbExpress и TClientDataSet.

Tell, Don't Ask

Принцип: не вытаскивать данные объекта, чтобы принять решение за него, а попросить объект выполнить действие. Так поведение остаётся рядом с данными.

TEncoding

Класс RTL Delphi для преобразования текста в байты и обратно в заданной кодировке: UTF-8, UTF-16, ANSI или конкретная кодовая страница. Умеет распознавать и записывать BOM.

Test double (дублёр)

Общее название объекта, который в тесте заменяет настоящую зависимость. Виды по Джерарду Мезаросу — dummy, stub, spy, mock и fake.

Testcontainers

Библиотека, которая из кода теста запускает Docker-контейнеры — SQL Server, PostgreSQL, Redis, брокеры — и удаляет их после прогона. Тесты работают с настоящей инфраструктурой той же версии, что в проде.

TFM (target framework moniker)

Короткое имя целевой платформы в проекте и NuGet-пакете: net48, netstandard2.0, net10.0, net10.0-windows.

TGT (Ticket Granting Ticket)

«Билет на получение билетов» Kerberos: его выдаёт KDC после проверки пароля, и по нему клиент получает сервисные билеты без повторного ввода пароля. Зашифрован ключом учётки krbtgt, по умолчанию живёт 10 часов.

this в JavaScript

Ключевое слово, значение которого задаётся способом вызова функции: new, call/apply/bind, вызов через объект или обычный вызов. У стрелочных функций своего this нет.

THTTPClient

HTTP-клиент из модуля System.Net.HttpClient без визуальных компонентов. Использует системный стек HTTP платформы и подходит для вызова REST-сервисов из Delphi-клиента.

Tiered compilation (многоуровневая компиляция)

Режим JIT, при котором метод сначала компилируется быстро и без оптимизаций, а после 30 вызовов перекомпилируется с оптимизациями в фоне. Включён по умолчанию с .NET Core 3.0.

TimeProvider

Абстракция системного времени в .NET 8+: текущее время, часовой пояс и таймеры. В тестах её заменяют на FakeTimeProvider из пакета Microsoft.Extensions.TimeProvider.Testing и сдвигают время вручную.

timestamptz (timestamp with time zone)

Тип PostgreSQL для момента времени. При вводе значение переводится в UTC, при выводе — в часовой пояс сессии; исходное смещение не сохраняется, в отличие от datetimeoffset в SQL Server.

TInterfacedObject

Базовый класс RTL с потокобезопасной реализацией IInterface: считает интерфейсные ссылки и уничтожает объект, когда счётчик доходит до нуля. Наследников держат только через интерфейсные переменные и не освобождают через Free.

TLS (Transport Layer Security)

Протокол поверх TCP, который шифрует трафик, защищает его от подмены и подтверждает подлинность сервера сертификатом. HTTPS — это HTTP поверх TLS; актуальные версии — 1.2 и 1.3.

TOAST

Механизм хранения больших значений в PostgreSQL: если строка шире ~2 КБ, крупные поля сжимаются и выносятся в отдельную служебную таблицу. Изменение такого значения переписывает его целиком.

Token bucket (корзина токенов)

Алгоритм ограничения скорости: корзина пополняется токенами с постоянной скоростью, каждая операция забирает токен. Допускает короткие всплески до размера корзины, а в среднем держит заданную скорость.

Token exchange (обмен токенов)

Grant OAuth 2.0 из RFC 8693: сервис отдаёт серверу авторизации входящий токен и получает новый для другого audience. Пользователь остаётся в sub, вызывающий сервис попадает в act.

Trace ID (идентификатор трассировки)

Идентификатор W3C Trace Context, общий для всех операций одного запроса в распределённой системе. ASP.NET Core берёт его из Activity.Current и добавляет в ProblemDetails как traceId.

Transactional outbox

Шаблон, в котором событие сохраняется в таблицу outbox той же локальной транзакцией, что и бизнес-данные, а отдельный процесс (relay) потом публикует его в брокер. Даёт доставку at-least-once без распределённой транзакции.

TransactionScope

Класс System.Transactions, который создаёт ambient-транзакцию: соединения, открытые внутри блока, входят в неё сами. По умолчанию уровень SERIALIZABLE и таймаут 1 минута.

Trimming (обрезка)

Удаление неиспользуемого кода приложения и библиотек при публикации. Уменьшает размер, но может сломать код, который находит типы через рефлексию; опасные места показывают trim-анализаторы.

Trunk-based development (разработка в основной ветке)

Модель, при которой все разработчики часто вливают небольшие изменения в одну ветку (trunk, обычно main) и не держат других долгоживущих веток разработки. Незаконченное прячут за feature flags.

Truthy и falsy

Как значение ведёт себя в логическом контексте (if, &&, ||). Falsy — false, 0, -0, 0n, '', null, undefined и NaN; всё остальное, включая [] и '0', — truthy.

TryAdd и TryAddEnumerable

Методы регистрации из Microsoft.Extensions.DependencyInjection.Extensions. TryAdd* добавляет сервис, только если он ещё не зарегистрирован, TryAddEnumerable — если нет такой же пары «сервис и реализация».

TThread

Класс Delphi для фонового потока: код пишется в Execute, остановку запрашивает Terminate, а код в главный поток передают Synchronize и Queue.

Type guard (защитник типа)

Функция с типом результата value is T: если она вернула true, компилятор сужает тип аргумента до T. Корректность проверки внутри — на совести автора.

Type stripping (стирание типов)

Встроенный в Node.js запуск файлов .ts: аннотации типов заменяются пробелами, код не транспилируется и типы не проверяются. Включён по умолчанию с Node 22.18 и 23.6, стабилен с 24.12 и 25.2; enum и namespace с кодом не поддерживаются.

TypedResults

Фабрика результатов Minimal API (.NET 7+), которая возвращает конкретные типы вроде Ok<T> и NotFound. Тип ответа виден в сигнатуре и автоматически попадает в метаданные эндпоинта и OpenAPI.

Unboxing (распаковка)

Извлечение значения значимого типа из упакованного объекта: проверка типа и копирование. Распаковать можно только в исходный тип или в Nullable от него, иначе — InvalidCastException.

uncaughtException

Событие процесса Node.js для исключения, которое дошло до event loop необработанным. По умолчанию Node печатает стек и завершается с кодом 1; продолжать работу после него небезопасно.

UnicodeString

Строковый тип Delphi с подсчётом ссылок, в котором текст хранится в UTF-16. С Delphi 2009 тип string — это UnicodeString, а Char — двухбайтовый WideChar.

Upsert (INSERT ... ON CONFLICT)

Операция «вставить, а если такая строка уже есть — обновить». В PostgreSQL это INSERT ... ON CONFLICT DO UPDATE, атомарный при параллельных вставках благодаря уникальному индексу; в SQL Server обычно MERGE с подсказкой HOLDLOCK.

URL (адрес ресурса)

Строка вида https://host:port/path?query#fragment: схема, хост, путь, строка запроса и фрагмент. Сервер маршрутизирует запрос по пути и строке запроса, а фрагмент после # в запрос не попадает и остаётся только в браузере.

useEffectEvent

Хук React 19.2 для логики, которая читает свежие props и state, но не должна перезапускать эффект. Функцию из него вызывают только внутри эффектов и не указывают в зависимостях.

User Secrets (Secret Manager)

Хранилище секретов для разработки: нешифрованный secrets.json в профиле пользователя, вне каталога проекта. WebApplication.CreateBuilder подключает его только в окружении Development.

using-объявление (using declaration)

Форма using var x = ...; без фигурных скобок (C# 8): Dispose вызывается в конце области видимости, где объявлена переменная. Несколько объявлений освобождаются в обратном порядке.

UTF-16

Кодировка Unicode, в которой символ занимает 2 байта, а символы вне базовой плоскости (например эмодзи) — 4 байта, суррогатную пару. Ею пользуются Windows API, строки Delphi и .NET.

Utility types

Встроенные generic-типы TypeScript, которые строят новый тип из существующего: Partial, Required, Readonly, Pick, Omit, Record, ReturnType, Awaited и другие.

UUIDv7

Версия UUID из RFC 9562: первые 48 бит — время в миллисекундах от Unix-эпохи, остальное — версия и случайные биты, поэтому значения растут со временем. В .NET 9+ создаётся через Guid.CreateVersion7().

uv

Менеджер пакетов и проектов Python от Astral, написанный на Rust. Создаёт окружения, разрешает и закрепляет зависимости, ставит версии Python и запускает утилиты — заменяет pip, venv, pip-tools и pipx.

Uvicorn

ASGI-сервер для Python: принимает HTTP-соединения и вызывает приложение в своём цикле событий. Флаг --workers запускает несколько процессов.

V8

JavaScript-движок от Google, общий для Chrome и Node.js. Компилирует и выполняет JavaScript, управляет кучей и сборкой мусора; ввод-вывод в нём нет, его даёт libuv.

VACUUM

Команда обслуживания PostgreSQL: убирает мёртвые версии строк, обновляет карту видимости и замораживает старые строки, защищая от переполнения счётчика транзакций. Обычно её запускает фоновый процесс autovacuum.

ValidateOnBuild

Опция ServiceProviderOptions, при которой контейнер ещё при Build() проверяет, что каждый зарегистрированный сервис можно создать. Открытые generic-регистрации не проверяет; по умолчанию включена в Development.

ValidateOnStart

Метод OptionsBuilder<T> (.NET 6+), который запускает валидацию настроек при старте хоста. Без него ошибка проявится только при первом обращении к настройкам.

ValueTask

Структура, которая представляет результат асинхронной операции без обязательной аллокации Task. Её можно ожидать только один раз.

View component (компонент представления)

Класс-наследник ViewComponent со своим представлением, который сам загружает данные и рендерит блок страницы: корзину, меню. Вызывается из представления, а не по HTTP.

ViewModel (модель представления)

Класс, созданный под конкретную страницу: только поля, которые она показывает или принимает. Отделяет представление от сущностей базы и защищает от overposting.

volatile

Модификатор поля C#: все обращения к полю становятся volatile-чтениями и volatile-записями с порядком acquire/release. Атомарности составных операций он не даёт.

W3C Trace Context

Стандарт заголовков traceparent и tracestate для передачи контекста трейса между сервисами. В .NET это формат идентификаторов Activity по умолчанию.

WAI-ARIA

Спецификация W3C с атрибутами role и aria-*, которые дополняют дерево доступности там, где HTML не хватает семантики. Меняет только то, что слышит скринридер, но не поведение элемента.

WCAG (Web Content Accessibility Guidelines)

Стандарт W3C с проверяемыми критериями доступности уровней A, AA и AAA. Актуальная версия — WCAG 2.2 (октябрь 2023); законы обычно требуют уровень AA.

WebApplicationFactory

Класс из пакета Microsoft.AspNetCore.Mvc.Testing, который запускает приложение ASP.NET Core в памяти на TestServer и выдаёт HttpClient для запросов к нему. Позволяет подменить сервисы и настройки.

WebSocket

Протокол постоянного двустороннего соединения поверх одного TCP-соединения. Начинается с HTTP-запроса на Upgrade и ответа 101 Switching Protocols.

Window Spool

Оператор плана SQL Server в row mode, который хранит строки рамки окна. Для ROWS с рамкой меньше 10 000 строк он работает в памяти, для RANGE — с рабочей таблицей в tempdb, что заметно медленнее.

Windows-аутентификация

Вход в веб-приложение под доменной учётной записью Windows без ввода пароля: браузер и сервер обмениваются токенами Kerberos или NTLM в HTTP-заголовках. В IIS и ASP.NET Core её также называют Negotiate-аутентификацией.

WireMock.Net

Эмулятор HTTP-сервисов для .NET: поднимает настоящий HTTP-сервер с заготовленными ответами, задержками и ошибками. Применяется в интеграционных тестах внешних API.

Work stealing (кража работы)

Приём планировщика: свободный поток забирает работу из локальной очереди другого потока. Так пул потоков балансирует нагрузку без общей точки конкуренции.

work_mem

Параметр PostgreSQL: сколько памяти может занять одна операция сортировки или хеширования, прежде чем уйти на диск. Выделяется на каждую такую операцию в каждом соединении, поэтому большие значения задают точечно.

Worker Service

Шаблон .NET (dotnet new worker) для долгоживущего фонового процесса без HTTP: Generic Host и класс-наследник BackgroundService. Запускается как консоль, контейнер, служба Windows или systemd.

worker_threads

Модуль Node.js для потоков внутри процесса. У каждого воркера свой изолят V8, куча и event loop; данные передают через postMessage или SharedArrayBuffer. Нужен для CPU-работы, а не для ввода-вывода.

Workstation GC

Режим GC с одной кучей, в котором сборка идёт на потоке, вызвавшем её. По умолчанию используется в консольных и десктопных приложениях.

WOW64

Подсистема 64-битной Windows, которая запускает 32-битные программы. Она перенаправляет их системные вызовы, папки и реестр, но 32-битный и 64-битный код в одном процессе не смешиваются.

Write skew (асимметрия записи)

Аномалия снимков: две транзакции читают одни данные, проверяют условие и меняют разные строки, и вместе нарушают это условие. SNAPSHOT её не ловит, ловит SERIALIZABLE.

Write-through (сквозная запись)

Паттерн, при котором запись идёт одновременно в кеш и в источник, и кеш всегда содержит последнюю записанную версию. Цена — более медленная запись.

WS-Federation

Протокол федеративного входа через браузер: приложение перенаправляет пользователя на STS, тот возвращает формой POST подписанный токен, обычно SAML-assertion. В ASP.NET Core — пакет Microsoft.AspNetCore.Authentication.WsFederation.

XSS (межсайтовый скриптинг)

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

xUnit.net

Популярный тестовый фреймворк .NET: [Fact] и [Theory], новый экземпляр класса на каждый тест, общие ресурсы через fixture. Текущая линейка — v3, пакет xunit.v3.

YAGNI (You Aren't Gonna Need It)

Правило экстремального программирования: не реализовывать функциональность, пока она не нужна. Не запрещает рефакторинг и тесты, которые упрощают будущие изменения.

YARP (Yet Another Reverse Proxy)

Библиотека Microsoft для построения обратного прокси на ASP.NET Core (пакет Yarp.ReverseProxy). Используется для шлюзов API и для поэтапного переноса ASP.NET-приложений на ASP.NET Core.

Zod

Библиотека схем для TypeScript: проверяет данные в рантайме и выводит из схемы статический тип через z.infer. Применяется на границах — ответы API, формы, конфигурация.

zone.js

Библиотека, которая подменяет асинхронные API браузера (setTimeout, Promise, события, XHR) и сообщает Angular о завершении задач. Так фреймворк узнавал, когда запускать проверку изменений; с v21 новые приложения обходятся без неё.

Zoneless

Режим Angular без zone.js: проверка изменений запускается только по явным уведомлениям — сигналам, событиям в шаблоне, markForCheck(). Стабилен с v20.2, по умолчанию в новых приложениях с v21.

Zustand

Небольшая библиотека глобального состояния для React: стор создаётся функцией create и используется как хук без провайдера. Компонент подписывается селектором и перерисовывается только при смене выбранной части.