Андрей Минкин: Как я проходил собеседование в Яндекс и какие уроки я извлек

Ведущий программист проекта Namba Taxi подробно расписал, какие этапы и задания ждут того, кто мечтает устроиться на работу в Яндекс.

Как все начиналось

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

По совету пары людей устроил себе собеседования вечерами с разными компаниями.

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

Решил устроить максимум 4-5 собеседований в неделю и 1-2 тестовых задания.

Все собеседования были по скайпу, я получил пару джоб офферов в Москву, и отказался от них по ряду причин. Первая причина — финансовая. Так как Москва сама по себе дорогой город и 120к сейчас в Москве — это не 120к до обвала рубля. Плюс к этому ребята с проекта meshbird, который мы пилили на хакатоне GopherGala не советовали суваться в РФ, потому как рабочая сила сейчас там очень дешевая. Даже дешевле чем в Индии. Вторая причина — не совсем интересный проект для меня, в котором было бы много рутины и задачи ниже среднего. Третья причина — хипстеры и не серьезные будущие коллеги.

Как я решил податься в Яндекс, и подача самого резюме

В феврале, по совету моего знакомого я решил взять триалку Job Seeker на Linkedin. После пары недель юзания его, мне на почту свалилось от него предложение со списком компаний, куда можно отправить резюме. Среди них был и Яндекс. Послал резюме на позицию Python Developer. Подавал через Linkedin.

Этап 1. ТЗ и HR

Через пару дней после подачи мне написала HR-менеджер и выслала тестовое задание.

Суть ТЗ была в том, чтобы написать консольную утилиту для фильтрации логов в json формате и чтобы выдавала логи в разном формате, который можно менять. Читает с stdin.
Пример использования:
cat log | json-log --filter filter --template=some_template.d2

Тулзу запилил и отправил HR менеджеру.

Этап 2. Интервью с техническим специалистом Яндекса

Через пару дней, на телефон позвонила HR-менеджер и мы договорились об интервью по скайпу. Время и дату назначили и закончили разговор с ней.

В назначенное время в скайп добавился человек, мы с ним созвонились и около часу говорили на всякие разные отвлеченные темы. Среди тем были:

— Сколько вообще программирую;
— На каких языках программировал и в паре слов рассказать какие понравились, какие нет;
— Отношение к код ревью, качеству кода и прочим вещам;

В целом довольно мило пообщались и договорились о том, что он передает все HR-менеджеру, и, вполне возможно, пригласят на очное интервью в Москву.

Этап 3. Договор об очном интервью

Через несколько дней после скайпа, ко мне постучалась еще одна работница HR-отдела. Она сказала, что меня хотят пригласить на очное интервью в Москву. Задала мне три вопроса:

— Чем бы я хотел заниматься в Яндексе (инфраструктура, какой-нибудь проект и так далее);
— На каких языках я программирую;
— На каких языках я бы хотел программировать;

После того, как она получила ответы, она сказала, что меня хотят видеть в Москве. Сказала, что в моем случае будет 4-5 секций по часу. Время выбрали с 12 до 17.

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

Этап 4. Вылет

Билеты на руках, инструкции сохранил. Так как я снова еду в другой большой и не понятный для меня город, то ставлю на телефон приложения Maps.me — это оффлайн карты. Качаю карту Москвы, ставлю Яндекс.Метро, чтобы ориентироваться в Метро.

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

17 числа утром еду в аэропорт, торчу в нем 2 часа, дальше лечу 4 часа в самолете, и вот, в 7:55 я уже в Шереметьево.

Так как я в Москве, то включил в аэропорту москвича, и быстрым шагом пошел по направлению к аэроэкспрессу.

Купил билет за 470 рублей, сел на ближайший поезд и приехал на Белорусский вокзал через 45 минут пути.

Добрая кассирша дала мне буклетик с расписанием поездов, в котором все рейсы, во все аэропорты с точным временем прибытия и отправки.

После вокзала нашел метро, купил два проезда в метро, доехал на нем до станции «Парк Культуры» и пошел искать офис.

В этот раз GPS в телефоне не смог определить мое местоположение и пришлось добираться, спрашивая у прохожих.

И вот я добрался.
Офис Яндекса

Пришел на ресепшн и меня вскоре проводили до места собеседования.

Этап 5. Первое интервью. Алгоритмы и структуры данных

Интересная секция, вел ее разработчик Яндекс почты.

Было три задачи

1. Есть стек. У него есть четыре метода

  • push — кладет данные в стек
  • pop — удаляет элемент из стека
  • top — возврашает верхний элемент стека
  • empty — проверка на пустой стек

Нужно его отсортировать

2. Есть два односвязных массива, у которых есть общая часть. Нужно выяснить индексы массивов, с которых начинается общая часть.
Примеры массивов:

- a b c x y z
- d e a d b e e f x y z

3. Есть функция rand2 которая возвращает 0 и 1 с равной вероятностью. Нужно написать функцию rand3, которая с равной вероятностью возвращает 0 1 и 2.

Этап 6. Второе интервью. Архитектуры

В этой секции мы поговорили о проектировании архитектуры и спроектировали чат, который должен уметь масштабироваться. Почему чат? Потому что это в последнее время модно. После того, как закончили с чатом, была задача на обработку и повторение задачи, если она на каком-то этапе завершилась с ошибкой. Как автоматизировать повтор действия на всякие разные фейлы, например не доступна база, не доступно одностороннее АПИ, или второе, или еще какой-нибудь из компонентов.

Этап 7. Третье интервью. Программирование на питоне

В этой части нужно было написать декоратор, который пре серелизует любые данные, заменяя при этом date на «%Y-%m-%dT00:00:00», datetime на «%Y-%m-%dT%H:%M:%S». При этом, возвращать должна следующее

[True, response] — если есть открытый файл
[False, response] — если нет файла.

Например:

[
{
"name": "Will",
"age": 26,
"birth": "2015-01-02T00:00:00"
}
]

Этап 8. Четвертое интервью. Практическое админство

В этой части. Было много разборок с линуксом.

  1. Как узнать текущих залогиненых пользователей;
  2. Почему их не показывает;
  3. Убить все процессы, по определенному паттерну, без pkill -f;
  4. Выяснить, с какой директории был запущен скрипт;
  5. Как работает память в Linux;
  6. Модель OSI;

Итог

В конечном итоге были сделаны следующие выводы:

  1. Мне нужно подтягивать алгоритмы и некоторые академические моменты;
  2. В любой более-менее крупной компании (Яндекс, Дропбокс, Убер и тд) требуются знания алгоритмов;
  3. Диплом нужен чаще всего только для релокейта и получения некоторых ништяков, которые не получают люди без диплома;
  4. Все компании ценят больше практический опыт с хорошим уровнем теории.

На этом все.

Ответы: 4
  1. В задачах на алгоритмы и структуры данных, какие были ограничение по времени и памяти?

    • Мимокрокодил Ответить

      На собеседованиях хотят увидеть наиболее эффективное решение и твои рассуждения о complexity выбранного алгоритма. См. Big-Oh notation. Если решение можно оптимизировать либо по производительности либо по space efficiency (т.е. только что-то одно), нужно уточнить у собеседующего, что предпочтительней. Т.е. 1) наиболее эффективное и 2) задай вопрос собеседующему, чтобы выяснить больше деталей — секрет успеха.

  2. В quore где-то мельком видел, что кто-то создал то ли туториал, то ли ещё что-то, по-простому ГДЗ на всякие интервью.

Оставьте свой комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *