learn-se · Урок 3 · дрилл ~18 минут

Мини-дрилл: термины-близнецы

Ты провалился на TTL/debounce не потому что не знал слов, а потому что не различил близнецов. Навык этого урока — пауза «этот термин точно про мой механизм?». Шесть пар + перемешанный прогон на скорость.

Как проходить: сначала прочитай пары (это знание), потом реши прогон внизу по памяти, не подсматривая (это навык). Ошибка в прогоне ценнее верного ответа по шпаргалке — она показывает, какую пару ты ещё путаешь.

Пара 1 · debounce / throttle

Оба гасят поток частых событий, но по-разному.

ТерминСмыслsetlog
debounceсделать один раз после паузы в потоке; таймер сбрасывается на каждом событиипоиск клиентов: слать запрос, когда перестал печатать
throttleделать не чаще раза в N во время потока; срабатывает регулярно, пока идёт активностьавтосохранение черновика раз в 5 сек, пока печатаешь

Как отличить: debounce ждёт тишины; throttle ограничивает частоту.

Пара 2 · idempotent / atomic

Оба про безопасность записи, но защищают от разного.

ТерминСмыслsetlog
idempotentповтор = тот же результат, что один раз; безопасно повторятьофлайн-очередь ретраит сохранение подхода — дубль не создаётся
atomicвсё-или-ничего; нет частичного состояниясписать баланс и записать транзакцию — либо оба, либо ничего

Как отличить: idempotent = безопасно повторить; atomic = не бывает наполовину.

Пара 3 · authentication / authorization

Часто пишут «auth» и путают. Это разные вопросы.

ТерминСмыслsetlog
authentication (authn)кто ты — установление личностилогин, сессия, «залогинен ли пользователь»
authorization (authz)что тебе можно — права на действие«только тренер может редактировать программу клиента»

Как отличить: authn = личность; authz = разрешение.

Пара 4 · optimistic / pessimistic

Две стратегии при возможном конфликте (в UI и в конкурентной записи).

ТерминСмыслsetlog
optimisticдействуй сразу, считая что конфликта нет; откати, если оказалсяподход показан «сохранён» мгновенно, откат при ошибке сервера
pessimisticсначала заблокируй, потом действуй; другие ждутлок строки: пока один редактирует, остальные не могут

Как отличить: optimistic = действуй, чини при столкновении; pessimistic = блокируй заранее.

Пара 5 · eventual / strong consistency

Про то, когда разные копии данных совпадают. Сердце твоей офлайн-синхронизации.

ТерминСмыслsetlog
strong consistencyпосле записи все сразу видят новое значениеобычный запрос к серверу: записал — прочитал то же
eventual consistencyкопии сойдутся со временем; временно могут расходитьсяофлайн-правки применятся позже — до синка телефон и сервер расходятся

Как отличить: strong = совпадают сразу; eventual = сойдутся потом.

Пара 6 · race condition / deadlock

Оба — баги конкурентности, но ломают по-разному.

ТерминСмыслsetlog
race conditionитог зависит от того, кто успел первым; недетерминированнодве вкладки сохраняют одну тренировку — последняя затирает первую
deadlockдвое ждут друг друга и оба застряли навсегдадве транзакции взяли по локу и ждут чужой — обе висят

Как отличить: race = неверный результат из-за порядка; deadlock = всё замерло.

Прогон — по памяти

Не подсматривай вверх. Выбери термин под сценарий. Пары перемешаны нарочно.

1. Поле поиска: слать запрос только когда пользователь перестал набирать.

Ждём тишины в потоке событий — debounce. Throttle слал бы регулярно во время набора.

2. Ретрай сохранения из офлайн-очереди не должен создать второй подход.

Безопасность при повторе — idempotent. Atomic про «всё-или-ничего», а не про повтор.

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

Нет частичного состояния — atomic. Повторяемость (idempotent) тут ни при чём.

4. Правило «редактировать программу клиента может только его тренер».

Вопрос «что тебе можно» — authorization. Кто ты (логин) — это authentication, оно уже прошло.

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

Неверный результат из-за порядка конкурентных записей — race condition. Deadlock — это когда всё зависает, а не затирается.

6. Подход показан «сохранён» сразу; если сервер отклонит — откатываем в UI.

Действуем сразу, откатываем при конфликте — optimistic. Pessimistic заблокировал бы заранее.

7. Правки, сделанные офлайн, применятся к серверу позже; до синка телефон и сервер расходятся.

Копии сойдутся со временем — eventual consistency. Strong означало бы совпадение сразу, что офлайн невозможно.

8. Автосохранение черновика: срабатывать не чаще раза в 5 секунд, пока пользователь печатает.

Ограничение частоты во время активности — throttle. Debounce ждал бы, пока печатать перестанут (и черновик не сохранялся бы, пока печатаешь).

9. (повтор урока 2) Индикатор «печатает…» гаснет через 3 сек после последнего нажатия; отсчёт сбрасывается на каждой клавише.

Сброс на каждом событии = debounce. TTL — фиксированное время жизни от установки, без сброса; погасил бы индикатор посреди длинного набора.

Дальше

Все пары — в справочнике Термины-близнецы (для повторения через пару дней — так работает spacing) и в глоссарии. Пары, где ошибся в прогоне, — твой список на пересдачу.

Хочешь ещё пары под свой стек — попроси в сессии: «дай 5 близнецов про Postgres» или «путаю X и Y, разведи». Я твой преподаватель.
Термины — устоявшийся словарь индустрии; определения выверены под механизм, а не по словарю-переводчику.