Загрузка…
Загрузка…
frontend / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Код
Посмотри на этот код (цикл с объявлением переменной через var) и скажи, что будет выведено в консоль и почему.
Кандидат объяснил через hoisting и захват последнего значения var; ответ -1 и -1, в сумме -2.
02
Теория
А если в этом цикле заменить var на let, что изменится в выводе и почему?
Follow-up к первой задаче. Кандидат рассуждал про замыкание значения и блочную область видимости.
03
Код
Можешь переписать этот код так, чтобы в консоль выводилось 18 и 16?
current number = iРешение через замыкание текущего значения (current number = i).
04
Код
Посмотри на этот код с setTimeout и промисами и распиши списком, что будет в консоли и в каком порядке.
Разбор синхронного/асинхронного выполнения, очереди микро- и макротасок. Значения Apple, orange и т.д.
05
Код
Напиши функцию spy, которая принимает любую функцию и возвращает её обёртку, работающую так же, но дополнительно хранящую в свойстве data информацию о вызовах: количество вызовов (calls), массив аргументов каждого вызова (args) и массив результатов (results).
Реализация через замкнутый объект data и вызов колбэка через apply с передачей контекста и массива аргументов.
06
Код
Реализуй класс EventEmitter с двумя методами: addEventListener(event, listener), который подписывает слушателя и возвращает функцию для отписки, и dispatchEvent(event, payload), который вызывает всех подписчиков события с переданным payload (если подписчиков нет — ничего не делает).
Обсуждались корнеркейсы: приватное поле для хранения событий, отписка через filter с перезаписью массива, проверка наличия события при dispatch. В конце интервьюер указал на баг и предложил разобрать построчно.
Заметки
Лайвкодинг-секция по JavaScript: четыре задачи — две на вывод в консоль (var/let-замыкания и event loop с промисами/setTimeout), реализация функции-декоратора spy и реализация класса EventEmitter. Песочница для написания кода. После завершения предполагалась возможность задать вопросы про интервью и Яндекс. В конце по последней задаче (EventEmitter) интервьюер обнаружил баг и начал построчный разбор — секция не доведена до конца.
Подготовка
Стоит уверенно владеть темами: hoisting и различия var/let, замыкания, event loop (микро- и макротаски, промисы, setTimeout), методы функций (apply/call), добавление свойств к функциям, реализация паттернов (декоратор, pub/sub EventEmitter), знание TypeScript-синтаксиса.
Стиль интервьюера
Дружелюбный и поддерживающий стиль: интервьюер подбадривает, помогает при затруднениях, просит сначала проговорить план и корнеркейсы, затем писать код. Задаёт наводящие follow-up-вопросы (порядок выполнения, приватность поля, нужно ли отдавать список событий наружу), но не углубляется надолго, переходит к следующим задачам. Указывает на опечатки и баги мягко.