"Don't document bad code – rewrite it" (ktropin) wrote,
"Don't document bad code – rewrite it"
ktropin

Как устроиться на работу в Microsoft. Part 2

Начало рассказа здесь.

Cross-posted in my Blogger's blog: "Как устроиться на работу в Microsoft".

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

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

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

После этого прошлись по моему резюме, обсудили чем интересным занимался, как относился к возможности возглавлять проекты. Чему меня в универе учили, и почему я после специальности прикладная физика прикладная математика решил пойти на специальность “Control in Engineering and Organization Systems” в магистратуре.

Ну и после минут 20-ти общения “за жизнь” перешли на технические вопросы. Первый же вопрос был в каких случаях какую UI технологию стоит использовать WinForms или WPF. На тему когда лучше использовать WinForms я не смог привести много примеров, но зато качественно обосновал проблемы с производительностью. Еще парочку каких-то общих вопросов, в духе как я отношусь к ООП и паттернам и перешли собственно к задаче.

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

Как-то не очень все складывается… Надо “думать вслух” в телефон, и одновременно писать код на клаве, желательно двумя руками. Рассказал собеседнику, как я собираюсь решать эту задачу, и он мне предложил положить телефон, и просто писать код. А если у меня под рукой есть студия, то написать в студии, и потом скопипастить в лайв митинг, он ессно понимает, что в лайв митинге писать код еще менее удобно чем в ноутпаде. =))

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

В самом начале я спросил еще стоит ли мне беспокоится о плохих входных данных, или же полагаться что входные данные будут как описано в задаче. Он одобрил, что входные данные не проверять. А вдруг бы я написал не то что он хочет? Это кстати считается самой грубой ошибкой во время решения задач на доске, и если вы сделали совсем не то… скорее всего с вами попрощаются. Поэтому надо в начале завалить интервьювера уточняющими вопросами. Такой же совет я услышал от своего рекрутера перед финальными собеседованиями.

Когда я закончил – сбилдил код в студии, тестовые запуски в ней не стал делать, т.к. до конца собеседования оставалось минут 10. Скопипастил код в лайв митинг, там же написал пару инлайн комментов, и сказал что почти закончил, “осталось только xml-комментарии написать”. Вместе посмеялись, и начали обсуждать код.

Сначала он предложил мне пройтись по data-flows в моем коде, что куда и зачем входит, и где после этого вылезает. После естественно спросил как я буду тестировать код. Я предложил парочку простых комбинаций, парочку комбинаций на микширование случаев, ну и комбинации на переполнение. Т.к. входные данные мы не проверяем, я напомнил об этом, и сказал что плохой инпут тестировать не буду, но если надо было, обязательно бы проверил вот это, это и это.

На последок спросил про оптимальность моего решения. По процессору у меня было (1.5 +/- 0.5)*N итераций, а по памяти O(N). Ну я ему так и сказал – линейно по N, значит норм, в любом случае меньше одного прохода у нас ну никак не получится, так что это вполне нормальный способ. Он со мной согласился, и на этом его вопросы закончились (осталось пару минут до конца собеседования).

Я приступил к своим записанным 5ти вопросам, т.к. за этот час о новых вопросах у меня не было возможности подумать. И связь оборвалась. На телефоне было 0:59:59 – видимо у Мегалола ограничение на продолжительность разговора равно одному часу. Заокеанский товарищ позвонил, извинился, оправдался, что у него тоже было час ровно, и это не вина Майкрософт что связь оборвалась. =) Еще минут 5 мы обсуждали мои вопросы, пока они у меня не кончились. Потом он начал требовать, чтоб я еще задавал вопросы, а они ну никак в голову не лезли. Вот блин… подумает еще что мне компания и позиция не интересны… Так что я сказал, что я вижу что мы уже out of time, и я не хочу мешать работать – если что напишу вопросы по почте. “Не против?” – Не против.

У меня всегда по английскому были тройки везде где я его учил (по другим языкам как ни странно так же). Но сложностей как-то не возникло. Возможно из-за сотен часов веб-кастов от людей с американским пронансом, или от 10-ти сезонов Friends, или от небольшого общения с носителями, не знаю. Но послушать американскую речь хотя бы в веб-кастах стОит! И если нет возможности общаться - найдите подругу или друга по skype, и потренируйтесь. Заодно привыкните к телефонным помехам во время разговора на чужом языке, ну и акцент будет не столь ужасен как он мог бы быть. Кстати интервьюверы понимают потенциальные проблемы с языком, и нормально к этому относятся. Так этот товарищ говорил на английском быстрее чем я говорю на русском когда что-то надо быстро рассказать, потом спросил не быстро ли говорит, я сказал что можно чуть помедленнее, и стало совсем все ОК. =)

Приготовил себе ужин, перед едой чекаю почту, а там уже письмо “Good news!”. Молодцы, в теме письма пишут результат, не то что некоторые.. пока найдешь резалт в конце письма сердце уже выпрыгнет.

