Загрузка…
Загрузка…
frontend / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Код
Напишите, в каком порядке выведутся console.log в данном коде (синхронный код, микрозадачи, макрозадачи — event loop).
Собеседование 1. Кандидат верно расставил порядок: синхронный код → микрозадачи → макрозадачи.
02
Теория
Если в приложении баг: промис по завершении создаёт новый промис и очередь микрозадач никогда не пустеет — что будет с интерфейсом?
Собеседование 1. Каверзный follow-up к задаче на event loop. Ответ: интерфейс заблокируется, так как очередь микрозадач выполняется до опустошения.
03
Теория
Что значит, что макрозадачи выполняются по одной из очереди?
Собеседование 1. Уточняющий вопрос к ответу кандидата.
04
Теория
Заметки
Видео с двумя реальными собеседованиями на позицию фронтенд-разработчика с зарплатной вилкой до 320 000 руб. на руки. Первое собеседование — компания не названа (лайвкодинг: event loop, get по пути, сортировка чётных, диапазоны чисел); предлагалась дополнительная задача на React, но кандидат отказался. Второе собеседование — Сбер: продукт для СберБизнеса (клиенты-юрлица банка), новый продукт, ~20 человек в кластере, микрофронтенды на Webpack Module Federation с хостовым приложением СберБизнеса, архитектура по FSD, e2e-тесты на Playwright, миграция на Node 22, фронт ходит в middle/BFF, бизнес-логику на фронте не хранят. Итоги: после первого собеседования позвали на следующий этап, после второго (Сбер) — реджект без фидбека. Обещали фидбек в течение недели через рекрутера (Оля Совчук).
Стиль интервьюера
Оба интервьюера доброжелательные. Первый задаёт «каверзные» follow-up'ы на рассуждение (event loop, оптимизация алгоритма), подсказывает направление, разрешает мутировать массив, готов завершить раньше без потери впечатления. Второй ведёт через пошаговую отладку при ошибках («давай выполним скрипт сверху вниз»), просит сразу дать ответ, если не получается, и порассуждать; задачи в песочнице, ссылку кидают в чат (СберДжаз).
Если синхронный код и микрозадачи выполнились, но макрозадачи бесконечно создаются одна за другой — что будет с UI?
Собеседование 1. Ответ: жёсткой блокировки не будет — браузер встраивает задачу рендеринга между макротасками (~16 мс на кадр).
05
Код
Напишите функцию get(object, path), которая возвращает значение по пути во вложенном объекте (аналог lodash get).
Собеседование 1. Кандидат решил через split пути и итерацию по ключам.
06
Теория
Как ещё можно было решить задачу get(object, path)? (например, через reduce в одну строку)
Собеседование 1. Follow-up к задаче get.
07
Теория
Чем итеративное решение отличается от рекурсивного и почему вы не стали решать рекурсивно?
Собеседование 1. Follow-up к задаче get. Ответ кандидата: рекурсия может переполнить стек, менее безопасна.
08
Код
Отсортируйте чётные числа в массиве по возрастанию, оставив нечётные числа на своих местах.
Собеседование 1. Кандидат решил через отдельную сортировку чётных и shift при проходе по исходному массиву.
09
Теория
Какая сложность вашего алгоритма?
Собеседование 1. Follow-up к задаче на сортировку чётных. Ответ: O(n), без учёта сортировки O(n log n).
10
Теория
Если в массиве из 1000 элементов всего два чётных числа и они в начале — сколько итераций нужно и как оптимизировать решение, чтобы не пробегать весь массив?
Собеседование 1. Follow-up на рассуждение (без кода). Подсказка интервьюера: при фильтрации запоминать индексы чётных элементов и вставлять отсортированные значения по этим индексам.
11
Код
Преобразуйте массив чисел в строку с диапазонами: последовательно возрастающие числа сворачиваются в диапазон через дефис, остальные перечисляются через запятую (например, '0,4-5,8').
Собеседование 1. Кандидат решал через флаг и сравнение current/next, дорабатывал расстановку запятых; интервьюер добавил дополнительные тесты.
12
Теория
Какие протоколы доступны в браузере? Расскажите про каждый и перечислите юзкейсы (HTTP, HTTPS, WebSocket, TCP, UDP).
Собеседование 2 (Сбер).
13
Теория
В чём разница между HTTP/1 и HTTP/2?
Собеседование 2 (Сбер). Ответ: мультиплексирование, бинарный формат, сжатие заголовков.
14
Теория
Как можно обойтись без вебсокетов, используя только HTTP? Какие есть подходы?
Собеседование 2 (Сбер). Ответ: polling, long polling, server-sent events.
15
Теория
Опишите, что происходит при отрисовке страницы браузером после получения HTML-документа (когда все ресурсы загрузились).
Собеседование 2 (Сбер). Ответ кандидата: DOM-дерево → CSSOM → render tree → layout → paint → composite. Сетевое взаимодействие и резолв домена — по желанию.
16
Теория
Как тег script влияет на отрисовку страницы и какие есть возможности оптимизации (async, defer)?
Собеседование 2 (Сбер).
17
Код
Что будет выведено в консоли на указанных строках: цикл while с декрементом переменной var i и пушем функций i + i в массив с последующим их вызовом?
Собеседование 2 (Сбер). Кандидат ошибся; интервьюер вёл через пошаговую отладку: чему равно i до цикла, в первой итерации, после цикла (в итоге -1, так как декремент выполняется и после falsy-проверки).
18
Теория
Замкнулось ли значение переменной i в функциях, добавленных в массив, и почему вызов даёт не ожидаемые значения?
Собеседование 2 (Сбер). Follow-up: область видимости одна, значение не было «прихранено», все функции ссылаются на одну переменную.
19
Код
Напишите порядок вывода console.log в задаче на event loop (синхронный код и микрозадачи: apple, orange, melon, pear).
Собеседование 2 (Сбер). Кандидат ответил верно.
20
Код
Задача на контекст this: в каждой ли отмеченной точке вызова логгера выведется 'this is dev mode'? Где контекст потеряется?
Собеседование 2 (Сбер). Контекст теряется при выносе метода в отдельную функцию.
21
Код
Что нужно изменить, чтобы во всех точках контекст this не терялся? Какие есть варианты?
Собеседование 2 (Сбер). Follow-up; решение через bind.
22
Код
Напишите полифил Promise.any: принимает массив промисов, резолвится первым успешным; если все упали — reject с массивом ошибок с сохранением порядка.
Собеседование 2 (Сбер). Обсуждали ошибку со счётчиком ошибок (errorCount) и лишнюю переменную result.
23
Код
TypeScript: типизируйте функцию (через дженерик и keyof) так, чтобы передача несуществующего ключа объекта давала ошибку компиляции; типизируйте возвращаемое значение.
Собеседование 2 (Сбер).