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

📬 Насчет сотрудничества и обратной связи писать сюда - @hiremegoogle_feedback_bot
Download Telegram
Факты обо мне, чтобы вы понимали мой уровень, до 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
Решил вспомнить во сколько компаний я откликался и завалил интервью. Это история за последние 2 года, которые я активно готовился. Расписал Название компании, Год, 📍 Локация компании, 🗒 На каком этапе мне отказали, ℹ️ Как я откликался:
Kolesa Group,
2019:
📍 Almaty
🗒 Technical interview
ℹ️ HeadHunter
Khan Group, 2019:
📍 Almaty
🗒 Technical interview
ℹ️ HeadHunter
Emesa, 2019:
📍 Amsterdam
🗒 Technical interview
ℹ️ LinkedIn
Bunq, 2019:
📍 Amsterdam
🗒 Onsite
ℹ️ LinkedIn
Shopify, Oberlo, 2019:
📍 Vilnius,
🗒 HR interview
ℹ️ LinkedIn
Delivery Hero, 2019:
📍 Berlin
🗒 Screening
ℹ️ LinkedIn
GetYourGuide, 2019:
📍 Berlin
🗒 Screening
ℹ️ LinkedIn
Spotify, 2019:
📍 Stockholm
🗒 Screening
ℹ️ LinkedIn
Takeaway, 2019:
📍 Berlin
🗒 Technical interview
ℹ️ LinkedIn
Booking, 2019:
📍 Amsterdam
🗒 Screening
ℹ️ LinkedIn
Facebook, 2019:
📍 London
🗒 Screening
ℹ️ Facebook careers website
Amazon, 2019:
📍 Vancouver
🗒 Screening
ℹ️ LinkedIn
Google, 2019:
📍 Zurich,
🗒 Onsite
ℹ️ Google careers website
Prezi, 2019:
📍 Budapest
🗒 Technical interview
ℹ️ LinkedIn
Personio, 2019 :
📍 Munich
🗒 Technical interview
ℹ️ LinkedIn
Amazon, 2020:
📍 Vancouver
🗒 Remote onsite
ℹ️ Referral
Google, 2020:
📍 Warsaw
🗒 Remote onsite
ℹ️ Referral
Apple, 2020:
📍 London
🗒 Screening
ℹ️ Apple careers website

#story #amazon #google #facebook
👍1
Мысли об аудитории канала

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

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

Притча в тему

Жил-был старик. Он был очень набожным, молился каждый день, помогал людям, никогда не обманывал и не воровал, был очень честным и порядочным человеком.

У старика была только одна мечта: выиграть в лотерею. И он днем и ночью молил об этом Бога. Но проходили года, а его мечта все не исполнялась.

В какой то момент старик умер и попал в Рай.

В Раю он встретил Бога и говорит:
⁃  Боже, я всю жизнь был набожным человеком, молился каждый день, помогал людям, никогда не обманывал и не воровал, был очень честным и порядочным человеком. У меня была только одна мечта: выиграть в лотерею. Почему ты не исполнил эту мою единственную мечту?
И Бог ему отвечает:
⁃ Ты бы выиграл в лотерею, но какого-то хрена ты так и не купил лотерейный билет.

Выводы у нас на канале вы делаете сами.
О провалах

Самое первое что нужно принять то что провалы будут, их будет много, будет не принято слышать отказы снова и снова, но это нормально. За время откликов только в FAANG мне отказывали 6 раз (Google 2 отказа, Amazon 2 отказа, Facebook 1 отказ, Apple 1 отказ).

Когда я проходил собеседование в Google мой рекрутер сказал очень интересную вещь. Она сказала что то типа: “Не расстраивайся если ты не пройдешь собеседование. Многие кто сейчас работает в компании попали сюда со второго или с третьего раза. Я сама попала сюда только со второго раза. ”. Большинство попадает в FAANG не с первого раза. Держи это в голове.

Отказывают не только слабым кандидатам

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

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