Судя по времени, письмо пришло через 25 мин после окончания собеседования – совсем молодцы! Я их уже люблю.

Читаю письмо – хотим личной встречи в Редмонде. Билеты сами купим, гостиницу сами оплатим, напоим, накормим, машину снимем, на бензин дадим (O_o они меня тоже любят). Ну вообще круто!! Ну а че? Ни разу не слажал, по требованиям прохожу, иначе бы телефонное не сетапили.

Каково было мое удивление, когда я задачу с телефонного дал на техническом интервью в мою компанию пару неделю спустя. И человек довольно быстро решил ее за N итераций по времени и O(1) по памяти. =))
Задачу не публикую, т.к. она довольно простая, и как я понял у каждого из интервьюверов есть по сотне задач, так что запоминать ее не имеет смысла.


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

Т.к. я поступил в магистратуру не забирая документов – мой диплом сразу никто не печатал, обычно их печатают где-нить к ноябрю. Но естественно когда он нужен, его не будет. Так и у меня. Январь месяц, а его еще нет. Точнее он есть, но его повезли на подпись в базовый институт, который в двух часах езды от университета. Туда он не доехал, а из универа он уже две недели назад уехал.
Человек который его вез появляется на работе на несколько часов в неделю, ну и поймать его не возможно. Мне обещают, что диплом будет максимум через 10 дней. Ну я соответственно оттягиваю время передачи этих документов на 3 недели (ну так, про запас). Копию диплома я в итоге получил через 4 недели. И почему-то оказалось, что под дипломом подразумевался диплом без приложения. Приложение к диплому вообще я увижу в конце 6-го курса, и оценки никто вбивать раньше времени не собирается.

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

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

Как оказалось, они на меня давили, т.к. надо успеть подать заявку на рабочую визу в начале апреля. Это та еще тема. В год выделяется приблизительно 50 000 рабочих виз, а за 5 рабочих дней приема документов на рабочие визы приходит порядка 150 000 заявок. В итоге визы разыгрывают в лотерее. В этом году если не ошибаюсь было 85k виз, 20k из которых полагаются мастерам или докторам американского производства. А оставшиеся 65k как минимум бакалаврам любых вузов. Получилось еще так, что заявку на меня зафайлили еще до получения оффера, и до последнего собеседования.

Т.к. я еще учился не на последнем курсе университета, я отправил в декабре резюме на летнюю стажировку, и без единого телефонного, заполнив только одну мелкую анкетку между новым годом и рождеством меня пригласили на очное собеседование в Москве. Команды разработчиков и рекрутеров ездят по крупным городам, и к этим датам соответственно подтягивают потенциальных стажеров из окрестностей. Информацию об этих стажировках можно в конце осени – начале зимы найти как на международном сайте стажировок, так и на российском сайте студенческих карьер. От себя порекомендовал бы отправлять резюме и туда и туда, для надежности.

Где-то в феврале месяце они осознали, что эплаюсь и на стажировку и на фулл-тайм, и не поняли как это возможно. Пришлось объяснять. В итоге они все поняли, и сказали езжай на собеседование на стажировку, потренируешься проходить собеседования. Так я и сделал. Правда во время приезда рекрутеров на стажировку у меня планировалась поездка на CeBIT. Написал письмо, и Майкрософт опять оказался очень supportive, и предложили мне пройти собеседование на стажировку вместе с набором народа на фулл-тайм в вин кор, который был на несколько недель раньше в московском офисе. Так и поступили.

Приехал я на собеседование на стажировку... (вероятно это будет так же кому-то интересно). Сначала у меня было интервью с рекрутером. Обсудили общие вопросы, что мне интересно в CS, основной язык, и поехали по техническим вопросам. Причем пред этим она предупредила, что она не технический специалист, это так.. общий ассесмент. После некоторых вопросов я начал бояться следующих технических интервью.

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

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

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

Во втором интервью меня вообще попросили написать функцию, которая определяет валидный ли IP-адрес по строке. Вообще ничего сложного в плане алгоритмов, просто смотрят на то, как ты мыслишь, и как тестируешь после. С ней я довольно не плохо справился, спросил про IPv6, получил ответ зависит от того что в спеках сказано, решай сам. Ну и в общем остались вдвоем довольны беседой как мне показалось. Кстати он же единственный кто спросил про мой опыт MSP за все время, но сильно не заострял на этом внимание. А на последок спросил интересны ли мне позиции PM и SDET на стажировке, или я только рассматриваю предложения по SDE (все таки на PM’ов они из не US берут, но оч. мало). Я сказал свои приоритеты, пожали руки и все. Недели через 3 мне написали, что меня не взяли. Потому что я просто тренировался здесь, или же просто потому что много лажал – не знаю. =)) Но этот опыт пользу безусловно принес.


За оставшееся время до моего собеседования в Редмонде мне еще написали кажется 3 команды, одна из которых была расположена в Копенгагене. Кстати в сентябре приедут туда набирать. Не плохое место, если вы не хотите уезжать из Европы.

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

To Be Continued...
Tags: microsoft
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments