Глоссарий
Словарь веб-разработчика
Визначення технічних термінів з PHP, DevOps, MySQL та AI — з прикладами коду та поясненнями простою мовою.
228
терминов
46
букв
Х
Хеш-таблица
Хеш-таблица — структура данных, обеспечивающая доступ по ключу за O(1) в среднем. Ключ передаётся через хеш-функцию, результат указывает на «корзину» (bucket), хранящую значение. Ассоциативные массивы в PHP и dict в Python — хеш-таблицы.КоллизииРазные ключи могут дать одинаковый хеш — это коллизия. Решается двумя способами:Chaining — каждый bucket — список элементов с одинаковым хешемOpen addressing — при коллизии ищется следующий свободный bucketLoad factorОтношение количества элементов к количеству buckets. При превышении порога (обычно 0.75) — рехеширование (увеличение таблицы и перераспределение элементов). Дорогое, но редкое.Vs дерево поискаHash table: O(1) доступ, но нет порядка. BST: O(log n) доступ, но элементы отсортированы. Выбор зависит от необходимости сортировки.
Хеширование (Hashing)
Хеширование — одностороннее преобразование данных в строку фиксированной длины (хеш). «Одностороннее» означает: восстановить оригинал из хеша математически невозможно. Пароли в БД хранятся исключительно в виде хешей, а не открытым текстом.Алгоритмы для паролейbcrypt — встроенный cost-фактор для замедления перебора. Стандарт де-фактоArgon2id — победитель Password Hashing Competition 2015. Более устойчив к GPU-атакамPBKDF2 — широко поддерживается, особенно в корпоративной средеХеширование ≠ ШифрованиеШифрование двустороннее — зашифрованные данные можно расшифровать ключом. Хеширование одностороннее — восстановление невозможно. Для паролей нужно хеширование; для данных, которые нужно прочитать (например, API-ключ) — шифрование.Соль (Salt)Случайная строка, добавляемая к паролю перед хешированием. Защищает от rainbow table атак: одинаковый пароль двух пользователей даст разные хеши. bcrypt и Argon2 включают соль автоматически.
Хранимая процедура (Stored Procedure)
Хранимая процедура — подпрограмма из SQL-логики, хранящаяся непосредственно в СУБД и вызываемая по имени. В отличие от обычного запроса — компилируется один раз, выполняется быстрее, может иметь входные/выходные параметры.
Пример (MySQL)
DELIMITER $$
CREATE PROCEDURE GetUserOrders(IN userId INT)
BEGIN
SELECT o.id, o.total, o.status
FROM orders o
WHERE o.user_id = userId
ORDER BY o.created_at DESC;
END$$
DELIMITER ;
-- Вызов
CALL GetUserOrders(42);
Преимущества
Логика на уровне БД — не зависит от языка приложения
Меньше трафика между приложением и БД
Права доступа на уровне процедуры, а не таблицы
Недостатки
Сложно тестировать и версионировать (не в Git)
Бизнес-логика разбросана между кодом и БД
Привязка к конкретной СУБД