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

📬 Насчет сотрудничества и обратной связи писать сюда - @hiremegoogle_feedback_bot
Download Telegram
Я прошел 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
Пока готовлюсь к собеседованиям хотел узнать больше про аудиторию. Кто ты? Какой контент ищешь на этом канале?
Anonymous Poll
38%
Студент, программист
5%
Студент, не программист
38%
Работаю, программистом
12%
Работаю, не программист
7%
Другое
Это будет последняя неделя собеседований в FAANG, по крайне мере пока. На этой неделе мне предстоит 4 собеседования, 2 от Google, 2 от Facebook.

Google

2 собеседования, как я понял это Troubleshooting и Scripting. Это специальные собеседования для позиции TSE. На Troubleshooting будут давать какую то проблему, мол “Пользователь не может увидеть страницу A” и мне надо будет показать как я буду дебажить и исправлять причины ошибки. На Scripting будут смотреть как я пишу письма, это нужно на случай коммуникации с клиентом. Тоже будут даваться разные ситуации и я буду обязан составить толковое письмо клиенту. Тут главное это вежливость, хороший английский, правильный тайминг (когда отвечать), умение разжёвывать причину и решение ошибки, прикладывать полезные ссылки и картинки и т.д. Поскольку нет каких то правил и курсов на эту тему я просто почитал статьи в интернете на тему как правильно общаться с клиентом. Отдельной практики я тоже не делал, так как это все то чем я занимаюсь на нынешней работе. Насчет  Troubleshooting немного почитал про TCP/IP, UDP, HTTP и про API, REST, gRPC и т.д чтобы освежить знания.

Facebook

Тут по интереснее будет. 2 собеседования, Кодинг и System Design. Для кодинга начал снова решать задачи на Leetcode по тэгу Facebook. Для System Design провел мок собеседование со знакомым. Планирую еще почитать и разобрать несколько кейсов с курса Grokking System Design Interview.  

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

Я измотан умственно. Тяжело одновременно совмещать подготовку к собеседованию, работу и семью с ребенком. Приходиться какие вещи ставить на паузу и выделять время для решения задач. Стараюсь пару часов в день выделять и решать примерно 2-3  задачи уровня Hard/Medium на Leetcode.

По уровню сложности самый тяжелый будет Facebook SDI, потом Facebook Coding, потом Google Troubleshooting, потом Google Scripting. Надеюсь попадется тема которую я уже делал.

На удивление оказывается что большая часть аудитории это Рабочие, я думал будут студенты. Это круто! Пробую потихоньку добавлять интерактив голосование, комменты, реакции и т.д чтобы понимать какие темы вам больше интересны.

#story #facebook #google
👍2
Сегодня было собеседование с Google на позицию TSE (Technical Solutions Engineer). Было 2 собеседования по 45 минут, один за другим без перерыва или “back to back” как любят говорить рекрутеры.

Что там было?

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

Второе собеседование было хрен знает что. Это некая смесь System Design и Coding. Началось с того что интервьюер спросил меня как бы я оптимизировал веб приложение. Я начал кидать все что было в голове: cache, gzip, сжатие статических файлов, CDN, уменьшить количество вмешательств в DOM в загрузке, убрать кастомный скорлл и т.д. Потом был вопрос про оптимизацию сервера под рост запросов. Тут тоже стандартные ответы типа replication, load balancing и т.д. Потом про то как оптимизировать базу данных,  replication, sharding, индексы, оптимизация медленных запросов, кэш, batch requests и многое многое другое. На этом этапе я начал немного тупить, так как задача была оптимизация базы данных под большие нагрузки, но интервьюер плавно перешел на тему оптимизации скорости базы данных. Replication и sharding я рассказал, но про индексы и оптимизацию медленных запросов забыл, были подсказки. Но я сразу подхватил интервьюера и дал полный ответ. Оставалось немного времени и чувак спросил задачу связанную с поисками по логам. Я успел написать только концепцию моего алгоритма и время закончилось, я не успел написать код.

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

