Загрузка…
Загрузка…
frontend / junior / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
60 мин
01
Поведенческий
Расскажи немного о себе.
Софт-блок, начало собеседования.
02
Поведенческий
Почему в итоге выбрал фронтенд?
03
Поведенческий
Как учился — по книгам, курсам или на практике?
04
Поведенческий
Была ли в коммерческом опыте командная работа и как она была устроена?
05
Поведенческий
Расскажи, как устроен твой рабочий день.
Follow-up: фиксировалось ли время на выполнение задач.
06
Поведенческий
Почему ищешь новую работу, чем не устраивает текущий вариант?
07
Теория
Знаешь ли ты, что такое бинарный поиск?
08
Теория
Есть ли какие-то требования к массиву, который передаётся на вход функции бинарного поиска?
Ожидаемый ответ: массив должен быть отсортирован.
09
Код
Напиши функцию бинарного поиска: на вход массив уникальных целых чисел и искомое число, вернуть индекс элемента или -1, если элемент не найден.
function bensearch(list, target) {
let left = 0;
let right = list.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (list[mid] === target) return mid;
if (list[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
// сортировка перед вызовом:
list.sort((a, b) => a - b);Обсуждалось рекурсивное vs нерекурсивное решение (выбрали нерекурсивное из-за возможного переполнения стека). Также попросили отсортировать массив перед передачей в функцию и протестировать на краевых случаях (первый/последний/средний элемент, несуществующий элемент).
10
Теория
Какая сортировка используется под капотом у функции Array.prototype.sort в современных движках (V8 / Node)?
Кандидат не вспомнил. Ответ интервьюера: динамически выбирается сортировка вставками либо быстрая сортировка (QuickSort) / TimSort.
11
Теория
Какая временная сложность (O-нотация) у бинарного поиска?
Ответ: O(log n).
12
Теория
Какая временная сложность у сортировки пузырьком?
Ответ: O(n^2).
13
Теория
Какая временная сложность у быстрой сортировки (quicksort)?
Ответ: O(n log n).
14
Код
Определи порядок вывода в консоль для кода с синхронными вызовами, setTimeout и Promise (event loop, micro/macro tasks), и объясни почему.
Аргументы-эмодзи. Ожидаемый вывод: яблоко, кокос, арбуз, лимон. Кандидат перепутал названия микро/макротасок, но порядок определил верно.
15
Код
Определи порядок вывода в более объёмном коде с несколькими Promise и setTimeout (event loop).
Ожидаемый вывод: яблоко, авокадо, арбуз, кокос, апельсин, лимон, перчик. Кандидат ответил верно.
16
Код
Отель для животных принимает кошек и собак. Нужно: получить всех животных (fetchAnimals возвращает массив с задержкой), распознать тип каждого (animalRecognizer асинхронный, принимает по одному питомцу и возвращает обновлённый объект с типом), затем вывести в консоль звуки только мяукающих кошек, причём все одновременно. Реализуй так, чтобы запросы шли параллельно.
async function getVoices() {
const animals = await fetchAnimals();
const animalPromises = animals.map(a => animalRecognizer(a));
const result = await Promise.all(animalPromises);
result.forEach(animal => {
if (animal.type === CAT) animal.makeSound();
});
}Главная задача-лайвкодинг (скачивание архива, своя IDE). Кандидат сначала шёл последовательно (ждал каждый recognizer по очереди). Интервьюер увеличил задержку recognizer до 3000мс чтобы показать проблему. Решение: собрать массив промисов через map(animal => recognize(animal)) и применить Promise.all с await. Затем отфильтровать кошек и вызвать makeSound. Обсуждались дебаггер VS Code, ретраи запросов в проде.
Заметки
Реальное собеседование на вакансию джуна-фронтендера в компанию 'пронетим'. Кандидат — Григорий, 19 лет, ~3 года фронтенда, ~1 год 3 мес коммерческого опыта. Интервью вёл основатель (софт-блок) и приглашённый специалист Николай (хард-блок, лайвкодинг). Кандидат предварительно выполнил тестовое. По итогам сделан оффер с началом со стажировки; вилка по деньгам названа 60–100 (тыс.). Дейлики по понедельникам в 10:00 МСК. Кандидат задавал вопросы интервьюеру об организации работы: как строится коммуникация и таски, выдаются ли доски, работают ли над одним или несколькими проектами одновременно (ответ: обычно два проекта на человека, недельные спринты, Agile-доска YouGile, проджект-менеджер).
Подготовка
Подтянуть знание event loop (правильно различать микро- и макротаски), асимптотику алгоритмов и сортировок, что используется под капотом Array.prototype.sort. Практиковаться в асинхронных задачах: параллельный запуск запросов через Promise.all вместо последовательного await, ретраи. Освоить дебаггер VS Code и прогонять код через него. Уметь анализировать эффективность собственного кода.
Стиль интервьюера
Доброжелательная атмосфера, без каверзных вопросов и попыток 'завалить'. Хард-интервьюер (Николай) задаёт базу без подводных камней, активно помогает, даёт подсказки и наводящие вопросы, разрешает решать итеративно с дебаггером и несколькими запусками. Поощряет рассуждение вслух (в первой задаче кандидат диктует код, интервьюер пишет). Делает скидку на отсутствие реального бэкенда в учебной задаче.