Доброго времени суток.

Представляю вашему вниманию перевод статьи «My Interview Experience With Microsoft» автора Ashwin Goel.

В этой статье автор делится своим опытом прохождения собеседований в Microsoft и дает некоторые советы.

Около 2-3 месяцев назад я заметил на Linkedin несколько сообщений от сотрудников Microsoft о проведении кампании по отбору кандидатов на летнюю стажировку. Я долго ждал этого и не хотел упустить возможность.

Я отправил резюме с подробным описанием моих достижений и опыта, включая все мои проекты, 15-20 людям из Microsoft в надежде на то, что хотя бы один из них пригласит меня на онлайн-тестирование.

Ключевые моменты:

  1. Не бойтесь обращаться к незнакомым людям. В конце концов, вы пытаетесь установить контакт. Чем проще вы будете к этому относится, тем легче достигнете цели.
  2. При обращении не пишите «Привет! Не могли бы вы взять меня на работу в вашу компанию?». Вместо этого, напишите хорошее сообщение, опишите ваши достижения, опыт, проекты, дайте им причину пригласить вас.

В течение 1-2 часов переписки я получил от Microsoft приглашение на первый раунд интервью, представляющий собой раунд по кодированию.

На дворе стояло 22 сентября 2019 года.

Я получил три задачи и приличное время на их решение.

Первым вопросом было:

Дан массив размером n, переставьте числа таким образом, чтобы четные и нечетные числа располагались по очереди в возрастающем порядке.

P.S.: это был самый легкий вопрос.

Когда оставалось 5 минут до конца раунда, мой ноутбук сломался. Худшая вещь, которая могла произойти. К счастью, я нашел возможность продолжить тестирование через некоторое время.

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

Я был настроен очень позитивно и с нетерпением ждал результатов.

Результаты были объявлены 11 октября и да, я был приглашен на второй раунд.



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

Интервью состоялось 14 октября. Оно началось с короткого введения, затем интервьюер начал задавать вопросы по ООП. Я был в восторге, поскольку в колледже никогда не изучал этой темы, все мои концепции были простыми как 10+2 (2*2).

Мне задавали вопросы о наследовании, полиморфизме, о разнице между перегрузкой и переопределением методов, ключевом слове virtual и абстракции.

Ключевой момент:

  • Если не знаете ответа на вопрос, не говорите, что попало, а внимательно выслушайте собеседника и согласитесь с ним. Более того, как можно подробнее расспросите об этом собеседника. Это покажет, что вы хотите учиться новым вещам. Я не был знаком с ключевым словом virtual и вместо того, чтобы говорить ерунду, честно признался в том, что никогда о ней не слышал, после чего у нас состоялась интересная дискуссия на 2-3 минуты.

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

Задача была следующей:

Допустим, у вас есть такой трехмерный массив отсортированный в следующем спиральном порядке:

	01 02 03 04
	12 13 14 05
	11 16 15 06
	10 09 08 07

Назовите лучший способ найти число в таком массиве?

Сначала я не мог придумать хорошего решения и назвал худшее (O(n2)), затем начал размышлять и оптимизировать.

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

Ключевые моменты:

  1. Размышляйте вслух. Позвольте собеседнику понять, о чем вы думаете, и направить ваши мысли в правильное русло.
  2. Задавайте собеседнику уточняющие вопросы, если вам что-то непонятно.
  3. Начните с худшего решения и затем улучшайте его.
  4. Какое бы решение вы не предложили, будьте готовы реализовать его в коде.

P.S.: я начал с решения со сложностью O(n2), а закончил с O(log(n)), и удовольствие от этого сложно передать словами.

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



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

Честно говоря, их кампус — это место работы мечты. Он потрясающий!



Поскольку я приехал рано, мне пришлось ждать на ресепшне. Я не тратил времени зря, повторяя структуры данных на GeekforGeeks.

Вскоре нас пригласили в переговорную и объявили, что нас (около 20 студентов) выбрали из более чем 11 тыс. претендентов.

После приветствия началось интервью.

Раунд первый


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

Ключевые моменты:

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

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

Одним из них был вопрос про то, как «реверсировать» связный список. Я читал про это на GfG прошлой ночью в автобусе и помнил решение частично. После некоторого размышления, я смог полностью объяснить весь алгоритм. Он попросил меня реализовать его на C++ и протестировать на нескольких примерах.

P.S.: Microsoft стремится к совершенству, это было заметно по каждому собеседнику. Каждый алгоритм и код подвергались тестированию.

Второй вопрос состоял в следующем:

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



Пусть каждый узел указывает на следующий и произвольный узлы.

Вопрос был с подвохом, поэтому пришлось хорошенько подумать.

Раунд второй


Этот раунд был посвящен преимущественно кодированию.

Я получил две задачи:

  1. Напишите код для определения высоты бинарного дерева.
  2. Напишите код для определения того, является ли бинарное/двоичное дерево деревом поиска.

Я быстро написал код, но потребовалось довольно много времени на устранение некоторых маленьких ошибок.

Обе задачи могут быть решены при помощи рекурсии. Вы можете найти решения на GfG.

Ключевой момент:

  • Написать код — половина успеха. Валидация — важная часть процесса.

Раунд третий


Это был финальный раунд и тестировать меня пришел старший разработчик, проработавший в компании более 8 лет. Интервью началось с нескольких вопросов по резюме. Собеседника заинтересовал один из моих проектов — алгоритм планирования процессора IGBTQ. Я подробно объяснил ему проект на доске.

Вторая часть была посвящена решению проблем. Он задал мне такой вопрос:

Имеется последовательность числе от 1 до n.

На каждой итерации (i) мы удаляем каждый i+1 элемент.

Например:

Пусть n = 20

На первой итерации мы удаляем каждый второй элемент.

1 3 5 7 9 11 13 15 17 19

На второй - каждый третий

1 3 7 9 15 19

На третьей - каждый четвертый

1 3 7 13 15

И т.д.

Числа, оставшиеся после всех итераций, называются счастливыми.

Задача - определить, является ли число "n" счастливым.


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

Затем собеседник задал парочку вопросов обо мне и о том, над чем я хочу работать. На этом интервью закончилось.

Ключевые моменты:

  1. Будьте честными в том, почему вы хотите присоединиться к компании. Изучите их текущие проекты и начинания (инициативы), и имейте четкое понимание того, чего от вас ждут.
  2. Перед собеседованием подготовьте четкие и ясные ответы о том, почему вы хотите работать в компании и почему компания должна нанять именно вас.
  3. Не говорите таких вещей как: «Я уверен в своих силах» или «Я трудоголик», бла-бла-бла. Будьте максимально конкретными и приводите примеры из реальной жизни в подтверждение своих слов.



Заключение


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

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

Как бы то ни было, то, что я потерял, я потерял на время, а то, что приобрел, приобрел навсегда.

Благодарю за внимание.