Это называется False-Negative (ложный отказ), то есть ложный отказ  хорошему кандидату. Такие случаи False-Negative очень частые и причина таких случаев кроется в подходе к найму. Компания лучше откажет сильному кандидату (False-Negative), чем возьмет в штат слабого кандидата (False-Positive), так как уволить слабого кандидата потом будет сложнее. При возникновении малейших признаков слабины или сомнений тебе скорее всего откажут. Компания будет брать только тех кандидатов в найме которых уверены на 200%. 

Как это исправить?

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

Что будет после отказа?

• Тебя не будут добавлять в никакие черные списки. Это бред и распространенный миф. 
• Твой отказ сейчас абсолютно никак не будет влиять на твои будущие отклики. Тебе не будут занижать баллы за прошлые отказы. Это тоже бред. 
• Если тебе отказали после собеседования, это скорее всего не из за твоего опыта(опыт работы важен только при скрининге резюме), или то что ты из какой то там страны третьего мира, или потому что ты не закончил Гарвард. На отказ влияет только твоя деятельность во время собеседования. Остальное не важно.
• После каждого собеседования тебе дадут обратную связь. Тебе дословно скажут где ты провалился, чтобы ты мог лучше подготовиться (все кроме Amazon). 
• После отказа каждому кандидату дают cooldown. Cooldown это период времени в течении которого ты не можешь откликаться на вакансии компании. Обычно это от 6-10 месяцев. Это делается чтобы кандидаты не заваливали своими откликами рекрутеров и чтобы кандидат мог отдохнуть и подготовиться лучше к следующему разу. То есть по сути в одну компанию можно откликаться 1-2 раза в год, остальное время тратить на подготовку. 
• После отказа HR обычно сообщает период для cooldown. Если кандидат сильный дают мало(6 месяцев), если слабый то больше(до 10 месяцев). 
• После того как истечет cooldown можно сново откликаться как и прежде, без каких либо последствий. 
• Нет лимита на количество откликов, хоть сто раз откликайся. 
• Если твой рекрутер до сих пор работает в компании по истечению срока, можно даже повторно ему написать.

Поэтому чем раньше ты откликнешься, тем быстрее ты получишь опыт собеседований в FAANG и преодолеешь свой страх провала, а так же получишь обратную связь, что поможет тебе лучше подготовиться в будущем. Короче, чем скорее ты откликнешься, тем лучше. Есть отличная статья на эту тему http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
#interviewtip
👍1
Нужно знать алгоритмы

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

С чего начать?

Совет тем кто вообще не соприкасался с алгоритмами, то есть мне два года назад:
• Найди какие либо курсы по Алгоритмам и Структурам Данных  (Data Structures and Algorithms), пройди их. Начни хоть с чего нибудь. Читай и слушай все что найдешь. 
• Почитай что такое Big O Notation, Time and Space Complexity. Попробуй подсчитать за какое время запускается твой код, сколько памяти он использует. 
• Начни читать Cracking the Coding Interview, поделай там упражнения.
• Порешай задачи на LeetCode. Начинай с уровня Easy. Решай по 1-2 задачи в день. Если в течении 2-3 дней не получается решить задачу, смотри решение в Discussions, не трать свое время. Поищи лекции в тему на YouTube. Решай похожие задачи чтобы закрепить тему. 
• Узнай за сколько каждый алгоритм запускается и сколько использует памяти (Time and Space Complexity). 
• Узнай за сколько каждая структура данных запускается и сколько использует памяти.
• Узнай почему именно так, а не иначе. Пытайся понять логику за этими подсчётами. 

Какие алгоритмы учить?

На этот вопрос вам мало кто ответит. Нет какого-то единого списка, так как задачи на собеседованиях постоянно меняются и нет четкой границы. Но есть базовые алгоритмы с которых стоит начать:
• Array Prefix Sum, Range Sum, Two pointers, Is Palindrome, Sliding Window
• Binary Search
• Kadane’s algorithm
• Longest Increasing Subsequence
• Recursion, Fibonacci
• BFS, DFS
• Dijkstra 
• Topological Sort
• Merge Sort, Quick Sort
• Inorder, Preorder, Postorder Tree Traversals
• Union Find
Это далеко не полный список. Посмотрите лекции Tushar Roy на YouTube. Он очень крутой. Посмотрите курс по алгоритмам от Hackerrank на YouTube. 

Какие структуры данных  учить?

Их тоже очень много. Но можете начать с:
• String
• Array
• Stack
• Queue
• LinkedList
• Graph
• Tree
• Heap
Это далеко не полный список. 

Что мне попадалось часто?

Это не значит что тебе попадется то же самое, по этому учи больше:
• String
• Array Prefix Sum, Range Sum, Two pointers, Is Palindrome, Sliding Window (это вообще классика)
• Stack
• Heap (классика)
• Graph
• Tree
• Binary Search
• Recursion
• BFS, DFS, Topological Sort (тоже классика)
• Quick Sort

Challenge 

И вот вам еще упражнение на разогрев. Есть список классических задач по алгоритмам на LeetCode, называется Blind Curated 75. https://leetcode.com/list?selectedList=x48j71o1

Выбери  себе любые 3 задачи уровня Easy, Medium и попробуй решить каждую за 15-20 минут, поставь таймер. Вообщем у тебя уйдет час на это. Напишите в опроснике за сколько вы решали задачи в среднем. Подсчитай Time and Space Complexity своего алгоритма.

#interviewtip #algo
👍2
7 техник которые помогут тебе быстрее решать задачи

Судя по итогам опроса большая часть аудитории канала испытывает проблемы с решением алгоритмических задач. Если ты активно решаешь задачи по алгоритмам в течении полу года и у тебя некоторые задачи отнимают от часа или больше времени, это нормально. Но это средний результат, и есть куда расти. Чтобы пройти собеседование тебе нужно научиться решать задачи за 15-20 минут. Это займет время, но это возможно и достижимо. Сегодня я хотел бы поделиться 7 техниками которые помогут тебе быстрее решать задачи.

Техника 1. Решай много.

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

Техника 2. Найди неоптимальное решение (brute force solution ). 

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

Техника 3. Думай на бумаге. 

Про это я писал тут https://t.me/hiremegoogle/65 

Техника 4. Внимательно перечитай задачу. 

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

Техника 5. Используй HashMap.

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

Техника 6. Используй структуры данных. 

Так как у каждой структуры данных есть свои преимущества и недостатки, подумай какая структура данных может помочь тебе в решении данной задачи и от этого отталкивайся. К примеру, известная задача LRU Cache, где надо быстро (за O(1) время) добавлять и удалять пару key, value, но при этом нужно помнить порядок добавления ключей. Для хранения пары key, value можно использовать HashMap, это очевидно. Но как помнить порядок ключей? Добавлять ключи в массив? Сколько стоит удалить элемент из массива? O(1) если элемент из конца массива и O(N) все остальные позиции в массиве. O(N) это не далеко не O(1). Кто еще умеет хранить порядок, но также умеет удалять данные за O(1) время? Ответ LinkedList, так как для удаление достаточно переставить ссылки. Значит можно использовать связку HashMap+LinkedList и т.д.

Техника 7. Посмотри решение

Ну если совсем не прет, то не чурайся смотреть готовое решение. Это нормально. Все мы это делаем. Как понять когда пора? Если ты не можешь решить задачу в течении  1-2 дней, то смело смотри решение, не трать свое время, не надо никому ничего доказывать. Главные правила тут это:
• Попытайся решить сам по началу.
• Не пытайся просто слизать решение, почитай комментарии и попытайся понять логику за этим решением.
• Почитай про алгоритмы и структуры данных которые были использованы.
• Попробуй написать решение сам, своими руками, без copy/paste.
• Попробуй решать похожие задачи. 
• Через некоторые время, попробуй повторно решить эту задачу, чтобы закрепить материал.  

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

#interviewtip #algo
👍5
Всем привет! Это сообщение для новых ребят которое задаются вопросами о чем этот канал.

