Всем привет. И это моя история о том, как я попал на стажировку в Yandex Cloud как Backend разработчик на Go.

Сразу скажу, что попал я на стажировку не с первого раза.

Background

Немного о себе: на начало истории я был студентом 4 курса, писал научные статьи по нейронным сетям, в свободное время писал pet-проекты, чтобы потрогать какие-то технологии, фреймворки, технологии и прочее. Алгоритмами не увлекался никогда, из-за чего будут проблемы, о которых расскажу ниже. В портфолио было пару коммитов в клиентскую библиотеку Twitch API, API с парсером данных с HLTV.

Попытка 1

Это был февраль 2022 года, в то время я уже работал разработчиком на C++, но всегда хотел работать в нечто большем, чем какой-то завод или маленькая городская IT компания. Я отправил заявку на стажировку. Думаю, что все читающие уже знают дальнейший процесс: тестовый контест, алгоритмическое интервью, встречи с командами, стажировка. И так мой путь начался с контеста, ссылку на который мне прислали на почту, его нужно было пройти в течении недели. В самом контесты я решил не все задачи, а всего 2-3. Но после выходных мне написал рекрутер в телеграм с предложением пройти алгоритмическое интервью. Мы договорились о дате и времени, и я начал ждать. Пришло время интервью, мы созвонились с интервьюером, он сразу дал мне задачу и мы начали решать.

Задача 1

Пятница 13

Первая задача, как правило, простая и на нее уходит немного времени. Что-то по типу "Тебе дан день недели 1-ого января, посчитать количество пятниц 13-ых в году". Эту задачу можно решать несколькими способами, с разными сложностями алгоритмов, поэтому стоит предлагать как можно больше и не забывать указывать сложность предлагаемого алгоритма. Я предложил обозначить дни недели числами (типа enum), взять 13 число января и прибавлять остаток от деления на 7 от числа дней в месяце. Если получалось, что день недели пятница, то прибавлял счетчик. Сложность алгоритма получается O(1), потому что итераций цикла всегда 12, т.к. в году 12 месяцев. Мы по-быстрому написали код, интервьюер рассказал про читерское решение задачи: возможно 7 вариантов входных данных, поэтому для каждого входного аргумента можно заранее посчитать количество пятниц 13-ых в году и написать функция switch-case и возвращать уже подсчитанные значения.

Задача 2

Квадраты чисел

Вторая задача была следующая: "Дан массив положительных и отрицательных чисел, нужно вернуть массив квадратов этих чисел, отсортированный по возрастанию". Тут я предложил завести 2 слайса с квадратами положительных и отрицательных чисел, а затем сортировать при создании выходного слайса, все просто. Мы решили задачу и у нас осталось минут 10-15, поэтому 3 задачу мы сделать не успевали, и интервьюер решил поспрашивать меня вопросы на знание Golang: про слайсы, про мапы, про горутины.

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

Задача 1

Интроверт в кино

Первая была что-то по типу "Ты в кинотеатре, ты можешь выбрать любое место в ряду, но тебе не нравится сидеть рядом с другими людьми, нужно найти место максимально удаленное от людей". Я точно не помню, что я тогда предложил, но скорее всего стоит сначала предложить самый примитивный способ, это для каждого места посчитать расстояние до следующего человека с каждой стороны и взять минимальное значение, тогда сложность алгоритма O(n^2). Более оптимальное решение - находить расстояние до ближайшего соседа по мере прохождения по массиву (если предыдущее место занятно, то расстояние 1, иначе x[i-1]+1). Так мы находим расстояние до соседа слева и справа за 2 прохождения по массиву, а на 3-ьем прохождении находим место, куда нам сесть, сложность алгоритма O(n).

Задача 2

Петля

Вторая задача: "Дана строка с буквами обозначающие направление движения на одну клетку: W - вверх, S - вниз, A - влево, D - вправо. Вернуть строку движения, убрав из нее петли". Это задача мне показалась сложнее, как я ее тогда решил, я не помню, но там было очень мудренное и непонятное решение, поэтому я потратил на это много времени и не успел разобраться с индексами (там был какой-то косяк). В свою защиту скажу, что тогда я не занимался алгоритмами почти никогда, а только писал свои проекты.

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

