Загрузка…
Загрузка…
frontend / middle / tech_deep
Формат
onsite
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Теория
Объясните, как интерпретатор обрабатывает объявления функций (hoisting): что выведет код, где function declaration «всплывает» наверх?
Вопрос с листочка с кодом
02
Теория
Что выведет код: внутри функции аргументу-объекту присваивается другой объект — затронет ли это оригинальный объект? Как сделать так, чтобы в консоли вывод был одинаковым?
03
Теория
Как проверить необъявленную переменную на undefined без ошибки (через typeof), если она не объявлена в window? Что будет при прямом обращении к ней?
04
Теория
Что вернут нестрогие сравнения с приведением типов: приведение undefined/null к числу, NaN (typeof NaN — number, но NaN не равен ничему), исключение undefined == null → true?
Заметки
Автогенерированный транскрипт влога: последние дни работы автора на Московской бирже + записанное очное техническое собеседование (JavaScript/Vue) на frontend-позицию в проект «маркетплейс» для физлиц (платформа ЦБ для вкладов, сравнение с banki.ru). Интервьюер описал команду (3 бизнес-команды + команды фреймворка и макетов), стек (Vue, планы на React и Node.js-микросервисы, поддержка IE11, GitLab, Nexus, Docker/Kubernetes), наём через компании-интеграторы. Упомянуто также второе короткое собеседование в неназванной компании (пара вопросов про мотивацию + задача на регулярные выражения). Текст сильно искажён распознаванием речи — часть формулировок восстановлена по контексту.
Подготовка
Интервьюер порекомендовал книги по JavaScript, в том числе «You Don't Know JS» — там хорошо разобрано, как движок разбирает и выполняет код (event loop, контексты). Кандидат готовился, решая задачи на Codewars и разбирая поведение кода в дебаггере.
Стиль интервьюера
Вопросы выдавались на листочках с кодом («что выведет консоль»), к каждому вопросу — ряд дополнительных follow-up'ов, которых на листочке нет. Интервьюер наводит на ответ, копает в глубину (event loop, итераторы, реактивность Vue), в конце — блок брейнтизеров (часы, русская рулетка, пропущенное число). По словам интервьюера, вопросы «практически все простые» и проверяют понимание, большинство применимы в реальной работе.
Серия мелких вопросов «что вернёт сравнение» по листочку
05
Теория
Что выведет код с var (область видимости функции, hoisting переменных)? Что будет, если заменить var на let — какая ошибка и почему (нельзя читать до объявления, TDZ)?
06
Теория
Какие типы ошибок (исключений) бывают в JavaScript — TypeError, ReferenceError, SyntaxError? Какая ошибка будет в данном случае и почему ReferenceError?
07
Теория
Что такое замыкание? Как функция ищет переменную по цепочке областей видимости вплоть до глобальной?
08
Код
Напишите скрипт, использующий setTimeout, который выводит числа от 1 до 10, и каждое число выводится через секунду после предыдущего.
Интервьюер отметил, что вариантов решения много
09
Теория
Что будет, если в этом цикле заменить let на var? Почему выведется 11 во всех итерациях (переменная объявится в области функции/window)?
Follow-up к задаче с setTimeout от 1 до 10
10
Теория
Как заставить вариант с var работать правильно: замыкание/IIFE, передача значения дополнительным аргументом в setTimeout?
Follow-up к задаче с setTimeout от 1 до 10; обсуждалось несколько вариантов
11
Код
Реализуйте каррируемый «калькулятор»: вызовы вида plus(1)(2)(...) — каждая функция возвращает функцию; как при этом вернуть итоговое значение?
Обсуждали, что замыкания живут, пока не «умрёт» последняя скобка; почему при сложении со строкой получится конкатенация
12
Код
Как доработать каррируемый калькулятор, чтобы добавить операцию «минус» и вызывать функцию с нужным контекстом?
Follow-up к задаче про каррируемый калькулятор
13
Код
Проведите code review Vue-компонента «часики» (компонент может вставляться по 40 штук на страницу с переходами между страницами): всё ли с ним в порядке, что исправить?
Основные проблемы: неочищаемый setInterval, parseInt, хранение id интервала
14
Теория
Что такое setInterval и как он работает?
Теор-врезка по ходу code review компонента
15
Теория
Что произойдёт, когда компонент с setInterval будет разрушаться, если интервал не очистить? Как правильно удалить интервал (clearInterval по возвращаемому id в beforeDestroy/destroyed)?
Follow-up по ходу code review компонента «часики»
16
Теория
Куда сохранить id интервала в компоненте и почему не стоит класть его в data (реактивность для этой переменной не нужна)?
Follow-up по ходу code review компонента «часики»
17
Теория
Как сделать переменную компонента приватной — чтобы её нельзя было достать и изменить снаружи через экземпляр компонента (соглашение с нижним подчёркиванием, замыкание)?
Follow-up по ходу code review компонента «часики»
18
Теория
Named function expression: что выведет код, почему идентификатор функции (fn2) не определён снаружи — чем function declaration отличается от function expression?
Идентификатор именованного функционального выражения замкнут в собственной области видимости
19
Теория
Функция — это объект? Что можно «посчитать» у функции: свойство length (количество предопределённых аргументов), имя, можно ли хранить у функции свои ключи?
20
Теория
IIFE: зачем нужны круглые скобки вокруг функции, где в примерах будет ошибка и почему (скобки превращают декларацию функции в выражение)?
21
Теория
Что попадёт в arguments / как соберутся переданные аргументы (передали 5 параметром — что окажется в массиве в первом и во втором случае)?
Транскрипт в этом месте сильно искажён, тема восстановлена по контексту
22
Теория
Чем стрелочная функция отличается от обычной: собственный this, невозможность быть генератором, от чего зависит контекст (место объявления vs место вызова)?
Follow-up: каким будет this, если функция вызывается как метод / в window
23
Теория
Задача на this: объект с ключами a и b и методами (обычная и стрелочная функции) — в каком порядке что выведется, куда «пойдёт» this при вызове в контексте window (NaN, undefined)?
24
Теория
Как работает spread-оператор при разложении массива — откуда он «знает», что перечислять (протокол итератора, Symbol.iterator)?
25
Код
Как написать собственный итератор без генератора, чтобы spread/for..of работали: объект с методом next, возвращающим значение и статус done?
Follow-up к вопросу про spread и итераторы
26
Теория
Что возвращает async-функция и в каком статусе будет промис (fulfilled), даже если внутри нет return?
27
Теория
Какие статусы бывают у промиса (pending, fulfilled, rejected)?
28
Теория
Есть массив из 10 промисов — как подождать, пока выполнятся все? Чем отличаются Promise.all, Promise.allSettled и Promise.race (поведение при первом reject)?
29
Теория
Чем for...in отличается от for...of (по ключам vs по значениям, итерируемые объекты)? Можно ли итерироваться по массиву промисов через for await...of?
30
Теория
Что выведется раньше: setTimeout(console.log(1), 0) или console.log(2) следующей строкой — и почему (синхронный код, event loop)? Что изменится, если добавить микрозадачу/Promise.then?
31
Теория
Как работает setTimeout под капотом: в какой буфер/очередь (callback queue) попадает колбэк, в какой момент он туда добавляется и почему не сразу в конец очереди?
32
Теория
Что такое рекурсия? Что такое хвостовая рекурсия и чем она полезна (стековые кадры не держатся в стеке, защита от переполнения стека)?
33
Код
Дан объект и функция, возвращающая обёртку: как запретить доступ к ключам с нижним подчёркиванием («приватным» полям) — геттеры/сеттеры по всем ключам, замыкание, Proxy? Почему Proxy не подходит (нет полифилла, поддержка IE11)?
Также обсудили инкапсуляцию как столп ООП и ООП vs функциональный подход
34
Теория
Расскажите про хуки жизненного цикла Vue: порядок вызова (created, mounted и др.), что и когда доступно?
35
Теория
Какие навигационные хуки есть у vue-router (beforeRouteEnter, beforeRouteUpdate, beforeRouteLeave), какие из них доступны в компоненте, а какие в роутере?
36
Теория
Чем экшены отличаются от мутаций во Vuex (асинхронные операции vs синхронные)?
37
Теория
Чем отличаются data, props и computed во Vue? Что во Vue реактивно, а что нет (всё реактивно, кроме слотов и изменений массива по индексу)?
38
Теория
Почему изменение элемента массива по индексу не реактивно во Vue и как это решить ($set или пересоздание массива)? Почему $set — не лучший вариант (каждый ключ массива становится реактивным, лишняя нагрузка)?
39
Теория
Как принудительно перерендерить/обновить компонент ($forceUpdate) и когда это уместно?
40
Теория
Можно ли изменить props, computed или константу? В каких случаях изменение возможно (если значение — объект, можно менять его свойства)?
41
Теория
Можно ли внутри scoped slot одного компонента вызвать метод родительского компонента / обработать данные слота методом родителя? Почему контекст scoped slot замкнут?
42
Brainteaser
На стрелочных часах 3:15 — какой угол между часовой и минутной стрелками? Как посчитать (360 / 12 / 4 = 7,5 градуса)?
Дополнительно: сколько градусов между делениями циферблата
43
Brainteaser
Русская рулетка: в барабане на 6 слотов два патрона подряд, барабан раскрутили, первый выстрел холостой. Что выгоднее — раскрутить барабан ещё раз или выстрелить сразу? Посчитайте вероятности (3/4 против 4/6 не получить пулю).
44
Код
Дан массив чисел от 1 до 100 в случайном порядке, одно число удалили. За минимальное количество итераций по массиву определите, какого числа не хватает (сумма арифметической прогрессии за один проход). Почему сортировка/бинарный поиск не подходят?
45
Поведенческий
Как ты сам оцениваешь свой уровень (junior/middle/senior) и по каким параметрам?
Кандидат оценил себя между junior и middle, ближе к middle
46
Поведенческий
Ты работаешь только с Vue? Почему выбрал Vue и готов ли писать на React (в команде планируется приложение на React)?
47
Поведенческий
Расскажи про свой предыдущий опыт: чем занимался раньше (PHP, fullstack) и почему перешёл во фронтенд?
48
Кейс
Нужно с нуля сделать приложение на Vue — что делаешь по шагам (vue cli, роутер, axios, авторизация, тестирование)?
Контекст в транскрипте неоднозначен: блок вопросов в формате интервью, возможно отдельная беседа
49
Теория
Как глобально перехватывать ошибки от бэкенда, чтобы не валидировать их в каждом запросе (axios interceptors на response, обработка по коду ошибки)?
Из того же блока вопросов про приложение с нуля
50
Теория
Когда заводить Vuex/глобальный стор: где хранить данные, которые нужны двум соседним компонентам или разным частям приложения? Используешь ли модули Vuex?
Из того же блока вопросов про приложение с нуля