О чем канал?

Это анонимный канал. Тут я рассказываю в реальном времени о том как я готовлюсь и прохожу собеседования в крупные ИТ компании, в том числе и в FAANG (Facebook, Apple, Amazon, Netflix, Google  и т.д.), также делюсь полезными советами. Изначально это был своеобразный дневник где я писал свой прогресс, чтобы мотивировать себя и друзей готовиться к собеседованиям.

Завел канал в Ноябре 2019 и еженедельно писал свой процесс подготовки и прохождения собеседований. Вы можете использовать эти хештеги чтобы найти посты по определённой тематике.
#story - Истории о там как готовился и проходил собеседования.
#interviewtip - Советы по тому как готовиться к собеседованиям.
#resume #algo #systemdesign #behavioral - Советы по тематикам резюме, алгортмов, System Design и Behavioural соотвественно.
#google #facebook #amazon #outtalent - Истории прохождения собеседований в компании.

Кто ты?

Я программист с опытом 3-5 лет. Долгое время жил, учился и работал в Алматы, Казахстан. Пару лет назад меня пригласили в одну крупную ИТ компанию в Европе на позицию старшего разработчика и последние пару лет я нахожусь тут. Женат, есть ребенок.

Учился я в обычной сельской школе и закончил казахстанский ВУЗ по специальности ВТиПО. Никогда не занимался ACM (спортивное программирование). До 2018 года я вообще не знал ничего про алгоритмы и начал активно это наверстывать.

За год подготовки я прокачался до того что летом 2019 попал на онсайт собеседование в Google, Zurich и завалил его.  Тогда я понял что попасть в компанию как Google не так уж и сложно как я думал. И я поставил себе цель сделать это через год. Тогда родилось и название канала “Хочу в Google”.

Какой статус сейчас?

В августе 2020 я получил офер от компании Facebook, London на позицию E5 Software Engineer. В данный момент я активно собираю документы, делаю визу и готовлюсь к переезду в Лондон. Весь процесс, от отклика до офера, описан на канале.

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

Что дальше?

Дальше я планирую немного отдохнуть от процесса подготовки, пока будут переезжать, привыкать к новому месту. Но скоро снова начну решать задачи на LeetCode и читать статьи по System Design. Планирую также рассказывать про переезд и работу в Facebook, London во время пандемии.

Рассказывайте о канале своим знакомым. Делитесь своими мыслями насчет канала в комментариях. 

