Хороший вопрос по JavaScript проверяет понимание, а не знание заученной фразы. Используйте эти группы вопросов, чтобы объяснять, что происходит, почему и как это проверить.
Языковое поведение
- Как лексическая область видимости и цепочка областей видимости влияют на замыкания?
- Когда `this` зависит от места вызова, а когда нет?
- Какие ошибки может вызвать неявное приведение типов?
- Как прототипы поддерживают делегацию?
- Что меняется, если код модуля выполняется больше одного раза?
- Как дескрипторы свойств влияют на API?
- Когда символ будет полезен?
- Чем отличаются поверхностное и глубокое копирование?
- Что делает две величины равными при разных операциях равенства?
- Как бы вы объяснили временную мёртвую зону?
Асинхронный JavaScript и браузер
- Опишите один проход цикла событий: выполнение задачи и очереди микрозадач.
- Как интерфейс должен отменять запрос, который больше не актуален?
- Что вызывает необработанное отклонение Promise?
- Как бы вы ограничили параллелизм для серии запросов?
- Как два вызывающих участка кода могут использовать один общий незавершённый запрос?
- Когда «Promise.allSettled» более полезен, чем «Promise.all»?
- Как предотвратить замену актуальных данных устаревшими ответами?
- Что должно произойти с записью в кэше, если функция загрузки завершилась ошибкой?
- Как таймеры ведут себя в неактивной вкладке?
- Где во фронтенд-системе может потребоваться управление нагрузкой через обратное давление?
Реализация и проверка
- Реализуйте debounce с возможностью отмены.
- Реализуйте throttle и объясните вызовы в начале и конце интервала.
- Создайте эмиттер событий с поддержкой отмены подписки.
- Создайте кэш запросов с TTL и объединением одинаковых запросов, которые ещё выполняются.
- Преобразуйте вложенные данные в плоскую структуру без изменения исходных данных
- Напишите вспомогательную функцию повторных попыток с явно заданными условиями остановки.
- Реализуйте небольшой планировщик задач с ограничением параллелизма.
- Преобразуйте данные сервера в словарь объектов по идентификатору.
- Создайте функцию мемоизации и объясните, когда её кэш нужно сбрасывать.
- Разработайте тесты для функции, поведение которой зависит от времени.
Обсуждение на уровне Senior
- Где должна проходить проверка во время выполнения в типизированном интерфейсе?
- Как создать общий клиентский API без ущерба для потребителей?
- Что нужно отслеживать и измерять в слое запросов?
- Как бы вы исследовали длительную задачу в рабочем приложении?
- Когда оправдано использование Web Worker?
- Как границы пакетов влияют на поведение во время выполнения?
- Как бы вы спроектировали плавное снижение функциональности при сбоях?
- Какие допущения безопасности никогда не должны жить только в коде клиента?
- Как сделать обработку ошибок последовательной без сокрытия контекста?
- Какие ограничения браузера изменят вашу архитектуру?
Как практиковать вопросы
- Отвечайте в три шага: принцип работы, конкретный пример и компромиссы.
- Пишите код только после уточнения условий задачи и важных граничных случаев.
- Проверьте успешный сценарий, граничный случай и сценарий сбоя.
- Записывайте слабые объяснения как темы практики, а не запоминайте более длинные сценарии.
- В конце назовите данные, которые заставили бы вас изменить решение.
Первичные источники
Редакционная проверка
Описание продукта сверено с его текущими возможностями. Нашли ошибку? Отправьте исправление.