вопрос дня: где поставить паузу в воркере, если вы рендерите трейс машины Тьюринга?
Звучит как мелочь, а на собесе это уже вопрос про контракт системы: что обещает движок, что обещает UI, и кто за что отвечает.
3 шага, как я бы отвечал:
1) Сначала фиксируете семантику
Это не кнопка «Pause». Это регулярная задержка между итерациями, чтобы UI успевал показать шаги. Значит, пауза — часть исполнения, а не внешний стоп-сигнал.
2) Потом ищете точку, где не ломается состояние
Если остановить слишком рано — получите полушаг, грязное состояние и кривой трейс.
Если слишком поздно — UI уже не контролирует темп.
Нужна точка после завершения шага, когда состояние машины уже консистентно.
3) И только потом проектируете протокол
Воркер должен сообщать: «шаг завершён, вот новое состояние, жду следующего тика».
Основной поток должен понимать это как ритм, а не как хаос событий.
Хороший ответ на собесе звучит так:
«Пауза живёт на границе шага, после фиксации состояния, потому что она одновременно определяет поведение движка и формат сообщений между потоками».
Плохой ответ:
«Ну, где удобнее через setTimeout».
Это уже не дизайн, а случайность.
Если хотите, пришлю чеклист, как разбирать такие задачи на system design и live coding без паники.
Interview Lab
@InterviewLabPro
вопрос дня: где поставить паузу в воркере, если вы рендерите трейс машины Тьюринга?
Этот пост опубликован в Telegram-канале Interview Lab. Подписаться можно по ссылке: @InterviewLabPro.