JavaScript
Этот раздел - основной учебный маршрут по JavaScript, на котором обычно ломаются даже сильные кандидаты.
Быстрый переход к обучению
Что нужно знать
- Типы и сравнения:
var/let/const,null/undefined, truthy/falsy,==/===,Object.is,NaN. - Область видимости и функции:
lexical scope, hoisting, TDZ,
this, замыкания, prototype chain. - Работа с данными: мутация/иммутабельность, shallow/deep copy, ссылочная идентичность.
- Асинхронность:
Event Loop, microtask/macrotask, Promise combinators,
AbortController, retry/timeout. - Browser runtime:
storage API, CORS, загрузка скриптов (
async/defer/module), memory leaks.
Что уметь объяснить на собеседовании
- Почему
Promise.thenобычно отрабатывает раньшеsetTimeout. - Когда
==допустим и почему===- дефолт. - Почему
constне делает объект полностью immutable. - Как гонки запросов появляются в UI и как их предотвращать в реальных компонентах.
- Где прототипная модель реально влияет на код и производительность.
Грейд-фокус
- Junior: типы, сравнения, функции, массивы/объекты, базовый async.
- Middle: очереди задач, надежные async-паттерны, диагностика багов из прод-логики.
- Senior: архитектура async-flow, resilience-подходы (retry/backoff/cancel), риски масштабирования.
Глубокие кейсы собеседования
- Порядок выполнения async-кода:
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');
Сильный ответ:
A -> D -> C -> B, потому что then идет в microtask queue, а setTimeout в macrotask queue.
-
Иммутабельность и баг в UI: если мутировать вложенный объект в state, сравнение по ссылке не увидит изменение и часть UI не обновится. Нужны иммутабельные обновления и контроль ownership состояния.
-
Гонки запросов: пользователь быстро переключает фильтры, более старый запрос приходит позже и затирает новые данные. Нужны
AbortController, request-id или stale-guard.