Ощущения смешанные. Вопросы во многом “open ended”, то есть в них нет одного правильного решения, поэтому трудно судить насколько ты прав. Но по моим ощущениям первое собеседование прошло хорошо, второе начал хорошо, но концовку немного смазал. Старался давать разные варианты решения одной проблемы, попутно рассказывая плюсы и минусы разных подходов. Я думаю фидбэк должен быть положительным, но могут сказать что уровень пока не доходит до уровня Google, потому что общая производительность была в ок, но не умопомрачительно. Я ставлю 60/40, 60% что пропустят, 40% отошьют.

#story #google
👍2
Пару дней назад прошло мое дополнительное собеседование с Facebook. Было 2 собеседования по 45 минут, System Design и Кодинг.

Что там было?

System Design.
Зашел интервьюер, мы немного поболтали. Он дал задание сделать API дизайн для одного из сервисов компании. Я начал задавать уточняющие вопросы, нужно ли касаться Scalability системы, серверов, базы данных и т.д или он хочет сфокусироваться только на API. Интервьюер сказал что ему интересен только API и то как я буду это оптимизировать под страны с медленным интернетом.

Я немного рассказал про то как можно хранить данные чтобы сделать быстрым чтение, но не стал уходить глубоко и старался не уходить от главной темы. Начал с того какой можно протокол использовать для передачи данных. Упомянул REST vs gRPC, JSON vs Protobuf, HTTP 1.1 vs HTTP 2.0   и т.д. Рассказал про плюсы и минусы разных подходов. В итоге остановился на связке gRPC+Protobuf+HTTP 1.1. gRPC+Protobuf потому что это внутренний API и мы будет отправлять большое количество данных и нужно делать это с минимальным размером запроса. gRPC для этого подходит идеально. Если бы это был публичный API можно было бы обойтись REST+JSON, так как он более распространён и более читабелен. Хотя по умолчанию gRPC работает с HTTP 2.0, я предложил использовать его с HTTP 1.1, так как в бедных странах может быть старое железо и софт которое не поддерживает HTTP 2.0, а gRPC может работать с HTTP 1.1 если сделать серализацию в JSON строку. Построил модели для request и response, рассказал про реализацию пагинации. На этом закончилось время и я не успел обсудить оптимизацию глубже.

Coding.
Зашел интервьюер, мы немного поболтали. Интервьюер сказал что хочет спросить 2 задачи.

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

Вторая задача была связана со строками. Я опять начал рассказывать brute-force решение, и опять интервьюер меня прервал и недвусмысленно намекнул на финальное решение. Я начал тупить, так как надо было работать с индексами, а это очень запутывает, плюс я не сам пришел к решению. Интервьюер увидел что я запутался и предложил вынести работу с индексами в абстрактную функцию, что я и сделал. Это сильно упростило решение и я быстро написал решение. Интервьюер указал на один edge case который я упустил, быстро исправил.

Чтобы было дальше?

Я решил написать свой фидбэк своему рекрутеру, так как второе интервью было очень сумбурным и странным. Только я сел писать, как получил письмо от рекрутера, спустя буквально пол часа после собеседования. Он там писал что уже получил фидбэк от интервьюеров и они позитивные (“it’s looking positive”), так же он сказал что после обсуждения результатов отправит их в понедельник на рассмотрение в Engineering Directors, что бы это не значило. Сказал что финальные результаты будут уже на следующей неделе.

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

Первое собеседование прошло хорошо, но я не смог охватить все темы. Второе прошло хрен знает как, я жестко тупил, интервьюер меня постоянно подгонял. Ощущение опять смешанное. Я ставлю 50/50.

#story #facebook
👍31
Пока жду результатов собеседования, хотел узнать какие будут ваши ставки. Какие по вашему будут результаты?
Anonymous Poll
21%
Пройду в Google, Warsaw
42%
Пройду в Facebook, London
31%
Пройду в обе компании
5%
Не пройду никуда и буду сосать палец
Кто то нагнал трафика на мой канал. Ппц вас много тут стало. Ну я должен рассказать итоги итогов.

Google
Созвонились с рекрутором насчет позиции TSE. Он сказал что мои результаты все еще не однозначны и направил меня на собес с Hiring Manager. Она поспрашивала меня про мою мотивацию, мол ты же Software Engineer, нафига тебе сдался Technical Solutions Engineer. Я начал втирать что мол это возможность поработать в Google, набраться опыта, также потому что я уже работаю на похоже позиции сейчас.

Hiring Manager сказала что у них нет в данной момент позиции TSE Platform (веб разработчики), но они ищут ребят для TSE Storage где будет больший упор на знание SQL если мне это интересно то они готовы меня рассмотреть. Я сказал что хотел бы сфокусироваться на Веб и не влезать глубоко в SQL, делать упор на мои основные навыки. На что получил ответ что то типа “Ну хрен знает чувак, мне надо будет тогда обсудить все с твоим рекрутером”. Но был намек что меня отошьют, так как нет подходящей позиции. Посмотрим как пойдет.

Facebook
За день до того как я уехал на летний отпуск мне позвонил мой рекрутер. Сказал что то типа “I have good news for you…”, я такой воу-воу полегче парень, и он такой “we would like to make you an formal offer…”, и все я уже дальше ничего не слышал. Все что было в моей голове это “Facebook?! London?! E5?! Серьезно?!”. Я прифигел, мягко говоря. Мы немного поболтали и он сказал что дальше уже будут вопросы по ЗП, переезд, виза и всякое прочее.

Это значит что тебя берут?
Формально да. На практике мне нужно будет сделать кучу бумажной работы прежде чем я начну работать там. Это займет по мои расчетам от 3-4 месяцев. Если на одном из этих этапов что то сломается, мне откажут в визе или Великобритания закроет границы или вдруг не будет доступных мест для меня, что угодно, я могу остаться где я есть сейчас. Поэтому не хочется говорить “гоп”, пока я не подписал все необходимые бумаги. Но получается я получил офер от Facebook, выкусите те 15 человек которые думали что я будут сосать палец (15-ый это я сам). Cейчас веду переговоры по ЗП.

#story #facebook #google
🔥51
​​Обговорили ЗП и всякие ништяки с Facebook.

ЗП или как говорят тут TC (Total Compensation)  состоит из 3 частей.
Base salary -  базовый оклад, то что ты получаешь стабильно в конце месяца. Каждый февраль ЗП увеличивается на несколько процентов в зависимости от продуктивности в течении года.
Bonus - дополнительная денежка поверх  Base Salary.  Обычно это какой то процент от твоей ЗП в зависимости от твоей продуктивности. Хорошо - 15%, Очень хорошо - 30%, Окуительно - 40% и т.д. Процентаж пересчитывается 2 раза в год.
Equity - это тоже денежка, но в виде ценных бумаг, акций компаний. Их дают на 4 года, и каждые несколько месяцев эту сумму по частям тебе дают. К примеру если ты договорился на $200K на 4 года, то тебе ежегодно будут давать по $50K.

То есть Base salary+Bonus+Equity = TC (Total Compensation).

Сколько ты зарабатываешь?

Сколько платят в Facebook можно посмотреть на картинке, суммы очень близки к действительности. Но не обольщайся, это сумма Gross Salary, то есть сумма ЗП без вычета налогов. В Великобритании достаточно конские налоги в 40% (на самом деле там работает система прогрессивного налога, но я считаю грубо). То есть получается что почти половину твоих кровных забирает государство. Там могут быть какие то льготы, но я пока не в курсе о них. ЗП с вычетом налогов называется Net Salary или  Take Home Salary, те жалкие гроши которые ты получаешь на руки, после того как оплатил налоги.

Что еще дает компания?

⁃ Оплата визы, билетов на самолет для всей семьи.
⁃ Оплата отеля на 2 месяца, пока не найдешь квартиру в городе.
Relocation bonus - денежка на всякие траты во время переезда (примерно $20K-$30K).
⁃ Перевозка домашнего барахла.
⁃ Крутой офис.
⁃ Рабочий комп и телефон  (Айфон и Мак).
⁃ Мед страховка.
⁃ Деньги на транспорт.
⁃ Деньги на химчистку.
⁃ Бесплатная еда в офисе (привет Коронавирус).
⁃ Бесплатное посещение и лечение зубов у дантиста.
⁃ Деньги на спортзал.
⁃ 25 дней отпуска в году.
⁃ Декретный отпуск если заделаю еще детей.
⁃ И много чего еще.

Что дальше?

Мне будут делать Background Check и проверять не напиздел ли я о моем образовании и о прошлом опыте в резюме. Потихоньку собирают документы и данные для разрешения на работу. Надо привезти квартиру в порядок, чтобы при сдаче не было проблем, починить то что дочь тут наломала. Надо доделать проекты на работе, оставить доки чтобы ребята потом смогли подхватить. Настроение хорошее. А какое у вас настроение?

#story #facebook
👍3
В самом начале прохождения собеседования мне не хватало менторства. Я готовился к собеседованиям и не знал правильно ли я все делаю или нет. Очень важно при подготовке к собеседованиям иметь возможность поговорить с кем нибудь у кого есть опыт в этом, чтобы знать в правильном ли направлении ты движешься.

В этом плане мне сильно помогли 2 человека. Clément Mihailescu, основатель AlgoExpert.io, который я использовал для прокачки алгоритмов и Аскар Сатыбалдиев, который познакомил меня с несколькими ребятами которые тоже проходили собеседования в FAANG. И общаясь с этими ребятами я понимал где я допустил ошибку и что я могу улучшить.

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

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

Что ты можешь спросить?
⁃ Все что касается подготовки и прохождения собеседования в FAANG.
⁃ Не стесняйтесь задавать вопросы, даже те которые могут показаться вам глупыми.
⁃ Лайкните вопрос, если вы видите что ваш вопрос уже спросили.
⁃ Лайкните вопрос, если вам понравился какой то вопрос.

Как я буду отвечать?
⁃ Я буду смотреть на те вопросы которые чаще спрашивают или больше лайкают и буду отвечать в первую очередь на них.
⁃ Я буду писать ответы в канал в виде постов.
⁃ Если есть несколько простых вопросов, буду объединять их в один пост.
⁃ Я буду смотреть комментарии до конца Августа, и несколько раз в неделю постить ответы на вопросы.

Залетайте в комментарии и задавайте свои вопросы.

#interviewtip #algo
👍3
И так у нас накопилось около 30 вопросов. Некоторые из них пересекаются, некоторые очень специфичные. Всем спасибо что делитесь и лайкаете.

Больше всего набрали лайков вопросы про подготовку, про мой прошлый опыт до прохождения интервью, про затраченное время от нуля до офера. Погнали!
Факты обо мне, чтобы вы понимали мой уровень, до 2018 года, до начала подготовки:
Учился в сельской школе на казахском языке в регионе Казахстана до 11 класса.
Не прошел в КТЛ, не смог пройти тест в 7 классе.
В 9 классе отец отдал меня на курсы английского, 2 года учил. Поэтому у меня хороший английский.
После окончания школы подавал в СДУ в Алматы, не смог поступить на грант. Учился на платном.
GPA был 2.8/4. Чуть не ушел на ретейк по математике. Чуть не ушел на ретейк по компьютерным сетям.
Работал в основном в мелких и средних ИТ компаниях. В разное время клепал сайты под заказ, поддерживал интернет магазины и веб порталы.
Один раз дропнул сайт компании, один раз дропнул базу данных. После этого начал многие вещи автоматизировать.
Думал что алгоритмы нафиг не нужны для работы в Казахстане(отчасти я был прав), до этого ничего не знал про алгоритмы.
Dijkstra, BFS, DFS, Binary Search - это были просто термины которые я когда то слышал на лекциях. На деле не имел никакого понятия что это такое.
Знал PHP, Java, Python, JavaScript, MySQL - стандартный набор вэб разработчика, который достался после универа.
Умел писать простой CRUD.
Умел дизайнить  API, хорошо знал теорию REST API. Читал посты в интернетах.
0 знаний про распределенные системы.
0 знаний как работает железо. Я даже не знал что такое ядра в процессорах (чтобы вы понимали мой уровень).

#story
👍2
Как я готовился? Сколько ушло времени?

Список ресурсов я публиковал уже тут https://t.me/hiremegoogle/46

Если вы послушаете историю ребят которые попали FAANG, то в большинстве случаев ни упускают ту часть где они учили алгоритмы. Их рассказы звучат типа “Я учился в универе, Я подался в Google, прошел собеседование и меня в взяли в на работу в Google, Цюрих”. Хотя казалось бы алгоритмы это 90% собеседования, почему люди про это не говорят. Мне это не понятно. Я думаю про это надо рассказывать. Далее рассказываю как я нарабатывал знания алгоритмов.