#story #facebook
👍2
Хочу в Google pinned «Всем привет! Это сообщение для новых ребят которое задаются вопросами о чем этот канал. О чем канал? Это анонимный канал. Тут я рассказываю в реальном времени о том как я готовлюсь и прохожу собеседования в крупные ИТ компании, в том числе и в FAANG (Facebook…»
Новости с полей

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

Начали смотреть недвижимость и цены в Лондоне. Пиздец там дорого. К примеру хорошая 3 комнатная (как там говорят, 2 bedroom) квартира, недалеко от центра обойдется в £2000 в месяц. Плюс на первое время надо будет еще дать депозит за квартиру, которая ровняется 5 неделям проживания в квартире, это примерно £2300 сверху. И того за первый месяц нам надо будет отдать около £4000, это на минуточку 2 млн тенге за первый месяц в трешке, Крал. К счастью часть этих денег будет возмещена компанией через пару месяцев. Цены за детсады вообще лучше не гуглить.

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

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

Завел карту в Revolute, на случай если надо будет делать оплату в фунтах. Приедет в начале октября.

Тем временем работаю работу, задачь по горло, ничего не успеваю.

#story #facebook
👍1
Продуктивность 101.

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

• Выдели себе Alone Time (что это читай ниже) 1-2 часа в день как минимум. Можно делать несколько таких интервалов и между ними делать передышку в 15-20 минут, чтобы ходить, общаться, проверять соцсети и т.д. 
• Делай список дел на день из 3-4 важных задач, это поможет не тупить и терять время. Придерживайся этого списка. 
• Сделай себе рабочее место, стол, стул, свет, хороший воздух, минимум шума. Желательно место изолированное, чтобы там не ходили люди, желательно отдельная комната. Никогда не работай в кафе, это говно собачье. 
• На это время телефон на беззвучный, экраном вниз, и подальше от рабочего места.
• Отключи на телефоне уведомления вообще, кроме мессенджеров (ибо может быть что то важное), убери отображение количества уведомлений на иконке приложения. Проверяй почту и соц сети вручную, раз в 3-4 часа, чем реже тем лучше. В рабочее время у меня телефон постоянно на беззвучном, если я не жду звонков, к примеру если должен прийти сантехник или должна позвонить жена. 
• Если ты напишешь комментарии в соц сети, или ответишь на письмо на пару часов позже ничего не измениться, мир не рухнет. Поэтому забей на это, расслабься, ответишь как закончиться Alone Time. Исключение, если ты не программист, а SMM.
• Никогда не смотри видео, не слушай музыку, подкасты или что то еще во время работы. Мозг может работать только в одном потоке. Не отвлекай его. Сосредоточься на работе. 
• Тем не менее одевай наушники, чтобы показать окружающим что тебя нельзя беспокоить. Я порой сижу в наушниках, без какой либо надобности, использую их больше для шумоподавления.
• Имей стакан воды или стакан чая под рукой, чтобы не бегать на кухню.
• Не работай на голодный желудок.
• Высыпайся.

Alone Time

(Это выдержки из книги Getting Real by Basecamp)

People need uninterrupted time to get things done. There are only about 4-5 hours during the day that we’re all up and working together. At other times, the us team is sleep- ing while David, who’s in Denmark, is working. The rest of the time, we’re working while David is sleeping. This gives us about half of the day together and the other half alone.

Guess which part of the day we get the most work done? The alone part. It’s not that surprising really. Many people prefer to work either early in the morning or late at night – times when they’re not being bothered.

When you have a long stretch when you aren’t bothered, you can get in the zone. The zone is when you are most productive. It’s when you don’t have to mindshift between various tasks. It’s when you aren’t interrupted to answer a question or look up something or send an email or answer an im. The alone zone is where real progress is made. 

Getting in the zone takes time. And that’s why interruption is your enemy. It’s like rem sleep – you don’t just go to rem sleep, you go to sleep first and you make your way to rem. Any interruptions force you to start over. rem is where the real sleep magic happens. The alone time zone is where the real development magic happens

Set up a rule at work: Make half the day alone time. From 10am-2pm, no one can talk to one another (except during lunch). Or make the first or the last half of the day the alone time period. Just make sure this period is contiguous in order to avoid productivity-killing interruptions.

A successful alone time period means letting go of communication addiction. During alone time, give up instant messenging, phone calls, and meetings. Avoid any email thread that’s going to require an immediate response. Just shut up and get to work. 

#interviewtip
👍1
Нужно знать System Deign.

Трудность System Design собеседования в том что вопросы тут “open ended” (тут нет четкого правильного или неправильного ответа, как в алгоритмах), плюс тем и понятий там так много что черт ногу сломит.

С чего начать?

Совет тем кто вообще не соприкасался с System Design:
• Почитай курс Grokking the system design interview by educative.io (курс платный, но можно нагуглить копию этого курса). Умные люди скажут что он поверхностный. Но это отличный ресурс для первого знакомства, чтобы начать вникать в тему. Он отлично передает структуру собеседования, дает понимание куда двигаться, что спрашивать, на что обращать внимание.
• Загугли и почитай курс System Design Primer.
• Посмотри канал  Gaurav Sen на YouTube, очень крутой канал. 
• Посмотри канал  Success in Tech на YouTube
• Посмотри лекцию Jackson Gabbard по System Design. 
• На курсах которые я порекомендовал попробуй поделать примеры задач, типа “Design TinyUrl”, попробуй симулировать настоящее собеседование и объяснить все на доске не глядя в конспект. 
• Не надо запоминать точные ответы которые там написаны. Тут нет верного или нервного ответа. Учи концепции и учи где и как их применять. 
• Тут нет золотого молотка который решит все твои проблемы. Тут нет одной деревянной концепции которую ты можешь запомнить и применять везде. Не делай так, тебя сразу отклонят.
• Старайся понимать в чем плюсы и минусы разных технологий.
• Почитай как работает Facebook, Google, Uber в реальной жизни. В интернетах очень много ресурсов на эту тему. 
• Элементарно почитай про технологии которые ты используешь каждый день, чем JSON лучше Protobuf, чем MySQL  лучше PostgreSQL?
• Если у тебя дофига времени почитай книгу Designing Data-Intensive Applications by Martin Kleppmann. Это акуительная книга. Ты почувствуешь е себя очень тупым в начале, но очень умным в конце. 
• Ну и самое главное применяй все это на практике, на работе, на личных проектах. Добавь индексы в базу данных, поставь gzip на выдачу статики и т.д. Опыт тут играет огромную роль. 

Как вести себя во время собеседования?

• Веди разговор. 80% времени должен говорить ты. Но ты не должен болтать без умолку, нужно общаться с интервьюером и понимать куда двигаться и какие есть требования к системе. Тут нужен баланс. Нужно вести разговор, но в то же время не уйти в себя. Тут мне отлично помогли mock interview с друзьями. 
• Не используй buzzwords (ключевые слова), типа Cassandra, Redis, Sharding и т.д. без контекста или без обоснования. Если ты выбрасываешь какую то технологию на стол, ты должен на 100% быть уверенным что она тут необходима. 
• Задавай вопросы и общайся как с коллегой, представь что вы обсуждаете новую фичу на работе. Четко обозначь  Scope of Work (объем работ) с самого начала, чтобы не тратить время не темы которые нас не интересуют. 
• Reasoning, обосновывай свои решения и приводи аргументы за или против тех или иных решений. 
• Tradeoff, выбирай одни решения перед другими в зависимости от требований системы.

Какие темы учить?

Тема очень обширная, как уровень коррупции в Казахстане. Но можешь начать с этих тем:
• TCP/IP, UDP
• DNS, HTTP 1, HTTP2, Websockets, Long Polling, HTTPS
• API Design (REST, gRPC, SOAP)
• Availability, Durability, Consistency, Scalability
• CAP Theorem
• ACID vs BASE
• Latency, Bandwidth, Throughput
• Vertical and Horizontal scaling
• Partitioning, Replication
• Consistent Hashing
• Load Balancer  
• Strong vs Eventual consistency
• SQL vs NoSQL
• Key value Store, Document Store
• Caching
• Queues and Topics
• CPU, Memory, Hard Drive, Network
• OOP, Functional Programming
• Design patterns, Singleton, Factory, Publisher/Subscriber. 
• Threads, Concurrency,  Locking 

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

Что из этого мне попадалось часто?

Все из списка выше и даже больше. 

#interviewtip #systemdesign
👍21
В комментарии к прошлому посту мне дали хороший совет, добавить хештеги к постам, чтобы было удобно искать и читать контент. Я потратил немного времени на выходных и добавил их. Вы можете использовать эти хештеги чтобы найти посты по определённой тематике.

#story - Истории о там как готовился и проходил собеседования.
#interviewtip - Советы по тому как готовиться к собеседованиям.
#resume #algo #systemdesign #behavioral - Советы по тематикам резюме, алгортмов, System Design и Behavioural соотвественно.
#google #facebook #amazon #outtalent - Истории прохождения собеседований в компании.
👍1
​​Новости с полей. Сегодня сообщил своему менеджеру о том что получил офер от Facebook. Он взгрустнул, просит остаться еще до конца года и закрыть проекты, так как в связи с короной будет тяжело искать новых ребят на мое место. Я вежливо отказался, объясняя это тем что хотел бы переехать пока не закрыли опять границы из за второй волны и пока не начался декабрь, так как в декабре все уйдут на рождественские выходные.

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

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

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

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

#story
👍2