Как я проходил отбор на стажировку бекэнд — разработчиком (C++) в Яндекс по программе Deep Dive (в формате буткемпа)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Небольшое вступление

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

Сразу предупрежу, по вполне понятным причинам условий задач я вам не скажу, но будет их общее описание.

О чем поговорим:

  1. Кто я и почему решил пойти на стажировку?

  2. Контест

  3. Первое техническое интервью

  4. Второе техническое интервью

  5. Финальная встреча с куратором буткемпа

Кто я и почему решил пойти на стажировку?

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

И недавно у меня начался неприятный период жизни. Учеба в вузе все сильнее и сильнее раздражала (программирования все нет и нет, а есть одна иженерия), к тому же пережил расставание.

Началась сероватая полоса
Началась сероватая полоса

Я захотел координально начать менять что-то в своей жизни. И вот как то раз мы собрались с друзьями в комнате почилить и довольно спонтанно решили поискать вакансии. Причем мы все загорелись этой идеей и буквально через несколько дней поиска, я нашел вакансию на позицию бекендера в Яндексе. В шутку, но решил все таки попытать удачу. На следующий день мне прислали письмо с приглашением пройти отбор. Как раз у рекрутера Полины я и узнал, о программе Deep Dive, которая предоставляла релокацию, что было для меня актуально. Заполнив анкетку я перешел к той части, ради которой вы сюда и зашли :)

Контест

После отправления заявки, мне пришла ссылка на Яндекс.Контест. За 6 часов нужно было решить 6 задач. Я выбрал время, чтобы никто и ничто меня не отвлекало, вооружился листочком с ручкой, чаечком с печеньками, открыл VS, включил музычку и тут понеслась.

Первые две задачки были не особо сложные, но на них я все таки потратил какое то время с волнения/непревычки. К третьей задаче у меня оставалась половина времени.
Третья задача была на знание контейнеров. Я сразу обратил внимание на ограничения в пару секунд и на огромные входные данные и понял, что тут за O(N) не пройти. И с этой задачей была настоящая схватка...

За час написано решение, но вот незадача, оно не проходит по времени! Посидел еще в коде какое то время, непонимающе, как можно еще ускорить алгоритм? Сложность должна подойти для ограничений!

Осталось около полутора часов. Я проглядел оставшиеся задачки и не понял вообще как их решать. Одна из них была связана работой с матрицей, вторая с работой с условиями про последнюю говорить страшно.
Оставался час и надо было добивать задачу. За примерно 40 минут я отловил бесконечный цикл (привет работа с итераторами) и исправил ситуацию, и о чудо! 4 тест пройден, упали на 5ом.
У меня 20 минут и 5тест из 60. Перечитать условие, посмотреть ограничения. Да! Обычный int не подходит, нужно использовать int64. За пару минут до решение проходит, однозначно победа.

Наконец-то достойный противник эта битва была легендарной!
Наконец-то достойный противник эта битва была легендарной!

Половина, да и то только первых задач, самых простеньких, наверное не таких ребят ждет Яндекс. Тут я вспомнил лайфхак для таких случаев. Обычно в контестах первые тесты - это те, которые приводят в примерах, поэтому, быстро скоппировав все тесты из примеров к каждому заданию и ответ на них, я отправил так :)
(спойлер, скопировать грамотно не удалось)

Немножко приуныв я стал ожидать вердикта. На следующий день меня обрадовала Полина, предложила выбрать время для технического интерьвю.

Первое техническое интервью

Вот тут я начал по-настоящему напрягаться. Собеседование проходило по зуму и длилось ровно час. Я особо не готовился, хотел показать себя такой какой я есть. Друзья посоветовали положить на задний фон Мишку (так я назвал плюшевую игрушку - подушку, что мне подарили) для поддержки, как-нибудь не очень заметно. Все же серьезное собедование :)

Вот так выглядит Мишка
Вот так выглядит Мишка

Сперва мне дали задачку с СИ-строкой, что было для меня удивительно, я же вроде как на бекенд C++ подавал. Ну ладно СИ так си, все-таки алгоритмическое решение проверяют. Добрую половину часа я потратил. Поддерживало то, что интервьюер направлял на решение, подсказывая где могут возникнуть ошибки, а не осуждающе смотрел. Вообще мне понравилось как подсказывают интервьюеры - "вот представьте что у вас есть строка, ну небольшая такая на 5 гигабайт, как вы думаете, как быстро алгоритм ее обработает?". Сразу чувствуется, мыслят в реальных проектах более масштабно. Еще, если я предлагал какое - то неоптимальное решение у меня просили посчитать сложность своего алгоритма.

Разобравшись с первой задачкой мне задали достаточно озадачивающий вопрос. Он был связан с пониманием устройств контейнеров. Я понимаю, что при заканчивании свободного capacity у вектора с последующим push_back-ом, происходит релокация памяти с инвалидацией итераторов, а вставка в список происходит за O(1), но тем не менее вопрос меня удивил. Врочем включив логигу и некоторые знания я +-что-то ответил, не совсем правильно, не совсем то объяснение, которое ожидали от меня, но все равно это лучше чем промолчать.

Потом поспрашивали простенько про сортировку, тут особо то и нечего сказать.

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

В целом после собеседование у меня было слегка унылое настроение, ответив +- на половину. Но тем не менее я с надеждой ждал фидбека. И вот опять Полина обрадовала меня. Вскоре должно было состоятся второе интервью.

К этому интервью я немного больше поготовился, посмотрел задачки, какие - то базовые алгоритмы. Настало время встречи. Опять зум, опять час, мишка занял свою позицию позади меня и началось.

