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 для фоточек.
Шардим по идентификатору товара, а не клиента, потому что в моем апи надо было быстро и часто юзверю показывать все отзывы по товару.
Аналитическое апи делать не стали - чтобы в час влезть.
Для аналитики я сказал, что вообще надо бы делать отдельную базу данных с моделями для чтения нужными, этого оказалось достаточно.