Мини-задачи и вопросы про производительность и память
Короткие практические задачи и теория про память — финальный аккорд собеседования.
Мини-задачи проверяют владение методами и структурами; вопросы про память — понимание того, как JavaScript управляет ресурсами.
Мини-задача: уникальные значения
Классика: убрать дубликаты из массива. Самый короткий способ — Set плюс spread.
const arr = [1, 2, 2, 3, 3, 3, 4];
const unique = [...new Set(arr)];
console.log(unique);
Вывод:
[ 1, 2, 3, 4 ]
Мини-задача: перевернуть строку
const reverse = (s) => s.split("").reverse().join("");
console.log(reverse("привет"));
console.log(reverse("abc"));
Вывод:
тевирп cba
Мини-задача: группировка через reduce
Сгруппировать объекты по полю — частая задача на reduce.
const people = [
{ name: "Аня", dept: "eng" },
{ name: "Боря", dept: "sales" },
{ name: "Вика", dept: "eng" },
];
const byDept = people.reduce((acc, p) => {
(acc[p.dept] = acc[p.dept] || []).push(p.name);
return acc;
}, {});
console.log(byDept);
Вывод:
{ eng: [ 'Аня', 'Вика' ], sales: [ 'Боря' ] }
Про производительность: сложность операций
Что ценят в ответе: понимание стоимости операций. Поиск по объекту/Map/Set — это O(1), а по массиву через includes/indexOf — O(n). Для частых проверок «есть ли элемент» выбирают Set.
const ids = new Set([1, 2, 3]);
console.log(ids.has(2)); // быстрая проверка O(1)
const list = [1, 2, 3];
console.log(list.includes(2)); // линейный поиск O(n)
Вывод:
true true
Про память: сборщик мусора
JavaScript управляет памятью автоматически: сборщик мусора удаляет объекты, на которые больше нет ссылок (алгоритм «достижимости» от корней). Программисту память вручную освобождать не нужно — но можно нечаянно удержать ссылку и получить утечку.
Типичные утечки памяти
- Забытые таймеры/подписки:
setIntervalили обработчик события держат коллбэк (и его замыкание) живым. - Замыкания на большие объекты: функция «удерживает» весь захваченный контекст.
- Глобальные переменные: ссылки из глобала живут вечно — объект не соберётся.
- Растущие коллекции: кэш в обычном объекте, который никогда не очищается.
Хороший ответ: «Утечка в JS — это не нехватка освобождения, а удержание ненужной ссылки. Чтобы объект собрался, на него не должно остаться достижимых ссылок».
Итог
Setубирает дубликаты и даёт быстрый поиск O(1) против O(n) у массива.- Память освобождает сборщик мусора по достижимости — вручную чистить не нужно.
- Утечки возникают из удержанных ссылок: таймеры, замыкания, глобальные переменные.