У меня ушло примерно 1.5-2 года чтобы получить офер. Я начал готовиться осенью 2018 года. Начал тупо решать задачи на Hackerrank. Решал примерно 1-2 задачи в неделю, решал очень медленно даже легкие задачи. Примерно через пару тройку месяцев уже решал 1-2 задачи в день, уровня Easy, уровнь Medium так же решал в течении недели. Читал Dicussions, смотрел лекции на YouTube. Позже пересел на Leetocde, так как там вопросы более близки по контексту к тем что спрашивают на собеседованиях и там отличное сообщество. Задачи решал ежедневно, по 1-2 часа, даже на выходных. Участвовал в онлайн контестах 1-2 раза в месяц. В свободное время либо решал задачи, либо, смотрел лекции. Пытался решать на разные темы, неделю Графы, неделю Строки, неделю Массивы и т.д.

Параллельно я подавался в крупные Казахстанские и Европейские компании, чтобы отточить навыки собеседования и посмотреть какие технические навыки требуются на рынке. Подавал в Германию, Нидерланды, Норвегию, Литву, Польшу и т.д. Просто искал интересные компании в блогах и на  LinkedIn, и откликался на их вакансии. Про резюме писано тут https://t.me/hiremegoogle/5.

В весной 2019 года начал отправлять свое резюме в Booking, Amazon, Facebook, Google, без реферала, попытка не пытка. К этому времени я решал задачи более менее уверенно, но все равно очень медленно. Я понимал что меня отошьют, но было интересно как далеко я зайду. Я понимал что все равно подамся еще раз через год. Booking дали онлайн тест, который я сдал, обещали перезвонить и не перезвонили. Amazon завалил онлайн тест. Facebook посмотрели мое резюме и сразу отшили. Google единственные кто допустили меня до телефонного интервью. Я его прошел, мне попался вопрос который я на днях решал 2-3 раза подряд, чтобы лучше понять рекурсию. И меня позвали на онсайт в Цюрих, который я очевидно завалил. Сейчас я понимаю что мой уровень тогда был очень низкий.

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

Тогда я и наткнулся на AlgoExpert. Это своеобразный Leetcode, только с ограниченным пулом задач на все базовые темы и с видео лекциями, почему и как это решается. Я понимал что это может быть хорошей инвестицией и купил годовой доступ. Я сгруппировал задачи по категориям и решал категория за категорией в течении 2 месяцев, каждый день по 1-2 часа. После того как я все исчерпал, я начал решать все задачи, но теперь уже в случайном порядке. Если раньше я решал одну Medium задачу от часа, до недели, теперь по истечению 4 месяцев я решал Medium задачу за 15-30 минут. После этого мне стало скучно решать одни и те же задачи и я перешел обратно на Leetcode и уже просто набивал руку. Это было круто, это ощущается как суперспособность, ты видишь задачу и уже видишь потенциальные речения задачи. Чтобы справиться со стрессом я использовал Pramp. 1-2 сессий в месяц. Он бесплатный. Этой стратегии я придерживался в течении года. Это уже стало привычкой. Во время собеседований я уже решал по 1-2 задачи по 2 часа утром и 2 часа вечером, в общем 3-4 часа в день. #story #interviewtip #google
👍81
Какой я бы дал совет по подготовке по алгоритмам?

По алгоритмам все крайне просто, но долго и муторно:
Учи обязательно базу, теорию.
Составь себе программу и двигайся по ней.
Найди себе ментора, который будет тебе объяснять что ты делаешь не так.
По всему что выше я использовал AlgoExpert. Очень крутой ресурс. Мне никто не платил.
Решай по 1-2 задачи в день и уделяй этому 2 часа день как минимум.
Решай по пропорции 50% - Medium, 40% - Easy, 10% - Hard.
Для набивания рук, я использовал Leetcode.

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

#interviewtip #algo
👍2
​​Вопрос:
Различаются ли интервью для фронтенд и бэкенд разработчиков в faang? Либо всегда будут задачи на алгоритмы?

Ответ:
Вопрос я думаю будет интересен и для мобильных разработчиков. Короткий ответ: отличий по большей части не будет. Стандартный набор алгоритмы, System Design и Behavioural. Как сказал бы Noize MC: “Все как у людей”.

Единственное могут немного отличаться System Design интервью, в ваших ответах и в ожидании интервьюера. К примеру, у тебя спросили про реализацию Facebook Feed API.
Если ты Backend Engineer, то ты будешь рассказывать про API design, про протоколы, возможно затрагивать базу данных и нагрузку.
Если же ты  Frontend Engineer, то ты будешь больше рассказывать о том как ты будешь это отображать, как сделать так чтобы страница не лагала если на нем много постов, как оптимизировать доставку статики и т.д.
Если ты Mobile Engineer, то рассказывать о том как бы сжимал запросы чтобы экономить трафик, как бы ты организовал локальную базу данных и т.д.

Ожидается что у тебя должны быть базовые знания в твоей области. Ожидается что у тебя должны быть базовые знания по Distributed Systems. Нет четкого сценария и ответа на System Design интервью. Опять же ты должен рассказывать либо про то в чем ты силен, либо про то что хочет знать интервьюер. Общайся с интервьюером, он твой друг, он тебе подскажет куда двигаться. И еще раз да, разницы при подготовке особо нет.
👍1
​​Вопрос:
Я хорошо справляюсь с алгоритмическими вопросами, но у меня одна проблема: заикание. И я боюсь что не справлюсь с behavioral interview и с объяснениями решения. Что можете сказать по этому поводу, стоит ли дальше стараться или это всё пустая трата времени?

Ответ:
Это очень интересный вопрос. Я думаю сюда же можно отнести людей с какой либо неполноценностью, людей которые плохо знают английский или людей которые по каким либо другим причинам испытывают трудности с коммуникацией.

Коммуникация это очень важная часть собеседования. Не менее важная часть чем алгоритмы. Под коммуникацией подразумевается очень много вещей:
Приветливость. Поздоровался, спросил как дела.
Вежливость и обходительность
Не “өзінше” ли ты. (Не высокомерный ли ты)
Как ты умеешь слушать
Как ты принимаешь критику и правки
Задаешь ли ты правильные вопросы
Можешь ли ты объяснить свои алгоритм
Умеешь ли ты излагать свои мысли понятно для окружающих
Умеешь ли ты думать вслух, чтобы интервьюер понимал как ты делаешь решения
И много чего еще.

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

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

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

#interviewtip #behavioral
👍1
​​Был интересный вопрос про то как улучшить аккуратность и скорость кодинга. Думаю вопрос очень важный, отвечаю.

Думай на бумаге (или на доске)

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

Как это работает? Перед тем как сесть решать задачу, берешь ручку с бумагой (или доску с маркером), и пишешь свое решение сначала на бумаге.

Шаг 1. Conceptual overview - прежде всего опиши свой алгоритм по шагам, просто словами, как список. Возьми какой нибудь пример и запусти свой алгоритм на этом примере. Записывай как твои данные будут меняться, по мере продвижения по списку. Формат не имеет значения, пиши как тебе удобно. Это поможет проверить жизнеспособность твоего алгоритма, поможет найти  edge case-ы, исправить баги на раннем этапе. Также это хороше упражнение для мозга, который привык к тому что все в разработке уже автоматизировано.

Например, проверка строки на полиндромность:
If string is empty or contains only one symbol return True
Create two pointers, on left end and right end
Create loop from 0 to N/2, check left and right symbols
If pointers are equal, shift them to the center
If pointers are different, return False
Return True in the end
Loop from i: 0 -> 3

i = 0
“ten1et”
^ ^
L R => “t” == “t”
——
i = 1
“ten1et”
^ ^
L R => “e” == “e”
——
i = 2
“ten1et”
^^
LR => “n” != “1” => return False


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

Пример кода на Python:
def isPalindrome(string):
    for i in range(len(string)//2): 
        if string[i] != string[len(str)-i-1]:
            return False
    return True

Ш
аг 3. Запуск - когда ты уже на 100% уверен что твой код работает, можешь переписать его в редактор и попробовать его запустить. Компилятор выкинул ошибку синтакса? Это нормально, будь готов к тому что код не запуститься с первого раза и его надо будет отредактировать, это нормально. После того как код запустился проверь свои примеры на рабочем коде, сравни со своими записками. Если все не сходится в начале это нормально, нужно нарабатывать навыки решения задач на бумаге постепенно.

На фото мой блокнот.

#interviewtip #algo
👍1