Тут мне предложили перейти на ты. Я как то не привык к такому, но напряжение это тем не менее немного уменьшало. Немного поспрашивали обо мне, почему выбрал плюсы, что в них нравится, я рассказал, что мне интересна работа с многопоточностью и БД и мы перешли уже к основной части.

Первая задачка была опять на строки, но в этот раз уже на вход подается string, а не char* s. Вижу условие, на лице появляется улыбка, эту задачку я уже видел, когда готовился. Поискал свои листы, понял, что я просто ее проглядел, наклипав простенький алгоритм, не посмотрев достойного решения и принялся его описывать. Кстати да, в этот раз меня сначала попросили дать словесное описание алгоритма, а только потом его написать. Примерно набросав свою идею (она была не очень элегантной по коду, но вполне подошла по сложности), я принялся ее реализовывать.

мой муд в тот момент
мой муд в тот момент

Тут стоит обратить внимание на некоторые нюансы, которые возникли в ходе решения.

- А типа int для данной задачи нам хватит? А size_t? А если и этого мало, что бы я мог сделать?

Программа должна возвращать ошибку, в случае невалидных данных, а как бы лучше это сделать? Тут мы сошлись на возврате пары, в которой бы находилась строка и код ошибки, если таковая имелась бы. По поводу кода ошибки - тут я наложал, выбрал для него целочисленный тип, совсем забыв, что был бы уместнее enum. На что в конце интервью мне отметили.

И еще одна небольшая ошибка, о которой я понимал, но все же не приметил. Пусть s - объект типа string. В цикле я написал что-то типа

for (int i = 0; i < s.size(); i++)

Прошу находчивых отметить в комментариях, в чем тут ошибка :)

Вторая задача была весьма простой, на бинарные деревья. Но я никак не мог увидеть решения. С многочисленными подсказками от интервьюера я все таки понял какой алгоритм нужен, но времени на него не хватило, я наспех написал что-то +- работающее, но как следует протестить код уже не вышло.

После интервью я опять немного напрягся, но в целом мне оно понравилось, мне дали пару советов на будущее, а беседа была позитивной. Вскоре последовал ответ от Полины. Меня пригласили на финальное собеседование с куратором буткемка.

Финальная встреча с куратором буткемпа

Меня предупредили что здесь могут спросить по теории и возможно дать техническую задачку. Сказали что могут спросить про многопоточность. Поэтому я взял немного больше времени, дабы повторить какие то моменты.

Как всегда: зум,час, Мишка.

Снова мне предложили говорить на ты, и тут я начал к этому привыкать. Общий разговор состоял из 3х логических секций.

  1. Сперва мне рассказали о самом Яндекс.Маркете. Как развивается сервис, каковы его масштабы.

  2. Затем мне рассказали уже о проведении буткемпа. Период адаптации с тестовым заданием -> работа в первой команде -> работа во второй команде. И еще некоторые уточняющие детали.

  3. Вот это пожалуй самая интересная часть. Мне не давали вопросов по теории или каких то задач, что меня приятно удивило. Но расспросили еще раз о интересных мне направлениях, о проектах в которых я учавствовал, работал ли в команде и какая была моя роль, что делал в случае возникновения ступора или когда понимал, что не успеваю выполнить задание. Некоторые из этих вопросов уже были в анкете, которую я подавал в самом начале, так что рекомендую про них вспомнить :)

Вообщем это была ненапряжная и приятная беседа. Мне сказали ожидать финального решения. Скоре Полина сказала, что от команды фидбек положительный и меня рассматривают на стажировку в буткемп.

Тут я чуть ли не подпрыгнул от радости, начал плясать, хлопать в ладоши, кричать на всю общагу "ура" и включил песню Survival из фильма Tomb Raider. Но тут мне учтивый сосед сообищил, что это еще не значит, что меня приняли на работу. Поэтому я ждал пока пройдут выходные, чтобы мне сообщили итоговый ответ. Вообщем после выходных мне снова написала Полина и уже окончательно сказала, что я принят. Мы созвонились, опять перешли на ты (тут я наконец-то к этому привык) и обговорили некоторые детали.

В заключении

Изначально я планировал просто приобрести опыт прохождения собеседований, более подробно узнать, что требуется от бекендера в реальных случаях, ну и конечно же протестить свои знания. Я не ожидал что дойду до этого этапа.

В целом все собеседования проходили вполне комфортно, все интервьюеры вежливые и позитивные люди. Полине отдельный респект, за доброжеталельность :)

Желаю удачи всем будущим соискателям, не бойтесь пробовать и обращайтесь за "помощью" своих "Мишек" :)

Если к посту проявится интерес, то запилю ещё историю о прохождении стажировки и выживании в Москве.

Источник: https://habr.com/ru/post/599189/


Интересные статьи

Интересные статьи

Много всякого сыпется в мой ящик, в том числе и от Битрикса (справедливости ради стоит отметить, что я когда-то регистрировался на их сайте). Но вот мне надоели эти письма и я решил отписатьс...
Введение Привет, Хабр! Вновь я с уже второй статьей, затрагивающей API Яндекс.Музыки. Дело запланированное и упоминалось в первой статье. Руки дошли, дело сделано. Сегодня я расскажу об интер...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
Чтобы передать сообщение от базовой станции мобильному устройству (и наоборот), электромагнитной волне приходится преодолевать значительное количество препон: отражения, преломления, рассеивания,...
Алгоритмическая секция с написанием кода на доске или бумаге — один из важнейших этапов собеседования разработчиков для получения работы в Яндексе. Мы решили подробнее рассказать о том, как устро...