Как вы решаете задачу на live coding
Вопрос
Вам дали задачу «реализуйте debounce». Расскажите вслух, как вы будете действовать от условия до готового решения.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Уточнить требования: `this`, аргументы, leading/trailing, нужна ли отмена
Проговорить сигнатуру и пример использования
Написать простое рабочее решение: таймер в замыкании, `clearTimeout`, `fn.apply(this, args)`
Прогнать вслух на сценарии из нескольких быстрых вызовов
Обсудить крайние случаи и расширения: `cancel`, `flush`, `leading`, возврат значения
Не молчать: объяснять решения по ходу, признавать компромиссы
Что могут спросить следом
- Как добавить метод
cancel? - Как вернуть результат функции из debounce, если вызов отложен?
- Чем ваш debounce отличается от throttle?
Разбор
Образцовый ответ: «Сначала уточню требования: debounce должен вызвать функцию через ms после последнего вызова с последними аргументами, сохранить this, нужен ли вызов на переднем фронте и метод отмены. Потом проговорю сигнатуру: debounce(fn, ms) возвращает новую функцию. Пишу базовую версию: в замыкании переменная timer, возвращаю обычную function, не стрелку, чтобы this брался от вызова; внутри clearTimeout(timer) и новый setTimeout, который вызывает fn.apply(this, args). Прогоняю вслух: три вызова подряд с интервалом 100 мс при ms = 300, каждый сбрасывает таймер, функция вызовется один раз через 300 мс после третьего. Дальше предлагаю расширения: cancel сбрасывает таймер, flush вызывает отложенное сразу, leading вызывает на первом событии. Отдельно скажу, что результат функции синхронно вернуть нельзя, можно возвращать промис. Всё время рассуждаю вслух, чтобы интервьюер видел ход мысли».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.