Как подготовиться к собеседованию по JavaScript за неделю

Собеседование через неделю. Времени на чтение книг нет. Нужен чёткий план: что повторить, что решить, на чём сконцентрироваться.

Составили пошаговый план на 7 дней. Каждый день — конкретная тема, список задач и советы. Не нужно учить всё подряд — нужно решать задачи и понимать, почему решение работает именно так.

А чтобы теория не оставалась теорией — решайте задачи на Девстанции. Там есть проверка кода и AI-ревью, которое подскажет, как написать лучше.


Содержание

  1. День 1: Основы языка
  2. День 2: Функции и замыкания
  3. День 3: Массивы и объекты
  4. День 4: Асинхронный JavaScript
  5. День 5: DOM и события
  6. День 6: Алгоритмы и структуры данных
  7. День 7: Практика и чеклист
  8. Что делать, если осталось время
  9. Чеклист перед собеседованием

День 1: Основы языка

Цель: уверенно объяснить разницу между var, let, const, знать типы данных и понимать, что такое hoisting.

Что повторить

  • Типы данных: string, number, boolean, null, undefined, object, symbol, bigint
  • Примитивы vs ссылочные типы
  • var vs let vs const — область видимости, повторное объявление
  • Hoisting — что поднимается, а что нет
  • Strict mode — зачем нужен и что меняет
  • == vs === — приведение типов

Задачи для практики

// Задача 1: Что выведет.console.log?
var x = 1;
function foo() {
  console.log(x);
  var x = 2;
}
foo();

// Задача 2: Сколько типов данных в JavaScript?
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof NaN);

// Задача 3: Чем отличается?
let a = { name: "Alice" };
const b = a;
b.name = "Bob";
console.log(a.name);

Совет

Не заучивайте определения. Объясняйте своими словами. На собеседовании ценят понимание больше, чем зубрёжку.


День 2: Функции и замыкания

Цель: понимать, как работает this, замыкания и разница между функциональными и стрелочными функциями.

Что повторить

  • Function declaration vs function expression
  • Стрелочные функции — синтаксис, отличия от обычных
  • this — как определяется контекст
  • Call, apply, bind — зачем нужны
  • Замыкание (closure) — что это и как использовать
  • IIFE — когда применяется

Задачи для практики

// Задача 1: Реализуйте counter
function createCounter() {
  // ваш код
}

const counter = createCounter();
counter.increment(); // 1
counter.increment(); // 2
counter.decrement(); // 1

// Задача 2: Что выведет?
const obj = {
  name: "Alice",
  greet() {
    console.log(`Hello, ${this.name}`);
  },
  greetArrow: () => {
    console.log(`Hello, ${this.name}`);
  },
};

obj.greet();
obj.greetArrow();

// Задача 3: Реализуйте debounce
function debounce(fn, delay) {
  // ваш код
}

Совет

Замыкание — это самая частая тема на собеседовании. Убедитесь, что можете объяснить, как функция «запоминает» переменные из внешней области видимости.


День 3: Массивы и объекты

Цель: уверенно использовать методы массивов, деструктуризацию, spread/rest и работать с вложенными структурами.

Что повторить

  • Методы массивов: map, filter, reduce, find, some, every, flat
  • Деструктуризация массивов и объектов
  • Spread и rest операторы
  • Шаблонные литералы
  • Object.keys, Object.values, Object.entries
  • Деструктуризация с переименованием и значениями по умолчанию

Задачи для практики

// Задача 1: Сгруппируйте товары по категории
const items = [
  { name: "Phone", category: "electronics" },
  { name: "Book", category: "education" },
  { name: "Laptop", category: "electronics" },
  { name: "Pen", category: "education" },
];

// Ожидаемый результат:
// { electronics: ["Phone", "Laptop"], education: ["Book", "Pen"] }

// Задача 2: Реализуйте flatten
function flatten(arr) {
  // ваш код
}

// Задача 3: Найдите два числа, сумма которых равна target
function twoSum(arr, target) {
  // ваш код
}

Совет

Методы массивов — это 80% работы с данными в реальных проектах. На собеседовании часто просят решить задачу через reduce, даже если есть более простой способ.


День 4: Асинхронный JavaScript

Цель: понимать event loop, уверенно работать с промисами и async/await.

Что повторить

  • Callback hell и зачем нужны промисы
  • Промисы: then, catch, finally
  • Promise.all, Promise.race, Promise.allSettled
  • Async/await — синтаксис и обработка ошибок
  • Event loop — задачи, микрозадачи, requestAnimationFrame
  • Паттерн: последовательный vs параллельный вызов

Задачи для практики

// Задача 1: Реализуйте myPromiseAll
function myPromiseAll(promises) {
  // ваш код
}

