Загрузка…
Загрузка…
fullstack / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
—
01
Поведенческий
Расскажите о себе и о собственном опыте — от самых интересных и нетривиальных задач до самых рядовых, в свободной форме (включая пет-проекты и фриланс).
Кандидат рассказал про интернет-магазин (Express+MongoDB, затем NestJS), TG-проект на фрилансе, внутреннее приложение для ТикамИс с тремя личными кабинетами и авторизацией, продуктовый опыт во Всеинструментах, фриланс на ванильном JS и вёрстке (WordPress и др.).
02
Теория
JavaScript по своей сути синхронный язык, но браузер предоставляет асинхронность. Опишите, как это работает (event loop).
Кандидат описал очереди микротасок и макротасок, call stack, Web API, порядок выполнения.
03
Теория
Бывает ли в браузере, что call stack (стек вызовов) переполняется? Какая самая типичная ошибка/ситуация, когда это происходит?
Ожидаемый ответ: бесконечная рекурсия / бесконечный цикл.
04
Заметки
Компания, проводящая собеседование, — крупный IT-интегратор (название в тексте явно не указано), реализующий потребности заказчика — компании Роснефть и её дочерних обществ (огэшки). Заказчик команды — Департамент управления (верхушка Роснефти). Был монолит на Bitrix, переводят в отдельные модули/сервисы на стеке Laravel + Vue3, опционально RabbitMQ, Redis. ~6 бизнесовых модулей (документооборот, СРМ, совет директоров с мобильным приложением, обработка обращений акционеров, приложение для вахтовиков как PWA, аналитический дашборд, личный кабинет удостоверяющего центра). Состав команды: фулстек, 3 бэкендера, 3 аналитика, 3 тестировщика, дизайнер, devops; интервьюер — в роли архитектора/тимлида/PM. Собес идёт на 4-5 вакансий, результаты ~через неделю-полторы. Прошлые компании кандидата: Всеинструменты (продуктовый опыт), ТикамИс (внутреннее приложение для автосервисов). Самооценка кандидата: ванильный JS ~4/5, Vue3 ~4-5/5.
Подготовка
Стоит знать внутренности Vue 3 Composition API: отличия ref/reactive/shallowRef, nextTick, Teleport, слоты и useSlots, уникальный uid инстанса компонента, v-model/defineModel на кастомных компонентах, navigation guards Vue Router, отличия created/mounted. По JS: event loop (микро/макротаски, call stack), переполнение стека, отличия стрелочных и обычных функций, способы глубокого копирования объектов (structuredClone и др.).
Стиль интервьюера
Два интервьюера (оба Александр). Технический блок — быстрые, последовательные вопросы по JS и Vue, с уточнениями и follow-up'ами, дружелюбно. После теории — нанимающий менеджер (тимлид/архитектор/PM) подробно рассказал о компании, проектах и стеке, ответил на вопросы. Атмосфера спокойная и неформальная (общение на ты), команда возрастная (~30-35 лет), без давления.
Теория
Чем отличаются обычная (именованная) функция и стрелочная функция?
Кандидат упомянул всплытие (hoisting), привязку this/контекста и синтаксис.
05
Теория
Нужно скопировать объект в другой участок памяти, не ссылаясь на него (глубокое копирование). Как это сделать?
Обсуждались structuredClone, Object.assign (поверхностно), рекурсивный обход, JSON.parse/stringify с её минусами (функции), spread.
06
Теория
Как обычно происходит обмен данными между компонентами Vue (родитель-потомок, два потомка, глубоко вложенный потомок)?
Обсуждались props (нисходящая передача), emit, provide/inject для глубокой вложенности; follow-up — как передать данные между двумя дочерними (глобальное хранилище / поднять состояние в общего родителя).
07
Теория
Чем отличаются ref и reactive во Vue? Где можно использовать ref, а где reactive?
Reactive — только объекты, глубокая реактивность; ref — что угодно, под капотом вызывает reactive, можно хранить ссылки на DOM-элементы.
08
Теория
Что такое shallowRef и чем он отличается (какую реактивность создаёт)?
Поверхностная реактивность, без реакции на вложенность; упомянул triggerRef.
09
Теория
Есть компонент, и нужно отрисовать какой-то элемент в другом месте DOM-дерева. Какая конструкция для этого есть во Vue?
Ответ: Teleport.
10
Теория
Для чего нужен nextTick и что он делает?
Гарантирует работу с полностью отрендеренным DOM, соответствующим последнему состоянию стейта.
11
Теория
Чем отличаются хуки created и mounted во Vue?
На created template ещё не в DOM (инициализированы options/composition API, setup), на mounted шаблон уже отрендерен в DOM.
12
Кейс
Создаём компонент модального окна, который используется повсюду. Как задать div этого модального окна уникальный id-атрибут (так как модалок много)?
Ожидаемый ответ: получить инстанс компонента, у которого есть уникальный uid в рамках приложения. Кандидат предложил счётчик/глобальный стейт, точного ответа не знал.
13
Теория
Какие хуки (navigation guards) есть у Vue Router и для чего они нужны?
Кандидат описал мидлвейры — проверка токена/доступа перед переходом на страницу, редирект; писал авторизацию, но точных названий не помнит.
14
Теория
У базовых элементов (input, textarea) можно использовать двустороннее связывание v-model. Если мы создаём свой компонент и хотим использовать v-model на нём — как это сделать?
Обсуждались именованные привязки v-model, проп modelValue + update-событие, и defineModel в Vue 3.4.
15
Кейс
Можно ли создать компонент, в который можно передать неограниченное количество слотов (например, пошаговая форма с заранее неизвестным числом шагов)? Как это сделать?
Кандидат предложил заранее объявить максимум именованных слотов; ожидаемый ответ — useSlots для получения всех переданных слотов и проход по ним.