Реши простую алгоритмическую задачу
Что проверяют
Просьба решить простую задачу проверяет не знание алгоритмов, а процесс: уточняете ли условие, проговариваете ли идею до кода, оцениваете ли сложность и пишете ли на языке позиции. Для фронтенда добавляется слой знания самого JavaScript: как ведут себя методы массивов, что мутирует вход, чем Map отличается от обычного объекта.
Как отвечать
Порядок такой: переспросить условие и типы, назвать пару примеров вместе с вырожденными, вслух описать решение, потом писать код и в конце назвать сложность.
Возьмём типовую формулировку, найти два числа с заданной суммой.
function twoSum(nums, target) {
const seen = new Map();
for (let i = 0; i < nums.length; i += 1) {
const need = target - nums[i];
if (seen.has(need)) return [seen.get(need), i];
seen.set(nums[i], i);
}
return null;
}Дальше объясните выбор: наивный вариант с двумя циклами даёт квадратичное время, а словарь просмотренных значений превращает поиск пары в один проход при линейной памяти. Проговорите крайние случаи: пустой массив, повторяющиеся числа, отсутствие ответа. Писать стоит на JavaScript или TypeScript, даже если привычнее другой язык: собеседующему нужно увидеть ваш рабочий инструмент.
Где спотыкаются
Начинают печатать сразу. Без единого вопроса про диапазон значений, дубликаты и формат ответа кандидат решает свою версию задачи, а не ту, которую загадали, и на середине переписывает всё заново.
Забывают особенности методов массива: sort без компаратора сравнивает элементы как строки, поэтому числа расставятся неверно, а sort, splice и reverse меняют исходный массив на месте. На собеседовании это читается как незнание языка, а не как описка.
Называют сложность на глаз. Внутри цикла вызывают includes или indexOf и объявляют решение линейным, хотя это снова квадрат. Лучше честно сказать про перебор и затем самому предложить, чем его заменить.