Хочу в Google
3.11K subscribers
52 photos
6 videos
6 files
75 links
🎙 Рассказываю о том как прохожу собеседования на позицию программиста в крупных ИТ компаниях мира, в том числе в Meta, Google, Amazon .
📍 London, United Kingdom

📬 Насчет сотрудничества и обратной связи писать сюда - @hiremegoogle_feedback_bot
Download Telegram
В среду прошел мой первый phone interview в Facebook. Интервью должно было длиться 45 минут. 5 минут на ответы и вопросы в начале, 5 минут на ответы и вопросы в конце, остальные 35 минут на решение одной задачи по программированию. Выпил стакан воды чтобы горло не пересохло за это время и взял с собой блокнот и ручку, на всякий случай.

Что было?

Подключился по видео-чату. Подключился мой интервьюер. Попросил подождать минуту. Что то там настраивал.

Потом он рассказал немного о себе. Спросил про мой опыт. Кратко рассказал о себе, по примеру Cracking the Coding interview. “Я являюсь [позиция] в [компания], в [страна] [город]. Сейчас мы разрабатываем [какой то интересный проект]. В работе используем [какие то технологии]”. Это должно быть на зубок, чтобы не терять времени.

Потом чувак сказал давай приступим к решению задачи и зашарил экран. Там у него был открыт что то типа Paint, для рисования. Он дал мне задачи на графы и деревья уровня Easy/Medium в Leetcode. Я имел опыт с этой задачей раньше. Нужно было найти какое-то максимальное значение чего-то там.

Начал объяснять решение: “Бла бла бла,… тут я буду из функции возвращать 2 переменных…”. Интервьюер приврал меня: “Зачем 2, можно же использовать глобальные переменные”. Я согласился что так будет проще и код будет чище. Он спросил а какие есть минусы у такого подхода. Я сказал что в данном контексте не вижу никаких минусов. Он добавил, а если мы будем запускать поиск для каждого поддерева в отдельном потоке? Я сказал что не думал что мы будем это делать, но если это так то будет race condition. Глобальная переменная будет меняться каждым потоком и они будут затирать значения друг друга, так что решение не будет верным. Интервьюер спросил, а как решить эту проблему? Я сказал что можно использовать locking. Указать данную переменную как общий ресурс и заключить его в lock, чтобы каждый поток записывал значение по очереди. Он согласился.

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

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

Потом спросил насчет Space and Time complexity. Я сказал что Time Complexity будет O(n), где n это количество всех вершин. Потому что нам надо будет посетить все вершины чтобы найти наше значение. Насчет Space Complexity я немного лажанул, как я понял позже. Я сказал что потому что это бинарное дерево и на каждой итерации мы заходим на максимальную глубину дерева и храним ее в call stack, а когда выходим из глубины то убираем вершину из call stack, и того получается O(logn), где n это количество вершин. Он спросил почему это O(logn), я объяснил. Он согласился. Но, потом я понял что мое решение по Space Complexity верно только для сбалансированного дерева, и неверно для остальных. По хорошему Space complexity должен быть O(h), где h это высота дерева или глубина, кому как нравиться. Тут мой косяк. Интервьюер не стал со мной спорить.

Он предложил закодить решение. Я открыл онлайн редактор и начал писать. Код лился из моих пальцев. Потратил 5 минут. Прошелся взглядом по коду. Запустил несколько тест кейсов. Готово!

Интервьюер посмотрел, молча думал минуту. Сказал что ему все нравиться.

Я поспрашивал его про компанию и мы попрощались. Мы уложиличь в 20-30 минут вместо 45.

#story #facebook
1👍1
Какие ощущения ?

Я вышел с собеседования уверенным. Но потом анализируя свои ответы понимал что сделал не правильно. В некоторых местах я упускал edge cases, неверно посчитал Space Complexity, неверно выбирал структуры данных для хранения и т.д. Но радует что я смог написать правильное и рабочее решение. Так же я принимал подсказки от интервьюера, что есть хорошо. Задача была несложной на рекурсию и бинарное дерево. Немного опешил от вопросов про треды, в остальном перформил уверенно. Я ставлю на то что я пройду на следующий этап на 70%, 30% что меня отошьют.

#story #facebook
👍2
Пришли новости с фронта. Facebook пропустил меня на онсайт. Если бы не этот гребенный вирус скатался бы в Лондон. К сожалению, придется сидеть дома. Но плюсы в том, что не надо будет тратить свой отпуск и ставить в известность работодателя.

#story #facebook
👍2
Вышел с телефонного собеседования с Google.

Что там было?

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

Пока я писал решение допустил много ошибок связанных с edge кейсами, но смог их поправить. Это был жирный минус, то что я не учел некоторые очевидны edge кейсы. Написал решение и посчитал Space and Time complexity.

Интервьюер дал мне вторую задачу, которая была на Деревья и Теорию графов. Опять же я задал уточняющие вопросы. Начал описывать решение которое было очень затратным O(n^3). Но были проблемы с оптимизацией решения. Тогда интервьюер спросил почему у меня проблемы с оптимизацией. Я описал возможные edge кейсы, тогда интервьюер поправил меня и сказал что я не совсем верно понял задачу и разъяснил мои сомнения. Получилось так то этих edge кейсов не может быть и задача намного проще чем я думал.

Осталось 5 минут, интервьюер попросил закодить мое решение. Я очень быстро написал свое решение. В спешке я допустил несколько опечаток, к примеру забыл скобки в уравнении. Он меня поправил. Посчитал Space and Time complexity. И на этом мы закончили.

Какие ощущения ?

Я бы сказал что это было пока мое самое тяжелое собеседование. Не потому что задачи были сложными, а потому что они были легкими, что немного расслабило меня и сбило с толку. Некоторые моменты были неясными в задаче, и я не уделил достаточного времени чтобы уточнить эти неясности. Это жирный минус. Но с другой стороны я быстро смог найти решение и написать его и верно (хотя и с некоторыми исправлениями) посчитать Space and Time complexity. Это был один из моих худших показателей за этот год. Я думаю что 40% что я пройду дальше и 60% что меня отклонят. Будем ждать из ответа и надеюсь на лучшее.

#story #google
👍2
Channel photo updated
Пришло письмо от Google. Говорят что готов мой фидбэк по интервью и они хотели бы его обсудить со мной завтра по телефону. По тону письма я так полагаю что меня отклонили, так как год назад когда я проходил на онсайт было что то типа “Поздравляем, вы прошли на следующий этап…”. А тут “Давайте поговорим про ваш фидбэк.”. Конечно надеюсь на лучшее, но все равно грустно немного.

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

#story #google
👍1
Созвонились с HR с Google.

Чувак спросил мои ощущения после собеседования. Я сказал что не смог показать свои сильные стороны из за волнения, упустил некоторые очевидные edge кейсы. Сказал что это могло бы быть “red flag” (причина для отклонения) для интервьюера.

HR сказал чтобы я не расстраивался раньше времени и сказал что мой перформанс был очень хорошим и я прошел на следующий этап. Ура! На удивление фидбек был очень позитивным, все минусы которые я упомянул было подмечено в фидбэке. Но в целом интервьюер остался доволен моими решениями.

Теперь мне надо выслать даты для онсайт. Онсайт будет длиться 6 часов. 3 собеседования по часу на кодинг, 1 час на обед, 1 час на System Design, 1 час на LP (leadership). Пойду готовиться.

#story #google
👍1
На следющей неделе будет онлайн онсайт в Amazon. Пока придерживаюсь такого расписания:
- 3-4 Leetcode задач в день.
- 1 лекция по System Design в день.
- Разбираю 2-3 кейса по System Design на доске в неделю.
- 2-3 раза в неделю разговариваю сам с собой и отрабатываю LP. Составил список важных проектов о которых мог бы рассказать.

(на фото доска после сессии SD по вечерам)

#story #amazon
👍1
Сегодня день X. Вечером у меня будет онлайн онсайт в Amazon. Собеседование будет длиться 4 часа, с 10 минутными перерывами между ними.

Какие ощущения?

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

Какие планы?

⁃ Порешать пару задач чтобы разбудить мозг перед собеседованием.
⁃ Подготовить комнату для собеседования. Поставить доску и маркеры, подключить комп.
⁃ Думаю транслировать доску на экран компа через mirroring на телефоне, чтобы удобнее было показывать решения SDI на доске.
⁃ Проверить маркеры, что все пишут.
⁃ Подготовить дополнительные наушники, на случай если будут проблемы с микрофонном.
⁃ Зарядить и пополнить телефон как дополнительный источник интернета, на случай если домашний интернет опять будет лагать.
⁃ Подготовить список проектов и проговорить LP вопросы.
⁃ Набрать бутылку воды, придется много говорить.
⁃ На всякий случай взять с собой ручку и бумагу.

#story #amazon
👍1
Прошел онлайн онсайт в Амазон. Интервью начался вечером в 5:00 и длилось до 9:30.

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

#story #amazon
👍1
Что там было?

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

Round 1.
Зашел в чат чувак средних лет. Он рассказал о себе. Я о себе. Поспрашивал LP вопросы. Что то типа “Каким проектом ты гордишься больше всего? Почему?”, “Какие были сложности при разработке?” и т.д. Болтали так минут 20. Остальные полчаса были на задачу. Дал задачу на массивы, мол даны какие то API, нужно к ним обратиться, собрать какие то данные и что то там посчитать. Уровень Easy/Medium на Leetcode. Я поспрашивал вопросы чтобы понять что именно он хочет и как работать с этими API (спрашивайте вопросы всегда). Потом я описал решение по шагам на словах, написал в редакторе кода, мол буду делать то то и то то. После каждого шага спрашивал “What do you think about it?”, “Does it sounds good for you?”, “Is that makes sense for you?” и т.д. Это тоже очень важно, так как надо понимать в правильном ли направлении я двигаюсь. После того как интервьюер сказал “Sounds good”, я сказал что хочу перейти к написанию кода.

Написал решение быстро. Показал, тот сказал что все ок. Спросил потом усложненную версию этого вопроса, который уже был похож на проблему графов. Сказал что можно решить через DFS. Чувак не стал настаивать на написании кода и просил объяснить только на словах. Потом он спросил как это все можно запустить на нескольких потоках. Я рассказал про локи, про общие ресурсы потоков и т.д. Сказал что как альтернативу можно использовать functional programming, чтобы изолировать операции на каждом потоке.

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

#story #amazon
1👍1
Round 2.
Сел обратно на рабочее место. Подключились 2 чувака. Рассказали о себе. Главный из них поспрашивал LP вопросы. Что то типа “Бывали ли случаи когда ты не вписывался в дедлайн?”, “Было ли такое что ты помогал коллеге?” и т.д. Болтали так минут 20. Потом мне дали System Design кейс. Построить некую рекомендательную систему и написать алгоритм для этого. Я прифигел, так как до этого я только юзал готовые алгоритмы. Я собрал требования. Нарисовал общую схему такой системы. Сказал что будет 3 этапа, сбор данных, подсчет рекомендаций и в конце сам API рекомендаций. Нарисовал компоненты. Потом нарисовал как буду собирать данные, в каком формате они будут храниться, сколько примерно у меня будет данных в террабайтах. Потом нарисовал как буду обрабатывать данные и как буду записывать результаты. Написал очень тупой алгоритм для рекомендаций. Чувак поспрашивал про то как работает шардинг баз данных. Я рассказал что знаю. Мы немного пообщались и на этом все. Я чувствовал себя уже не так уверенно после этого собеседования. Я болтал без умолку и мог упустить фидбек от интервьюера. Это жирный минус.

Round 3.
LP вопросы. Потом чувак дал мне 2 вопроса и сказал чтобы я выбрал какой мне нравиться больше. Первый был задачей на стэки уровня Hard, второй Medium на графы. Так как я хорошо знал графы и не хотел мудохаться с Hard задачей выбрал второе. Решил быстро. Мы поболтали. И на этом все. Я чувствовал себя уверенно после этого собеседования.

Round 4.
LP вопросы. Чувак попросил задизайнить модуль который бы искал кое что по определенным критериям. Я написал рекурсивный алгоритм, потом начал переделывать его на итеративный, хотя интервьюеру было ок с рекурсией. Я настоял чтобы был итеративный, так как легче дебажить и не будет проблем с лимитом кол стэка. Я начал рефакторить и долго тупил. Чувак начал нервничать и говорить чтобы я оставил как есть, но я настоял на своем (не делайте так) и в итоге через пару минут сделал итеративный вариант. Потом меня спросили как бы я изменил свой модуль если бы мне нужно было обрабатывать динамическое количество критериев. Я спер идею query builder из PHP, Laravel, Yii  и сделал что то похожее. Интервьюер похвалил мой подход. Мы поболтали. И на этом все. У меня были смешанные чувства после собеседования. С одной стороны я все решил и меня похвалили. С другой я перечил интервьюеру и долго мусолил итеративный подход, это могло сыграть против меня.

#story #amazon
👍1
Какие ощущения?

После собеседования были смешанные чувства. С одной стороны я вроде сделал все правильно и задачи были достаточно легкими. Но с другой стороны меня не покидало ощущение что это я не смог углубиться в проблему и решил ее неверно. Из минусов я несколько раз перечил интервьюеру, тупил при решении задачи и что то там накалякал на SDI. Против меня еще играет нынешняя ситуация с вирусом. Из плюсов я решил все задачи оптимальным путем, расписал все за и против разных подходов, решал достаточно быстро и без багов. Меня даже пару раз похвалили. В итоге у меня ощущение 50/50. 50% что меня пошлют и 50% что пропустят дальше. Сказали что ответ будет на следующей неделе. Будем ждать. К концу интервью был очень измотан, но не мог долго уснуть. Не мог долго собраться с мыслями чтобы все расписать.

#story #amazon
👍1
Позвонил HR из Амазона. Сказала стандартную фразу “We unfortunately will not be moving your application forward…”, что означает соси палец, ты нам не подходишь. Фидбэк отказались давать, но сказали что были бы рады увидеть меня через годик. Я чет взгрустнул.

Почему меня отшили?
⁃ Я точно  завалил SDI, так как нес бред и чересчур волновался. Задавал неверные вопросы. Нужно больше практики.
⁃ Я несколько раз перечил одному интервьюеру и оптимизировал код который он просил оставить в покое. Не делайте так.
⁃ Возможно мои LP ответы были не достаточно убедительными. Стоило уделить больше времени на проработку историй.
⁃ В связи с вирусом компания может быть излишне избирательна, так как цена ошибки сейчас выше.  

Минус один. Остался еще Google и Facebook. Делаю ставку на Google, так как в Facebook слишком высокая позиция для меня. Буду готовиться дальше. Главное не падать духом.

#story #google #facebook #amazon
👍2
На следующей неделе будет 2 онсайт собеса в Google и Facebook. Готовлюсь потихоньку. За последние несколько собеседований понял что с алгоритмами я справляюсь уже неплохо. Главное не спешить и задавать вопросы, прорабатывать edge кейсы. Спешка и волнение мои главные враги.

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

Так же у меня очень слабая математика, я очень плохо считаю в уме, это сейчас играет против меня. К примеру, надо быстро посчитать если в день на сайте  бывает 2 миллиарда пользователей, сколько серверов нужно чтобы эти запросы обрабатывать? Ну и ты начинаешь думать 24 часа, в часе 60 минут, в минуте  60 секунд это будет 86400  секунд в день. Округлим до 87000 чтобы было легче считать. Если в день заходит примерно 2 миллиарда людей, то это примерно 2 млрд/87000 ~ 250K пользователей в секунду. Если представить что один сервер будет держать 5K одновременных соединений, то это примерно  250K/5K ~ 50 серверов. Точность тут не нужна, но нужно уметь хотя бы примерно делить и умножать и не путать нули, чтобы не ляпнуть терабайт вместо гигабайта, что очень важно. Короч нужно много практики. Поэтому стараюсь делать математички операции в уме, потом перепроверяю на калькуляторе.  

Чтобы практиковать System Design использовал Pramp пару раз, но оба раза опыт был отрицательный, попадались очень слабые ребята. Поэтому написал знакомым чтобы они провели со мной несколько сессий System Design по телефону. Я буду собеседовать человека 1:1, а потом он меня, по часу каждый, а потом мы пишем друг на друга фидбэк, что делали хорошо, а где надо подтянуть. Пока откликнулся один человек и мы провели одну такую сессию. Сессия была очень полезна для меня, так как я начал лучше чувствовать структуру собеседования и получил очень полезный фидбэк.

Вот что мне написал мой интервьюер:
- Don't assume something you don't know ahead
- Try to think about use cases, put yourself in the center of service, like you are customer
- Don't waste time on things that interviewer doesn't want to cover
- You struggled to design the tables and relationship between them
- Be consistent on naming to make the conversation clear

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

Что я понял:
⁃ Нужно опираться на свой опыт и знания, не использовать готовые архитектуры из интернета. Представить как бы ты разрабатывал такое приложение в реальности. Шаг за шагом уточнять детали у интервьюера.
⁃ Чтобы улучшить свой опыт много читать, смотреть разные варианты решения. Не запоминать, по стараться понять логику за этим и учить концепции.
⁃ Практиковать, даже простые архитектурные решения применять у себя на работе или на домашнем проекте. К примеру индексы, кэш, load balancer и т.д. Это все простые вещи, но мы не всегда думаем как это применять и как это может улучшить архитектуру приложения.
⁃ Относиться к интервью не как к интервью, а больше как к brainstorming. Представить что вы обсуждаете решение с коллегой.
⁃ Не кидай на стол технологии и термины о которых ты не имеешь понятия. Тебя закопают.
⁃ Говори только о тех вещах с которыми ты хорошо знаком. Если ты хорош в дизайне API говори об этом, если ты хорош в структуре данных расскажи как ты будешь хранить данные и т.д.
⁃ Будь честен и не строй из себя Батьку.
⁃ Слушай интервьюера, записывай детали проекта, дай интервьюеру возможность подсказывать и вести тебя. Интервьюеру порой интересны определенные аспекты проблемы, поэтому старайся понять что он хочет узнать. И если он куда то тебя ведет, то слушай его.
⁃ Общайся и задавай правильные вопросы.

#story #interviewtip #systemdesign #facebook #google
👍2
Есть в архитектуре систем (System design) понятие “Back-of-the-envelope calculation”, что означает быстрый и примерный подсчет каких либо цифр без использования калькулятора. Выражение пошло от того что, иногда мы берем для быстрых подсчетов на бумаге какой нибудь маленький кусок типа страницы тетради, или салфетки, или ненужный конверт как в нашем случае.

Эта техника широко применяется на System Design собеседованиях для подсчёта объема данных, количество запросов в секунду и т.д., что помогает понять масштабы системы. Точность тут не главное, но главное сделать подсчёт таким образом чтобы это было максимально близко к реальным цифрам.

Как я уже говорил, у меня большие проблемы с подсчетом в уме и поэтому я искал какие нибудь лекции на эту тему, чтобы найти какие либо хорошие практики и наткнулся на эту очень интересную лекцию.
https://youtu.be/-_-Vg_B3nzM

#interviewtip #systemdesign
🔥1
Я прошел 2 онсайт собеседования на этой неделе, должен вам 2 фидбэка. Постараюсь коротко.

Google

Было 3 кодинг собеседований утром, обед, потом 1 LP собеседование, 1 System Design. Каждое собеседование длилось час. Кодинг часть была не сложной. И решал задачи я уверенно. LP тоже вроде все ответил верно. System Design  я тупил жестко. Нужно было сделать кэш систему для Google Search, супер стандартная проблема. Я долго не мог понять сколько серверов нам надо. Я думал что нужно отталкиваться от количества запросов который каждый сервер может обработать, но оказалось что этого не достаточно и нужно еще учитывать network bandwidth. Еще я не смог поделить 1000/800. Я сказал что это будет 0.3, тогда как это будет 1.3. Вот такой вот у меня уровень математики.

Какие ощущения?

+
Решал задачи уверенно, минимум багов, тестил, говорил свои мысли.
+ LP отвечал уверенно, рассказал о моем опыте. Тут тоже вроде все норм.
- System Design был просто атас. Я чувствовал себя школьником который решил откликнуться в Google и случайно попал на онсайт.

Я думаю что мои шансы 50/50. Так как я показал хороший результат на кодинге, но к сожалению у меня был очень слабый System Design. Нужно больше практики.


Facebook

Утром был System Design и Кодинг, обед, LP и еще один Кодинг. Каждое собеседование длилось 45 минут. На кодинге давали 2 задачи, одну на разогрев, вторую уже посложнее. Я все раскидал, задачи уровня Easy/Medium на LeetCode. Уложился в 45  минут. System Design попалась тема, которая мне очень хорошо знакома, это локализация приложения и много чего еще. Поскольку у меня был опыт в этом я был на волне, описал все плюсы и минусы разных подходов, описал реализацию классов, описал как это все будет храниться и т.д. С математикой тут было проще. В основном умножения, с умножениями у меня лучше.


Какие ощущения?

+ Решал задачи уверенно, минимум багов, тестил, говорил свои мысли.
+ LP отвечал уверенно, рассказал о моем опыте. Тут тоже вроде все норм.
+ Раскидал System Design. (По крайней мере я так думаю)
- Одну задачу я решил неверно, поскольку не до конца понял проблему. Интервьюер меня поправил, я это быстро исправил.
- Было несколько мелких багов в другой задаче. Исправил с подсказкой интервьюера.

Тут я позволю себе смелость сказать что ставлю 40/60, 40 - что мне откажут,  60 - что пропустят. Но опять же против меня играет то что это высокая позиция, вирус бушует и мест мало. Поскольку я не показал себя на 200%, могут сказать что я хорош, но не настолько чтобы меня брать в команду. Могут докопаться что иногда я был не инициативным и не вел разговор, так как бывало что я неправильно понимал задачу и не понимал что делать дальше. После собеседования вышел уверенным в себе.

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

Update

Хочу сделать короткий пост о том как попасть на собеседование в Google, Amazon, Facebook (и как завалить его). Так что не теряйте меня.

#story #facebook #google
👍2
Как попасть на собеседование в FAANG (Facebook, Apple, Amazon, Netflix, Google) и завалить его.

Это короткий пост о том как попасть на собеседование в FAANG. Тут не будет глубокого анализа.


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


Шаг 0. Подготовка.
Как понять что ты готов:
⁃ Технический английский и умение вежливо обшаться
⁃ Базовое знание структур данных. (Arrays, LinkedList, Stack, Queue, Heap, Graph и т.д.)
⁃ Базовое знание алгоритмов (Binary Search, BFS, DFS и т.д)
⁃ Если ты можешь решить Easy/Medium задачи на Leetcode за 15 минут в среднем
⁃ Если ты можешь решить Hard задачи на Leetcode за 20-30 минут в среднем
⁃ Решил как минимум 200 задач на Leetcode за все время. (50% - Medium, 40% - Easy, 10% - Hard)
⁃ Если есть опыт в архитектуре приложений. (Если ты только закончил универ, то это не важно. Если у тебя >= 3 лет опыта, то это обязательно. )
⁃ Есть базовые понятия о серверах, сетях, базах данных и т.д.
⁃ Есть базовые понятия о том как работают компы, треды, процессы, память и т.д. Университетская программа.
Если что то из этого отсутсвует, то бегом учить. В интернете очень много видосов, курсов и статей на эту тему. Все бесплатно.

Некоторые ресурсы я уже шейрил на канале:
⁃ Leetcode. (Начинай с простых задач, и усложняй потихоньку. Читайте Discussions если не смог решить)
⁃ Канал Tushar Roy на YouTube.
⁃ Канал Hackerrank на YouTube. (Тут есть несколько крутых лекций по структурам данных)
⁃ Cracking the Coding Interview. (Не читал его полностью, но использовал как энциглопедию)
⁃ Канал Gaurav sen на YouTube. (Тут больше про архитектуру)
⁃ Канал CS Dojo на YouTube. (Посмотрите старые видосы по алгоритмам)
Algoexpert.io (платный)
Да, да я слишком много сижу на YouTube.

Первые пару месяцев будешь чувствовать себя тупым куском говна который даже не может решить Easy задачу. Прими это. Прочувствуй эту боль. Это нормально. Решай по одной задаче в день. Если не смог решить в течении дня, то смотри Discussions и смотри объяснения. Решай заново. Будь последователен и постоянен в своей подготовке. Мне понадобилось пол года чтобы от человека который не может написать Bubble Sort стать человеком которого пригласили на онсайт в Google.


Шаг 1. Сделай резюме.
Писал об этом уже тут https://t.me/hiremegoogle/5


Шаг 2. Каким-либо образом попасть на собеседование.
Делай этот шаг только после подготовки. Есть много способов. Я опишу те с которыми я сталкивался. Список отсортирован по мере эффективности.
⁃ Реферал. Попросить человека который уже работает в FAANG закинуть туда ваше резюме. А если у меня нет таких знакомых? Рад что ты спросил. Поспрашивай знакомых знакомых, жену, одногруппников, родственников и т.д. Кто-то да найдется. Вероятность что тебе ответят 90%.
⁃ Написать рекрутеру в Linkedin. Вы можете найти профиль рекрутера в Linkedin и попросить чтобы они вас рассмотрели. Подробности на есть на канале CS Dojo на YouTube. Вероятность ХЗ, я так не делал. Но говорят он эффективнее чем просто откликнуться на сайте.
⁃ Просто откликнуться на сайте. Заходите на сайт компании и оставляете там отклик. Вероятность 50%.

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

#interviewtip #algo #systemdesign
👍4
Шаг 3. Не завалить.
Я максимум добирался до онсайта. До предложения о работе пока не доходило. Если сделал все как я описал в Шаге 0, то все должно пройти хорошо. Ты сможешь пройти телефонное собеседование и тебя бесплатно скатают в Лондон или Цюрих или в Ванкувер. Ты будешь 4 дня бесплатно жить в отеле за счет компании и побываешь в офисе этих компаний (если не будет пандемии или ты будешь проходить все этапы онлайн), и сможешь рассказывать друзьям как ты завалил интервью туда. Будет весело.

#interviewtip #algo #systemdesign
👍3
Получил фидбэк от Google и Facebook. Момент истины.

Google

Рекрутер сказал что есть 2 новости хорошая и плохая.

Плохая.
Сказали что 3/5 собеседований (1 LP, 2 coding) я показал себя отлично и они сказали что я большой молодец. 2 собеседования (1 coding, 1 System Design) сказали что я не смог дотянуть до уровня качества компании. По итогам компания не может продолжать рассматривать меня на позицию Software Engineer, так как я еще слабоват по их меркам. Мне сказали “we will not be moving forward with your application”

Хорошая.
Поскольку большая часть собеседований прошла хорошо меня решили не оставлять на следующий год и предложили рассмотреть позицию TSE (Technical Solution Engineer). Это техническая позиция где меньше кодинга и больше работы с людьми и больше дебаггинга. Это примерно то чем я занимаюсь сейчас в нынешней компании. Мне отправили описание позиции. Сказали что будет еще дополнительное собеседование. Сейчас договариваюсь по времени.

 Facebook

Опять же рекрутер сказал что есть 2 новости хорошая и плохая.

Плохая.
Сказали что я показал себя отлично на кодинге и LP. Но в одном кодинге интервьюер неверно объяснил задачу из за чего я неверно решил ее по началу и много времени потерял на легкой задаче. И System Design был хорош, но было мало “positive signals” как они говорят, хотят больше инициативности, больше рассуждений насчет плюсов и минусов разных решений, и не привязываться к одному решению. В итоге они получили смешанные чувства после собеседования и не смогли прийти к единому решению.

Хорошая.
Чтобы уже окончательное разобраться мне назначили еще 2 дополнительных собеседования. 1 кодинг и 1 System Design. Если я пройду меня возьмут, если нет то окончательно отошьют. Придется откликаться повторно через год. Сейчас договариваюсь по времени.

Итоги

Я надеялся что к этому времени уже все решиться и я уже смогу расслабиться и сфокусироваться на работе. Я уже пару недель не решал задачи на Leetcode. И тут хренак, оказывается еще не конец, а только все начинается и будет еще куча собеседований. Нужно начать готовиться и уже дожать оставшиеся собеседования, выложиться на все 200%. Хуже уже не будет.

#story #facebook #google
👍4