Глоссарий
Словарь веб-разработчика
Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.
228
терминов
46
букв
С
Сборщик мусора (Garbage Collection)
Garbage Collection (GC) — автоматическое освобождение памяти от объектов, которые больше не используются. Вместо ручного управления памятью (malloc/free в C) — рантайм сам отслеживает и удаляет недостижимые объекты.АлгоритмыReference Counting — счётчик ссылок на объект. При 0 — объект удаляется. PHP, CPython. Проблема: циклические ссылкиMark and Sweep — обходит граф объектов, помечает достижимые, удаляет непомеченные. Java, Go, JavaScriptGenerational GC — молодые объекты (короткоживущие) собираются чаще старых. JVM, .NET, V8PHP и GCPHP использует reference counting + cyclic garbage collector. Циклические ссылки (A → B → A) не освобождаются reference counting — их убирает cyclic GC. gc_collect_cycles() — ручной запуск.Влияние на производительностьGC-паузы могут влиять на latency. В Go GC concurrent — паузы < 1 мс. В старых JVM GC-паузы были секундами.
Связный список
Связный список — линейная структура данных, где каждый элемент (узел) содержит значение и указатель на следующий узел. В отличие от массива — элементы не хранятся рядом в памяти.
Типы
Singly Linked — каждый узел → следующий. Обход только вперёд
Doubly Linked — каждый узел → следующий и предыдущий. Обход в обоих направлениях
Circular — последний узел → первый
Сравнение с массивом
Вставка/удаление в начале: список O(1) vs массив O(n) (сдвиг)
Вставка/удаление в середине: список O(n) (поиск) vs массив O(n) (сдвиг)
Доступ по индексу: список O(n) vs массив O(1)
Память: список тратит больше (указатели)
В PHP
PHP-массивы — хеш-таблицы, а не связные списки. Для настоящего связного списка: SplDoublyLinkedList или собственная реализация. На практике редко нужен.
Семантическое версионирование (SemVer)
Семантическое версионирование — соглашение о номерах версий в формате MAJOR.MINOR.PATCH (2.4.1). Каждая часть несёт конкретный смысл, и разработчик сразу понимает, безопасно ли обновиться.ПравилаPATCH (2.4.1 → 2.4.2) — исправление багов. Обратно совместимо, обновляйте спокойноMINOR (2.4.1 → 2.5.0) — новые функции. Обратно совместимо, старый код продолжает работатьMAJOR (2.4.1 → 3.0.0) — ломающие изменения (breaking changes). Нужна проверка перед обновлениемВ Composer и npm"^2.4.1" — разрешает MINOR и PATCH (2.x.x), но не MAJOR"~2.4.1" — разрешает только PATCH (2.4.x)"2.4.1" — фиксированная версияPre-release и метаданные2.0.0-alpha.1, 2.0.0-rc.2 — предварительные версии. 2.0.0+build.42 — метаданные сборки (не влияют на сравнение).
Сессия (Session)
Сессия — механизм сохранения состояния между HTTP-запросами на стороне сервера. Сервер хранит данные сессии (user_id, корзина, flash-сообщения), а клиент получает только идентификатор сессии — обычно в cookie.Как это работаетПри первом запросе сервер создаёт session_id, сохраняет данные сессии и отправляет session_id в cookie. Каждый последующий запрос содержит cookie с session_id — сервер находит данные и «узнаёт» пользователя.Где хранятся данныеФайловая система — просто, но не масштабируется на несколько серверовБаза данных — централизованно, но добавляет задержку на каждом запросеRedis / Memcached — наиболее распространённый вариант для продакшна. Быстро и масштабируетсяSession vs JWTСессия — состояние на сервере, JWT — состояние в токене (на клиенте). Сессию можно сразу отозвать, JWT — только после истечения срока или через blacklist. Сессии лучше для традиционных веб-приложений, JWT — для stateless API и микросервисов.
Сложность алгоритма (Big O)
Big O notation — способ описать, как растёт время выполнения или объём памяти алгоритма с ростом размера входных данных n. Позволяет сравнивать алгоритмы независимо от железа.Основные классыO(1) — константное время. Доступ к массиву по индексу, хеш-таблица. Не зависит от nO(log n) — логарифмическое. Бинарный поиск. Быстро даже для миллиардов элементовO(n) — линейное. Перебор массива. Удвоили n — удвоили времяO(n log n) — Merge Sort, QuickSort (средний случай)O(n²) — вложенные циклы. Bubble Sort. Непригоден при n > 10000O(2ⁿ) — экспоненциальное. Перебор всех подмножеств. Слишком медленноНа практикеSQL-запрос без индекса — O(n). С индексом — O(log n). Именно поэтому индексы в 100 раз важнее оптимизации кода приложения.
Специфичность CSS
Специфичность (specificity) — алгоритм, по которому браузер решает, какое CSS-правило «побеждает» при конфликте. Выше специфичность = правило применяется.
Счёт специфичности
Три группы: (A, B, C)
A — inline styles (style="..."): 1,0,0
B — ID-селекторы (#main): 0,1,0 каждый
C — class, псевдокласс, атрибут (.btn, :hover, [type]): 0,0,1 каждый
Теги и псевдоэлементы (div, ::before): 0,0,1, но в отдельном счёте
Примеры
#nav .item a:hover → (0,1,2) /* ID + class + псевдокласс */
.btn.btn-primary → (0,0,2)
button → (0,0,1)
/* Побеждает первое */
!important
!important перекрывает любую специфичность. Избегайте — делает CSS непредсказуемым. Оправдан только для утилит (.hidden { display: none !important; }).
Порядок при равной специфичности
Побеждает правило, объявленное позже в CSS.
Статический анализ (PHPStan, Psalm)
Статический анализ — автоматическая проверка кода без его выполнения. Находит ошибки типов, недостижимый код, некорректные вызовы методов на этапе CI — до того как баг попадёт на продакшн.
PHPStan
Самый популярный PHP-анализатор. 10 уровней строгости (0–10). Уровень 0 — базовые ошибки, уровень 9 — проверка каждой строки на корректность типов.
vendor/bin/phpstan analyse src --level=6
Psalm
Альтернатива от Vimeo. Строже, поддерживает @template generics, taint analysis (поиск SQL-инъекций и XSS через поток данных).
Что находит
Вызов метода на null-значении
Передача неправильного типа в функцию
Недостижимый код после return
Неиспользуемые переменные и импорты
Неисчерпывающие match-выражения
Стек и Очередь (структуры данных)
Стек (Stack) и Очередь (Queue) — базовые линейные структуры данных с разной логикой доступа. Стек: последний пришёл — первый вышел (LIFO). Очередь: первый пришёл — первый вышел (FIFO).Стек (LIFO)push(A), push(B), push(C)
pop() → C
pop() → BПрименение: стек вызовов (call stack), undo/redo, парсинг выражений, обход дерева в глубину (DFS).Очередь (FIFO)enqueue(A), enqueue(B), enqueue(C)
dequeue() → A
dequeue() → BПрименение: очередь задач, BFS (обход в ширину), буферы между производителем и потребителем.DequeDouble-ended queue — добавление и удаление с обоих концов. Объединяет возможности стека и очереди.
Строгая типизация (strict_types)
strict_types — директива PHP, включающая строгое соблюдение типов: если функция ожидает int, а передаётся string — бросается TypeError, а не молча конвертируется. Добавляет безопасность и явность в код.