Загрузка…
Загрузка…
frontend / middle / tech_screening
Формат
online
Стадия
tech_screening
Когда
within_quarter
Длительность
50 мин
01
Код
Посмотрите на код с переменными и функцией: что будет выведено и почему (в первом случае 2, во втором 3)?
Про область видимости: var изменяет глобальную переменную, вторая переменная остаётся неизменной.
02
Теория
Если заменить объявление переменной (например на let), что-то изменится? Почему (блочная vs функциональная область видимости)?
03
Теория
Есть объект, объявленный через const. Можно ли изменить его ключ? Если можно, то почему?
Можно менять содержимое (ссылочный тип), но нельзя перезаписать саму константу.
04
Код
Расскажите, какими способами можно создать функцию в JavaScript (пишите прямо здесь и объясняйте)?
Заметки
Собеседование на позицию frontend-разработчика (React/JS) в один из крупнейших банков РФ с вилкой до 300 тыс. рублей. Это первичный технический скрининг по JS и React (теория + лайвкодинг), длился ~50 минут. Интервьюер предупредил, что далее будет более серьёзная техническая секция с командой/нанимающим менеджером. Кандидат получил оффер на 270 тыс. рублей, но отказался от него. Запись — из обучающего видео (автор оказывает услуги менторства и подготовки к собеседованиям).
Подготовка
Хорошо знать фундаментальный JS: области видимости (var/let/const), способы создания функций, hoisting, замыкания, this/контекст и bind/call/apply, event loop (микро-/макрозадачи), функциональное программирование (чистые функции, HOF). По React: props/state и иммутабельность, жизненный цикл, хуки (useEffect vs useLayoutEffect, массив зависимостей, cleanup, useRef, useReducer), ключи и реконсиляция, оптимизация ререндеров (React.memo, композиция), контексты и их влияние на производительность, работа с API (REST, WebSocket, GraphQL). Готовиться к лайвкодингу: реализация map, реализация useRef.
Стиль интервьюера
Дружелюбный, общается на «ты», просит включить камеру. Идёт по своему списку вопросов, начиная от простого к сложному. Активно задаёт уточняющие follow-up'ы и подталкивает к более глубоким объяснениям («а почему так?», «можешь подробнее?»), цепляется за формулировки кандидата. Даёт небольшие практические задачи на лайвкодинг прямо в редакторе. Корректно поправляет неточности. Оценивает прежде всего понимание, а не заученность («осознаёт ли человек, что говорит»).
Упомянуты function declaration, function expression, стрелочные, new Function, именованное функциональное выражение.
05
Теория
В чём разница между function declaration и function expression?
Про всплытие (hoisting): к declaration можно обращаться до объявления.
06
Код
Расскажите про замыкания: дайте терминологию, а затем разберите задачу (счётчик выводит 1, 2, 3).
07
Теория
Почему функция-счётчик «знает» про переменную, хотя внутри её тела этой переменной нет? Объясните подробнее, как это работает.
08
Код
Есть объект с методом. Что выведется (Иван)? А если переписать метод на стрелочную функцию?
Стрелочные функции не создают свой контекст, берут вышестоящий.
09
Теория
Могу ли я привязать контекст к стрелочной функции? Почему нет?
10
Теория
Если вынести метод объекта в отдельную переменную и вызвать — что с контекстом? Контекст теряется в момент выноса или в момент вызова?
В обычных функциях контекст определяется в момент вызова.
11
Код
Как добавить контекст этому вызову обычной функции (через bind/call/apply)?
12
Код
В каком порядке выведутся числа (синхронный код, микрозадачи, макрозадачи)?
13
Теория
Объясните подробнее, как работает event loop (call stack, Web API, callback queue, микро- и макрозадачи)?
Микрозадачи — промисы, MutationObserver; макрозадачи — setTimeout, интервалы, DOM-события.
14
Теория
Какие концепции функционального программирования знаете и применяли?
15
Теория
Что такое чистые функции?
Нет сайд-эффектов, при одинаковом вводе одинаковый вывод, не мутирует входные данные.
16
Теория
Какие функции высшего порядка применяли, может быть писали сами? Что такое функция высшего порядка?
Затронуты функции первого класса, колбэки, декораторы.
17
Код
Реализуйте функцию map (принимает массив и колбэк), не добавляя в прототип и не используя методы массивов.
Колбэк должен получать элемент, индекс и оригинальный массив.
18
Поведенческий
Как давно пишете на React, что используете — классовые или функциональные компоненты?
~4 года, преимущественно функциональные.
19
Теория
Что такое пропсы (props)?
Иммутабельны, нельзя изменять.
20
Теория
Что такое state (состояние компонента)?
При изменении состояния происходит ререндер; нельзя мутировать напрямую.
21
Теория
Точно ли нельзя просто поменять переменную состояния, которую вернул useState? Почему?
Изменить технически можно, но без setState отобразится старое значение, не вызовется ререндер.
22
Теория
Расскажите про этапы жизненного цикла компонента (не методы, а этапы)?
Монтирование, обновление, размонтирование (и спорно инициализация).
23
Теория
Какие хуки знаете и какими пользовались? Пользовались ли useReducer и почему редко?
24
Теория
Чем отличаются useEffect и useLayoutEffect?
useLayoutEffect синхронно до отрисовки, useEffect асинхронно после отрисовки.
25
Теория
Расскажите про сигнатуру useEffect: какие параметры можно передать, что они дают (массив зависимостей)?
Пустой массив — один раз; с зависимостями — при их изменении; без массива — каждый рендер.
26
Теория
Какая особенность у первого параметра useEffect (функции), связанная с очисткой?
Можно вернуть cleanup-функцию, вызывается при размонтировании и изменении зависимостей.
27
Код
Есть компонент с useEffect и родительский компонент с useEffect. В каком порядке они вызовутся?
Сначала дочерний, потом родительский (родитель завершает рендер после потомков).
28
Теория
Зачем нужен хук useRef и как его использовать?
Ссылка на DOM-элемент или хранение значений без ререндера.
29
Теория
Зачем вообще нужен хук useRef — почему нельзя просто объявить переменную и положить в неё значение?
Обычный объект пересоздаётся при каждом рендере.
30
Код
Напишите свою реализацию useRef (чтобы возвращалась одна и та же ссылка на объект).
Можно через useMemo или useState (хранить объект и возвращать его).
31
Теория
Все ли значения нужно класть в массив зависимостей useEffect, если хотим использовать их внутри эффекта? Почему рефы можно не указывать?
Рефы и сеттеры можно не класть — у рефа всегда одна и та же ссылка.
32
Теория
Зачем нужны ключи (keys) в React?
Для реконсиляции при маппинге массивов; желательно уникальные id; индекс — для статичных списков.
33
Теория
Что происходит при изменении ключа компонента?
Размонтирование и монтирование компонента.
34
Теория
Есть два списка, числа внутри не уникальны между списками (например 1,2,3 и 1,4,5), и я использую эти числа как ключи. Есть ли проблема в пересечении ключей между списками?
Уникальность нужна только в рамках одного списка, между списками — нет.
35
Код
Есть кнопка; какие компоненты перерендерятся после обновления state по нажатию? Можно ли изменить это поведение?
Перерендерится компонент и его дочерние; можно React.memo или вынести кнопку и логику в отдельный компонент.
36
Теория
Что такое контексты в React, зачем они нужны и как вы их использовали?
Глобальное состояние, избавление от prop drilling; минус — ререндер всех потребителей; примеры — локализация, авторизация, модалки, radio-group, дропдауны.
37
Кейс
Нормально ли использовать много контекстов в приложении, как это влияет на производительность?
38
Теория
Какие технологии и протоколы использовали для взаимодействия с API?
В основном REST, немного WebSocket и GraphQL.
39
Теория
Каким образом была реализована работа с WebSocket в React (подписки на события, отправка)?
Через socket.io: в useEffect подписка на события сервера, обновление redux, отписка/disconnect в cleanup; emit для отправки.
40
Кейс
Не было ли проблем с производительностью, когда сообщения из сокетов диспатчились в стор и оповещали всех подписчиков? Применяли ли оптимизации?
Заметных проблем не было; из оптимизаций упомянут reselect.