August 12, 2009

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

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

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

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

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

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

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

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

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


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

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

To Be Continued...

August 8, 2009

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

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

Перед телефонным собеседованием я читал в инете, что интервьюверы иногда опаздывают со звонком, и их не стоит доставать своими звонками, если прошло 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 как минимум бакалаврам любых вузов. Получилось еще так, что заявку на меня зафайлили еще до получения оффера, и до последнего собеседования. 

To Be Continued...

August 4, 2009

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

Давно хотел написать о своем опыте устройства на работу в Microsoft, но как-то не складывалось.
На тему устройства в MSFT написаны гигабайты текста в интернете, но надеюсь мой экспириенс, как и этот пост чем-то поможет тем, кто будет устраиваться на работу в будущем. =)

После запуска http://msstudent.ru/ информация о карьере в Microsoft для студентов стала более доступна, но в любом случае не стоит этим ограничиваться даже если вы еще студент. Если вам интересна информация о карьере в Российском Майкрософт, то изучаем обновленный сайт на русском языке. Подробное описание позиций в Российских офисах начиная с технических, и заканчивая позициями имеющими косвенное к этому отношение здесь.
На мой взгляд в Российском офисе много интересных позиций, мимо которых техническому и бизнес человеку просто грех пройти мимо.

Я же поступил еще проще. Где-то в декабре прошлого года я понял, что хочу сменить работу, и зашел на глобальный сайт карьер Microsoft: http://www.microsoft.com/careers/. Решил, что экзотику наверное не стоит выбирать, и остановился на центре разработки в штаб-квартире. Хотя мыслишки были поехать в какую-то чудную страну типа индии-китая на годик, пока еще молод.
По ключевым словам нашел штук 5 интересных для меня позиций и отправил резюме на каждую из них (хоть они и пишут, что надо отправлять только один раз, и резюме буит в течении года у них в поисковике, и тя найдут). Отправил и забыл. Из-за всеобщей подготовки к Новому Году решил отложить поиск новой работы до возвращения людей в рабочий ритм жизни, где-нить до второй половины января.

В итоге.. в ночь перед моим отбытием в Москву после Новогоднего отдыха (12 Jan) получаю письмо от рекрутера "Kirill Tropin / Microsoft Wants To Talk To YOU!" с описанием позиции, и просьбой заполнить анкетку (Prescreen) если мне это интересно. Мол ты раньше отправлял cv на позиции в моем департаменте, но они давно закрылись. Вот позиция в Windows Server которая может быть тебе интересна. Если не интересно - напиши плиз в двух словах почему.
Позиция как и команда были довольно интересны для меня, что не могло не радовать. Немного меня смутили требования к этой позиции (инфа также была в инете, так что она вполне открыта):
  • A masters in computer science or related field (or equivalent).
  • At least 5 years of experience as a commercial software developer in C++ or C#.
  • Strong technical background in user interface development with either WinForms or WPF. Reasonable knowledge of systems management.
  • Deep understanding and passion for IT Professionals as customers.
  • Passion for quality. A core belief that all teams share the responsibility for the quality of the product.
  • Technical Leadership. Track record of building and leading product design and architecture.
  • Execution. Proven track record in contributing to project planning and delivering.
  • Can-do entrepreneurial attitude working in a team with a sense of purpose to delight our customers with industry leading, innovative, high quality releases.

Если что, на тот момент я был бакалавром в близкой к CS области, и опыта разработки коммерческого ПО у меня было года полтора. Остальные критерии у меня так же были не на все 100. Уже при личной встрече с моим рекрутером, она сказала что если ты чему-то не совсем соответствуешь в требованиям к позиции - не парься, тебя и так на нее могут взять. Это описание человека которого они хотели бы видеть и который бы идеально подошел на эту позицию.

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

Анкета состояла из вопросов в духе ФИО, сколько денег предлагать, чтоб я начал думать о переезде, когда я впервые влюбился в компьютерные технологии итд. Так же была большая секция с чисто-техническими вопросами по C++, C#, SQL, и тестированию, которое не тестерам можно было не заполнять. Вопросы были не очень сложные, некоторые сомнения возникли только с плюсами, на которых я продакшн код не писал никогда, а писал какую-то мелочь год назад. В итоге доставил к домашней студии плюсы, и все было ок. На SDET-вопросы решил не отвечать, чтоб не ухудшать мнение обо мне, хотя некоторый уровень адекватности по тестированию у меня был.

Помимо этого, у рекрутера была довольно большая подпись в письме, включающая несколько интересных ссылок.
Check out the JobsBlog!
View MY World / Hear Our Stories! (С тех пор конечно контент не слабо обновили)

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

На следующий день (ночь со вторника на среду) уже получил письмо, что все ОК с твоей анкеткой, дополнительное HR-интервью тож не требуется, хотим Tech Screen. Начали скедулить время, назначили на 22-00 МСК Пятницы (интервьювер был доступен начиная с 20-00 из-за 11-ти часовой разницы, но мне было удобней в десять). Во время назначения встречи у меня попросили номер телефона, и прислали ссылку в лайв митинг (ага! Значит что-то будут показывать и наверное попросят что-то написАть).

Мда.. осталось 2.5 суток, и я еще работаю на фулл-тайме (тогда еще была зимняя сессия, но кажется в эти дни экзаменов не было). "Шеф, все пропало! Гипс снимают, клиент уезжает!". За это время Кнута я пролистать ессно не успею, и стать совершенным в WPF/WinForms тоже не успею. =))
В итоге поискал в нете, что спрашивают на собеседованиях в Microsoft. Получил кучу боянистых задачек из разряда "как сдвинуть гору Фудзи" с которыми из-за олимпиадного детства проблем никогда не возникало. И ряд нормальных технических вопросов (в основном задачки на алгоритмы и структуры данных).
Вечер потратил на эти задачки, еще вечер на пролистывание не особо популярных паттернов проектирования, изучение принципов тестирования ПО, группировки тестов итд. Ну и продумывание что говорить по каждому из пунктов в моем резюме.
Продумал еще ответ на вопрос про самую тяжелую проблему с которой мне приходилось сталкиваться. В моем случае это была небольшая оптимизационная проблемка с Imagine Cup'а прошлого года. Чтоб сильно не сбиваться - напечатал ее на английском языке, т.к. этот вопрос спрашивают почти у всех.
Возобновление в памяти знаний технологий решил не проводить, т.к. не особо выгодное это дело за столь короткий срок.

Также в инете нашел несколько полезных советов которые встречались довольно часто, ну и часть из них была вполне очевидна. Вот самые важные:
  • Думать вслух (особенно по телефону молчать вобще как-то палевно).
  • После написания кода просмотреть его, рассказать как ты его будешь тестировать, и вероятно прогнать пару тестов вслух.
  • Задавать вопросы. О компании, о позиции итд. Если у тебя нет вопросов, значит это тебе не интересно. Поэтому заготовил 5 вопросов которые мне интересны, если по ходу ничего в голову не прийдет, и чтоб не забыть.

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

To Be Continued...