После этого письма я решил взяться за алгоритмы всерьез и решал каждый день по 3-4 задачки на протяжении 2 месяцев.

Попытка 2

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

Все по новой: отправил заявку, прошел контест, где я не решил 1 задачу, потому что просто не знал о k-мерных деревьях. Дальше мне опять написал рекрутер и предложил собеседование, мы согласовали время и я стал ждать. Мы созвонились, было опять 2 задачи, которые я вообще не помню, но они были для меня простые, у нас оставалось 10 минут, задач больше у интервьюера не было и мы разошлись.

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

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

На этом интервью вы рассказываете друг о друге. Я о себе, опыте разработки, чем интересуюсь, собеседник про свою команду, их задачи и роль в Yandex. Это обычно занимало минут 20, затем вы можете задать какие-то уточняющие вопросы про команду. Обычно интервью заканчивались за 30 минут. Первые 3 команды меня не взяли, тогда я решил уточнить у рекрутера, почему от меня отказались, чтобы исправить это дело. Посчитали, что я недостаточно заинтересован в командах. Да, у меня есть такая проблема, что я не очень эмоционален в разговорах и просто слушаю, отвечаю на вопросы и задаю их.

Мне нашли еще 2 команды, которые я предполагал, что будут последними, если меня не возьмут. В этот раз интервью были немного другими, на одном меня спрашивали про REST и gRPC, работал ли я с Linux и про интерфейсы в Golang, на другом мы решили одну простую задачку на алгоритмы. Все остальное было почти таким же. После я опять стал ждать ответа, который поступил достаточно быстро, через пару часов после интервью, что я очень понравился одной из команд. Мне прислали оффер на стажировку, я заполнил анкету, а через несколько дней мне прислали подарок - рабочий ноут, станцию Алиса Лайт, фирменный шоппер, скетчбук, ручку и книжку про Яндекс, которую я сразу прочитал.

Стажировка

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

На протяжении всей стажировки у вас есть свой ментор. У меня это было человек, который проводил интервью. Ему я писал все свои вопросы, он мне давал задачи. Часто мы созванивались, чтобы просто поговорить о том, как у меня идут дела, ну и в целом про Яндекс. В целом глупых вопросов не бывает, вы можете и должны спрашивать вообще все, что вас интересует, вам тут всегда помогут и подскажут где и что искать.

В процессе работы я:

  • общался с другими разработчиками

  • предлагал свои идеи, которые иногда принимали

  • писал код на Python, Java, но, в основном, на Go

  • читал и работал с Terraform, gRPC, разными базами данных

  • узнал весь жизненный цикл задач, начиная от создания тикета до деплоя в прод

Спустя 4 месяца работы (первые 2 месяца я работал на 0.5 ставки) моя стажировка закончилась, я написал своему руководителю, что мне с ними очень нравится, и я хотел бы остаться, если есть такая возможность. Меня оставили и я по сей день работаю в этой компании и в этой же команде, но уже джуном.

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

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

Не сдавайтесь и если у вас не получилось сразу, возможно, получится позже.

Комментарии (5)


  1. Mirzapch
    19.07.2023 00:17

    Про пятницу 13 задачка хороша.

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


  1. D1abloRUS
    19.07.2023 00:17
    +5

    В итоге, судя по описанию прохождения стажировки алгоритмы вам так и не пригодились ???? Ох уж этот чудо мир собеседований…


    1. aegoroff
      19.07.2023 00:17
      +1

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


      1. D1abloRUS
        19.07.2023 00:17
        +2

        Самое главное, что навык решения задач для спецолимпиады, ни как не показывает способность решать повседневные/поставленные задачи. Если вы берете человека копать яму, вы же ожидаете, что он может спроектировать экскаватор, ведь так?


        1. aegoroff
          19.07.2023 00:17

          Нет кончено, не ожидаю, но в условиях недостатка времени (а в случае собеса именно так) - это лучшее что пока придумали, по оценке кандидата. Вы же не будете верить на слово человеку о том что он что-то умеет делать, надо как-то проверить. Если у вас есть лучший способ проверки - расскажите - будет интересно.