Programming
June 26, 2023

One Day Offer Яндекс.Маркет 2023

Ради интереса в субботу 24.06.2023 я не занимался думскроллингом, а прикола ради поучаствовал в one day offer в Яндекс.Маркет.

Я захаживаю туда примерно раз в полгода, потому что это интересно и полезно - поучаствовать в настоящих собеседованиях со стороны интервьюируемого.

Было два часовых собеседования, по system design и по алгоритмам. Интервью по System Design я сдал на "зачет", а по алгоритмам -мне поставили "незачет", потому что я не уложился во время, решение было монструозным и в паре мест совершил глупые ошибки.

Забавно, но я думал, что будет наоборот - по System Design интервью завалю, а по алгоритмам - нет.

Первая задачка в алгоритмической секции - есть последовательность целых чисел, надо найти непрерывную последовательность строго возрастающих или строго убывающих чисел и вывести два индекса - начала последовательности и конца последовательности. Что-то похожее я нашел на leetcode - https://leetcode.com/problems/longest-continuous-increasing-subsequence/ (там требуется найти длину только возрастающей последовательности, но она очень похожа).

Например, для
`2 7 5 4 4 3 5` мы выводим `[1,3]`,
а для
`1 1` выводим `[0,0]` или `[1,1]`

Видимо, тут и была моя главная ошибка - меня в стейт-машину понесло, я сделал, но много времени на это ушло и код получился большой и глупый.
Потом, в спокойной обстановке, я написал решение на полэкрана, но в спокойной обстановке - это совсем другое, конечно :-)

Вторая задача - бинарное дерево, в каждой вершине хранится заглавная буква латинского алфавита. Надо найти какие-нибудь два поддерева, у которых одинаковый набор букв (без учета частотности).

Я сделал - рекурсивный deep first search и составляем по ходу дела словарь с ключом из отсортированной строки с буквами поддерева и вершиной, ходим и заглядываем в словарь, есть ли уже такая, если уже есть - то это и есть искомые любые поддерева.

Но времени уже было мало, я торопился и в кодировании сделал одну смешную ошибку и малость за час вылез.

В собеседовании по System Design мне предложили как бы в Яндекс.Маркет встроить сервис для публикации, редактирования и показа пользовательских отзывов про товары (с фоточками) - типа как будто его еще нет и надо сделать (а все остальное окружение есть).

Я набросал API в стиле CRUD, и типа клиенты с мобилок и из браузера через баланировщик ходят к 100500 серверам приложений в кубернетесе, а те лезут в реплицированную шардированную монгу (шардируем по идентификатору товара) и S3 для фоточек.

Шардим по идентификатору товара, а не клиента, потому что в моем апи надо было быстро и часто юзверю показывать все отзывы по товару.

Аналитическое апи делать не стали - чтобы в час влезть.

Для аналитики я сказал, что вообще надо бы делать отдельную базу данных с моделями для чтения нужными, этого оказалось достаточно.