TGViewer
Тихон | Помогаю разработчикам устроиться в BigTech Тихон | Помогаю разработчикам устроиться в BigTech @frontend_punks · 14.6K subscribers
Post #759 4.15K
А как у вас проходят праздники?)

У нас тут вопросы с собеседования в 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
  • 👍 35
  • 🔥 14
  • ❤ 9
More from @frontend_punks
  1. Sep 20, 2026Post #976
  2. Sep 19, 2026Что происходит внутри комьюнити и менторства. И какой трек развития фронтенд разработчика…
  3. Sep 18, 2026Post #971
  4. Sep 18, 20261. Как за 1,5 месяца получить 2 оффера на маленьком рынке 2. 25 собеседований без выгорани…
  5. Sep 17, 2026Сегодня собираемся решать задачи по JS на стриме в 20:00! За время работы у нас собралось…
  6. Sep 14, 2026Вот такие результаты прошедшей недели 💪 Всегда радостно видеть результаты работы наших ме…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →