FAANG Interview. Бортовые заметки сообщества

https://t.me/FaangInterview

Last Update: 9/06/2021, короткая ссылка на этот док https://tinyurl.com/y5lz5k2h

Все материалы по подготовки мы перенесли в  GitHub faang-interview.github.io. Ребята, не стесняйтесь вносить правки в этот документ (через пул реквесты), это наша база знаний которую мы пытаемся держать максимально полезной.

Этот документ содержит правила сообщества, список подчатов и краткое описание структуры моков (пробных интервью с другими участниками чата).

Если вы только пришли в чат ознакомьтесь чтобы понять как у нас все устроено.

https://tinyurl.com/554acs8u

Список людей которые могут сделать рефер мы собрали в этой таблице https://tinyurl.com/5277t8x4 (если вы уже работаете в FAANG, добавляйтесь в список).

FAQ документ с часто задаваемыми вопросами и ответами на них у нас здесь  https://tinyurl.com/3jtfx4zn

Информация по поводу моков для новоприбывших.

Сообщество проводит мок интервью между участниками сообщества по алгоритмам, системному дизайну, мобильному дизайну, фронт энду.

Формат максимально приближенный к формату собеседования в ФААНГ.

Каждый понедельник-вторник мы открываем запись на новый сет. У вас будет пару дней чтобы заполнить форму на участие. Каждую пятницу начинается новый сет и длится неделю до следующего четверга (7 дней). Чтобы не пропустить подпишитесь на канал с анонсами:  https://t.me/FaangInterviewChannel.

В моке можно поучаствовать или его посмотреть. 

Как организованы наши мок интервью.

Как посмотреть публичный мок

Подкасты сообщества

Мы записываем подкасты с инженерами и участниками сообщества, подкасты доступны на всех популярных подкаст платформах под названием FAANG Interview Podcast и на ютуб канале Семы Сергея.

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

1. https://t.me/FaangInterview - это наш основной чат. Предназначен для обмена опытом, историй успешных и провальных интервью, здесь можно задать важные для вас вопросы относящиеся к теме. Его нужно держать максимально чистым и сфокусированным.

2. https://t.me/FloodInterview - Флуд чат. Если вас интересуют зарплаты, визы, помощь в поиске чего либо, или поговорить на темы, не относящиеся к прохождению интервью - вам сюда.

3. https://t.me/FaangTechInterview - Алго чат. Тут мы обсуждаем решения задач.

4. https://t.me/FaangMobile - Чат mobile разработчиков. Все, что относится к прохождению интервью на позиции iOS/android можно найти тут.

5. https://t.me/joinchat/FWkSuRBOyUnv-GBJyhK5qQ - Чат поиска партнеров для мок интервью. Если вы не успели записаться, или вам нужен специфический мок(не алго), либо вы сами любите собеседовать людей и давать бесценные советы - вам сюда.

6. https://t.me/FaangDataScience - Чат по Data Science.

7. https://t.me/resume_review - Тут вам по запросу сделают ревью вашего резюме.

8. https://t.me/sysdesign_interview подчат для моков по системному дизайну. Тут можно обсудить сис. дизайн и найти себе партнера для мока.

9. https://t.me/FaangProduct - подчат по Product management.

10. https://t.me/FAANG_USA - Подчат для общения на тему штатов, а также общения перебравшихся в штаты разработчиков.

11. https://t.me/FaangFrontend - подчат по подготовке к фронтенд интервью.

13. https://t.me/FAANG_DE - немецкий подчат по общим вопросам.

14. https://t.me/Behavioral_interview - подчат по поведенческим интервью.

15. https://t.me/FaangQAInterview - sdet, qae подчат.

16. https://t.me/NewYork_IT - ФААНГ чат Нью Йорка

Длинные интересные посты и истории прохождения

(#пробовался_в_фаанг и полезные мысли )

@matveevtut

Очень плюсую Седжвика, в своё время помог мне устроиться в , а там собеседования по сути мало чем отличаются от FAANG, так же 5 часов тебя мучают. Может только конкуренция поменьше.

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

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

А закончилась теоретическая секция вопросом по NP-полной задаче и придумыванием эвристик, её упрощающих. Вот это я не вывез.

Ещё могу посоветовать очень хороший курс Тима Рафгардена (Tim Roughgarden), это как бы конкурент Седжвика на курсере. Я теперь перед FAANG его прохожу, потому что у него много глубокого материала, который Седжвик вообще не освещает, как бы алгоритмы с другой стороны: рандомные алгоритмы, их анализ с применением теорвера, NP-полные задачи и эвристики.

@john_krohl

я уже второй год подписан на Leetcode. Премиум открывает все задачи, открывает сортировку алгоритмов по компании, открывает детальную инфу по каждому алгоритму (в какой компании спрашивался, и тд.) и еще кучу всего чем я пользуюсь редко. Можно ли обойтись без подписки? - ДА, она не обязательна. Удобнее ли с ней - Да, с ней намного удобнее. Влияет ли она на качество подготовки - Нет, все зависит только от тебя. Есть ли смысл платить премиум? - Все зависит от твоего дохода, если 35$ это для тебя большие деньги, то не стоит, вся инфа на leetcode легко гуглится за 5 сек. Если же 35$ это то сколько ты платишь за поход в кино или в ресторан, то на мой взгляд лучше один раз туда не пойти и купить подписку, пользы будет больше

 @sparfenyuk

живу и работаю в мюнхене, но в гугл особо не торопился. однако, на меня вышел рекрутер с предложением прособеседоваться на роль С++ инженера. отказываться было глупо, но отсутствие предварительной подготовки (4-6 месяцев? пфф) могло сказаться на моем успехе (спойлер - так и вышло). первое общение было с тем же рекрутером на общие темы: мой питч о себе об успехах в карьере, ее рассказ о проекте и в конце краткий блиц по вопросам CS. этот скрининг я прошел и оказался на техническом интервью с инженером гугла. попался русскоязычный парень, но общались мы все так же на английском. на этом собесе решали задачки. точно не вспомню, какие но уровня медиум, две штуки. между нами был пошарен гугл док, где он кратко описал условия задачи, а я - свой код. все бы ничего, но связь была с аудиопомехами, из-за чего было сложно иногда понимать собеседника. по итогам этого этапа предложили пройти следующее интервью уже с другим инженером. опять задачи были относительно несложными, но я чутка закопался в коде, из-за чего вторую задачу мы обсудили только устно. к сожалению, дальше я не прошел. но и такой опыт - тоже опыт.

мои выводы для себя:

- поддерживать свои навыки в актуальном состоянии, даже если не в активном поиске

- делать акцент на прорешивании вслух, а лучше на сервисах вроде pramp

@john_krohl

заранее напишу, что контракта у меня нет.

Живу и работаю в Мюнхене. Лет 5 назад на почту написал рекрутер из Facebook. Предложил пройти телефонное интервью. Сказал «повтори там алгоритмы, сортировку, обход дерева и тд» я за неделю повторил все и завалил интервью.  Мне сказали, чтобы я не расстраивался и в следующем году повторил еще раз. В следующем году мне никто не написал, а рекрутер не отвечал на письма. Тогда же я решил, что в любом случае нужно заниматься алгоритмами, но не так чтобы «повтори сортировку», а детально изучить весь аспект проблемы. Начал я с книги “Algorithms, 4th Edition by Robert Sedgewick”. Здоровенная такая книга, прочитал примерно 30% и понял, что книга сложная, и как-то чтение это не мое, решил решать задачи на Leetcode. Взял Easy задачку и не смог ее решить. Почитал объяснение и все равно ничего не понял. То есть сам код я понимаю, там циклы разные и рекурсия, но каким образом оно решает саму проблему не ясно. А как они вообще до этого додумались была чистая магия. Решил, что просто так решать задачки — это глупо, нужно все-таки сами алгоритмы выучить сначала, подписался на coursera на курс “Data Structures and Algorithms Specialization”. Этот курс оказался супер большим и невероятно сложным. Там правда были легкие темы, но домашки полностью выносили мозг. В общей сложности я потратил около 7ми месяцев чтобы полностью закончить этот курс. После этого я дочитал книгу Sedgewick и начал заниматься Leetcode. В какой-то момент мне опять написал Facebook, я с легкостью прошел телефонное интервью, меня пригласили на онсайт. Задачки на онсайт тоже были не сложными, но system design я полностью провалил. Через 6 месяцев Facebook написал еще раз и предложил срочно пройти собеседование на горячую позицию в Лондон. Я уже начал паковать чемоданы, потому что был 100% уверен, что пройду и провалил первое телефонное интервью, не ответив на элементарную задачку которую раньше видел, но забыл что и как. После этого я начал каждый день решать хотя бы по 1й задачке + повторять пройденные, так как они быстро забываются без практики. В какой-то момент мне написал Microsoft, предложили позицию в Праге, я прошел 3 интервью, 2 с задачами и system design. Они сказали что все супер, но позиция требует более высокого уровня system design. Сказали что напишут если будет подходящая позиция, до сих пор пишут. Написали опять из Facebook, спросили хочу ли я пройти интервью? Назначили в сентябре. Между этим написали в LinkedIn из Google и спросили хочу ли я пройти собеседование к ним. Я подумал что было бы здорово попрактиковаться в Гугл перед собеседованием в Фейсбук. Я в принципе уверенный в алгоритмах, но system design может подкачать, поэтому готовился именно к этому изучая все что мог найти. В итоге на phone screening я получил Hard задачу которую не смог решить =) Интервьюер сказал что эту задачу никто не может решить за 20 минут, и то что я не расплакался и не убежал уже его радует и пожелал мне удачи в дальнейших интервью. Потом было стандартных 5 интервью в офисе гугл. Было очень сложно. Я решил задачи, но 1 решил не самым оптимальным способом. В итоге рекрутер сказал, что вроде как норм, будут искать команду и только когда найдут, сделают офер. До сих пор ищут команду, открытых позиций буквально 2-3 и я на них не подхожу. Я пишу на Java, вакансии на С++. Я по-прежнему готовлюсь к собеседованию в Facebook и решаю Leetcode каждый день и параллельно читая CCI.

мои выводы для себя:

- (я это скопировал из предыдущего поста, полностью согласен) поддерживать свои навыки в актуальном состоянии, даже если не в активном поиске.

- Заваленное интервью это знак, что нужно готовиться сильнее.

- Лучше завалить 10 интервью, чем ничего не делать.

@mkotsabiuk

Не знаю как надо отвечать. Я отвечал следующим образом:

"Tell me about your recently implemented task." рассказал о своей одной из последних тасок которую считал наиболее подходящей, немного в красках и с восторгом

" Imagine you work with someone in a team with who it is really hard to talk. How would you collaborate with him and try to get consensus for some task?" Сказал что говорил бы с этим человеком через кого кто для нее авторитет, или выносил бы эти вопросы на митинг со всей командой

" Imagine you work in a company with a bad culture, what would you do in this situation?" сказал что не молчал бы а рассказывал бы начальству о том какая культура в компании, может он об этом даже не знает, если бы меня не слушали то присоединился поддержкой людей, которые разделывают мои взгляды

"Imagine you are a director of a company with a bad culture, what would you do in this situation?" Сказал что говорил бы с подчиненными чтобы узнать что им не нравится, старался бы решить эти проблемы, трансформировать компанию как-то, если бы не получалось, то приобщился бы помощью специалистов - соответствующих консультантов

" Describe how organized development process in your team." описал процесс как есть, только в красках и с эпитетами

@svolodko

Привет. Что ж, я отстрелялся. У меня был один вопрос на ООП, типа реализовать утилиту, которая ищет файлы по имени директории + списку необязательных входных параметров. Типа find в Unix. Это был кодинг, но не про задачки,а про что-то более базовое и часто встречающееся.

Второй и третий вопросы были классический LeetCode: один почти слово в слово Knapsack problem, второй - голый Topological Sort в направленном графе.

Эти три я ответил на хорошо либо даже отлично.

Последний был с Дев менеджером, на System Design, и там всё было плохо. Сначала на LP я бесконечно рассказывал, как я налажал тут, сорвал сроки там, и тд. А потом он попросил задизайнить мне Autocompletion functionality на  той же Google search. Я блин так и не прочитал заранее про этот кейс (хотя он у меня был буквально через один в списке не прочтение), я понял, что мне просто надо крутиться, как уж на сковородке, весь этот час, о есть полчаса. Потому что я как раз в SD очень слаб. Так что я продвинулся, как смог. Сейчас смотрю правильный ответ на этот вопрос: я многое сделал правильно, многое, сказанное своими словами, совпадает с тем, как положено отвечать. Но какие-то вещи типа шардирования и кэширования - я так и не мог предложить, по какому принципу хранить тот же финальный Trie , по которому статистика частот считается. То есть на низком уровне я предложил верную дата структуру, но когда речь зашла о больших объёмах, я поплыл. На доске нормальной схемы так и не получилось.

Резюме: систем дизайн завалил, с кодингом справился хорошо. Если команда скажет, что кодит хорошо, а остальному быстро научится, то будет мне оффер. Если же дизайн важен, то получу отказ. Ну и по BI я говорил довольно честно, и они могут решить, что чувак не соответствует их принципам. Это я вообще не уловил, подхожу я им или нет

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

Платформа у них собственная. Присылают ссылку и просят пройти по ней в течение недели. Как только прошёл - включается таймер на 90 минут, который никак не остановить. После 90 минут таймер перезапустят еще на 15 минут, и в это время нужно словами (письменно) описать оба решения, какова сложность и почему. Из удобного - вместе с первой ссылкой пришлют вторую, на демо-вход. Таким образом можно заранее освоиться с интерфейсом, что реально помогает, во время самого ассесмента голова не занята поиском нужной функциональности в интерфейсе и тд. Хотя всё равно я умудрился после написания кода первой задачки нажать кнопку Submit вместо Compile ))

@Chelioz23

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

Офер не получил, кулдаун 1 год. Вполне справедливое решение, о косяках позже.

Зато понял правила игры. И это был очаровательный месяц с кучей приключений.

Вводные: Network Development Engineer. С референсом. 9 лет опыта, 5 из них у вендора на хорошей позиции, веду проект.

Стандартный процесс: 1 технический on-call, 1 день onsite состоящий из 5 лупов и обеда. Без звонка HR.

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

Последние лет 5 ещё и просят код писать. Крутую штуку со скейлом сетевому создавать не надо, но репортинг и провиженинг – нужны каждому спецу. Python наше всё.

# Часть 1

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

Для выбора даты и времени прислали ссылку с календарями, а также опросник в догонку, по мелочи. Им ничего из моих дат не подошло, хотя я пытался забукать в рабочее австралийское время. Пикнули на 7:30. Боль.

Интервьюера было два, один «тень». Из Китая и Индии, говорят нормально, понятнее нейтив австралийцев. Судя по всему, меня опрашивал новичёк. Программа всем известная:

Чуть-чуть про бэкграунд и проекты со скейлом. Желательно с автоматизацией.

Routing protocol на мой выбор. Чел не смог сам в OSPF, так что захватили BGP, но это не по правилам. Очень простые вопросы уровня CCNP.

Как грепнуть что-то в линуксе, умею ли я в питон. Очень поверхностно.

Leadership principles. Расскажи историю, когда ты повёл себя адекватным образом, <деепричастие, описывающее один принцип>

Что не понравилось. Как специалист, по сетевой части – я 100% опытнее и дотошнее. У меня был ужасный опыт работы после такой халявы, но данные опасения рассеиваются онсайтом.

Пока я уточнял у собеседника вопрос - отвечал на следующие 5, но он не стеснялся их повторять. Боялся уйти от плана, не давал заработать экстрапоинты.

Как оценивать, если тебе назвали не 3 ожидаемых способа решения, а 5? При том, кандидат вежливо намекает, что вы ожидаете костыль из книжки, а не нормальное решение.

Это обманчивая простота. Просто такой инженер попался и у него всего 1 час на все темы. На онсайте всё глубже.

# Часть 2

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

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

После того HR две недели не присылала мне рекомендательное письмо для визы в Ирландию. Причём 3 раза просила мои паспортные данные, которые я каждый раз писал заново, с reply и указанием на то, что это повтор. Это самое стыдное, что позволил себе Амазон за всё время.

Виза делается за свой счёт. Очень важно: в анкете в причинах поездки правильный ответ “Other”, пояснением, что это interview. Ни туристическая и ни бизнес виза вам нужна. Уникальность всей ситуации в том, что компания обязуется покрыть все расходы, и от вас требуется меньше документов. Никаких билетов и отелей бронировать до получения этого типа визы не надо.

Делали 10 дней, до рождества. Дали на 30 дней, вместо запрошенных 5.

После получения визы вы согласуете дату. Вам высылают список интервьюеров. Вас направляют в тревел агенство, они же букают отель и билеты. В теории можно договориться и на неделю пребывания, просто они не оплатят отель на все дни. У меня было всего 2 дня, из-за болеющей супруги. Инструкций накидали, тупить негде.

Это праздники, возвращался 8го января, билетов нормальных нет. Летел люфтами с большой пересадкой. Отель прямо рядом с офисом, Clayton, с завтраком. Не жлобились, уже на этом этапе потратили на меня ~800 евро. Вы можете зарепортить любые reasonable расходы, типа ужина после интервью и транспорта в аэропорт.

# Часть 3

Onsite. 5 лупов по часу, 45 минут на каждую беседу, но кроме обеда я не отдыхал больше 1 минуты. Этот процесс написан кровью(потраченными деньгами), как пдд, и у каждого из собеседников есть своя роль по теме.

Обед – самое простое. Ланч-бади ведёт вас поесть в любое место за счёт компании. Этот этап не должен оцениваться, и напротив – даёт кандидату оценить компанию положительно. Халява и пофлудить. Любой из собеседников может даже булочку вам купить, и запросить компенсацию у компании.

Набор такой: Бекграунд и софт-скилы, Network Fundamentals, Routing, Automation, Design&HW/Tshoot.

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

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

Каждому из интервьюеров даётся один из 14 принципов Амазона, о применении которых должен рассказать кандидат. Просто заготовьте масштабные истории, где есть польза конкретно от вас, до 10 минут. Надо использовать star approach.

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

Офера я не получил, из-за технической части. Я самовлюблённый, но переживал всего 2 часа.

Мне позвонили и сказали об этом голосом, приятно. Причём дозвонились только на второй день, но слать отбивки – не по правилам.

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

Готовился, в самолёте, в силу семейных обстоятельств. Немного ещё, пока гулял с ребёнком в коляске. Вопросы были качественно другого уровня, нежели на звонке, но есть ответы, за которые мне стыдно:

1)  Слабо понял задание по выбору железа в DC фабрике и траблшутингу. Возможно это задание на рассуждения, но что там рассуждать, если все знают, что у них single chip коробки в DC. Поговорил о начинках железа, которое мне знакомо в вендоре.

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

Буквально затупил про mac-коллизию когда про САМ говорили. Сам же про хеши упомянул, но индус больно агрессивно прыгал по вопросам, чтобы осознать контекст.

Дебильный спич про траблшутинг в том же лупе. По сути, любой tshoot это дерево с вероятностями. Всё что там можно узнать – насколько масштабно я мыслю в пределах Ops.

2)  Забыл про особенности кластеризации RR в задачке по BGP. Лайфхак: OSPF и ISIS в трендах мертвы, к ним собеседник готов всегда хуже. Выбор протокола для беседы – за вами.

3)  Самый стыдный фейл: не смог внятно объяснить отличия list и tuple. С парсингом и моделью данных я вроде справился, не знаю проверял ли он правильность скобочек после беседы. Также возможно ожидали что-то более детальное про выполнение команды ls .

Anonymous. Part 1

Предыстория:

Подавался в Амазон через рефер от своего друга, выбрал Systems Development Engineer, Amazon, Ванкувер.

Через пару недель через почту со мной вышел на связь HR, который назначил время первого технического телефона. На первом телефоне было 10 минут Leadership Principles, затем systems/linux и после этого задача на кодинг. Через 3 дня пришло новое письмо от HR, где говорилось, что все ок, давайте проводить второй. На втором телефоне все аналогично первому в плане структуры интервью. На каждом из двух интервью у меня оставалось порядка 15-20 минут, для моих вопросов. Прошло еще 3-4 дня и мне написали, что приглашают меня на онсайт в Ванкувер. Запланировали дату, я начал заниматься визой. Для такого рода поездки, мне было нужно письменное приглашение от Амазон для оформления визы. В итоге за месяц они так и не смогли прислать приглашение, я уже даже не надеялся поехать. Но в очередной раз, когда я пинговал HR'ов, поставил в копию еще одного, с которым взаимодействовал в самом начале. И он предложил прилететь на хайринг эвент в Варшаву и там провести мой онсайт.

Варшава, Польша:

Амазон оплатил билеты и гостиницу, а также обещал компенсировать все расходы на еду и транспорт. Забегая вперед скажу, что я не стал заниматься возмещением. Амазон снял хороший отель Marriot, в 5 минутах пешком от другого отеля, в помещениях которого они проводили онсайт. В день интервью пришел на место проведения, немного пообщался с HR и для меня на все время была выделена одна переговорка.

Интервью:

1) Кодинг.

Сначала Leadership Principals на 15-20 минут. Затем задача на кодинг у доски. Не вдаваясь в детали, я себе ставлю за эту секцию незачет, так как фактически задачу не решил, долго выяснял все пограничные кейсы, сделал функции хелперы и что-то успел написать из решения. Ну и стоит добавить, что я фактически не готовился к кодингу, так как шел на systems и делал упор на linux и system design. Такое начало меня немного демотивировало вначале, но сумел собраться.

2) Менеджерская секция

Пришел хайринг менеджер той команды в которую я подавался и целый час гонял меня по Leadership Principles, я реально утомился придумывать истории на ходу или вспоминать заготовки. Но если бы я не сделал упор на LC накануне, я бы точно на ходу придумал абсолютно все истории. Почти все вопросы начинались с фразы "Tell me about a time when you ...". Они ожидают конкретную историю, рассказанную с применением STAR. Никаких гипотетических рассуждений, только история из прошлого. На некоторые вопросы, я отвечал, что не сталкивался с такой ситуацией и у меня нет истории. Тогда он доставал из копилки другой вопрос.

3) Systems/Troubleshooting

15-20 минут вопросы на Leadership Principles.

Очень абстрактная беседа, больше на здравый смысл и некоторую информированность о Linux. Просто рассказал, на примере а, как я работал SRE. В целом тоже самое описано в SRE Book от Google, что-то рассказывал оттуда. Прошла легче всего и очень непринужденно. Эту секции проводил инженер, который был на втором телефонном интервью, очень приятный парень. Я бы даже сказал, что это было больше похоже на простую беседу на кофепоинте.

4) Систем дизайн.

15-30 минут вопросы на Leadership Principles.

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

Например:

Я: мы могли сами готовить базу, заниматься шардированием и репликацией, или взять готовую DynamoDB в AWS.

И: отличное решение c DynamoDB, давайте использовать ее.

Тут я сразу понял, что от меня хотят. В итоге я собрал сервис из других сервисов AWS. Информацию о бронировании отелей по его же условию надо было брать во внешнем API. Мы не погружались в детали ни в одну из частей схемы.

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

Резюме.

50% всего интервью занимают Leadership Principals, вопросы выложенные здесь https://leetcode.com/discuss/interview-question/437082/Amazon-Behavioral-questions-or-Leadership-Principles-or-LP подходят на 100%, прям слово в слово. Можно смело готовиться по ним. Плохо пройденная секция по кодингу оставила осадочек, так бы я сказал, что все было неплохо.

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

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

О переговорах с Амазоном и Гуглом, расскажу в третьей части, после рассказала об онсайте с Гуглом.

Anonymous. Part 2

Предыстория:

Подавался через рефер от своего друга в Google, на позицию SRE. Сначала был init call с HR, которая спросила про опыт работы и пробежалась по тесту, где даются варианты ответов. Тест по Google/Python ответил на 100% правильно, по Linux Internals наверно процентов на 50%. Меня спросили по какому направлению я хочу собеседоваться SRE-SWE или SRE-SE. Я выбрал SRE-SE. После этого мне назначили телефонное интервью.

Начали с вопросов по Linux, дальше был кодинг и 10-15 минут ответы на мои вопросы. Кодинг приближен к рабочим задачам, надо было побегать по /proc/ собрать некоторую информацию и вывести результат. Google это называется practical coding, нужно написать аккуратный, читаемые код без багов.

После телефона прошла примерно неделя, мне позвонил HR и дала фидбек, что кодинг был отлично, а вот linux internal надо улучшать. Она поинтересовалась, как у меня продвигаются дела с Amazon, я сказал, что жду онсайта. После чего я примерно еще неделю ждал, когда назначат второй телефон, но это не происходило. Я пинганул HR и она снова связалась со мной по телефону и сказал, что хайринг менеджер принял решение не проводить второй телефон и сразу звать на онсайт. Далее меня передали другому HR и мы запланировали онсайт сразу через 2 дня после онсайта с Амазоном. На выбор мне было предложено 3 страны: Ирландия, Швейцария, Германия. Я выбрал Швейцарию.

В итоге сразу после онсайта с Амазоном, я перелетел из Варшавы в Цюрих.

Leadership.

25-30 минут leadership questions. Задают 2 типа вопросов:

 - Привести пример из прошлого, как я действовал в той или иной ситуации

 - И как бы я действовал, если ситуация случится в будущем.

После Амазона, показалось легко, на некоторые вопросы давал заготовки для Амазона.

Troubleshooting.

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

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

Интервьювер нарисовал на доске график (время выполнения запросов). Я задавал вопрос на счет того, какие инструменты у меня есть. Например, могу ли я, где-то посмотреть список инцидентов, которые создала тех. поддержка или еще кто? Может быть проблема уже известна и ей занимаются.

Есть ли у меня дашборд с релизами и могу ли я сматчить выбросы на графиках с временем релиза? И если да, то может быть дело в релизе и его надо откатить.

Есть ли у меня система трейсинга запросов, могу ли я попросить своего коллегу, выполнить запрос добавив какой нибудь query параметр в строку браузера, чтобы получить trace ID и далее отправить его в систему и получить расклад по latency на всех уровнях системы.  Интервьювер сказал, что это было бы слишком просто, поэтому продолжаем копать дальше руками.

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

Далее я предложил найти корреляцию между базовыми метриками на серверах и графиком latency. Пришли к выводу, что всплески совпадают с графиками CPU. Далее интервьювер разложил графики группы серверов с application на отдельные и представили, что на машине #3 потребление в разы выше, чем на остальных.

Я спросил, нужно ли мне убрать машину #3 из кластера, чтобы она не влияла на продакшен? Интервьювер сказал нет, так как 2 оставшиеся не справятся с нагрузкой.

Пошли на машину по ssh и начали смотреть, что там. Поговорили о тулзах Линукса, top, free, pidstat, iotop. Я предложил почитать логи приложения, там конечно все ОК. Базовые логи сервера тоже в порядке, с железом проблем нет.

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

Систем дизайн.

Пришел парень, тимлид, 10 лет в гугле. Попросил спроектировать key/value storage из которого только читают. Постановка задачи звучала ровно так.

Я начал задавать уточняющие вопросы:

 1) Какой размер ключей и значений, какой тип данных? key 1КB string и val 10KB binary

 2) Сколько всего пар будем хранить в нашем сторадже? 5 млрд.

 3) Какая нагрузка на чтение? 100к запросов в секунду.

 4) Какое железо у меня есть? 32CPU/256GB RAM/10 Gbit net/ 10 * 6 Tb HDD

 5) Какие к сервису предъявлены SLO? 95% req < 50 ms и availability 99.99%

Далее начали считать цифры, сколько всего нужно места для хранения такого объема, сколько сети. На это было потрачено больше всего времени, было разрешено юзать калькулятор в телефоне. В итоге вышло, что для ключей надо 51.2 Tb  и для значений в районе 500Tb. Затем начался разговор про то, как будем хранить на диске или в памяти. Далее речь зашла про время позиционирования головки жесткого диска и количество iops на каждый диск. Я предложил для старта хранить все в RAM. Расчеты показали, что при текущем железе, надо 2.3к серверов, предложенной конфигурации.

Далее сказал, что мы можем сэкономить потребление памяти и часть данных хранить на диске или использовать SSD, вместо HDD. Сказал про LRU кэш и на этом время закончилось.

Обед.

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

Linux Internals.

Пришел инженер 8 лет опыта в Google. Начал с простого вопроса про различие симлинков и хардлинков. Потом сказал, что есть веб сервер, который отдает файлики, нужно подменить содержимое файла и минимизировать простой. Я предложил использовать SIGHUP для reload конфигурации или использовать симлинки. Далее он копал в глубь и просил придумать еще способ. Я предположил, что можно подцепить к процессу с помощью GDB, открыть новый файловый дескриптор и с помощью системного вызова dup, заменить старый дескриптор на новый.

Затем поговорили про жизнь процесса, fork, exec, zombie process. Потом снова вернулись к веб серверу, как бы я в проде решал эту проблему, если бы писал сервер сам с нуля. Я предложил два варианта, использовать менеджмент порт для взаимодействия с веб сервером по gRPC и отправлять ему команды. И второй варианты был использовать etcd или подобную систему, чтобы мое приложение само ходило за актуальной конфигурацией. Было, что-то еще, но уже позабыл.

Большую часть в этой секции я позабыл и не смог восстановить в памяти, были еще вопросы про kernel/user space, сигналы и что-то еще.

Кодинг.

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

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

ОФФЕР:

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

Попросил мой фидбек по секциям, затем дал фидбек со стороны Google. Сказал, что хайринг менеджер передает мое дело в хайринг комитет. Так как это было преддверие нового года, то рассмотрение было назначено на 6 января.

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

В итоге, 10 января вечером, я получил официальный оффер и далее начались переговоры c Амазоном и Гуглом.

UPD: Google перед выставлением оффера сразу спросили цифры от Амазона и прислали сразу улучшенный оффер.

Переговоры после двух офферов от Амазона и Гугла.

После того, как Гугл выкатил свой оффер, я написал хайринг менеджеру из Amazon в LinkedIn, что мол так и так, Гугл дал такой оффер. Он ответил, что дайте нам время, мы сейчас улучшим наш. В итоге через 2 дня Амазон присылает улучшенный на 25% оффер.

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

В итоге Google еще раз апнул свой и я его принял.

РЕЗЮМЕ:

Теперь мое мнение такое, что если собеседоваться в FAANG, надо идти сразу 3-4 компании.

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

@matveevtut

На вопрос "как подготовиться к алгоритмам с нуля?" всегда отвечаю, что нужно первым делом пройти оба курса Седжвика, прорешав все задачи. Без задач толку будет сильно-сильно меньше. Если всё по графику проходить, т.е. каждую неделю с пн по ср разбирать лекции, потом переходить к тесту и задаче, то можно уложиться в то время, которое на курсере написано - 6 недель на первый курс и столько же на второй. В таком графике вполне реально совмещать с фуллтайм работой. Когда я проходил, у меня задача к неделе занимала обычно один целый выходной с утра до вечера.

Седжвик поможет раз и навсегда разобраться во всех нужных структурах данных и алгоритмах, их сложности и научит комбинировать несколько структур/алгоритмов для решения конкретной задачи (именно для этого и нужны домашние задания). Главный недостаток - там плохо раскрываются парадигмы типа Divide & Conquer, Dynamic Programming, Greedy Algorithms. Да, после курса можно легко применять изученные алгоритмы, но взять и придумать новый алгоритм на DP будет не понятно как. Тут приходит на помощь специализация Тима Рафгардена (https://www.coursera.org/specializations/algorithms), там материала ещё на 4 месяца. Я сейчас на последнем курсе из специализации, и пока не было ни одной hard задачи на leetcode, которую я не мог бы решить. Так же курсы Рафгардена учат мыслить абстрактно, доказывать корректность работы твоего алгоритма, писать псевдокод на бумажке. Это всё, имхо, очень ценные навыки для прохождения интервью.

Если у вас нет фуллтайм работы, то можно взять оба курса сразу, но лучше сначала убедиться, что можешь справляться с одним и остаётся свободное время.

Рафгардена - нет, там все домашки сводятся к тому, что ты реализуешь алгоритм как хочешь, прогоняешь его на огромных входных данных и копируешь ответ

А насчёт джавы - я бы посоветовал её не бояться. У Седжвика только минимальное её подмножество, которое понять очень легко. Т.е. не будет всяких ООП-паттернов типа FacadeFactoryAdapterProxy, фреймворков типа Spring. Ваш код будет сводиться к одной функции, решающей задачу. Напротив, курс позволяет в деталях увидеть, как реализованы некоторые части многих современных рантаймов, напрмер, оптимизация строк похожа на то, что есть в питоне.

@svolodko

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

Но при этом у Седжвика действительно нет почти ничего про DP, и про Greedy algorithms он только обмалвливается. И тут на подмогу приходит Рафгарден! У него же большой курс поделён на 4 маленьких, так вот, третий из них - как раз про DP & Greedy algorithms design paradigm. И лучшего объяснения этих подходов я не встречал, автор очень логично подводит к ним. И когда у меня появляется задачка, и я схожу не вижу возможности разбить её на подзадачи, то я начинаю мыслить ровно как он учил, слово в слово: What if we have the optimal solution?! How does it look? What if  little birdie could tell us the right choice?

Возможно, стоит совмещать Седжвика с задачами на литкод. Берешь лекцию Седжвика про деревья, прослушиваешь, чуть ли не копируешь имплементации, что Седжвик демонстрирует -  и вперёд на литкод по тэгу Tree. Начинаешь с лёгких, та же вставка в дерево, поиск в глубину, слияние двух деревьев, и тд. К слову, я таки забил на домашние задачки Седжвика с какого-то момента. Те же проблемы на литкоде более приближены к вопросам с интервью + там меньше воды + не надо ставить Java & IDE :) Хочешь - решай на питоне, хочешь - на C#.

@abcdmitry

Только вернулся с онсайта в Амазоне в Мексике. Видимо я один из последних, кто смог прорваться на онсайт.

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

Атмосфера очень доброжелательная, создалось впечатление, что они очень заинтересованы в том, чтобы я справился. Задачи уровня easy-medium, никакого харда с литкода не было.

Хотя я и не спрашивал, сказали, что бизнес-трипы в US / Canada идут вдовесок, надо больше общаться с командами лично.

Из приколов:

Интервьюеры видимо между собой обменивались впечатлениями, и заметили, что я подхожу к решению задач по схеме из CtCI. Поэтому третий интервьюер меня потроллил - озвучил задачу, без примеров, без ничего, и говорит "That's it, start coding now :)"

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

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

Спросил у хайринг манагера в лоб, почему отказали в SDM. Получил такой же прямой ответ, что нет опыта с построением систем масштабов Амазона. Я специально уточнил, повлиял ли мой английский или interpersonal skills? Он ответил что совершенно нет, с этим все в порядке.

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

Aleksei Eraskin

Когда задают вопросы не указывают к какому принципу он относится. И думаю на интервью уже не будет времени это быстро сопоставить. Я взял top 20 вопросов от Dan Croitor и список на литкоде (https://leetcode.com/discuss/interview-question/437082/Amazon-Behavioral-questions-or-Leadership-Principles-or-LP ) и их отрабатывал. Одна история может покрывать несколько LP. Я старался упоминать что вот такая то ситуация это пример такого то принципа если была возможность. Принципы пришлось наизусть выучить, поразмышлять над ними. Повспоминать свои жизненные ситуации. Думаю это было в целом полезно для меня даже в отрыве от интервью. Все равно на интервью не все пошло так гладко. Пришлось импровизировать местами. Пару раз я с учителями на italki и на pramp делал сессии по этим вопросам.

Т.е. в итоге по behavioral это такой параллельный процесс - ты готовишь/вспоминаешь свои истории по вопросам. Постепенно у тебя их набирается 10-20. Ты можешь про них долго говорить с кем то или сам с собой. Отдельно учишь LP принципы, а потом их сопоставляешь. И когда рассказываешь какую то историю уже можешь их соотнести.

@cepefagel

Я сначала попробовал писать рекрутерам в линкедин, все отвечали что сейчас есть вакансии в Таллине и подавайся через сайт. Я зааплаился сразу в 3 локации - Прагу, Таллин и Дублин. В Дублин почти сразу пришёл отказ. В Таллин через пару дней рекрутер вышел на связь и засетапил первый звонок, потом был второй звонок с менеджером проекта на который была вакансия. Сказали что ещё неделю будут общаться с кандидатами и потом решат с кем двигаться дальше, но через 1,5 недели вышел на связь другой рекрутер из Праги и засетапил первое онлайн техническое, а после него уже позвали на онсайт. Однако у меня Майкрософт стек и скорее всего это дало небольшой буст

Продолжение про сам онсайт и онлайн тест в Microsoft Prague, Dynamics 365 marketing team

Онлайн тест проходил как обычно - видео звонок через MS Teams длительностью 1ч с разработчиком из команды в которую я подавался (так вроде только у Майкрософта). Интервьюер попросил рассказать про мой опыт, потом спросил как мне будет удобнее решать задачку через онлайн тулзовину или пошарить экран с моей IDE, я вибрал второй вариант с Visual Studio. Сама задачка была классической - сделать reverse для односвязного линкед листа, фоллов ап вопрос был сделать метод иммутабельным (возвращать новый список, а не делать перестановки в исходном) и как бы я его тестировал.

Онсайт в Праге состоял из 4 раундов без ланча и систем дизайна, каждый длительностью 1 час

1) Интервью с Senior Service Engineer, самое короткое ( 40 минут ) и включало в себя небольшой тур по офису, интро про команду и проект, вопросы про опыт и мою роль на проектах, немного обсудили как было настроенно CI & CD на моем предыдущем проекте (у них использовались такие же технологии), было пару вопросов про Azure. Кодинг задания не было

2) Кодинг интервью с Senior Software Engineer, интервьюер прошелся по резюме и поспрашивал про технологии с которыми я работал, спросил про pros & cons  SQL vs NoSQL БД. Кодинг задание уровня медиум литкода - написать 2 метода: один  для сериализации дерева ( не бинарного, а дочерних узлов может быть много ) в строку и второй для десериализации строки обратно в дерево. Я немного поплыл с десериализацией, но после небольшой подсказки вроде справился.

3) Кодинг интервью с Senior Software Engineering Manager, начали со стандартного вопроса про опыт и прошлись по резюме. Задание - отсортиовать книги по частоте рекомендаций, в ходе выяснения требований оказалось что возвращать нужно не все, а только топ  К шт - вообщем не просто сортировка хеш мапы, а оптимальнее было заюзать Priority Queue

4) Coding/Behavioral с Principal Group Software Engineering Manager, опять вопрос про опыт и пару bh вопросов по типу чем ты можешь быть полезен Майкрософту и кем ты себя видишь через 5 лет) само задание - написать максимально оптимальный метод для проверки является ли число простым, но без заранее вычисленного массива простых чисел  

в результате получил оффер на позицию

Title: Software Engineer II

Level: 61

Основное это английский язык,  легко будет переехать в США через год, т.к. часть команды сидит в Сиэтле ну и если учитывать уровень/стоимость жизни то компенсация была немного выгоднее.

Подготовка: где-то чуть меньше 5 месяцев фулл тайм, но я не особо напрягался

2 курса Седжвика на курсере

немного ctci

курс grokking the system design interview

240 литкод задачек ( 40% easy, 50% medium, 10% hard )

@mkotsabiuk

Всем привет👋

Хочу продолжить инициативу написания о собственном опыте прохождения в компании вроде FAANG и поделиться мыслями по всему процессу начиная от подготовки и заканчивая первыми неделями работы в компании. Считаю это очень важно, поскольку это мотивирует других людей и если бы в свое время один человек не поделилась своим опытом то скорее всего этого чата не было б!

Когда я начал готовиться?

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

В целом по бэкграунду у меня следующие результаты:

0️⃣ курс на stepik

 

1️⃣ просмотрено большое количество видео на ютубе из которых я могу выделить два плейлисты  туть и туть

 

2️⃣ много статей в каждой из которых рассказывают как решать какую то задачу

3️⃣ leetcode (212 solved:  72.6% easy, 25%, 2.4% hard😅)

4️⃣ прочитал Grokking the System design interview  Там как по мне самое важное - прочитать словарь терминов, чтобы знать какие есть решения, и какую-то одну статью о построении дизайна, чтобы запомнить паттерн, а дальше все идет по накатанной. Но пройти весь курс также довольно просто.

5️⃣ Прочитал первые 150 страниц cracking the coding interview , оттуда я понял по какому принципу нанимают сотрудников в FAANG

Эмпирическим путем я пришел к тому, что ничто меня так не мотивирует готовиться к интервью как уже запланированное интервью. Из этого не тяжело сделать вывод: больше интервью ~ лучшая подготовка. И здесь понеслась:

❌ Bolt

Подавался в апреле 2019 без рефера. Как такого разговора с HR не было, мне прислали онлайн задания в котором надо было решить одну задачу за определенное время. В задаче надо было развернуть все слова в тексте. После этого мне назначили онлайн интервью. На нем сказали написать функцию в которую передается строка и функция должна возвращать true если в строке все уникальные символы встречаются с одинаковой частотой. Я написал код который работал и выполнял то, что нужно было, а после этого интервьюер сказал модифицировать решения так, что теперь функция должна возвращать true если символы встречаются с одинаковой частотой или только один символ может иметь частоту на 1 больше.

Результат: сказали лучше подготовиться и податься еще раз через некоторое время.

✅ Grab

Подавался в июне 2019 с рефером. Сначала был онлайн есесмент на котором было две задачи: раз и два. А потом три технических интервью.

На первом сказали написать функцию которая получает строку на вход и должна вывести эту строку в консоль следующим образом: одно слово вертикально, одно горизонтально и так пока слова не закончатся. Плюс были behavioral questions. На втором интервью дали две задачи Kth smallest element i missing element . Для каждой сначала надо было рассказать все варианты решения задач, а затем выбрать произвольный для реализации. И на третьем интервью был устный траблшутинг: упал какой-то сервис и я рассказывал что бы я делал, а на мои действия интервьюер отвечал это как-то помогло узнать больше о проблеме или нет.  Потом дал еще задачу в которой был

список http запросов в формате: ip машины которая осуществляет запрос и ip машины на которую осуществляется запрос и по этому нужно было построить граф всех вызовов. А затем в конце еще немного разговор о жизни.

Результат: дали оффер я отказался.

✅ Microsoft Belgrade

Подавался в августе 2019 без рефера. Сначала был разговор с HR. Затем онлайн ессесмент с простыми задачами. После чего позвали на онсайт в Белград. Там было четыре интервью подряд. На первом попросили рассказать о своем проекте и его архитектуру и дали задачу на проверку являются ли две строки перестановкой некоторого числа символов и задачу на нахождение всех подстрок строки А которые есть перестановкой символов из строки В. На втором интервью несколько вопросов по резюме и задача на восстановление бинарного дерева с матрицы предков. Задачи с третьего интервью я не запомнил. А на четвертом интервью были вопросы о жизни, обо мне и насколько я отвечаю культуре компании.

Результат: готовы были дать оффер, но я не захотел.

✅ Microsoft Prague

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

Сама процедура прохождения была следующей: разговор с HR, онлайн техническое интервью на котором дали одну решить задачу. Задача заключалась в том, что на вход дается список строк представляющих путь к директориям, надо было написать функцию которая создаст на компьютере все директории указаны в списке и соответственно директории которые есть на пути к ним. После этого пригласили на хайринг ивент в Прагу. Там было четыре интервью. На первом нужно было написать деадлок, говорили немного о многопоточность, затем перешли к дизайну классов для мессенджера в котором могут быть различные типы сообщений: текстовое, аудио и т.д. Второе интервью было на системный дизайн: дали задизайнить мессенджер для общения между двумя людьми. На третьем интервью были вопросы о жизни, мою мотивацию, опыт и тому подобное. А на четвертом была алгоритмическая задача.

Результат: дали оффер и я принял.

❌ Google

Подавался в сентябре 2019 без рефера. Написал на емейл очередного HR без надежды, что мне кто-то ответит, но все сложилось гораздо лучше чем я ожидал. Мне ответила рекрутерка и мы договорились об онлайн звонке. На нем она сначала рассказывала стандартные вещи, а потом задавала технические вопросы с вариантом выбора одного и несколько ответов. Не на все я отвечал правильно, но это не помешало получить техническое онлайн интервью. На нем дали задачу на динамическое программирование, в ней надо было сказать доскакает ли дракончик до финиша имея возможность скакать на любое расстояние от 1 до К и на пути есть кактусы на которые становиться нельзя, весь путь представлен булевым массивом, где і-тое значение true если есть кактус. После этого пригласили на онсайт в Мюнхен. Там было 5 интервью + обед. Список всех задач можно найти здесь.

Результат: не дали оффер (закончились наверное😄)

✅ Amazon

Подавался я в ноябре 2019. Меня посоветовал рекрутеру в LinkedIn знакомый парень. После этого рекрутер написал мне и сбросил онлайн задания в котором надо было решить задачу рази задачу два . Решать их приходилось на платформе от Amazon. Причем в конце давалось 15 минут для того что описать алгоритм и сложность решения. После этого меня пригласили на хайринг ивент который проходил в Киеве, поэтому ехать никуда не надо было. На самом ивенте было 4 интервью. Каждое интервью проходило следующим образом: 3-5мин на короткий интродакшин по адженде интервью и о себе, дальше 18-22мин. на 2-3 вопроса по их лидершип принципам, 20-25мин. на алгоритмическую задачу (одну) и в конце 3-5 мин на вопросы. Одно исключение из этих правил так это то, что на одном интервью вместо алгоритмической задачи было задания на системный дизайн - задизайниты gmail. Была задача на поиск количества вхождения некоторого target элемента в отсортированном массиве. Похожа задача здесь .

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

Результат: дали оффер, но я не принял.

А сейчас я побуду капитаном и поделюсь некоторыми мыслями:

📌 Всегда следует обсуждать зарплату, даже если у вас нет контроффера. Стоит понять, что зарплата - это далеко не основные расходы для компании на вас как сотрудника; в худшем случае вы ничего не теряете; стоит придумать что-то лучше чем просто написать: "дайте больше денег". Вот три статьи которые помогли мне понять это и много еще: раз , два и три .

📌 На каждом интервью скорее всего вас попросят рассказать о себе, это одна из немногих вещей к которым можно подготовиться заранее на все 100%, а не придумывать ответ на ходу.

📌 Больше всех кто мне мешал подготавливаться  это 🥁🥁 я сам. Если в начале я разделял задачи на легкие и тяжелые, то со временем я начал их делить на те, что я умею решать и не умею, это помогло проще относиться к темам которые раньше казались тяжелыми для изучения.

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

📌 Количество решенных кем-то задач на leetcode также особо ни о чем не говорит, более того, порой эта информация может быть даже вредной, поскольку узнав, что кто-то решил на leetcode условно 100 задач перед тем как начать проходить собеседования, может быть для вас барьером для того чтобы начать подаваться в FAANG раньше.

📌 FAANG компании если сомневаются в человеке то пользуются такой логике: для них лучше не взять хорошего сотрудника, чем взять плохого, ибо первое стоит намного дешевле чем второе. поэтому когда я проваливал интервью, то всегда думал, что я как раз тот квалифицированный которого не взяли из-за сомнений, а это как результат не давало унывать.

📌 Хорошо подумайте хотите ли вы в ФААНГ, ведь вместе с плюсами есть и много минусов. И если вы начнете готовится у вас не должно закрадываться сомнения стоит ли тратить на это время или нет, на этот вопрос вы уже должны себе ответить.

📌 Не все интервьюеры которые проводят интервью сами бы прошли все интервью заново.

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

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

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

Peace✌️

@Pirat1992

Предыстория

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

Неудачи

Бестолковые

Часть моей карьеры я был автоматизатором. И именно в такой момент я решил попробовать. Промониторив вакансии на сайте гугла я нашел вакансию плюс-минус под мой профиль и отправил своё резюме. На удивление, мое резюме чем-то привлекло рекрутера и он вышел на меня. Надо сказать, что я тогда придерживался той точки зрения, что готовиться к собеседованиям не надо. Если ты не можешь его пройти без излишней подготовки, то и работать в этой компании не получится. О том, что на собеседованиях в FAANGи спрашивают алгоритмические задачи, которые нужно отдельно практиковать, я не знал. Ожидаемо это был оглушительный провал. Я получил легкую задачку на деревья и решил ее с огромным скрипом и кучей подсказок. Ретроспективно я понимаю, что это была разминочная задача, на которую отводилось первые 10-15 минут.

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

Следующая попытку я осуществил через пару лет уже в Microsoft. Рекрутер сам вышел на меня и я согласился. Понятия не имею почему я опять не готовился. Возможно полагал, что меня спасет сертификация по C#. Честно говоря, о той попытке у меня крайне смутные воспоминания. Но опять все закончилось на телефонном интервью, причем крайне быстро.

Внезачетные

Такими я считаю участие в Google Code Jam и Facebook Hacker Cup. Это соревнования по спортивному программированию. На тех, кто попадают в топы, выходят гугловские/фейсбучные рекрутеры. В сумме я предпринимал пять попыток, но все закончились одинаково - проходом квалификационного раунда и вылетом в первом. Причем один раз я не прошел во второй раунд из-за пропавшего интернета. Было обидно, но тот проход был бы больше совпадением.

Комедия

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

Толковая

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

Летом 2017 года я начал готовиться чуть серьезнее - прошел этот курс по алгоритмизации, который позволил мне решать большее количество задач и заполнить пробелы в базе. Могу советовать его всем новичкам.

В начале 2018 года я услышал о том, что Amazon проводит hiring event. И вот к нему я готовился уже серьезнее - зарегистрировался на leetcode, стал регулярнее принимать участие в соревнованиях на codeforces и решал задачки еще на других сайтах. Но уровень решаемых задач был крайне невысок. На онлайн-отборе получил две задачи, одну решил, вторую нет. Спустя некоторое время меня все же пригласили дальше. Видно сначала пригласили всех, кто решил две задачи, а потом уже "остаток". Готовиться я продолжил теми же методами - codeforces+leetcode. Вдобавок нужно было подготовиться к двум новым аспектам: behavioral и system design. С первым мне здорово помогла жена - подобрав истории из моего опыта, которые соответствуют разным принципам, ценимым амазоном. Ко второму я готовился крайне мало, понимая, что нужно больше вытягивать задачки, ведь их будет больше.

Было 4 интервью - 3 на задачки + одно на system design плюс на каждом из них была behavioral задачи. Задачи были уровня около medium/easy, какие конкретно уже даже не помню, но я жутко волновался и запорол минимум полтора интервью. Получив ожидаемый отказ я не слишком расстроился ибо увидел прогресс. Но интервью я прошел таки плохо, поскольку на следующий ивент меня позвали только через два года.

Удачи

Подготовка

В моей подготовке наступила пауза, связанная с рождением ребенка, но постепенно через год я начал возвращаться к практике. Купил премиум на leetcode. Старался заставлять себя решать задачи по тем темам, которые у меня плохо получались. Довольно быстро я ощутил, что easy задачи для меня практически бесполезны, ведь решение в них зачастую очевидно и перешел на medium + иногда hard. К августу 2019 у меня было около 60-70 задач на leetcode и, полагаю еще столько же на других ресурсах. Кроме того, я прочитал знаменитую Cracking the Coding Interview, но она мне не дала ощутимой пользы. Возможно, если бы я добрался до нее до прохождения курса и неплохой практики, то мое мнение было бы другим. Гораздо больше мне помог этот канал. Здесь ребята хорошо объясняют как надо мыслить, чтобы дойти до решения и разбирают паттерны.

Microsoft

Я узнал о том, что в сентябре 2019 в Таллинне будет проходить Microsoft Hiring Event и подался на него. Онлайн-отбор состоял из 3 задачек. 1 easy, 2 medium. Я решил все три и достаточно быстро получил приглашение на собеседование.

Было снова-таки 4 интервью - 3 coding, 1 system design + немного behavioral. Одно из кодинг интервью было немного нетипично, ведь меня собеседовали не по алгоритмическим задачкам, а по многопоточности. Благо, интервьюер требовал не конкретных жестких знаний, а скорее общего понимания как это должно работать. Два других кодинга были medium уровня. В одном мне повезло, ведь такую задачу я разбирал в самолете по дороге в Эстонию:-). Последняя задача была easy/medium, основная сложность была в edge cases. Эту задачу я решил очень быстро. Собеседующий явно этого не ожидал, поскольку он не знал о чем со мной дальше говорить, о чем мне и сказал. В итоге остаток интервью обсуждал со мной детали работы операционной системы и процессора с потоками. К счастью, мне это было знакомо. System design, как по мне прошел плохо. Я сделал часть, но явно плавал в некоторых аспектах хранения и передачи данных. Плюс потом со скрипом рассказывал о банальной схеме криптования с открытым ключом.

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

Финальная подготовка

После произошедшего я продолжил активно готовиться, доведя количество задач к сотне (23 easy + 62 medium + 15 hard). Codeforces я практически отбросил, поскольку уже максимально привык к решению задач в напряженной обстановке. Вариативность же задач, которые не вдавались в ненужные дебри, страдала. Плюс leetcode давал возможность классифицировать задачи по темам и компании, имел площадку для обсуждения задач и я чувствовал больше пользы от него.

Google

В очередной раз решил помониторить вакансии на сайте и поотправлять резюме на некоторые из них. Неожиданно мне написал рекрутер относительно вакансии связанной с автоматизацией (Engineering Productivity в их терминах). Я не был уверен, что хочу туда возвращаться, рекрутер же меня успокаивал, что это теперь одна ветка с development и разницы нет. В итоге мы решили сначала пройти первое "телефонное" интервью, а дальше уже решать.

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

Буквально через пару дней мне сообщили, что можно двигаться дальше. Предстояло решить - хочу я дальше идти на позицию автоматизатора или все же девелопера. Девелоперу предстояло 3 coding interview, 1 system design, 1 behavioral. Автоматизатору 1 coding, 1 coding(easy) + testing, 1 automation testing practices, 1 system design, 1 behavioral. Не в последнюю очередь на мое решение повлияло то, что в случае автоматизации мне придется готовиться более разнообразно и вспоминать давно позабытые вещи. Поэтому решил двигаться дальше с development веткой. Onsite должен был состояться в марте в Варшаве, но из-за всем известных событий собеседование было перенесено в онлайн. Согласно рекрутеру, system design интервьюеров меньше, поэтому было решено, что у меня сначала будет 3 coding + 1 behavior. а потом уже, в случае удачи, 1 system design.

На первом интервью мне попалась задача, даже похожую на которую я не нашел на leetcode. Но уровень где-то medium/hard на DSU + bit operation. Довольно быстро я нашел способ как решать ее оптимально, но дальше почему-то из-за мандража я начал как-то сильно нервничать и в итоге плохо написал DSU, озвучивая вслух правильные идеи. Эмоции были смешанные.

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

Третье интервью. Medium задача с продолжением в hard на тему Trie. Hard не успел дописать буквально одну-две строчки, но всю идею успел донести.

Четвертое интервью. Неожиданно повторилась майкрософтовская история и задача была больше на параллелизацию и ее дизайн. Алгоритмической сложности практически не было.

Уже вечером со мной связались и сказали, что будут назначать system design. Я попросил себе две недели паузы на подготовку и прошел этот курс на 80%. Сам курс отличный и помог мне осознать многие вещи. На интервью же была задача, которая снова-таки не упоминается в топах и ее не разбирали. Но я следовал паттерну из пройденного курса и вроде бы неплохо прошел. Повезло в том, что мне не надо было рисовать, а собеседующий сам уже заготовил картинки. Я только писал текст по требованиям. Но это не правило, возможно вам придется рисовать мышкой.

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

Отлично, с менеджером связались, он рассказал про команду, возможности развития, задачи, я немного рассказал о том, что меня интересует. Впоследствии я узнал, что менеджер написал это письмо в поддержку.

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

Amazon

Спустя два года снова весенний hiring event. Онлайн-отбор немного видоизменился и теперь нужно было еще описать текстом алгоритм решения задачи и поотвечать на behavioral опросник. Задачи были medium уровня, обе связаны с темой islands на leetcode. Я решил обе задачи очень быстро и тем же вечером получил сообщение о том, что я квалифицировался дальше. К сожалению, из-за коронавируса собеседования проходили по видеосвязи и уже после гугловских собеседований. Как всегда у амазона все интервью начинались с behavioral части.

1. был system design сервиса, который очень часто попадается в топах и примерах. И вот тут пришлось рисовать мышкой. Было не слишком удобно, лучше потренироваться в случае удаленных интервью.

2. Алгоритмической сложности не было, нужно было задизайнить функцию по назначению близкую к production code. Тут я не всегда хорошо понимал, что он от меня хочет. Создавалось впечатление, что ему нужно конкретное решение, которое у него в голове, но при этом он был максимально вежливый и сам признавал, когда меня запутывал.

3. Хард на Trie. Здорово похожий на гугловский, поэтому я справился с ним достаточно легко.

4. Последнюю задачу я не смог найти на литкоде, но подозреваю, что easy/medium. Я сначала решил практически оптимальным путем через сортировку, потом озвучил оптимальный - с использованием max-heap, но не успел его закодить, в том числе из-за проблем с амазоновской системой и моим соединением с интернетом, на чем потерял несколько минут.

На следующий день я узнал, что все 4 собеседующих одобрили мою кандидатуру. Тут проще, чем в Google и не надо ждать одобрения от комитета, директора, так что результат тоже оффер.

Выводы

Тут постараюсь осветить субъективные вещи, которые были для меня не очевидны перед всем этим процессом, здесь не будет стандартного "готовьтесь усерднее".

Старайтесь как можно скорее отвязаться от решения easy задач. Да, это практика, да, это приятно решить очередную задачу и поднять свою статистику. Но вы просто теряете на этом время. Решать их приемлемо пока вы совсем не разбираетесь в этой теме. Как только начинает появляться понимание - переключайтесь на medium.

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

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

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

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

Pavlo Koshla

Собеседование было частью хайринг ивента Киевского. Специализация и левел не обсуждались конкретно. Но вроде как набирали опытных кандидатов. Офера пока еще нету.

Мой опыт: Java backend 8 лет. Последние 3 года работаю с распределенными системами в клауде.

Само интервью состояло из 4 раундов. Две алго задачки, сис. дизайн, OOP. В каждом раунде на саму задачку оставалось минут 20. До этого были LP вопросы. Советую очень серьезно отнестись к подготовке к LP.

Актуально для Амазона. Другие компании могут иметь другие процессы.

OOP - вариант Command/Strategy шаблонов. Нужно было реализовать управление роботом с возможностью просмотра истории команд и undo.

Очень длинное описание (строк на 200). Я начал решать как алго задачку (описание позволяло). Интервьювер не особо мешал вначале. Когда код был более менее готов, он попросил добавить гибкости: типа выполнение каждой команды должно возвращать определенный результат. Тип результата может быть разный. Нужна возможность легко добавлять новые команды со своим типом результатов. На этом моменте до меня дошло, что это OOP раунд, но времени уже особо не оставалось, поэтому я просто рассказал словами как бы я реализовал и добавил немного псевдокода/комментов.

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

Sys, design - Amazon photos (аналог Google Photos). 10м пользователей в день. Вопросы стандартные: как масштабировать, АПИ, модель данных, где и как хранить фото, как и что отдавать пользователю.  Интервью проводил менеджер, поэтому упор больше был на фичи чем на техническую часть. Не было особо времени копать глубоко (в 20 минут тяжело детально расписать).

Я предложил API Gateway, разделение upload / get на разные сервисы (upload обычно - длительная операция), координацию через Zookeeper, сервис метаданных (с базой метаданных), S3 как хранилка для фото/thumbnails.

Uploader вначале создает запись в сервисе метаданных, формирует путь к фото, аплоадид и генерит thumbnail. Thumbnails кешируются в отдельном сервисе (Feed, не успели до него дойти), в этом же сервисе генерится view для конкретного пользователя исходя из его подписок/предпочтений.

Getter возвращает либо конкретное фото по ID либо список thumbnails. Был вопрос "как возвращает", ответ: генерит presignedUrl на S3.

Feed хранит  thumbnails в отсортированном по времени порядке в памяти / снепшотит во внутреннюю базу.

Дальше особо не успели копнуть.

Задачка на поиск топ К анаграмм в файле / стриме. Нужно было очень детально расписать time/space complexity выбранного решения и других возможных вариантов решения.

Задачка на максимальное число запущенных виртуальных машин в определенный отрезок времени. На вход подавался лог файл с сообщениями о start/stop виртуалки, ID & timestamp. Были вопросы по внутренностям Java и просьба описать возможные проблемы реализации. Это был bar raiser (сам признался).

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

Подготовка.

В 2018 случайно увидел статью Сергея. Вдохновился и начал задумываться о попадании куда-то туда. Так совпало, что Амазон проводил хайринг ивент +- в тоже время. Я на него подался, но отсеялся на онлайн раунде. С того времени начал более мене готовиться по алгоритмам. Я не могу сказать, что я каждый день решал задачки. По личным причинам приходилось делать паузы в несколько месяцев. Всего подготовка заняла около года в период с октября 2018 по апрель 2020. В 2019 был оферы от booking.com (Амстердам, релокация, senior dev), EPAM (remote, Lead dev), Lohica (team lead), DIGI17 (Vancouver, релокация, senior dev), может еще что-то. Несколько провалов, в том числе онсайт Microsoft Tallinn (провалился на обоих алго задачках, сис. диз. и code review прошли более-менее). Но я всегда старался проходить интервью при любой возможности, даже если не был особо заинтересован в смене позиции/компании. Как по мне, то интервью это отдельный скилл, который требует практики.

Порядок:

львиная часть времени ушла на алгоритмы, +-9 месяцев

+- 2 месяца на сис. диз, но я также читал Designing Data Intensive Applications Reliable Maintainable отдельно, + у меня роли были более менее лидовские на основной работе, поэтому опыт дизайна нарабатывался и отдельно от подготовки.

+-месяц на LP, вспоминал реальные истории (не обязательно из IT) пытался натянуть их на leadership principles

Английский к началу подготовки уже был Advanced, в этом плане было легко.

Ресурсы:

https://www.pramp.com/ (возможность потренировать интервью бесплатно)

https://leetcode.com (мой профайл: https://leetcode.com/kshp/ )

https://leetcode.com/discuss/general-discussion/491522/dynamic-programming-questions-thread

https://leetcode.com/discuss/general-discussion/494279/data-structure-and-algorithm-study-guide

Курсы

https://www.educative.io/courses/grokking-the-system-design-interview

https://www.educative.io/courses/grokking-the-coding-interview

https://www.educative.io/courses/data-structures-in-java-an-interview-refresher

https://www.educative.io/courses/grokking-the-object-oriented-design-interview

https://www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews

Ютубчик

https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ   (сис.диз, очень рекомендую)

https://www.youtube.com/playlist?list=PLDN4rrl48XKpZkf03iYFl-O29szjTrs_O (алго, очень рекомендую)

https://www.youtube.com/user/purpongie (алго)

https://www.youtube.com/channel/UCmJz2DV1a3yfgrR7GqRtUUA (алго)

Книги

https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321 (настоятельно рекомендую)

@bon4ik

Всем привет,

делюсь опытом моего пути с 0 до оффера(процесс занял 8 месяцев, с активной фазой в 4 месяца)

Входные данные: 4 года опыта на галерах разного уровня(в основном на фронте), алгоритмы и структуры данных - полный ноль

Результат: решено больше 300 задач на литкоде, проведено порядка 40-50 моков, офферы с Оракла, Майкрософта и ТикТока, дальше собеседоваться не стал, нашел что искал )))

Путь выглядит приблизительно так:

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

2) Попытка в гугл и провал фон скрина. До гугла у меня не было моков, думаю это была основная проблема и сейчас бы у меня был шанс )))

3) Провал в амазоне. Самый отвратительный опыт работы с рекрутерами. С моей колокольни, хайринг в амазоне очень похож на украинский ЖЭК.

4) Майрософт. Интересный процесс, были как алго задачки уровня медиум так и сис дизайн на минималках.

5) ТикТок. 1 попытка была в лондон на СЕ. Была 1 задачка уровня медиум после которой рекрутер пропал, через некоторое время написал уже другой рекрутер с тиктока и предложил фрон-енд позицию в сингапуре(туда оффер и получил). Процесс был супер быстрый и супер прозрачный. Весь процесс занял 5 дней. 3 этапа интервью в каждом по 2 медиум задачки. 1 из этапов был супер интересный как для фронтендера: 1 задача была написать свой VirtualDom, 2 задача реализация промис ол с приоритетами.

Решил остановиться на майрософте, так как там очень интересный проект и тима.

Хотел бы выразить благодарность данному чатику и администрации. Нахождение в данном чатике дает +100 к мотивации и +200 к шансу получения оффера мечты.

Желаю всем оферов и удачи))

Oleksii

Мой опыт в Amazon (Vancouver), Google (EMEA), Facebook (London)

Входные данные на 14 апреля 2020 года:

Опыт:

8 лет (4 года на галерах, 4 года в продуктовой компании работаю над BigData)

Статус готовности:

- около нулевой

- 5 попыток пройти курс Седжвика (максимум доходил до 4 недели первой части),

- около 30 решенных задач на литкоде за промежуток около 5 лет (то есть без усиленной тренировки)

- опыт проектирования больших систем

Мотивация

С приходом пандемии и наблюдением того как государство "справляется" с ней было принято решение начинать готовиться к переезду в более развитую страну. Имея за плечами  опыт переезда сгоряча в Польщу на 12тыс. злотых (~3k euro(gross) - 2.2k euro(net)) - однозначно было понимание что переезжать на любые условия не хочется, Америка если честно - абсолютно не в моем вкусе на данном этапе жизни, поэтому выбор остановил на FAANG - EMEA + Canada.

Подготовка

Подготовку начал с Leetcode, сначала хаотично, постоянно сильно расстраивался когда не получалось быстро решить задачу и зависал над ней часами (иногда днями). Потом наткнулся на это сообщество и из документа нашел этот список - https://leetcode.com/discuss/general-discussion/522705/1000-leetcode-problems-within-a-year . Он реально все поменял. Пройдя по нему около 100 easy задач понял, что уже особо дальше заморачиваться с решением легких задач - смысла нет, перешел на medium из этого же списка. В конечном итоге прорешав 70-80 medium приобрел LeetCode Premium и начал таргетированно работать над темами/компаниями

ВАЖНО: когда сталкивался с задачей которую не мог решить, например https://leetcode.com/problems/course-schedule-ii/ , уделял большое количество времени понимаю как все таки работает алгоритм (книги, BackToBack SWE, Tushar Roy, удаление скопированной имплементации и решение с 0) - считаю что мне это очень помогло, как раз не концентрироваться на одной задаче, а использовать ее как пример для отработки алгоритма (в данном случае - нахождение цикла в графе)

Параллельно с этим прочитал в сообществе о foobar challenge - https://www.youtube.com/watch?v=UBdgGYp0G6I&ab_channel=RachitJain - успешно вызвал его) и начал проходить. Задачи там на порядок сложнее чем на Leetcode и часто требуют знаний в смежных областях (нахождение иверсионных матриц, конечные цепи Маркова, etc.), но лично я получил массу удовольствия (и несколько бессонных ночей) решая их. Основная цель - контакт от рекрутера из Google - все как и обещали в видео - после 3 этапа со мной вышел на связь рекрутер из Google.

На onsite к Amazon - я попал через прямой контакт рекрутера на hiring event, а в Facebook - просто отправив свое резюме через их сайт. Теперь по подробнее о каждой из компаний.

Итоговая подготовка после собеседований (сентябрь 2020):

Leetcode:
- 356 solved (135 Easy/175 Medium/46 Hard)
- около 50 моковых интервью в сообществе (ОГРОМНОЕ СПАСИБО!!! для меня это game changer)

Behavioral:
- работал в обратном направлении - выписал все ситуации, которые считал сложными,

успешными, и потом пытался их намаппить на LP Амазона.
-  супер полезным был Dan Croitor на YouTube.

System Design: 

 - https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ - супер канал, жалко новые видео не выходят

 - Grokking system design (прошел на 20%) -  мне абсолютно не зашло, очень все поверхностно, зря потраченные деньги (для меня).

 - Mock interview on Gainlo - для меня однозначно стоило своих денег

 - Whitepaper DynamoDB, Google Spanner, MapReduce, BigTable

 - Опыт дизайна систем для аналитики, больших данных на работу

Google

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

Phone Screen (45 min)

Прошел довольно таки легко, попалась задача на имплементацию binary heap - это мой любимый алгоритм, так что проблем у меня не вызвал

Virtual On-site

Google - единственная компания которая запланировала 15 минутные перерывы  между интервью, за что им огромное спасибо.

Структура:

5 Сессий - 1 behavioral (45 min), 3 coding and algo(45 min), 1 system design (1h)

Behavioral:

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

1st coding

Опять попалась задача с использованием binary heap, на этот раз на использование, а не имплементацию с follow-up вопросами про разные виды DFS (inorder, preorder, postorder)

2nd coding

Это была задачи на алгоритмы с прицелом на OOD, то есть сама задача довольно таки несложная, но нужно было раcпланировать какие объекты будут нужны, какие в них методы будут, и тд. Тоже в целом по ощущениям прошло гладко.

3rd coding

Я не записал задачу, а вспомнить сейчас не получается о чем она даже была) Только помню факт ее наличия)

System Design

Говорил и задавал вопросы почти целый час, по итогу не сделал финальный прогон через систему, и допустил ошибку (прокручивая потом) в back of the envelope расчетах, почему-то во время стресса на собеседовании решил что максимум есть сеть 1Gbps (хотя есть EC2 и с 10Gbps, u 25Gbps) - по-этому в дизайне получилось что нужно серверов в 10 раз больше чем  на самом деле.

Amazon

После моего письма, что да, я бы хотел поучаствовать в hiring event, рекрутер неожиданно для меня сразу прислал ссылку на ОА и сказал - "вперед, у тебя есть 7 дней".

Virtual On-site

Структура:

4 Сессии - 3 coding and algo + LP (1h), 1 system design + LP (1h)

Каждое собеседование начинается с LP, обычно интервьюер проверяет 1-3 разных принципа, которые ему назначили до собеседования.

СУПЕР ВАЖНО:

Все ваши действия в ответах на LP ДОЛЖНЫ содержать метрики до действия и метрики после действия. От первых 3ех интервьюеров получил несколько follow-up с конкретным намеком а-ля "И на что это повлияло?". Только после этого до меня дошло, с последним (Bar Raiser - человек не из команды, с 9 годами опыта в Амазон, так его идентифицировал) - таких follow-up уже не было

System Design

30 min system design - ничего большого, распределенного, без back of the envelope, самая сложная для меня была проблема потому что к такого рода вопросам я не готовился

30 min LP - единственное собеседование, которое началось не с LP

1st coding

30 min LP

Задача на графы (DFS + binary heap)

2nd coding

30 min LP

OOD дезайн, до этого не встречал такой задачи

3rd coding

30 min LP

Задачка на поиск кратчайшего пути  (BFS)

Facebook

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

Phone Screen (45 min)

2 medium задачи - одна на (you guess it) binary heap, вторая на topological sort. Даже не смотря на большое количество моков, очень сильно распереживался, чуть не завалил  первую задачу.


Virtual On-site

Структура:

4 Сессии - 1 behavioral (45 min), 2 coding and algo(45 min), 1 system design (45min)

Behavioral

Наверно для меня, это собеседование было сложнее чем в Амазоне. В Амазоне у них просто 2-3 вопроса и они ищут конкретные детали (STAR, метрики до/после, и тд) - в FB это было намного более живо, чувствовался высокий уровень эмпатии от интервьювера, но за счет  этого и намного сложенее, потому что не знаешь, куда приведет тебя твой ответ. Было все более органично и последовательно

1st Coding

1 easy + 1 medium

Простая  задачка почти первая в списке FB на Leetcode на строки.
Вторая на использование stack.

2nd Coding

2 easy

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

System design

Сложная задача, на grokking не видел и с моим опытом не особо пересекалась. Но по итогу смог довести дизайн до более менее приемлемого. Ошибки такие же как в систем дизайне с Google:

- не сделал финальный прогон через систему

- забыл про правило 20/80 для кеширования, напланировал 12ТБ кеша, но с подсказкой интервьюера исправился

Финальные мысли по процессам

Если я бы ранжировал компании по процессам, то тогда мой бы топ выглядел так:
1. Facebook

2. Google

3. Amazon

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

Google занимает второе место потому что время отклика было немного хуже чем у ФБ и в целом произошла одна накладка, когда мой интервьюер заболел, но меня не предупредили. Но это мелочи, в целом тоже только приятные воспоминания.

И Amazon - я бы назвал их холодные профессионалы) Четко, быстро, по делу, но ни больше, ни меньше. Никаких нареканий на работу нет, но и вовлеченности их в процесс я тоже не почувствовал.

Результаты

3 успешных собеседования из 3.

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

С FB сейчас получил формальный оффер на Е5 в Лондон, на данном этапе на согласовании конкретных цифр.

От Google получил очень позитивный фидбек, сейчас на этапе team matching.

Вместо заключения

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

Залог успеха - это постоянный труд, тренировки и расширение знаний. Эта группа - это супер ресурс без которого мой путь был бы намного сложнее, а особенно моковые собеседования!

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

Olga

Ну раз така п'янка, то і я поділюсь досвідом проходження. Сиджу собі спокійно на карантині тому жосткому, працюю, нікого не рухаю, рекрутерам не відписую ( якщо дуже дістають, то кажу що як матимете пропозиції з Майкрософта, Гуглах або Фб, то пишіть), нової роботи не шукаю, зона комфорту etc.

Тут, ні сіло ні впало, пише рекрутер з ФБ. Так і так, є позиція в Лондоні. Розіслала знайомим скрін, кажу от дожилась, Фб сам стукає в двері. Поржали. Ну але якось не годиться не спробувати свої сили якщо самі пишуть. Ну думаю ладно, хай дзвонить. Так пройшов перший phone з рекрутером 26.05. Спитала окрім стандартного (несподівано) про time complexity i worst case для парочки стурктур.

Ну я нутром чую, що інтерв'ю пройшло ок, думаю скоро назанчить phone screen, а я ні сном ні духом в ваших літкодах. Почала готуватись, взяла підписку premium на місяць. Розраховувала не пройти tech screen, то нащо мені надовше?

18.06 був initial tech screen.

Було пройдено біля 100 задач. Розподіл десь 60-35-5. Такоє, сама знаю.... В результаті  попались дві задачки medium. Обидві знайомі, але одну я при підготовці ніяк не могла правильно закодити, завжди щось вилазило. А тут з переляку закодила 🙈

Сиджу, чекаю відгуку, підозрюю що пахне жареним, бо ж ніби все було ок, і фолоу ап теж. Через два дні рекрутер каже, що все ок, запрошуємо на онсайт. Ну все, думаю.....приплили..нащо воно мені треба було....спокійно ж жила собі.

Ну але ми не здаємся. Купила вже річну підписку на літкод, переплативши за місяць часу в результаті, підписку на educative grokking і вперед.

Onsite був на 20-21.07. тобто три тижні на підготовку.

Ну що сказати, в кінці вже тошнило від всього і хотілося лише щоб це все закінчилось пошвидше.

До онсайту зроблено 150 задач. Розподіл 79-60-11.

1 coding - 2 medium, одну зробила з фоллоу ап корнер кейсом. Другу не до кінця встигла заімплементити проміжний метод, але то не дуже критично.

2 coding: 1 easy зробила, 1 medium такоє. Неоптимальний алгоритм розказала, а оптимальний не закодила, хоча розказала як має працювати. Ну от так з горем пополам типу assume we have this method, щось там кодила.

Sysdesign найстандартніше що могло бути. Рекрутер переважно мовчав а я думала, ну та скажи хоч щось.... Так я й балакала 45 хв. По одному з моїх уточнюючих питань він задав фолоу ап. А фолоу апом насправді було інше дизайн питання. Ясно що часу не було розказувати, то я так за 5 хв накидала. Фідбек був потім що це було outstanding stellar ітд 😍

Behavioural все стандартно. За винятком того що він все хотів почути, що моїми здобутками користувалася вся компанія а мої вікі пейджі то була інструкція для всієї організації на кілька тисяч людей. Короче, не склалось в нас ним розмови.

Фідбек прийшов через два тижні з пропозицією пройти фолоу ап біхевіорал з іншим інтерв'ювером. Але оскільки вони фуллі букед, то воно було аж через три тижні. Там вже розмова пішла краще, я навіть не помітила як пройшло 45 хв.

Далі через три тижні був фідбек і одразу команда, куди вони мене пропонують.

Загалом мені зайняло це все десь 3-4 години після роботи кожного дня і майже всі вихідні протягом десь 1.5-2 місяця. До фолоуап біхевіорал я вже не готувалась, пішла як є з тими самими історіями +-.

Лінки по дизайну:

1. Чувак говорить багато, розкрито багато тем, але як на мене забагато акценту на очевидних речах. https://m.youtube.com/channel/UCn1XnDWhsLS5URXTi5wtFTA

2. Чувак трошки кращий, але замало технічних деталей https://m.youtube.com/channel/UC-vYrOAmtrx9sBzJAf3x_xw

3. Офігєнний канал, але мало відео https://www.youtube.com/channel/UC9vLsnF6QPYuH51njmIooCQ

4. Educative.io grokking. Дуже класно допомагає з естімейшином, калькуляціями і загальною картиною.

5. Раднлмні відео по темах, які цікавили додатково.

Оце, називається, сходила на інтерв'ю, щоб перевірити себе - до якого рівня зможу дійти.... Тепер мушу релокейтитись 😂

Uber offer – iOS L4, USA

Всем привет! Я получил оффер от Uber и хочу поделиться своим опытом.

Подался через сайт без рефералов. Сразу ответили и назначили интервью. Фишка была в том что роль в команде Uber AI и в моем резюме есть пункты ML, Machine Learning.

Disclaimer

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

Всего 3 этапа интервью – OA, phone screening, virtual onsite.

OA

4 задачи на arrays на CodeSignal. Я решил 2.

Phone screening

30 минут обсуждали мой опыт и архитектуру на нынешнем проекте. 20 минут easy Leetcode.

Virtual onsite

- Hiring Manager Interview – behavioral с кучей технических вопросов по iOS и архитектуре.

- Algo & DS – medium leetcode with follow-up. Решил основную задачу, follow-up обсудили решение.

- Live coding – дали Xcode проект и сказали “Этот говно код написан джуном. Оцени код.”. Потом просили пофиксить недостатки которые я нашел и добавить новую фичу.

- Behavioral – в основном обсуждали архитектуру моего текущего проекта. Спрашивали что конкретно я имплементил.

- System Design – ООП, просили задизайнить популярную игру на 2-ух игроков.

Результат

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

Подготовка

- Очень lazy с апреля. Интенсив только за 2 недели до онсайта.

- Прошёл ~30 моков с людьми с этой группы. Задачи стал решать как орешки щелкать.

- Cracking the Coding Interview – к задачам готовился только по этой книге.

- Leetcode: 124 – Easy 74, Medium 48, Hard 2

- Behavioral – видео Jackson Gabbard, статья Dave Anderson: Interviewing at Amazon — Leadership Principles. Книжка CTCI, там хорошие советы по SAR стратегии.

- Architecture – прочитал кучу статей с разных инженерных блогов компаний. Grooking mobile interview. Изучил RIBs architecture. Прошёл 2 Мока – backend system design, mobile system design.

- Прошёл онсайт в другой компании, что очень помогло освоиться с форматом и вопросами интервью.

Контекст

- Senior iOS Engineer

- 3 years of xp

- Green Card

- Resume and LinkedIn are top level.

Вдохновление для прокачки резюме можно найти здесь:

github.com/darhonbek/resume_templates

Совет:

- Читайте док сообщества – там все есть.

- Если вы мобильный разработчик, то добавляйтесь на мобильный подчат @FaangMobile

Продолжу ли я делать моки? Реже, но да – сообществу надо помогать!

Peace to all, EPAM rocks!

@pavlo_andriiesh - Microsoft Offer Prague and others interview experiences

Друзья, получил оффер в Microsoft 🎉😱

Давно хотел отдать долг сообществу поделившись своим опытом.

Дальше много текста про то как я #пробовался_в_фаанг

Небольшая предистория. Как может кто-нибудь еще помнит, я ушел с работы чтоб фултайм готовиться к ФААНГам. В результате первые пол года просто бездельничал(путешествовал с семьей по Европе, отдыхал), а потом только начал серьезно готовиться.

Когда увольнялся думал буду пахать фул тайм по 8-12 часов. В реальности мозг не выдерживает и хочет прокрастинировать. На подготовку пошло где-то пол года, по 2-4 часа в день в среднем.

Цель подготовки была - 250-300 задач на литкоде, потом сис дизайн и бихейв.

В итоге набив около 300 задач взялся за сис дизайн и бихейв.

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

1. Все карточки Leetcode Explore + Leetcode Monthly Challenge  + все задачи которые я встречал в этом чате + все в Leetcode Discuss к фаангам.

Цель была 300, а в итоге получилось 520 на данный момент. Но после 300 я уже спокойней решал литкод и начал смотреть сис дизайн и подаваться в компании, паралельно прорешивая литкод.

С таким подходом, нигде кроме Google у меня не было никаких проблем с кодингом. Все задачи сразу были понятны и оптимальный алгоритм понятен. Думаю 500 задач это оверкилл для большинства ФААНГов

2. Сис дизайн
-
https://www.youtube.com/c/SystemDesignInterview/videos
-
 https://www.youtube.com/c/TechDummiesNarendraL/playlists - смотрим сисдизайн

- https://www.youtube.com/c/SuccessinTech/playlists - смотрим сисдизайн

- https://www.youtube.com/watch?v=ZgdS0EUmn70&ab_channel=JacksonGabbard

Кроме этих купил https://www.educative.io/courses/grokking-the-system-design-interview/

Еще много читал по самым разным вопросам сис дизайна которые не полностью понимал.

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

3. Behavioral

- https://www.youtube.com/c/DanCroitor/playlists - must have

- https://www.youtube.com/c/JeffHSipe/playlists

- https://www.youtube.com/watch?v=PJKYqLP6MRE&ab_channel=JacksonGabbard

Я создал себе гугл док с вопросами (40-50 вопросов) и дал ответы по STAR подходу.

Уровень моей подготовки по поведенческим вопросам я не могу оценить обьективно. Разные интервьюверы могут по разному оценивать один и тот же ответ.

Пробы:

Bloomberg - Senior Javascript Engineer in Buy Side Trading Team - London

- coding 2 interviewers, 1 task + followups (mid-hard, binary search) (points and intervals)

- coding 2 interviewers, 2 tasks (mid, JavaScript callbacks chains, mid - hashmaps, early termination, backtracking)

- behavioral and talk about experience 2 interviewers(team lead and manager)

- behavioral with group manager from NY

- behavioral with a recruiter

Feedback: Coding - strong hire. Behavioral - didn't provide enough teamwork examples

Result: no offer

Мой фидбек: Это был первый онсайт в крупной компании. Все кодинг закрыл на ура, сис дизайна не было. Бихейв не прошел. Им показалось что я недостаточно раскрыл свой командный дух. Инженеры из команды - очень приятные, опыт позитивный.

Amazon Middle Mile Team (Vancouver)

Online task - 2 questions

Onsite:

 - behavioral(30min)  + system design (10min) - awful microphone and accent

 - behavioral(25min) + OOD - design a vending machine

 - behavioral(25min) + coding: detect and compare set of anagrams (sort + trie, mid+)

 - behavioral(20min) + coding: meeting rooms (sort and 2 pointers)

Feedback: Coding, OOD, Behavioral - good. System Design - bad

Result: no offer

Мой фидбек: На первом же раунде решилась судьба. Интервьювер с ужасным китайским акцентом и с еще ужаснейшим микрофоном порешил мои надежды попасть в Амазон. Мне приходилось по 2-3 раза переспрашивать его вопрос, и так и не поняв его отвечать на тот вопрос который я пробовал угадать. В итоге я отвечал вообще не то что он меня спрашивал. Из-за этого бихейв растянулся на добрых 30-40 минут. Потом сисдизайн начался без доски, я будучи отлично знаком с вопросом задизайнить Youtube или Netflix не смогу ему ничего обьяснить, так как не понимал его фоллоу ап вопросов. Худший експириенс. По прошествии времени я очень рад что не попал в ту команду, которая считается одной из худших в Амазон. Читал много про нее в блайнде, как люди бегут оттуда после 3-6 месяцев.

Google SWE Warsaw

- phone (probability, a deck of cards, find the probability to win/lose a game, mid-hard)

- phone (meeting rooms: sort + heap, mid)

Onsite:

- coding: similar to implement calculator(hard)

- coding: javascript - reimplement PromiseAll(med)

- coding: design class for clicks on a pane + count click on some area, use quadtree (hard)

- system design: design configuration management system

- googleyness

Feedback: system design and googleyness was perfect, 2 coding rounds were below average

Result: no offer

Мой фидбек: Несмотря на топ фидбек по сисдизайну и гуглинес, я завалил 2 из 3 кодинг раунда. Абсолютно заслужено no offer. Очень приятные ребята, очень позитивный опыт.

Klarna Senior Software Engineer (Berlin)

- recruiter

- 15min logical reasoning test (online)

- recruiter

- 15min logical reasoning test (online)

- behavioral(1hr)

- coding(1hr) 2 tasks(medium, hard)

- system design (1.5hr) - design new feature for Klarna

- team matching (Authentication team)

Feedback: all rounds were exceptional. Top performance on system design and coding.

Result: Offer. Declined.

Мой фидбек: Очень приятный процесс и ребята. Очень позитивный опыт. Но несмотря на то что все раунды я засаксесил на 100% (по фидбеку и моим ощущениям) оффер был ниже моих ожиданий. Здесь было сложное решение, хоть офер и меньше чем фаанги но все равно отличный для свежепонаеха в Берлин, чуть выше среднесиньерского по Берлину. Но потом у меня был оффер на те же деньги только net в Украине. Решил не принимать, дальше пробоваться в фаанг.

MS Senior Software Engineer (Prague) - Microsoft Teams

- call with the manager (success)

Email from the recruiter that the position is moved to the US.

Result: no offer

Мой фидбек: Был колл с менеджером, а потом раз и все застыло на недели 2-3. А потом оказалось что позицию перевели в Штаты.

MS Senior Software Engineer (Prague) - App Center or Azure DevOps

OA via Codility: (3 tasks for 3 hours): React, Algo, Algo (100%)

Onsite:

- beh (15min) + front end coding 45min

- beh 60min

- beh (15 min) + coding 45 min

- beh (15min) + system design 45min

Result: Offer

Мой фидбек:

Все прошло отлично, через 3 дня позвонил рекрутер и поздравил с оффером.

Сейчас еще есть два паралельных процесса c ФБ и МС, потому пока решения не принял.

Благодарность Сергею за этот чат и всем кто здесь есть. Это комюнити очень полезное и всегда мотивирует. Невозможно переоценить того сколько полезной инфы здесь можно получить. Каждый(почти) пост добавляет ценность чату.

Anna, Декабрь 2020 (Google, Amazon)

Привет!

Моя очередь делиться историй о том, как я проходила квест #пробовался_в_фаанг

Написала про подготовку, моки, опыт собеседований в Amazon и Google.

TLDR я начала решать задачи с апреля. На момент собеседований у меня на литкоде было решено где-то 460 задач, 95/275/90 и я прошла около 130 моков

Немного про мой background: я закончила университет 5 лет назад, после чего работала (примерно пополам) в академии наук научным сотрудником и в индустрии аналитиком. Спортивным программированием никогда не занималась, опыта в решении задач у меня было немного, как и опыта написания продакшн-кода.

Подготовка:

Решение задач

Я начала решать задачи с апреля, потому что с этого момента работа стала в удаленном формате и появилось время по вечерам. Решала на python. Весной я еще не собиралась никуда подаваться и решала задачи just for fun. Стала решать daily challenge на литкоде, каждый день решала минимум 1 задачу. Я быстро втянулась и мне стало нравиться решать :) По выходным я решала больше задач и брала более сложные.

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

После решения читала discussion (оттуда я почерпнула много "фишек" и идей о том, как писать код короче и элегантнее). Если не получалось решить задачу, то я читала решение, закрывала его и пробовала писать сама. Время от времени обсуждала задачи с друзьями, иногда они мне объясняли то, чего я не понимала из прочитанного.

Предварительно я не стала смотреть курс по алгоритмам (хотя у меня было очень хороший курс в университете), но параллельно я много смотрела коротких видео на ютубе по разным темам (особенно про графы) и читала про конкретные алгоритмы (например есть отличное объяснение двоичного поиска от Павла Маврина). Еще подглядывала в учебник "Алгоритмы" авторов Дасгупта С., Пападимитриу Х., Вазирани У. Кроме этого я смотрела мок интервью в записи на ютубе и читала истории людей про собеседования.

Через пару месяцев решения литкода я начала читать всю алгоритмическую часть книжки Cracking the Coding Interview и прорешала все задачи из алгоритмических глав. Часть из них были на литкоде, но большей части там не было. Мне было сложно решать задачи, не видя прогресса (визуально), поэтому я выписала на листок бумаги все номера задач (их получилось около 70) и зачеркивала решенные. Еще я нарисовала длинный прогресс бар с 70 клеточками и в нем тоже зачеркивала -- "змейка" доползла до конца где-то за полтора месяца.

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

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

На момент собеседований у меня на литкоде было решено где-то 460 задач, 95/275/90 (по ощущениям это много, можно было остановиться раньше)

Моки

В моках я начала участвовать с июня и тоже быстро втянулась :) Сначала я делала моки с друзьями, потом попробовала pramp и interviewing io (мне не очень понравилось, хотя на pramp иногда попадались сильные партнеры), через месяц мне рассказали про этот чат и дальше я делала моки в основном тут. Помимо моков в чате я делала моки с друзьями из фаанг и похожих компаний, в общей сложности таких моков было около 10.

Моки у меня быстро вошли в привычку -- каждый день после работы я записывалась на мок (и сейчас мне этого не хватает). Тут я познакомилась с большим количеством классных инженеров очень разного уровня, многие делились своими историями, были публичные моки и много всего еще. Чат очень вдохновлял :)

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

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

Так же я попробовала провести 4-5 мок интервью подряд, чтобы узнать насколько сильно я устану в день интервью (спойлер -- это оказалось тяжело)

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

К моменту собеседований у меня было около 130 моков (если вы готовитесь, то столько не надо :) достаточно пары десятков, наверное)

System Design

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

Основное, что я сделала -- прочитала книжку "Designing data intensive applications" Мартина Клеппмана. Она мне очень понравилась, я читала с удовольствием. На это ушло около полутора месяцев с сентября по октябрь. Читать параллельно с решением задач, с почти ежедневными моками и с работой, было сложно, получилось не с первого раза (я начинала пару раз летом, но бросала).

Здесь тоже помогла визуализация и разбиение на подзадачи. У меня была бумажная и электронная версии, читала я в основном с экрана, но в бумажной версии передвигала закладку (и тоже выписала себе все главы и зачеркивала их). Я решила для себя, что каждый день буду передвигать закладку хотя бы на 10 страниц вперед. Иногда хотелось дочитать тему, потому что было очень интересно, тогда я читала больше. Прочитанное я тоже старалась обсуждать с друзьями (которые конечно все уже знали и не понимали моего восторга от вновь полученных знаний =))

Кроме прочтения книжки с кабанчиком, я посмотрела несколько моков по дизайну на ютубе, там же посмотрела несколько случайных разборов систем, прочитала пару первых уроков в Grokking the System Design Interview, полистала репозиторий system-design-primer, но и то, и то мне было не очень понятно до прочтения книги. А после прочтения я не успела вернуться к этому, хотя стоило бы.

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

Behavioral

Я готовилась в основном по Leadership Principles амазона. Прочитала их несколько раз и  прочитала статью на медиуме, которую уже много раз рекомендовали в чате (статья отличная! После нее стало понятно чего ожидается на этом собеседовании).  В интернете легко найти примеры вопросов, который могут задать, к тому же рекрутеры присылают их вместе с материалами для подготовки. При подготовке мне помогло известное видео Jackson Gabbard, и еще несколько случайных видео по запросу behavioral interview. Поняв примерно что будет происходить, я подготовила ответы на возможные вопросы: вспомнила истории с работы, попробовала для себя их рассказать так, чтобы было емко и понятно какие принципы в них проявляются. Убедилась, что у меня есть по крайней мере две истории на каждый из принципов. Потренировалась делать это по методу STAR. В процессе подготовки я упустила, что при рассказе о результате нужно также сказать какие выводы я сделала на будущее. Про это тоже стоит подумать заранее

Подача заявок и собеседования:

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

Реджекты

Подавать я стала во много разных компаний, почти всегда сразу приходил отказ или вовсе не было ответа (например в apple, revolut, booking, tik tok, unilever, spotify, bloomberg, ibm и тп).

Facebook | Reject

Несколько лет назад я подавалась сама через сайт, но со мной не связывались. В этот раз попросила меня пореферить на вакансию Data Scientist, мое резюме понравилось, рекрутер предложила созвониться. В процессе разговора спрашивали про мой опыт, рассказывали про вакансию, попросили придумать как бы я оценила важность фичи Х. После разговора пришло письмо с отказом и кулдауном в 12 месяцев. Через несколько месяцев меня пореферили на позицию SWE, но пришел отказ по резюме.

Amazon | Offer SDE II, London

Весной меня пореферили на позицию Data Scientist, пришел отказ по резюме. Через несколько месяцев меня пореферили на SDE позицию, со мной связались и предложили пройти Online Assessment.

--- Первый этап

Он состоит из 2х частей. Сначала дается 2 задачи на hackerrank на 105 минут, кроме написания кода в них нужно словами описать решение и оценить сложность. Сами задачи уровня medium, не сложнее, у меня на обе ушло около часа. Решать их довольно стрессово в том смысле, что условия сформулированы очень длинно и запутанно, нельзя копировать/вставлять текст, если это пытаться сделать, то возникает попап о том, что это сообщат твоему рекрутеру и тп.

Вторая часть -- поведенческие вопросы с вариантами ответа. Заняла у меня минут 20-30, для меня довольно непривычный формат.

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

--- Второй этап

Собеседование с инженером. Состоит из алгоритмической задачи и Leadership Principles. Собеседование длится час: первая половина (да, половина) -- поведенческие вопросы "Tell me about the time...", вторая половина -- задача. У меня была очень популярная medium задача с литкода. Я забыла крайний случай, но интервьюер подсказал.

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

--- Третий этап

Виртуальный онсайт, состоит из 4х часовых собеседований, проходит в один день. 2 часа интервью + полчаса перерыв + 2 часа интервью. Материалы для подготовки к нему мне прислали за 2 недели. Какие именно будут собеседования и в каком порядке Амазон не сообщает, просто говорит что будут технические интервью и просит почитать Leadership Principles (LP). Во всех собеседованиях интервьюеры строго следят за временем и на техническую часть больше 30 минут не дают. В моем случае было так:

* 1ое собеседование: первая половина LP, вторая половина system design. Очень популярный вопрос, ни в какие детали интервьюер не углублялся, я успела совсем поверхностно ответить. Задали пару фоллоуап вопросов.

* 2ое собеседование: первая половина LP, вторая половина ООП, к чему я была не готова и не сразу поняла, чего от меня ждет интервьюер. Меня попросили реализовать простую функцию проверки строки на Х. После чего требования стали постепенно усложняться, появлялось все больше сценариев и групп пользователей. Я описала несколько классов и то, как они будут друг с другом взаимодействовать. Фоллуоап вопросы были про новые сценарии и более высокий уровень абстракции.

* 3ее собеседование: первая половина LP, вторая половина кодинг. Задача была незнакомая, но не сложнее medium. Она довольно запутанно сформулирована. Были фоллоуап вопросы о том можно ли оптимизировать конкретную часть решения и если да, то как.

* 4ое собеседование: первая половина LP, вторая половина кодинг. Довольно популярная hard задача с литкода, с немного измененными условиями. Тут нужно было задавать вопросы, чтобы понять что именно ожидается в задаче, после чего я очень быстро написала код и мы обсуждали фоллоуап вопросы о том, какая у кода сложность, как вообще реализовать структуру heap, что делать, если мало памяти и как это все можно распараллелить.

* Про LP: для меня это была довольно сложная часть. Иногда интервьюер просил привести другой пример, потому что мой не подходил. Иногда было понятно, что я ответила не то, что ожидалось. Был вопрос, который мне задали на трех интервью, а у меня было подготовлено только 2 истории. Еще я не подумала заранее о том какие я сделала выводы и что буду делать иначе в следующий раз.

--- Финал

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

Google | Offer SWE L4, Zurich

Проходила собеседование на стажировку в 2014, получила отказ. Проходила собеседование на стажировку для PhD студентов в 2018, также получила отказ. Между этим несколько раз подавалась через сайт, мне отказывали по резюме. Год назад писал рекрутер, я спросила есть ли Data Science позиции и на этом наше общение закончилось. В середине мая мне снова написали и предложили податься на SWE позицию, сказав что все равно можно будет заниматься data science, я решила попробовать.

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

--- Первый этап

Первое собеседование было назначено на начало сентября. Была одна алгоритмическая задача без каких-то фоллоу апов, думаю что она ближе к уровню hard. Я видела похожие задачи на литкоде и у меня были с ними сложности. Эту задачу я решала довольно медленно, мы не уложились в 45 минут, но интервьюер дал мне еще время, чтобы я закончила. По ходу решения он очень много помогал.

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

Мы планировали, что будет 1 behavioral интервью, 1 system design, 1 data science и 2 алгоритмических, но после собеседования data science отменили. Я попросила время на подготовку к дизайну -- договорились, что онсайты будут в начале декабря.

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

С приближением даты я прошла интервью в амазон, получила оффер и нужно было быстро назначить интервью в гугл. Было сложно связываться с рекрутером -- он отвечал больше недели, в итоге интервью назначили за пару дней до нужной даты, слова про competing offer тут очень помогли и ускорили процесс.

--- Второй этап

Виртуальный онсайт проходит в один день и в моем случае состоял из 5 собеседований по 45 минут. 45 минут интервью + 15 минут перерыв + 45 мин интервью + 15 минут перерыв + 45 минут интервью + 1 час перерыв + 45 минут интервью + 30 минут перерыв + 45 минут интервью. По сравнению с амазоном тут интервьюеры были более лояльны ко времени, не так торопили и были перерывы, чтобы задавать вопросы и отдохнуть. 1, 2, 4 и 5 собеседования были алгоритмические, 3ее -- behavioral, о чем мне заранее сказали.

Алгоритмические задачи были не сложнее medium на литкоде, все из них я видела впервые. Фоллоуап вопросов практически не было. На первом интервью я не могла придумать решение, перебрала несколько вариантов, интервьюер внимательно за этим следил, а минут за 20 до конца дал мне сильную подсказку, я быстро ее поняла, написала и протестировала код. На 2ом интервью решение было сразу понятно (хотя я обсудила несколько вариантов и их плюсы/минусы), вся сложность была в том, чтобы его аккуратно реализовать. Это интервью прошло хуже всего -- интервьюер меня часто перебивал, говорил что я пишу неправильно, что можно сделать проще, не дал мне протестировать код, сам указал на неучтенный крайний случай. Но в итоге код был написан и протестирован. Последние два алгоритмических собеседования прошли очень легко.

Behavioral проходил совсем ненапряжно (по сравнению с амазоном). Первые минут 20 я отвечала на вопросы "tell me about the time" (но тут у меня не было ощущения, что от меня ждут конкретных ответов), а потом интервьюер рассказывал про работу и культуру компании.

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

Команду мне все еще не подобрали (хотя я уже поговорила с несколькими), но из-за другого оффера все старались делать быстро и отправили меня на hiring committee. Комитет одобрил мою кандидатуру и поднял мне уровень до L4. Осталось выбрать команду (и город -- мне предлагают команды не только из Цюриха).

Anton

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

Facebook - E5 - Reject

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

Netflix - Reject

Прошел через реферала на скрининг к рекрутеру и не смотря на серьезную подготовку behavioral вопросов по их slide deck, через неделю после собеседования  рекрутер написала что показывала мое резюме команде и сказали что у меня больше опыта в core platform, а команде нужен больше UI и на технический скрин я не попал. Как рекрутер (или команда) это вычислили из резюме для меня остается загадкой. В Netflix я особо хотел попасть поэтому готовился упорно к ним и немного упал духом когда меня отфутболили но взял себя в руки пошел готовиться дальше. Хочу отметить что в отличии от ФБ, рекрутер Netflix была супер безответственной в вопросах координации нашего единственного собеседования что дает какое-то представление о их процессах, но это не точно :)

Lyft - T5 - Reject

Прошел через холодное письмо рекрутеру который хайрит мой стэк.

Тех скрининг был в виде мини-задач которые нужно решить за час с интервьюером, я решил 3. По словам рекрутера для прохода дальше нужно было решить 3-4, но я получил отказ. LeetCode задач не было и на онсайте у них дается проект на целый день что было бы интересно попробовать но я до него не дошел.

Zillow - Principal - Reject

Попал через реферала из чата, но не прошел тех скрин. Меня собеседовал другой Principal и в начале были очень абстрактные вопросы про Google/Android и улучшение экосистемы, на которые мне кажется я ответил не так как ожидал интервьюер. Была medium задача с LeetCode, которую я довольно быстро решил но в начале немного замешкался с подходом к решению и предложил не совсем правильное решение. Через пару дней получил ответ что я не прошел дальше - организация была была очень отточенная и процесс хорошо поставлен и все связующие лица отвечали очень быстро.

Robinhood - L3 - Offer

Подавался через LinkedIn c cover letter в два предложения. Две последние компании в которых я работал это брокеры разного калибра и я думаю это сыграло свою роль. Меня пропустили без OA сразу на фон скрин.

Phone Screen - одна задача easy LeetCode, другая задача по андроид в сумме все на час, прошло хорошо.

Virtual On-Site - всего 4 раунда

  • Algorithms/DS - 1 medium задача, решил за 30 минут и остальное время просто разговаривали
  • Android coding - написать мини-приложение за час, я под NDA, поэтому без деталей но ничего сложного, прошло окей
  • System design - сделать дизайн мобильного приложение но интервьюер сам сказал что хочет услышать 4 вещи - брейншторм идей, HLD, API/data models и component design, прошло супер (судя по реакции интервьюера)
  • Behavioral - прошло так себе, интервьюер вроде бы включался активно в мои ответы в детали но местами зевал что меня настораживало, по ощущениям я сам был не уверен и получил через несколько дней просьбу сделать follow-up на этот раунд из-за “mixed signal”

Follow-up behavioral - прошел очень хорошо, разговаривали о типичных вопросах, проблемах нашего проект и про скейл команд, через 35 минут он сказал что вопросов нет и 3 раза сказал спасибо за ответы поэтому я думаю прошло очень хорошо. Остаток времени просто задавал ему интересующие меня вопросы.

Uber - L5 - Offer

Подавался через реферал от знакомого.

OA - 4 задачи уровня easy/medium на 1 час в CodeSignal, решил все 4 но в одной не проходили скрытые тесты и я забил потому что рекрутер сказала сколько нужно для прохода на фон скрин

Phone Screen - 3 medium LeetCode задачи которые строились одна на основе другой, решил все 3.

Virtual On-Site - всего 5 раундов

  • Algorithms/DS - обсудили 2 похожие hard задачи с LeetCode, одну попросил закодить и я заходил нормально, вторую просто предложил обсудить устно и я предложил решение но не смог по его просьбе оптимизировать
  • Android coding - исправить приложение и поменять некоторые компоненты, прошло ок но могло быть получше
  • System design - обсуждали решение интересной проблемы в андроид учитывая масштаб Uber. Я предложил решение и пошел стандартно top-to-bottom, но интервьюер попросил сразу детали компонента и мы ушли в эту сторону. Когда осталось время на вопросы, я сделал ход конем и спросил как бы он это сделал и он сказал что мое решение почти идеальное и они тоже так делают но есть кое-какие нюансы связанные с их инфраструктурой. Я думаю что этот вопрос был очень хорошим решением и я подсмотрел про него в видео Gergely Orosz (недавно мелькала тут его книга и YouTube канал)
  • Behavioral - проводил EM из команды, по ощущениям прошло очень хорошо
  • Bar Raiser - проводил EM из другой команды с другим стеком, по ощущениям прошло тоже очень хорошо

Хотел написать этот пост в виде мотивации и дать пару советов, которые мне помогли. У меня есть семья и маленький ребенок поэтому готовиться временами было очень сложно (читал system design на телефоне по вечерам пока дочка засыпала) но главное не останавливаться и работать над ошибками после моков и собеседований. Иногда после того как не мог решить что-то долго мучал синдром самозванца и я думал, ну какой там ФБ когда я не могу список развернуть. Так что вы не одни сталкиваетесь с таким и это обычное явление.

8 YOE

Android/iOS, но все позиции были по Android отшлифованное ориентированное на результат одностраничное резюме

LeetCode 58/69/10, 10 моков в комьюнити.

Прочитал CTCI без задач и Grokking System Design Interview, YouTube каналы Jackson Gabbard, Dan Croitor и в самом начале Back To Back SWE. Еще прошелся по Explore секции в LeetCode и перед самими собеседованиями решал по 10 задач из топа списков по компании куда собеседования но в итоге помогло только в одной компании куда я так и не прошел. При подготовке к behavioral я очень долго выбирал и дополнял список ситуаций из своего прошлого опыта которые в какой-то мере характеризуют меня в правильном свете отвечая на типичные вопросы которые можно найти в интернете.

  • Как достать рефералы кроме этого чата - в  LinkedIn можно найти знакомых, знакомых-знакомых, людей которые раньше работали в твоей компании у вас есть какое-то “общее прошлое” и не стесняться отправлять им холодные письма. Еще неплохо писать в LI напрямую рекрутера которые хайрят в нужно регионе
  • Привыкнуть объяснять свое решение задачи наперед - на LeetCode перед началом каждого кодинга, словами описать реализацию планируемого алгоритма как если бы рассказываешь на интервью
  • Научиться продавать себя - учитывая свою историю и резюме напишите 2 варианта питча, короткий и длинный и сделайте так чтобы они отскакивали от зубов и заканчивались тем почему вы пришли сюда на собеседование и в зависимости от данного вам времени и ситуации пускайте в ход один из них.
  • Подготовить хорошие вопросы которых хватит на все раунды интервью
  • Количество решенных задач не определяет ваш уровень готовности к собеседованиям, более важен ваш подход к решению проблем, а также результаты Behavioral интервью и System Design
  • Не опускать руки и просто методично работать и улучшать все свои навыки несмотря на неудачные попытки -  подготовка это марафон, а не спринт.

Спасибо всем, кто создавал чат, модерирует его и кто проводил со мной моки 🤝

Напоследок хочу сказать фразу которую я где-то услышал и которую повторял себе время от времени когда боролся с синдромом самозванца:

Hard work beats the talent 💪

Всем удачи в подготовке и крутых офферов!

Пробувався в ФААНГ. @rkxtd

Вітання! Прийшов час поділитись моєю історією та віддати трохи ком'юніті.

TLDR:

Amazon, Seattle, Alexa Shopping - SDE III (Reject)

Bloomberg, New York - Senior Frontend Engineer (Offer)

Indeed, Seattle - Senior Software Engineer (Offer)

Google, New York - SWE  III (Offer)

Facebook, New York - E5 (Offer, Accepted)

Подався на 30 компаній. На основні: Fb/Google через рефералів. На решту - просто закидуючи резюме на сайті компанії.

З 10 мені відповіли. В 9 з них був фон скрін.

Background

В США я уже 2.5 роки, переїхав з EPAM Systems, та нещодавно отримав Green Card. Процес підготовки в цій статті подавати не буду, так як усе що потрібно - уже давно десятки разів описано в цьому документі і проговорено у нас в каналі.

Якщо коротко підсумувати усе, то: вирішив більше 1000 задач. (700 на Leetcode та 300 на Codesignal). Провів більше 50-ти алго моків, та 5 по Систем Дизайну.

Увесь процес підготовки зайняв близько 2-х років, включаючи алгоритми, system design та в останні 4 місяці суттєву підготовку до Frontend співбесід.

Amazon SDEIII (Reject)

В серпні 2020, я вирішив спробувати свої сили в амазон. Написав рекрутеру в linkedin і процес завертівся. Якщо чесно, я навіть не розглядав їх як потенційного роботодавця. Більше хотів перевірити де я знаходжусь на етапі підготовки. Адже відчував що ось, це вже мабуть воно, пора.

Phone Screen:

Пройшов добре, та від хвилювання перемудрив доволі просту задачу з leetcode на хешмапу. Отримав позитивний фідбек, з проханням на інтерв'ю використовувати максимально простий підхід а не будувати космічний корабель.

Virtual Onsite:

  1. System Design: Дизайн системи з Grokking System Design Interview. Я хвилин 5 витратив на рекваєрменти, тоді back-of-the-envelope calculations, high-level design, інтерв'юер попросив піти в глибину по сховищу та зв‘язку між мікро сервісами. Встиг дещо описати трейдофи по SQL/NoSQL та  Service Mesh і на цьому час вийшов.
  2. Coding: Medium завдання на обхід дерева: один з різновидів zigzag traversal
  3. Coding, Bar Raiser: Hard BFS не знайшов цієї задачі на літкоді.
  4. Coding: Medium DP схожа на (https://leetcode.com/problems/maximum-product-subarray/)

На кожному інтерв’ю було від 3 до 4 запитань по Leadership Principles. По моїх відчуттях відповів на всі з хорошими прикладами по STAR, також вирішив усі задачі і протестував на тест кейсах.

Та через два дні отримав реджект мейлом без пояснення причини і кулдаун на 6 міс.

Bloomberg, Senior Software Engineer (Offer)

В листопаді надіслав своє резюме через портал Bloomberg Careers. Через два дні отримав мейл від рекрутера на дзвінок-знайомство. Одразу визначили профіль: Frontend, а також потенційні команди.

Через тиждень провели Phone Screen, на якому кілька хвилин поговорили про досвід і далі інтерв'юер дава одну з найпопулярніших medium задач з Leetcode з тегом Bloomberg. Через два дні отримав дзвінок від рекрутера що мою кандидатуру успішно затвердили на virtual on-site.

Virtual Onsite:

  1. Coding, Frontend: В основному запитання по JavaScript, та заімплементати в online ide робочу компоненту на реакті.
  2. Coding, Algorithms: Medium завдання з Leetcode з тегом Bloomberg.
  3. System Design: Дизайн однієї з систем з Grokking System Design Interview. Фокус пішов на API та обробку великої кількості даних (ETL).
  4. Manager Interview: Troubleshooting продакшн системи. Інтерв'юер описував систему та що зараз не працює і мені доводилось говорити що я буду робити щоб зрозуміти та локалізувати проблему. Дуже цікаве інтерв’ю.
  5. HR Interview: Це було більше про досвід та мотивацію роботи на Блумберг.

Без найменшої похибки скажу: Блумберг співбесіда була найменш напруженою з усіх. Для початку інтерв’ю проводить команда де ти потенційно будеш працювати, тому після кожного завдання є можливість запитати  у них що і як працює в команді і чим взагалі ти потенційно будеш займатись.

Через 3 дні рекрутер подзвонила та привітала з Оффером.

Indeed, Seattle - Senior Software Engineer (Offer)

Подався на Indeed я на початку жовтня, через веб сайт. Отримав повідомлення через два тижні від рекрутера та узгодили дату Intro Call.

Phone Screen:

Завдання не з Leetcode але схоже на words distance: https://leetcode.com/problems/shortest-word-distance-ii/

Проблем з завданням не було. Через день отримав фідбек, що компанія готова рухатись з осайтом.

Що цікаво, онсайт запропонували розбити на два дні, або провести все в один день. Оскільки Indeed це перша компанія в якій було 6 інтерв’ю - я розбив усе на два дні.

Virtual Onsite 1:

  1. System Design: дизайн високонавантаженої системи, інтерв’юверу було дуже цікаво піти в глибину по скейлінгу та як переконатись що наша система буде підтримувати будь яке навантаження.
  2. Code Review: Буквально створюють PR на GitHub з кодом який, як пояснюється в завданні, писав Junior Software Engineer. І ваше завдання цей код порев’ювати та залишити конструктивну критику.
  3. Coding, JavaScript: Дуже велика увага Browser API, роботі браузераз DOM, робота з Event Loop.

Virtual Onsite 2:

  1. System Design, Frontend: Побудувати Фронтенд архітектуру для специфічного продукту.
  2. Coding, Algorithms: Це інтерв’ю кардинально відрізнялось від всіх. Інтерв'юер підключається, дає вам завдання, відповідає на запитання по завданню і потім вимикає мікрофон та відео щоб вам не заважати. У вас є 90 хвилин щоб вирішити задачу рівня Hard на Leetcode. При тому код має бути робочий і усі тести мають пройти.  Завдання доволі велике, тобто там не обійдеться знанням одного алгоритму.
  3. Manager Interview: Розбір будь якого проекту з вашого резюме. Дуже детальний, ми дійшли до типів інстансів які ранались в датацентрі і обговорювали чому саме була вибрана така то Cache стратегія.

Через два дні рекрутер зв’язався та привітав з оффером. Нажаль Indeed не мав змоги заматчити оффер Bloomberg, тому далі ми не продовжували.

Google, New York - SWE  III (Offer)

В гугл мене рекомендував колега з яким я раніше працював. Так як у мене, на цей момент було вже два оффери з Bloomberg та Indeed,  тож рекрутер дозволив мені пропустити Phone Screen і одразу перейти до Virtual Onsite.

Virtual Onsite:

  1. Coding, Frontend: Запитання були виключно по основах JavaScript, особливості роботи інтерпретатора, Browser API.
  2. Coding, Algorithms: Типова Літкод задача Hard рівня складності.
  3. Coding, Algorithms: Аналогічне інтерв’ю, проблема рівня Hard і доволі комплексна. Тобто це було завдання в якому поступово потрібно було вирішувати одну за іншою проблеми щоб дійти до фінального розв’язку.
  4. System Design, Frontend: Почали з дизайну окремої фронтенд компоненти і закінчили дизайном високонавантаженої системи з фронтендом, бекендом і тд.
  5. Googleyness: Типове behavioral інтерв'ю, поговорили про досвід та підходи до вирішення різних ситуацій по STAR.

Через тиждень отримав дзвінок від рекрутера що мій пакет передають в Hiring Committee. Ще через 3 дні рекрутер привітав з успішним проходженням HC. Та розсиланням мого профілю по командах для Тім Матчингу.

Facebook, New York - Frontend Engineer E5 (Offer, Accepted)

В Facebook мене порекомендував мій хороший друг, яки уже кілька років там працює. На відміну від гугла, у фейсбука процеси організовані на кілька порядків краще. Принаймні в моєму випадку. На дзвінку-знайомстві з рекрутером я розповів про основні локації які мене цікавлять, а також що мене більше цікавить в плані фронтенду та бекенду. Так як я Frontend інженер рекрутер ще задав кілька запитань по роботі браузера, та DOM api. Цих питань я не очікував, але справився без проблем.

Phone Screen

Одразу після розмови з рекрутером ми домовились про фон скрін. Для дзвінку використовується аналог Zoom, так званий BlueJeans. Для кодингу використовується Coderpad. Саме інтерв‘ю триває 45 хв. 5 хв інтро з обох сторін і за наступні 35 хв потрібно вирішити два завдання повністю фронтенд орієнтовані. Тому не зволікайте. Завдання не були дуже важкими, але кожне перевіряло знання кількох речей на javascript.  Я встиг вчасно вирішити обидва і залишився час порозпитувати інтерв'юера.

Через день отримав дзвінок що фон скрін пройшов успішно і Фейсбук запрошує мене на  віртуал онсайт.

З цього моменту мене передали іншому рекрутеру, який зайнявся процесом. Тут також важливо зауважити, що в інтересах рекрутера щоб ви пройшли і він докладатиме всіх можливих зусиль для цього. Якщо вас ніхто не підганяє по часу, то візьміть достатньо останнього щоб підготуватись. Рекрутер проведе з вами підготовчий дзвінок щоб розповісти детально чого чекати на кожному з інтерв’ю. В цей момент ви знову можете попросити про два-три тижні підготовки, з цим проблем немає взагалі.

Virtual Onsite:

В день Х моє інтерв‘ю стартувало з 10 години, але на мітинг я мав законектитись уже в 9:45AM. Там мене чекав рекрутер, який трохи заспокоїв, ще раз пройшовся по усіх інтерв‘ю і розповів що чекати та яких сигналів шукатиме кожен інтерв'юер. Це безцінні поради які дозволяють зібратись прямо перед співбесідою.

  1. System Design, Web Architecture:  було доволі складне завдання, як інтегрувати в фб, одну з дуже популярних веб платформ. Що цікаво, інтерв'юера цікавило не лише веб архітектура, а в якийсь момент мені довелось навіть швидко написати алгоритм для генерації даних. Я дуже поспішав щоб вижати максимум з себе в максимально зжаті терміни. Але в результаті встиг за 40 хвилин побудувати хорошу систему, з описаним алгоритмом, та усіма нюансами фронтенд систем дизайну.
  2. Coding, Algorithms: алгоритми з дуже сильним нахилом у frontend сторону. Пошук по деревах(двонаправлений bfs) і перевірка розуміння основ роботи браузера із стандартним api. Справився завчасно з трьома завданнями від інтерв'юера, та залишилось трохи часу в запасі щоб порозпитувати про роботу на FB.
  3. Coding, Frontend: Це інтерв’ю було більше орієнтоване на тонкості роботи популярних речей в JavaScript. Необхідно було повторно реалізувати деякі базові функції. Без точного розуміння та знання цих функцій - буде важко. Я дещо розгубився на початку, але з мінімальним хінтом від інтерв'юера зміг закінчити обидва завдання вчасно.
  4. Behavioral: Стандартні питання на такого типу співбесідах, знову ж таки дуже допомогли історії які я готував для Amazon. Усі відповіді намагався давати по STAR формату.

Через два дні отримав фідбек від рекрутера, що з усіма Strong Hire рухаємось на Hiring Committee і ще через день - оффер.

Підсумок

5 Компаній / 4 оффери. У мене також були уже назначені віртуал онсайти з Square та Uber. Але я вирішив, що цього досить. Кожен такий онсайт - дуже виснажливий. Я, в принципі, одразу цілився на Facebook / Google. А тому вирішив, що маючи уже ці оффери в руках, немає сенсу далі товкти в усі можливі двері. Звісно можна було б ще трохи собі вибити більшу TC. але усюди має бути межа.

В результаті я прийняв оффер Facebook.

І як тут вже неодноразово було сказано: hard work beats talent.

Microsoft, Prague - Backend SWE 61 (Offer, Accepted)

Привет!

Хочу поделиться своей историей собеседований в фаанг.

Результат:

✅ принятый оффер в Microsoft Prague, Backend SWE 2,level 61;

🛑 declined оффер в

❌ Amazon,FB, Spotify, Uber, Booking, DeliveryHero, Revolut, Wheely, Zalando

Краткий саммари моего профиля:

1) Образование: Бак МГУ (эконом) + ШАД

