Корисне запитання з JavaScript має розкривати розуміння механізму, а не винагороджувати завчену фразу. Використовуйте ці групи, щоб тренувати пояснення того, що відбувається, чому це відбувається та як ви це перевірите.

01

Поведінка мови

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

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

  • Опишіть одну ітерацію циклу подій із завданням і мікрозавданнями в черзі.
  • Як інтерфейс має скасовувати запит, що втратив актуальність?
  • Що викликає необроблене відхилення Promise?
  • Як обмежити кількість одночасних запитів у групі?
  • Як два виклики можуть використовувати один запит, що вже виконується?
  • Коли `Promise.allSettled` корисніший за `Promise.all`?
  • Як запобігти заміні актуальних даних застарілими відповідями?
  • Що має статися із записом у кеші, якщо функція завантаження відхиляє Promise?
  • Як поводяться таймери в неактивній вкладці?
  • Де у фронтенд-системі може знадобитися керування навантаженням через зворотний тиск?
03

Реалізація та перевірка

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

Обговорення на рівні Senior

  • Де слід перевіряти дані під час виконання у типізованому фронтенді?
  • Як розвивати спільний клієнтський API, не порушуючи сумісність із кодом, що його використовує?
  • Що має бути доступним для спостереження на рівні запитів?
  • Як дослідити тривале завдання в робочому застосунку?
  • Коли виправдано використання Web Worker?
  • Як межі збірок впливають на поведінку під час виконання?
  • Як би ви спроєктували поступове зниження функціональності під час збоїв?
  • Які припущення щодо безпеки ніколи не повинні існувати лише в клієнтському коді?
  • Як забезпечити узгоджену обробку помилок, не приховуючи контекст?
  • Якими обмеженнями веб-переглядача змінять вашу архітектуру?
05

Як практикувати питання

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

Основні джерела

Редакційна перевірка
Опис продукту звірено з його поточними можливостями. Знайшли помилку? Повідомте про помилку.