// Задача 2: Что выведет и в каком порядке?
console.log("1");
setTimeout(() => console.log("2"), 0);
Promise.resolve().then(() => console.log("3"));
console.log("4");

// Задача 3: Загрузите данные последовательно
async function loadUsers(ids) {
  // каждый запрос зависит от предыдущего
}

// Задача 4: Загрузите данные параллельно с таймаутом
async function loadWithTimeout(urls, ms) {
  // ваш код
}

Совет

На собеседовании обязательно спросят про event loop. Объясните разницу между макро- и микрозадачами. Это показывает глубокое понимание асинхронности.


День 5: DOM и события

Цель: знать, как работают события, делегирование и как взаимодействовать с API.

Что повторить

  • Делегирование событий — зачем и как
  • Всплытие и погружение событий (event bubbling, capturing)
  • preventDefault vs stopPropagation
  • Fetch API — GET, POST, обработка ошибок
  • JSON — парсинг и сериализация
  • LocalStorage и SessionStorage

Задачи для практики

// Задача 1: Реализуйте делегирование
// Клик по li должен выводить текст элемента
document.querySelector("ul").addEventListener("click", (e) => {
  // ваш код
});

// Задача 2: Реализуйте fetch с ретраями
async function fetchWithRetry(url, retries = 3) {
  // ваш код
}

// Задача 3: Реализуйте простой EventEmitter
class EventEmitter {
  // ваш код
}

Совет

Делегирование — это паттерн, который спрашивают на каждом собеседовании. Объясните, почему он эффективнее, чем вешать обработчик на каждый элемент.


День 6: Алгоритмы и структуры данных

Цель: решать базовые задачи на алгоритмы и объяснять сложность решения.

Что повторить

  • Big O нотация — что значит O(n), O(n²), O(log n)
  • Стек и очередь — когда применяются
  • Hash Map (объект/Set) — для быстрого поиска
  • Два указателя (two pointers) — паттерн решения
  • Sliding window — паттерн для подстрок/подмассивов
  • Рекурсия vs итерация

Задачи для практики

// Задача 1: Найдите пару с суммой равной target
function twoSum(nums, target) {
  // O(n) решение через Map
}

// Задача 2: Максимальная длина подстрок уникальных символов
function lengthOfLongestSubstring(s) {
  // sliding window
}

// Задача 3: Проверьте, является ли строка палиндромом
function isPalindrome(s) {
  // два указателя
}

// Задача 4: Плоский массив
function flatten(arr) {
  // рекурсия
}

Совет

Объясняйте сложность каждого решения. Даже если ответ правильный, интервьюер оценит, если вы скажете: «Это O(n) по времени и O(1) по памяти».


День 7: Практика и чеклист

Цель: провести mock-interview, закрепить слабые места, подготовиться морально.

Что сделать

  • Провести mock-interview с другом или коллегой
  • Решить 3-5 задач на время (20-30 минут на каждую)
  • Объяснить вслух каждое решение — как на собеседовании
  • Записать слабые места и повторить

Типичные вопросы на собеседовании

  • «Расскажите о проекте, которым вы гордитесь»
  • «Как вы дебажите код?»
  • «Что такое замыкание? Приведите пример»
  • «Чем отличается == от ===
  • «Как работает this в стрелочной функции?»
  • «Что такое event loop?»

Совет

Не пытайтесь выучить всё. Лучше глубоко разобрать 5 тем, чем поверхностно — 20. Интервьюер видит, когда кандидат понимает, а когда просто заучил ответ.


Что делать, если осталось время

Если до собеседования ещё есть день-два, добавьте:

  • Типизация: TypeScript — базовые типы, интерфейсы, дженерики
  • Фреймворки: React — хуки, жизненный цикл, виртуальный DOM
  • Инструменты: Git — cherry-pick, rebase, merge vs rebase
  • Тестирование: Jest — describe, it, expect, mocking
  • Паттерны: Singleton, Observer, Factory — когда применяются

Чеклист перед собеседованием

  • [ ] Повторил основы: типы, hoisting, this, замыкания
  • [ ] Решил минимум 10 задач на массивы и строки
  • [ ] Умею объяснить event loop и async/await
  • [ ] Провёл mock-interview
  • [ ] Подготовил вопросы интервьюеру
  • [ ] Проверил настройки микрофона и камеры (для онлайн-собеседования)
  • [ ] Знал компанию: что делают, какой стек используют

Итого

Неделя — это достаточно, чтобы уверенно пройти собеседование. Главное — не зубрить, а решать задачи и объяснять свои решения. Каждый день по 2-3 часа focused practice дадут результат.

А если хотите закрепить навыки — решайте задачи на Девстанции. Там есть десятки задач разной сложности с автоматической проверкой и AI-ревью кода. Это как mock-interview, только без стресса и в любое время.