Я тут по разным собеседованиям хожу, технические интервью регулярно прохожу…
Любимая задачка: перевернуть строку, посимвольно, задом на перед.
Я понимаю зачем это надо уметь делать на С/C++ без дополнительного выделения памяти когда каждый байт на счету…
Но на собеседовании по JavaScript? Это ж интерпретируемый (иногда не однозначно) язык, где мегабайты памяти утекают по мелочи!
Ну ок, сел и на бумажке написал примерно вот такое. Выпендрился, fat arrow function заюзал 🙂
const reverseStringByHalfLoop = (value) => {
const length = value.length;
const halfLength = Math.floor(length / 2);
let result = value.split('');
for (let i = 0; i < halfLength; i++) {
const char = result[i];
result[i] = result[(length - 1) - i];
result[(length - 1) - i] = char;
}
return result.join('');
}
Этот код поставил в тупик интервьювера! Он даже начал проверять что будет если длинна строки нечетная…
Отвечаю: ничего не будет, средний символ сразу стоит на своем месте 🙂
Ёбушки-воробушки© Вот мы и дожились до программистов (более того интервьюверов) которые про алгоритмы вроде и слышали, вопросы на собеседованиях задавать умеют, но вот «стандартные ответы» на эти вопросы видят в первый раз.
Оказалось от меня ожидали JavaScript style ответа. Я потом загуглил, типа вот такого:
function reverseStringByArray(value) {
return value.split('').reverse().join('');
}
Ладно, проехали…
Вот вам еще вопрос (точнее связка) который уже 2 раза встречал:
- Напишите функцию которая суммирует все переданные в неё аргументы (прикол в том что кол-во аргументов может быть любым)
- Передайте в написаную вами выше функцию массив как список параметров (подколка на знание spread синтаксиса)
В общем очередная шизиловка 🙂 Если что, это делается это как-то так:
export const sumOfAllArgs = (...args) => {
return [...args].reduce((a, b) => a + b, 0);
}
let arr = [1,2,3,4,5];
sumOfAllArgs(...arr);
Но я так и не понял зачем 2 вопроса об одном и том же? Скорее всего этим вопросам тоже 100 лет в обед, а раньше, до ES6 синтаксиса, решалось через proptypes или еще какую-то олдскульной JavaScript Magic.
В общем технические интервью это иногда забавно. Но качество специалистов удручает… Все знают SOLID и меряются кол-вом паттернов, а вот чужой код и best practices уже никто не изучает.
P.S. Да, я на старости подрабатываю программистом. Это прикольно, не дает мозгам засохнуть, ну и 30+ баксов в час это таки деньги 🙂