Хороший вопрос по JavaScript проверяет понимание, а не знание заученной фразы. Используйте эти группы вопросов, чтобы объяснять, что происходит, почему и как это проверить.

01

Языковое поведение

  • Как лексическая область видимости и цепочка областей видимости влияют на замыкания?
  • Когда `this` зависит от места вызова, а когда нет?
  • Какие ошибки может вызвать неявное приведение типов?
  • Как прототипы поддерживают делегацию?
  • Что меняется, если код модуля выполняется больше одного раза?
  • Как дескрипторы свойств влияют на API?
  • Когда символ будет полезен?
  • Чем отличаются поверхностное и глубокое копирование?
  • Что делает две величины равными при разных операциях равенства?
  • Как бы вы объяснили временную мёртвую зону?
02

Асинхронный JavaScript и браузер

  • Опишите один проход цикла событий: выполнение задачи и очереди микрозадач.
  • Как интерфейс должен отменять запрос, который больше не актуален?
  • Что вызывает необработанное отклонение Promise?
  • Как бы вы ограничили параллелизм для серии запросов?
  • Как два вызывающих участка кода могут использовать один общий незавершённый запрос?
  • Когда «Promise.allSettled» более полезен, чем «Promise.all»?
  • Как предотвратить замену актуальных данных устаревшими ответами?
  • Что должно произойти с записью в кэше, если функция загрузки завершилась ошибкой?
  • Как таймеры ведут себя в неактивной вкладке?
  • Где во фронтенд-системе может потребоваться управление нагрузкой через обратное давление?
03

Реализация и проверка

  • Реализуйте debounce с возможностью отмены.
  • Реализуйте throttle и объясните вызовы в начале и конце интервала.
  • Создайте эмиттер событий с поддержкой отмены подписки.
  • Создайте кэш запросов с TTL и объединением одинаковых запросов, которые ещё выполняются.
  • Преобразуйте вложенные данные в плоскую структуру без изменения исходных данных
  • Напишите вспомогательную функцию повторных попыток с явно заданными условиями остановки.
  • Реализуйте небольшой планировщик задач с ограничением параллелизма.
  • Преобразуйте данные сервера в словарь объектов по идентификатору.
  • Создайте функцию мемоизации и объясните, когда её кэш нужно сбрасывать.
  • Разработайте тесты для функции, поведение которой зависит от времени.
04

Обсуждение на уровне Senior

  • Где должна проходить проверка во время выполнения в типизированном интерфейсе?
  • Как создать общий клиентский API без ущерба для потребителей?
  • Что нужно отслеживать и измерять в слое запросов?
  • Как бы вы исследовали длительную задачу в рабочем приложении?
  • Когда оправдано использование Web Worker?
  • Как границы пакетов влияют на поведение во время выполнения?
  • Как бы вы спроектировали плавное снижение функциональности при сбоях?
  • Какие допущения безопасности никогда не должны жить только в коде клиента?
  • Как сделать обработку ошибок последовательной без сокрытия контекста?
  • Какие ограничения браузера изменят вашу архитектуру?
05

Как практиковать вопросы

  • Отвечайте в три шага: принцип работы, конкретный пример и компромиссы.
  • Пишите код только после уточнения условий задачи и важных граничных случаев.
  • Проверьте успешный сценарий, граничный случай и сценарий сбоя.
  • Записывайте слабые объяснения как темы практики, а не запоминайте более длинные сценарии.
  • В конце назовите данные, которые заставили бы вас изменить решение.
Ссылки

Первичные источники

Редакционная проверка
Описание продукта сверено с его текущими возможностями. Нашли ошибку? Отправьте исправление.