Первый этап в Яндекс на должность Разработчика Интерфейсов(фронтенд), 2024 год. Этап посвящен знанию языка, в моем случае это JavaScript. Таймкоды: 00:00 Первая задача 15:10 Вторая задача 32:57 Третья задача 44:26 Четвертая задача
Первая задача. Можно в одну строчку сделать или наоборот подробнее разложить. Ненавижу читать рекурсию + я могу ошибаться, но у тебя !object[array[i]] вернет undefined для null function get(initialObject, path) { return path.split('.').reduce((currentObject, currentKey) => { if (!(currentKey in currentObject)) { return undefined; } return currentObject[currentKey]; }, initialObject); }
В задаче про массив забавные условия на 7-8 строках (присвоение вместо сравнения) ) Понятно, что это просто опечатка, но собеседующая добрая (или не обратила внимание).
привет! посмотрел с интересом, в процессе накидывал решения :) 1 задачу сделал бы так: function get(obj, chain) { return chain?.split('.').reduce((acc, key) => acc?.[key], obj); } 2 можно тоже в одну строку, гораздо быстрее (для достаточно длинных строк - на порядок) будет регуляркой: function rle(input) { return input.match(/(\w)\1*/g).reduce((acc, v) => acc += v[0] + (v.length > 1 ? v.length : ''), ''); } 3 ваше решение нерабочее по нескольким причинам: интерпретатор ругнётся на return throw (уже писали в комментах) + если после неудачной попытки будет успешная - первый Promise из call stack всё равно не будет заресолвлен. я бы реализовал так: function get(url) { return new Promise(async (resolve, reject) => { let retries = 5; while (retries) { await fetch(url) .then((res) => { if (!res.ok) throw new Error(); // сюда попадёт, например, ошибка 500 resolve(res); retries = 0; }) .catch((e) => (retries--)); } reject('Retry count exceeded'); }); } 4 function isMonotonic(array) { return array.reduce((acc, value, index) => { if (acc.result && index) { const delta = Math.sign(value - array[index - 1]); if (acc.sign && delta && delta != acc.sign) acc.result = false; acc.sign = delta; } return acc; }, { sign: 0, result: true }).result; }
Ваше решение второй задачи вызывает вопросы, сложно написать такую регулярку на собесе и не ошибиться. Также мне кажется, что столь короткая запись может быть непонятна интервьюверу и это в минус пойдет.
@siberian-crystall Ваши решения конечно же гораздо лучше и самое главное - рабочие (в отличие от например, решения задачи 3 на видео). Однако в ваших решениях 1 и 4 есть недостаток: отсутствует предварительный выход из-за использования непрерываемых массивных методов. Т.е., алгоритм в любом случае переберёт весь массив, даже если мы уже можем сделать однозначный вывод, что результат undefined или false. В задаче 4 лучше всего воспользоваться циклом с предварительным return false, а в задаче 1 - рекурсивной функцией или циклом с предварительным return void 0. А задача 2 может быть решена ещё проще и оптимизированее: function rle(input) { return input.replace(/(\w)\1{1,}/g, (str, char) => char + str.length); } Однако отмечу, что попытка решить сложные задачи используя минимальное количество строк кода - не лучшая привычка. Код должен быть очевиден для того, кто его будет читать и пусть код будет многословен - минификаторы за вас его сожмут на этапе билда проекта.
4 задача как вариант. function isMonotonic(num) { const mono1 = [...num].sort((a, b) => a - b); const mono2 = [...num].sort((a, b) => b - a); if (mono1.join('') === num.join('') || mono2.join('') === num.join('')) { return true; } return false; }
первая банальная задача.. но очень хорошо показывает опыт программиста и его харды. у вам хеш таблица и путь это ключи! какая нафиг рекурсия..😂 задача на знание js и структур данных. читайте ребят книги! они очень полезные.. кто знает как распаковать объект? вот вам и ответ на задачу. учите структуры данных!..
Привет, второй этап я также успешно прошел, там было две алгоритм задачки, но его к сожалению я его не записал, можешь в тг моем увидеть что за задачи там были. Третий этап полностью разговорный, там не сильно интересно, вопросы про опыт и на софт скиллы
Сложность оценки алгоритма обязательно нужно называть на подобного рода собесах. После этого был второй алгоритмический этап, там две алгоритмические задачи было, прямо спрашивают сложность алгоритма, если ты не не говоришь. А про компании уровня фаанг я молчу.