Полный цикл отбора на стажировку в Яндекс (Аналитика, МЛ, Бэкенд)
Наше сообщество в телеграм «Поступашки — ШАД, Стажировки и Магистратуры» в частности специализируется на подготовке к стажировкам. В этой статье наши выпускники трех самых популярных направлений расскажут, как они проходили отбор. Далее представлен слегка отредактированный текст наших выпускников.
Аналитика
Сначала ждал контест. Мне и моему другу хватило всего 3 из 6 задач, чтобы позвали дальше на собеседования.
Аналитическая секция проходила так. Была одна алгоритмическая задача: есть массив целых чисел отсортированный, надо у всех отрицательных чисел знак поменять и снова отсортировать. Потом была стандартная задача на формулу Байеса: вычислить вероятность болезни, если тест показал положительный результат. В конце был бизнес кейс в духе как оценивать качество работы службы поддержки Яндекс такси. Поговорили про метрики, пользователей и тд. Прошел без каких-либо трудностей и напрягов. На все ушел час.
Алгоритмическая секция проходила так. Всего было две задачи. Первая задача: есть строка из Х, У, О наподобие «O, O, O, O, X, X, OY, O, O, X» найти минимальное расстояние между Х и У.
Вторая задача: есть массив целых чисел надо вывести границы отрезка с заданной суммой чисел, или если такого отрезка нет, то вывести (-1,-1). Опять же прошел собес без каких-либо трудностей. На все ушел час.
Интервью с командами прошли так. На финалах в основном были беседы за жизнь и спрашивали всякую фигню типо бизнес кейсов.
На первом финале были разговоры за жизнь и кейс: придумать метрики оценки системы рекомендаций фильмов на умных телевизорах.
На другом финале дали простейшую задачу на sql, которую я даже не запомнил, ибо на столько элементарная она была. Еще был бизнес кейс по оценке работы пуш уведомлений Яндекс лавки.
Но прям норм задачи были на финале в команде, которую я по итогу и выбрал. Было несколько задач по теор веру типо рассчитать оптимальный размер гардеробов в театре с двумя входами, если известно что приходят 400 человек (мы даже такую задачу решали на семинарах). Потом спросили: у тебя десять А/Б экспериментов проводится (цвета кнопки тестируются, ну 10 разных цветов) и один из тестов показал значимый результат (ошибка первого рода 0.1) , так вот приходит дизайнерша и говорит что её цвет кнопки показал значимый результат, что ей стоит ответить. Более типичный вопрос про множественное тестирование, я немного потупил, но решил. Ещё две задачи чисто были на теор вер, но там длинные условия и я их не понял и особо не запомнил.
Теперь немного о моих релевантных входных данных. Закончил я второй курс мехмата МГУ. Теор вер у нас был неплохой от легендарного Кондратенко. Мат стата пока не было. Прям типичного курса алгосов на мехмате у меня не было, но прога на мехмате года 4 С/С++, она скорее про вычислительные алгоритмы, но сети, элементы ООП и параллельное программирование тоже есть. В общем мне хватило и leetcode я прям не ботал, только порешал что-то из интернета. Питон и скл как-то пробовал изучать самостоятельно по книжкам. Курс Поступашек помог разобраться с бизнес кейсами, «продуктовым мышлением», АВ тестами и подобным, так как у меня в ВУЗе этого не было, а в и интернетах либо по моему мнению элементарный науч поп и тик токи для менджеров в духе «Статистике и Котики» или что-то с очень жесткой математикой.
Сейчас работаю в московском офисе Яндекса, хотя сам я из Сарова, переезд и жилье мне оплатили (живу в хостеле), кстати во время московской жары было очень приятно чилить в офисе. Занимаюсь Яндекс Картами, учу потихоньку машинное обучение.
Машинное обучение
Мне хватило 4 задач из 6. Первую и пятую мне решил ГПТ, только нужно было поправлять. Шестая просто посчитаит количество вхождений конкретных слов, а потом сортируем. Остальные были нетрудные. Этого хватило, а знакомому хватило трех задач.
МЛ секция прошла так. Сначала дали очень простую задачу на два указателя: в строке найти длину наибольшей подстроки, состоящей не более чем из двух уникальных символов. Я даже растерялся и начала копать не туда. Интервьюер предложил рассмотреть на примере и я сразу сообразил. Потом была простая задача по мл. Она разобрано здесь. И немного поспрашивали базу про классификацию, про линейную регрессию и регуляризацию.
Алгоритмическая секция прошла так. Первая задача: сжимать список целых чисел в диапазоны, которые там встречаются. Например, [1, 3, 2, 8, 11, 9, 0] → »0–3, 8–9, 11».
Вторая задача: для множества точек на плоскости с целыми координатами определить есть ли у них вертикальная ось симметрии.
Для тех, кто в теме, задачи довольно баянистые. Задачи я решил быстро и еще оставалось время, собеседующий дал мне задачу: написать бинарный поиск.
Далее ждали собесы с командами.
Собес 1 (Яндекс Доставка)
Лайтово. Спросили просто про опыт, чем занимался. Поговорили про хакатоны, мои пет проекты. Мог только похвастаться кредитным скорингом и рекомендацией фильмов, которые я позаимствовал и адаптировал по заветам Поступашек.
Рассказали про себя и чем предстоит заниматься. Нужно выдумывать всякие фичи в катбуст, чтобы в реальном времени предсказывать приедет курьере или нет.
Собес 2 (Яндекс Деньги)
Здесь уже было потновато. Сначала попросили рассказать про случайный лес и градиентный бустинг, уточняющие вопросы по теории. Дальше попросили рассказать в общих чертах про АВ тесты и заострили внимание на ошибке 1 го и 2 го рода, p-value, мощность. Спрашивали про опыт работы в линуксе и написания скриптов на баше, попросили написать простой SQL запрос в блокнотике (есть табличка — фио, зарплата, отдел, надо вывести людей получающих минимальную зарплату в своем отделе). Затем был мл кейс: какие вопросы (из 100 имеющихся) задавать пользователю для идентификации мошенника. Чем-то подобным и предстоит заниматься в команде: по поведению пользователя на сайте и в приложении научиться понимать, бот это или нет. Поговорили про метрики классификации, а также про реализацию моего решения.
Вообще для подготовки к мл кейсам, помимо бота классической теории, советую смотреть всякие статьи на Хабре, конференции от Яндекса, Тинькофф и тд. Понятно, что в первую очередь смотреть выступления конкретной команды, с которой будет собес, и выступления левых команд, но в той же области.
Собес 3 (Яндекс Музыка)
Было много вопросов про метрики, какие знаю, физический смысл ROC-AUC. Дальше спросили: есть одна фича и один таргет, обучили регрессию, но весь тест лежит правее всего трейна— что выдаст линейная регрессия, KNN и случайный лес? И затем мл кейс, как сделать рекомендации плейлиста на сегодняшний день. Все основные повороты описаны здесь.
В итоге три приглоса. На собесах ожидал хоть один вопрос по глубокому обучению, но его не было.
Бэкенд
Подавался на бэкенд С++, сначала скинули ссылку на контест. Первую задачу мне решил ГПТ. Вторая задача была на хэш-таблицу + строки. Третья задача была сортировка + префикс сумма. Четвертая задача была одной из самых сложных, но решалась через префикс суммы. Пятая задача была на алгоритм БОР.
В ту же неделю пришло письмо с приглашением на собеседование, списались с HR по тг. HR оказался приятным, на все мои вопросы подробно отвечал и не игнорил.
Алгоритмическая секция 1. Задача 1: дается массив из 0 и 1. Нужно за один проход поставить все нули в начало массива. Задача баян, в группе выкладывали задачу.
Задача 2: дается массив 0 и 1. Найти длину максимального подотрезка, состоящего из 1, после удаления ровно одного нуля. Решил быстро, и в запасе оставалось еще 20 минут. Собеседующий решил просто так не сидеть и дал 3 задачу.
Задача 3: дается строка, найти максимальную по длине подотрезок, состоящий не более чем из k различных букв. Тоже какая-то баянистая задача на два указателя…
Остается 5 минут, и собеседующий говорит: «Го, еще одну задачу, достаточно, чтобы ты рассказал идею».
Задача 4: дается массив чисел. Найти наибольший по длине подотрезок, что сумма чисел в этом подотрезке равно 0. Ну и я ему предлагаю решения с префикс-суммой и хеш-таблицей за O (1).
Алгоритмическая секция 2
Задача 1: Дается массив из 0 и 1. Найти такую позицию нуля, что расстояние до ближайшей единицы максимально возможное. Рассказываю решения за линию и пишу код.
Задача 2: Дается бинарное дерево поиска, проверить, что это дерево является сбалансированным.
Рассказываю линейное решение, пишу код, исправляю пару багов. Остается еще 15 минут, я 5 минут позадавал ему вопросов по компании, и на этом разошлись.
Алгоритмическая секция 3
Задача 1: Условие было длинное, единственное, что запомнил, что там были отрезки (как временные интервалы), которые были даны в отсортированном порядке, и нужно было написать бинпоиск)
Задача 2: Дается натуральное число n. Нужно представить число n в виде суммы квадратов. Написать программу, которая находит количество представлений числа n.
Если честно, был удивлен, что предложили такую задачу, так как она решается простой баянистой дпшкой за n*sqrt (n), к счастью, оказывается, это же решение от меня ожидали.
Приходит HR с обратной связью. Говорит, что теперь будут подбирать мне команды. Кидается 4 ссылки на команды, говорит, выбирай, что интересно, я сказал, что хочу во все попробовать. Мне начали по очереди ставить собесы в команды.
Собес 1
Пришел лид одной команды, сказал, что ему важно, чтобы хорошо знали ООП на С++… Он начал спрашивать все по ООП, показывал примеры кодов и задавал, сколько раз какой-то объект скопируется и т. д.
В общем, собес состоял только из ООП.
Собес 2
Пришли собесить два парня, такие разговорчивые. Начали узнавать, чем занимался, есть ли у меня опыт по БД, Linux. Потом дали около алгоритмическую задачу, в которой нужно было использовать map и указатели.
Собес 3
Интервьюер Говорит, что в его команду нужен человек, который знает многопоточности. У меня от этого слова уже в глазах потемнело… Потом он сказал, что понимает такие темы, скорее всего, стажеры не знают…
И начинает по поверхности многопоточности задавать вопросы, я, конечно же, ничего ему не отвечаю.
После он мне дает задачу и говорит: «Давайте попытаемся решить многопоточностью, есть у вас идеи?» Я говорю: «Нет», и собес на этом заканчивается.
Собес 4
Сходу мне дает задачу:
Поступают запросы вида:
x (Удалить число x из множества) get min (вернуть минимальный элемент из множества) get max (вернуть максимум из множества) Такое решение нужно написать за линию. При этом в множестве могут быть повторы.
В итоге два приглашения и два отказа.