У нас тут вопросы с собеседования в ozon 😏
В отличии от других компаний, задачи у озона очень часто повторяются. Поэтому мы решили расставить их не в порядке, в котором они были на собеседовании, а в порядке популярности. То есть чем выше задача — тем чаще ее спрашивали на наших собеседованиях.
Открывает наш топ задача на тему два указателя. В целом задачи на два указателя попадаются на собеседованиях довольно часто, но также легчайше решаются, если знать эту тему 👇
Задача 1:
// Написать функцию которая проверяет
// есть ли в строке указанные символы
// важно чтобы символы шли в строке
// в той же последовательности,
// не обязательно подряд
function needleInHaystack(needle, haystack) {
...
return false;
}
needleInHaystack('whe', 'cartwheel') // true
needleInHaystack('crt', 'cartwheel') // true
needleInHaystack('ctr', 'cartwheel') // false
needleInHaystack('weee', 'cartwheel') // false
Дальше задача на написание метода spyOn, который используется в Jest. Проверяет задача, по сути, контекст и методы его привязки. Мы редко видели ее в других компаниях, но в озоне ее дают почти на каждом собеседовании.
Задача 2:
// Функция должна позволять отслеживать
// вызовы оригинальной функции
// не заменяя при этом её поведение
// Для хранения аргументов отслеживаемых вызовов
// необходимо использовать массив calls.
function spyOn(obj, key) {}
const person = {
firstName: "",
lastName: "",
update(fullName) {
const [firstName, lastName] = fullName.split(" ");
this.firstName = firstName;
this.lastName = lastName;
},
};
const spy = spyOn(person, "update");
person.update("Иван Иванов");
console.log(person.firstName, person.lastName); // Иван Иванов
person.update("Пётр Петров");
console.log(person.firstName, person.lastName); // Пётр Петров
console.log(spy.calls); // ['Иван Иванов', 'Пётр Петров']
Далее задача на написание compose. Немного напоминает школьную математику, когда есть несколько функций, которые вызываются по цепочке, передавая результат выполнения из вложенной функции. Например -> f(g(x)), только написать это нужно на js.
Также можно решить через reduceRight, но не уверен стоит ли решать через него. Разработчики довольно редко используют этот метод, а вот нейронки — спокойно) Поэтому все решения с reduceRight предлагал бы аккуратно.
То же кстати касается регулярок, наизусть синтаксис помнят не все, поэтому могут понять не так.
Задача 3:
// Нужно написать функцию compose,
// которая принимает функции
// и вызывает их задом наперёд.
const composedFn = compose(
a => a - 8, // Будет выполнена третьей
b => b ** 2, // Будет выполнена второй
(x, y) => y > 0 ? x + 3 : x - 3 // Будет выполнена первой
);
console.log(composeFn("3", 1)) // 1081
console.log(composeFn("3", 1)) // -8
Также в задаче есть небольшой трюк с приведением типов..)
Еще в комментариях добавлю небольшую задачу на верстку, чтобы пост не получился слишком большим 👋
На ней на можно отдохнуть и перевести дух, после предыдущих)
Если задачи были полезными, ставьте 👍 или пишите в комментариях какую компанию смотрим следующей)
@codepunks_bro
