ДокументацияКарьераTechnical interview: формат, задачи, как готовиться
Средний 14 мин чтения

Technical interview: формат, задачи, как готовиться

Как проходит техническое собеседование на фронтендера: форматы, типы задач, как решать алгоритмические задачи, что спрашивают, типичные ошибки.

техническое собеседованиеtechnical interviewалгоритмызадачиподготовкаlive codingtake home

Форматы собеседований

Live coding

Пишете код в реальном времени, пока собеседующий смотрит. Может быть в Google Docs, CoderPad, CodeSandbox или просто в экране.

Плюсы: видят, как вы думаете. Минусы: стресс, опечатки, нет автодополнения.

Take-home задание

Вам дают задание, вы делаете дома за 2–7 дней. Присылаете ссылку на GitHub.

Плюсы: без стресса, можно гуглить. Минусы: занимает время, могут оценить несправедливо.

System design / архитектура

Обсуждаете архитектуру приложения. Рисуете схемы, обсуждаете выбор технологий. Обычно для middle+.

Задачи по алгоритмам

Решаете алгоритмическую задачу. На листочке, в CoderPad или Whiteboard. Формат LeetCode-style.

Типичный процесс

В большинстве компаний 3–5 этапов:

1. Скрининг с HR (15–30 мин)
   — Кто вы, какой опыт, зарплатные ожидания

2. Техническое интервью #1 (45–60 мин)
   — Вопросы по JS/фреймворку + live coding задача

3. Техническое интервью #2 (45–60 мин)
   — Алгоритмы или более глубокие вопросы
   — Или take-home ревью

4. System design / Meet the team (45–60 мин)
   — Архитектура, обсуждение опыта (middle+)

5. Финал с менеджером (30 мин)
   — Софт-скиллы, мотивация, оффер

Для junior обычно 2–3 этапа. Для middle/senior — 4–5.

Как решать алгоритмические задачи

Шаг 1: Уточните условие

Не бросайтесь писать код. Задайте вопросы:

  • Что на входе? (массив чисел, строки, есть ли дубликаты)
  • Что на выходе? (число, массив, boolean)
  • Какой размер входных данных? (10 элементов или 10 миллионов)
  • Есть ли ограничения по памяти?
  • Может ли быть пустой массив? null?

Это показывает инженерный подход. Собеседующий оценит.

Шаг 2: Придумайте решение

Сначала — наивное. Потом оптимизируйте.

«Можно я начну с простого решения за O(n²), потом подумаю,
 как ускорить?»

Говорите вслух. Собеседующий хочет видеть ход мыслей, а не молчание и потом готовый ответ.

Шаг 3: Напишите код

Пишите чиственно, с говорящими именами переменных:

// Плохо
function f(a, t) {
  let m = {}
  for (let i = 0; i < a.length; i++) {
    let c = t - a[i]
    if (m[c] !== undefined) return [m[c], i]
    m[a[i]] = i
  }
}

// Хорошо
function twoSum(nums, target) {
  const seen = new Map()
  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i]
    if (seen.has(complement)) return [seen.get(complement), i]
    seen.set(nums[i], i)
  }
  return []
}

Шаг 4: Протестируйте

Прогоните через примеры:

«Проверю на примере: nums = [2, 7, 11, 15], target = 9»

i=0: nums[0]=2, complement=7, seen пустой → seen.set(2, 0)
i=1: nums[1]=7, complement=2, seen.has(2) → return [0, 1] ✓

Проверьте edge cases:

  • Пустой массив
  • Один элемент
  • Нет решения
  • Все элементы одинаковые

Шаг 5: Оцените сложность

«Время: O(n) — один проход по массиву.
 Память: O(n) — Map хранит до n элементов.»

Какие задачи встречаются

Строки и массивы

  • Разворот строки
  • Палиндром
  • Анаграмма
  • Слияние отсортированных массивов
  • Максимальная сумма подмассива (Kadane)
  • Sliding window (подстрока без повторов)

Хэш-таблицы

  • Two Sum
  • Подсчёт частот
  • Группировка анаграмм

Стек и очередь

  • Правильные скобки
  • Обратная польская запись
  • BFS (обход в ширину)

Связные списки

  • Разворот списка
  • Обнаружение цикла
  • Средний элемент

Деревья

  • Обходы (inorder, BFS)
  • Максимальная глубина
  • Симметричность
  • Ближайший общий предок

Динамическое программирование

  • Фибоначчи
  • Прыжки по лестнице
  • Рюкзак (базовая версия)

Как готовиться

1–2 месяца до собеседований

Неделя 1–2: Основы

Повторите фундамент:

  • Типы данных, хоистинг, замыкания
  • this, прототипы
  • Event Loop, промисы
  • map/filter/reduce

Неделя 3–4: Алгоритмы

Решайте по 2–3 задачи в день. Порядок:

  • Easy задачи на массивы и строки
  • Easy на хэш-таблицы
  • Easy на стек/очередь
  • Medium на two pointers, sliding window

Неделя 5–6: Фреймворк

  • Жизненный цикл, хуки
  • Реактивность, состояние
  • Компоненты, props/emit
  • Типичные паттерны

Неделя 7–8: Практика

  • Мок-собеседования (с другом или платные сервисы)
  • Решение задач вслух с таймером
  • Повторение сложных тем

Где практиковаться

РесурсДля чего
LeetCodeАлгоритмические задачи
FrontSkillФронтенд-задачи
CodewarsЗадачи разной сложности
HackerRankЗадачи + certification

Сколько задач решать

Качество важнее количества. 50 задач, которые вы поняли — лучше, чем 200 решённых методом тыка.

На каждую задачу:

  • 20–30 минут попыток
  • Если не получается — посмотрите решение
  • Разберите решение, перепишите самостоятельно
  • Через 3 дня решите снова без подглядывания

Поведение на интервью

Говорите вслух

Даже если не знаете ответ:

«Не уверен на 100%, но думаю, что...»
«Я бы подошёл так: сначала..., потом...»
«Знаю, что есть паттерн X, но подробно расскажу,
 как я понимаю его работу...»

Молчание — хуже частичного ответа.

Не бойтесь спрашивать

«Можно уточнить — речь про сортированный массив?»
«Мне разрешено использовать Set?»
«Нужно оптимизировать по времени или по памяти?»

Это не слабость — это уточнение требований, как в реальной работе.

Если застряли

«Я застрял. Давайте попробую начать с наивного решения...»
«Могу я рассмотреть частный случай, чтобы понять паттерн?»

Не тратьте 20 минут на одну ошибку

Если код не работает 5 минут — спросите подсказку. Потратить 20 минут на пропущенную точку с запятой — плохая стратегия.

Частые ошибки

Начинать писать сразу — без уточнения требований и обсуждения подхода.

Молчать — собеседующий не видит, что вы думаете.

Игнорировать edge cases — пустой массив, null, дубликаты.

Писать нечитаемый код — короткие имена переменных, нет структуры.

Паниковать — если задача не идёт, скажите об этом и попробуйте другой подход.

Не проверять решение — всегда прогоняйте через пример.

Итог

  • 3 формата: live coding, take-home, system design
  • Решайте задачи: уточните → наивное решение → оптимизируйте → код → тест
  • Готовность: 1–2 месяца, 2–3 задачи в день
  • Говорите вслух — это половина оценки
  • 50 понятых задач лучше 200 решённых наугад
  • Спрашивайте, если непонятно — это нормально