Скользящее окно
Задание 1Введение
Цель: Ограничивать частоту запросов скользящим окном.
Напишите rate_limit(timestamps, limit, window). Для каждого запроса (времена по возрастанию) верните, пропущен ли он: запрос в момент t пропускается, если среди пропущенных раньше запросов во времени (t − window, t] их меньше limit.
Задание 2Теория и инструменты
Rate limiting защищает от перебора и перегрузки. Скользящее окно считает запросы за последние window секунд.
Отклонённые запросы не должны занимать место в окне, иначе клиент не восстановится.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
rate_limit([1, 2, 3, 4, 5], 2, 3) → [true, true, false, true, true]
rate_limit([0, 0, 0, 10], 2, 5) → [true, true, false, true]
Ещё 3 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Храните времена пропущенных запросов.
- 2Для каждого запроса посчитайте пропущенные в интервале (t − window, t].
- 3Пропустите запрос, если их меньше limit.
Подсказки — каждая до решения стоит −25 очков
Задание 4Как защититься
Ставьте ограничения на вход, сброс пароля и дорогие API. Отвечайте кодом 429.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.