2) 2.5 года работал в е аналитиком и техническим проджект-менеджером

3) Год работаю в игродельне на Кипре аналитиком

4) Имею какое-то количество сделанных на заказ фриланс проектов, которыми занимался в свободное время для фана

5) Хорошо умею в Python, немного умею в C++

Что хотелось:

1) Попасть в фаанг

2) Хотел сфокусироваться на более технологичных задачах. Т.е. либо advanced data science, либо Backend SWE. В идеале что-то на стыке этого 🙂

Как готовился

1) Написал 2 вида резюме: на SWE и data science, где старался подавать свой опыт под разными углами.

2) leetcode: 366 problems, 145 easy+194 medium+24 hard. Очень сложно шли hard. Но в целом задача за задачей – стали нормально medium'ы идти. Задачи решал на python или c++. Некоторые задчи, которые не получались с 1го раза, решал по 2 раза, сначала на python, потом писал с нуля на c++. Купил платную подписку на год.

3) system design: купил и изучил зарекомендованный курс для подготовки к системному дизайну + посмотрел какое-то количество видосов. В целом это было наименее сложная часть подготовки. Видимо тут свою роль сыграло некоторое количество целиком собственноручно сделанных проектов с нуля и до конца 🙂  Потратил на эту часть около 3х дней суммарно.

4) behavioral: в прошлом сезоне собеседовался в Google и провалил именно behavioral.  Подготовка была в 3 этапа:

  * взял amazon leadership principles и постарался под каждый leadership подогнать пример с примером

  * нагуглил кучу вопросов, выписал их в гуглдок и под каждый вопрос прикинул ситуацию, которую можно описать через STAR

  * просто порефлексировал – что можно спросить + каких-то интересных ситуаций рабочих и просто выписал их, чтобы можно было использовать, если понадобится.

5) ML: прошел специализацию на курсере с целью немного вспомнить то, что забылося со времен ШАДа.

6) Мок интервью. В рамках организованных мок интервью прошел приблизительно 8. Больше не участвовал, так как внезапно назначился собес. Остальное время решал сам, а моки проводил с братом. В целом у меня проблема в том, что я иногда затыкаюсь и не могу придумать идейку. Объяснить и написать код в целом у меня не возникает сложностей, если есть алгоритм. (Ну не жесть конечно если).

7) concurrency: вспомнил штуки из курса ШАДа + прорешал на литкоде раздел с concurrency.

Про сложности:

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

В Amazon, tiktok, booking, wheely – не получилось попасть на собес. Притом подавался как с рефералом, так и без реферала

В FB – подавался на data science – сказали, что "we love your profile, but currently we are looking for people with more experience, we will be back in 6 months-1 year".

В deliveryhero и revolut – подавался на data cience – сказали что недостаточно experienced  (на уровне общения с рекрутеркой).

В Uber – подался с рефералом на data science. Побеседовал с рекрутеркой. Потом просто дали реджект и без комментов 😬

В Zalando – был hiring event на backend. Вообще говоря, в эту контору, я не очень хотел. Но решил воспользоваться этим как площадкой для отработки навыков собеседования. Зарешал онлайн этап. Пригласили на собес. За час до собеса написали типа "thanks for completing online assessment, we reviewed your profile and not interested in your application".

В Spotify довольно тоже странно. Подавался на DS, с рефералом 2 раза. В итоге 2 раза получал такое сообщение: "Thanks for referral but you were not selected..."

Хронология собеса в Microsoft:

1) подался с рефералом (вторая попытка) на несколько позиций

2) пришло задание на codility на OA. Притом было написано, что оценивается не только правильность кода, но и его структурированность. ХЗ так это или нет. Задание давалось часа на два. Задачи я сделал за , условно, час. И еще час полировал решения  локально в Pycharm'е: писал тесты, делал типизацию, писал комментарии. В итоге максимальный балл за codility. Задачи были уровня easy-medium

3) Спустя небольшое время мне пришло приглашение на  собеседование через 6 дней. В целом решил не переносить, а просто согласиться в этот день

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

5) Во время этой экспрес- подготовки я поставил цель дорешать весь раздел microsoft на leetcode. Весь не получилось, получилось только 193/270. Также пробежался по всем топикам: behavioral, systemdesign, concurrency

6) Был собес, точнее 4: concurrency, алгоритмы, system design, behavioral.

2 cобеса вышли прям вообще огонь (по личному ощущению + фидбеку от рекрутера): алгоритмы и system design. Алгоритмы были уровня easy-medium leetcode. sys_design был обычным

concurrency в целом тоже норм, но тут чувствовалась моя нехватка навыков. Что в принципе, не стало препятствием. Еще я тут подкосился на OOP, потому что совсем этого не повторял и ляпнул глупостей в нескольких местах 😬

behavioral – в целом просто норм 🙂

В итоге через неделю позвонили и сказали, что дадут оффер. Еще через неделю прислали точные цифры. Еще через неделю прислали бумажный апрувленный. Потом прошел background check. Сейчас в состоянии подготовки на визу.

Про :

между делом (пока были неудачи) я решил попробовать обратно в . В принципе, думал вернуться обратно и набраться еще опыта в нем в течение пары-тройки лет. В итоге прособеседовался на ds в один очень нравящийся мне проект. Собес не вызвал никаких сложностей, выдали senior – очень приличный оффер. Но отказываюсь в пользу MS, хотя , на самом деле, выбор очень сложный 😔.

Прочее

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

NVIDIA, Performance Engineer, Accepted Offer

Всем привет!

Хочу поделиться своей историей получения оффера в московский офис NVIDIA. Хотя история произошла в 2019 году, надеюсь, она будет полезна сообществу, т.к. по моим наблюдениям довольно много людей не слышали, что в МСК есть офис Нвидии с разработкой, и это надо исправлять!)

Результат:

1. Intern Data Engineer, NVIDIA, до оффера не дошло. Процесс длился 2-3 месяца;

2. Performance Engineer, NVIDIA, принятый оффер. Процесс найма длился 3 месяца;

Обо мне:

1. Образование: закончил мехмат МГУ в 2019 (специалитет);

2. Начиная с 4 курса работал на парт-тайме (до 32 часов в неделю) как C++ разработчик, потом как Python Developer;

3. Хорошо умею в Python;

4. На момент собеседования хорошо знал тервер, статистику и немного ML;

И так, сама история. :)

Попал я в компанию немного случайно. Моего бывшего начальника перехантила NVIDIA из одной ноунейм конторы. Спустя какое-то время я тоже из нее ушел. Когда начальник об этом узнал, то предложил меня зареферить на позицию Intern Data Engineer в команду Data Platform. Несмотря на то, что я уже тогда работал на джуновской позиции, то решил все же попробовать.

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

Единственное, начальник предупредил, что найм может происходить очень долго (запросто до полугода). И здесь этот апсект сыграло свою грустную роль.

Сначала назначили телефонное интервью для знакомства с будущей командой. Прошло все максимально комфортно. Мне рассказали про команду, задачи, я рассказал про себя. Поспрашивали немного по Питону и, кажется, по SQL. На этом разговор закончили.

После собеседования со мной связалась рекрутер и сообщила, что моя кандидатура команде понравилась, и теперь надо ждать аппрув от менеджера команды на дальнейшие этапы. В итоге  я попал на позицию ~джуна~ ждуна. Спустя две недели не было никакого ответа. Я писал HR, чтобы напомнить о себе, она пинговала менеджера, но от него так никакой информации не поступило. В итоге спустя 3 месяца я написал им, что не могу больше ждать от них ответа, и если в течение недели вопрос со мной не решится, то можно меня больше не рассматривать, поскольку у меня начинается производственная практика (а ее я собирался проходить на текущем месте работы), а потом ГОСы и защита диплома, поэтому мне будет не до найма. Рекрутер ответила, что ответа от менеджера все еще нет, и даже если он будет, то нанять за одну неделю они меня не смогут. В ответ предложила оставаться на связи, и при появлении новой релевантной мне позиции, она мне напишет. На том и порешили.

Благополучно закончив университет, я решил уезжать учиться в Германию, поэтому уволился и курил бамбук перед отъездом. Но чтобы захеджировать риски, решил параллельно искать работу в России.

Внезапно для меня, на связь снова вышла рекрутер из NVIDIA и сообщила, что у них появилась позиция Performance Engineer в другую команду и, возможно, данная вакансия меня заинтересует. Что ж, давайте попробуем!

Здесь уже этапов было побольше. Мне обрисовали потенциально 4-5, но по факту было 3.

1. Телефонное интервью с командой, как и в прошлый раз. Были базовые вопросы по Питону, SQL и п предметной области (видеокодирование и сравнительного анализ его результатов). В последнем я был полный ноль, поскольку никогда подобным не занимался. На остальное ответил;

2. Онсайт в московском офисе. Здесь фактически было несколько подэтапов:

+знание Python

+SQL

+теорвер, статистика

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

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

3. Онсайт в московском офисе по алгоритмам.

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

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

4. Онсайт с менеджером отдела.

До этого не дошло. Он дал добро на мою кандидатуру без собеседования.

5. Онсайт с главой московского офиса.

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

В итоге я снова стал ждать ответа. Снова все начало затягиваться, и меня снова стало припекать, поскольку я получил 3 оффера от других компаний и аппрув от одного немецкого университета, что меня готовы взять. Написал рекрутеру. Она перевела меня на менеджера команды, куда меня собеседовали. Мы с ним созвонились, и он сказал, что они пока еще собеседуют еще пару человек, и смогут мне дать ответ через пару недель. Я сказал, что у меня уже заканчиваются средства на житье-бытье, но есть несколько предложений на руках на устраивающие меня деньги. Сошлись на том, что через неделю они мне дадут ответ.

Спустя 9 дней мне написала рекрутер и спросила мои зарплатные ожидания. Я назвал сумму, и через пару тройку следующий день мне сделали предложение на зп, которую назвал + дали hire grant в виде акций NVIDIA. Sign in bonus'a не было (я до знакоства с вашей группой даже не знал, что такое есть).

Five offers out of five loops, Facebook accepted

Короткое предисловие. Я Senior Software Engineer в Майкрософте 6 лет. Недавно решила сменить работу, и 3 месяца занималась подготовкой (примерно полтора месяц готовилась по по часу-два в день) и прохождением интервью (позиция - Senior Software Engineer). Рассматривала 7 компаний, до собеседований дошла в 5 компаниях, получила оферы из всех 5 компаний (Фейсбук, Гугл, Убер и две малоизвестные компании в био-тех сфере). В сумме получилось 35 чистых часов собеседований. В пятницу выбрала и приняла офер. Могу по горячим следам поделиться материалами, которые мне особенно помогли.

Главный ресурс, который мне ООООООчень помог - https://www.educative.io, там курсы (читать, а не смотреть, поэтому быстро). Стоит 60 баксов в месяц. Окупится!

General considerations

Уровень в большинстве компаний определяется по результатам System design and Behavior (ну может разве что кроме совсем начальных уровней). Coding на уровне прошел/не прошел (нужно показать конкретные skills, и интервьюер по сути отмечает чек боксы - requirements clarifications, communication, coding, problem solving, code verification etc). Часто люди при подготовке уделяют большое внимание кодингу, и почти не готовятся к System Design and Behavior.

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

Один из положительных фидбеков, которые я получила после интервью в Убер (там много дают обратной связи) - что я напрямую прочила помощь, когда чувствовала, что запуталась. По словам рекрутера, который передавал этот фидбек, редко такое происходит, и очень ценится. Один из примеров того, что полезно к интервью относиться как к collaboration session with a co worker.

System design

https://www.educative.io/courses/grokking-the-system-design-interview - ОСОБО РЕКОМЕНДУЮ!- ОСОБО РЕКОМЕНДУЮ!

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

Behavior

https://www.educative.io/courses/grokking-the-behavioral-interview

Мне курс не очень был актуален, поскольку я к тому моменту 4 часа консультировалась/репетировала с моим бывшим ментором, а ныне просто другом по бане) И это был game changer. Очень важно прописать все стандартные вопросы, подумать о них в деталях. Подавать истории из жизни, создавая целостной образ - какие у тебя ценности, какой ты лидер, как умеешь рефлексировать, признавать ошибки, уважать окружающих. Подумать, почему задается этот вопрос, что хотят от тебя услышать. Есть ресурсы, где за деньги проходишь mock interview, и можно порепетировать, если нету такого прекрасного ментора как мой 🙂

Вопросы, которые я готовила и/или мне попадались:

- [ ] What is your proudest professional accomplishment and why?

- [ ] Tell me about a time when you overcame a conflict at work.

- [ ] Situation when you disagreed with your manager

- [ ] Give me an example of a difficult problem you solved. How did you solve this problem?

- [ ] Give me an example when your idea converted to feature/project/product.

- [ ] Situation when your suggestion was pushed back

- [ ] Tell me about a mistake that you’ve made. How did you handle it?

- [ ] Has there been a time when you had to pitch an idea to a manager or senior leader? What was the outcome?

- [ ] Tell me about the time when you were given a negative feedback and could act on it.

- [ ] Design decision you regret about

- [ ] Who did you help to grow? Who did you help to get a promotion?

- [ ] Tell me about a time you handled a stressful situation when you were under a lot of pressure.

Coding

- https://www.educative.io/courses/grokking-the-coding-interview - ОСОБО РЕКОМЕНДУЮ с этого начать (я нашла этот курс позже, но можно кроме него можно ничего не делать для кодинга)

- leetcode (я заплатила за premium access и делала mock interviews). Прорешала примерно 50-60 задач.

- http://pramp.com. Mock interviews with peers. По очереди то ты проводишь интервью, то тебе. Моей подружке очень помогло. Я слишком поздно узнала про этот ресурс. А так бы обязательно его использовала бы.

- Мне не попалось ни одной задачи по динамическому программированию. Хотя я много времени уделила подготовке. Считаю, что можно пропустить. Слишком долго готовиться, слишком редко попадается. [UPDATE: в комментариях Виолетта говорит, что ей попадалось в нескольких компаниях, поэтому хочу предупредить, что если мне не попалось, это не значит, что вам не попадется. Если есть много времени на подготовку, лучше готовиться ко всему]

Comp negotiation

https://www.educative.io/courses/grokking-comp-negotiation

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

Resume

https://novoresume.com - офигенно удобная платформа для построения красивого (визуально) резюме. Я тоже заплатила премиум за какие-то кастом фичи.

Technical recommendations

- Если интервью онлайн, присоединяйтесь к звонку по телефону (без WIFI) и лаптопу одновременно. Одно на мьют и без звука. У меня было несколько раз отсутствия звука, потери интернета. Один раз через 5 минут начала дизайн интервью в Убере компьютер вообще сломался, выключился (произошло такое с этим компьютером единственный раз в жизни). Я подключилась с телефона и ноутбук смогла восстановить только в перерыве. Но это нормальная ситуация - возможность продемонстрировать как мы справляемся с подобными стрессовыми ситуациями.

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