Варианты подготовки к собеседованию в FAANG/около FAANG для разных уровней текущей подготовки. Часть 2.

Предыдущая часть тут Подготовка для Advanced уровня.

В данном посте опишу пример подготовки не для полного новичка, но близко к тому. Назову этот уровень Pre-intermediate.

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

Подготовка:

1) Берем книгу Cracking the Coding Interview by Gayle Laakmann McDowell. Берем только нужные главы (Какие главы из Cracking the Coding Interview нужно изучить для прохождения алгоритмического собеседования?) Для начала можно даже еще пару глав на сложные темы исключить (Chapter 8. Recursion and Dynamic Programming и Chapter 17. Hard.). Т.е. взять главы:
1) Chapter 1. Arrays and Strings
2) Chapter 2. Linked Lists.
3) Chapter 3. Stacks and Queues.
4) Chapter 4. Trees and Graphs.
5) Chapter 10. Sorting and Searching
6) Chapter 16. Moderate
В начале каждой темы приведены алгоритмы, которые нужно знать наизусть и потом приведены задачи и решения к ним. Стоит начать с запоминания и понимания работы алгоритмов. Попробуйте выписать эти алгоритмы на бумажке без использования подсказок. Делайте это до тех пор, пока у вас это не будет получаться на автомате за пару минут. Далее смотрите задачи. Попробуйте сначала решить задачу сами. Если не смогли решить за 1-2 часа, изучайте решение до тех пор, пока не сможете сами, без подсказок, написать решение. Смотри также мои статьи:
1) Как выбрать язык программирования для алгоритмического собеседования?
2) Как решать алгоритмические задачи на подготовке, чтобы это было эффективно
3) Как не забыть решения задач и алгоритмы
4) Шпаргалка по основным алгоритмам для алгоритмического собеседования

В этих 6 главах, где-то 70-80 задач. На изучение и запоминание теории к каждой главе + самостоятельное решение задач + разбор правильного решения и запоминание уйдет при вашей подготовке где-то ~250 часов. После перейти к изучению Главы 8. На что уйдет еще где-то ~50 часов. В сумме где-то ~300 часов. Я не утверждаю, что этот подход единственный, но лично я им воспользовался. На изучение этой книги до состояния, что я могу за 5 минут написать на бумажке стандартный алгоритм без ошибок и подсказок, а также решить за 15-30 минут задачи из этих глав у меня ушел 1 год (параллельно с работой). Чем хороша эта книга - в теории нет ничего лишнего, только все самое необходимое. А также очень детально разобраны решения, с несколькими вариантами решения и описанием хода мысли, как к этим решениям прийти. Если сразу перейти на Leetcode, то без должной подготовки до этого, вы будете просто терять свое время.

2) Решаем задачи на https://www.algoexpert.io/. На данный момент там ~200 задач с очень подробным разбором решения в формате видео. Я бы сказал, что это Cracking the Coding Interview только в online формате с возможностью сабмита своих решений и их проверки. Вам не обязательно решать все 200 задач. Можно выбрать только конкретные темы, которые вы хотите прокачать. Или решать задачи выборочно, какой-то процент задач по нужным вам темам. Например, мне это помогло прокачать динамическое программирование, задачи на деревья и графы. Если скажем вы решите и разберете 50-100 задач с этой платформы, то у вас это займет ~100-200 часов.
7👍4🔥3
3) Переходим на Leetcode. Нужно начать с easy задач для того, чтобы освоится на платформе. Но я не рекомендую решать очень много таких задач, это будет просто бесполезная трата времени. Решите не более 100 easy задач. Можно воспользоваться моей подборкой (Подборка из easy задач для начала подготовки к алгоритмическому собеседованию.) Далее, переходим уже более предметно на темы, которые вы хотите прокачать и потренировать. Начинайте с easy задач на нужную вам тему и постепенно, переходите на medium задачи. Делайте упор на решении именно medium задач. Смотрите мою подборку (Сбалансированная подборка из 100 задач для подготовки к алгоритмическому собеседованию. ) Можно решить таким образом ~200 задач, из которых около половины или чуть больше это medium задачи. На это уйдет ~200 часов.

Далее процесс не сильно отличается от Advanced уровня, только до того, как аплаится я бы сначала прошел курсы по System Design. Т.к. у вас это займет больше времени и вам не хватит времени на подготовку между phone screen и full loop.

Итого у вас это займет: 600-700 часов до уровня Advanced + 200 часов на финальную подготовку (System Design, поведенческое собеседование, прицельная подготовка в компанию). В сумме вы решите ~500 задач на трех платформах (300 на Leetcode, 100 на algoexpert и 100 из книги Cracking the Coding Interview). Итого: 800-900 часов.
👍16😱7
Варианты подготовки к собеседованию в FAANG/около FAANG для разных уровней текущей подготовки. Часть 3.

Предыдущие части:
Подготовка для Advanced уровня.
Подготовка для Pre-Intermediate уровня(https://t.me/faangmaster/297, https://t.me/faangmaster/298)

Beginner. Вы знаете какой-то язык программирования на уровне достаточном, чтобы решать алгоритмические задачи. Смотри, например, Шпаргалка по Java для алгоритмического собеседования. Вы знаете английский на уровне от Intermediate и выше. Но вы плохо себе представляете, что такое структуры данных и алгоритмы. Никогда их не изучали ни в каком виде.

Тогда перед шагами описанными в части для Pre-Intermediate уровня, вам нужно изучить структуры данных на самом базовом уровне. Тут есть много вариантов. Если вы студент, возможно у вас в Университете есть какой-то курс. Если нет, можете найти курс по структурам данных и алгоритмов для начинающих. Где расскажут, про самые базовые вещи. Без сложных алгоритмов и сложных задач.

Курсы:

1) https://www.designgurus.io/course/grokking-data-structures-for-coding-interviews
Он подходит полным новичкам, но он на английском.

2) Также, если вы в любом случае планируете пользоваться https://www.algoexpert.io/. Там есть краткий курс по структурам данных в виде серии видео: https://www.algoexpert.io/data-structures/

Книги:

1) Для новичков рекомендую: Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (В переводе на русский: Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья)

2) Если у вас много времени, то можно почитать Структуры данных и алгоритмы в Java | Лафоре Роберт. Но там будет много лишней информации и сложной для новичка. Я прочитал эту книгу, но далеко не все там полезно. Для новичка я бы только запоминал основы. Что такое массив, строка, список, стек, очередь, хэш таблица, куча, множество, дерево, граф. Как они работают, как их можно реализовать и т.д. В детали можно сильно не уходить.

На овладение основами, вам потребуется еще ~100 часов. Тогда в сумме с уровня, когда вы вообще ничего не знаете про структуры данных, до собеседования в FAANG вам потребуется ~900-1000 часов обучения.

Читать сложные книги, вроде:
1) Алгоритмы: построение и анализ (Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн.)
2) Алгоритмы (Роберт Седжвик)

Я бы не рекомендовал новичкам и тем, кто не планирует начать карьеру в олимпиадном программировании или заниматься наукой в области Computer Science. Они сложны, очень объемны и вы потратите колосальное время на изучение этих книг. Для прохождения собеседования есть и более короткий путь. Если же вы школьник или студент и у вас есть много времени и интереса к программированию, можете их использовать.
👍152
Подборка постов в канале, не связанная с задачами. Часть 1

Обновление подборки.

Работа в FAANG:
1) Какие version control практики используют топ компании?
2) Используют ли FAANG компании Scrum или Kanban?
3) Как в Amazon происходит Design Review?
4) Используете ли вы сложные алгоритмы на работе?
5) Incident management в Amazon
6) COE Review в Amazon
7) Наступит ли счастье, если вы пройдете собеседование в FAANG?, Часть 2 , Часть 3.
8) Как проходят Code Review в Amazon и Facebook?, Часть 2
9) Как устроен onboarding процесс в Amazon?, Часть 2
10) Хотите узнать сколько зарабатывают в топ IT компаниях мира?
11) Как выглядит релокация в другую страну, если вы получили offer от FAANG компании?
12) Какие языки программирования используются в крупнейших IT компаниях?
13) Используют ли в FAANG\Big Tech Spring и Spring Boot?
14) Мои первые впечатления, когда я начал работать в FAANG
15) Текущие офферы в некоторые Big Tech/FAANG компании
16) Структура FAANG/Big Tech компании
17) Какие тулы используют Amazon и Facebook для внутренней коммуникации?
18) В чем преимущество получения части компенсации в виде акций публичных компаний?
19) Сколько выходцев из СНГ работает в FAANG/Big Tech компаниях?
20) Распределение по уровням в FAANG

Подготовка к собеседованию:
1) Как я изучал английский язык?
2) Как проходит собеседование в Meta(Facebook)?
3) Варианты подготовки к собеседованию в FAANG/около FAANG для разных уровней текущей подготовки Часть 2 , Часть 3, Часть 4
4) Сколько нужно решить задач на leetcode, чтобы пройти собеседование в FAANG компанию?
5) Какие бывают собеседования программистов и когда они имеют смысл?
7) Основные ошибки на собеседовании в FAANG, Часть 2
8) Почему решив 1500 задач на leetcode вы не сможете получить офер в FAANG
9) Как решать алгоритмические задачи на подготовке, чтобы это было эффективно
10) Как не забыть решения задач и алгоритмы
11) Как выбрать язык программирования для алгоритмического собеседования?
12) Стоит ли использовать https://www.topcoder.com/ или https://codeforces.com/ для подготовки к собеседованию по алгоритмам?
13) На чем проваливаются чаще на собеседовании в FAANG компании?, Часть2
14) Какой подход в самообразовании я использую?
15) Стоит ли учить алгоритмы и структуры данных и готовиться к собеседованиям вообще?
16) Нужно ли вам учить алгоритмы и структуры данных?
17) Когда стоит учить алгоритмы?
18) Сколько времени займет подготовка к собеседованию в FAANG или около FAANG компанию?
19) Как я готовился к собеседованию и попал в FAANG, Часть 2.
20) Как я готовился к собеседованию и попал Facebook?
21) Нужна ли сертификация Java программисту?
22) Нужно ли учить многопоточность в Java?
23) Сколько времени на самообразование вы тратите в неделю?

Случаи с собеседований:
1) Случай на собеседовании в FAANG
2) Еще один подозрительный случай на собеседовании
3) Классический случай на кодинг собеседовании в FAANG
4) Новая галочка про подозрение в читерстве на собеседовании в FAANG
5) Кандидаты из Google
6) Опытный кандидат с претензиями
7) Собеседовал недавно разработчика из Яндекс
7) Стоимость жизни в Лондоне и сколько нужно зарабатывать, чтобы хорошо тут жить
8) Что сейчас происходит на рынке труда программистов США и Европы?
9) Мои первые впечатления, когда я начал работать в Европе, Часть 2
10) Global Talent Visa UK
11) Число вакансий в tech индустрии медленно, но растет
12) Ситуация с хайрингом в Big Tech (и не только) в Европе и США на январь 2024

Онбординг:
1) С какими сложностями я столкнулся на своей первой работе программистом?, Часть 2
2) Как быстро адаптироваться в команде и компании? Часть 2 https://t.me/faangmaster/282
3) Что не стоит делать при онбординге в новую компанию?
👍9🔥3
👍11
Классический случай на кодинг собеседовании в FAANG

Сегодня проводил очередной coding interview. Кандидат собрал, как мне кажется, все основные ошибки на такого рода собеседовании.
Я перечислял ошибки тут: https://t.me/faangmaster/226, https://t.me/faangmaster/227

Благо, в этот раз я не заподозрил кандидата в читерстве как тут (Случай на собеседовании в FAANG, Еще один подозрительный случай на собеседовании). Ничего подозрительного в собеседовании не было.

Но кандидат собрал большинство типичных ошибок:

1) Слабая подготовка. Видно, что кандидат потратил некоторое время на подготовку, но это время было незначительным. Одна из задач была на бинарное дерево. Кандидат правильно подумал, что можно использовать алгоритм обхода дерева. Но применить на практике его не смог. Сам алгоритм - это 5 строчек кода. Для решения задачи, надо было подумать и расширить его до 10 строчек. Применить сложение переменных и нахождение максимума. Видно было, что кандидат потратил пару недель на изучение основных алгоритмов. Но применять их не научился. Такое может прокатить, только если у вас IQ 160 и выше, у одного из миллиона. Или вы этот навык выработали до этого (уже готовились ранее или были топовым олимпиадником). Когда вам достаточно объяснить алгоритм и вы его сможете применить для любой задачи. Для обычных людей, надо вырабатывать навык решения задач. Пролистать 5 стандартных алгоритмов, на которые эти задачи, не достаточно.
2) Не смог проверить свое решение и найти ошибки. Большинство кандидатов не умеют дебажить свой код без запуска автотестов. В упор не видят ошибки, даже если им указываешь конкретный пример или конкретную строчку в их коде и спрашиваешь, какой будет результат работы этой строчки, если туда подставить конкретное значение. Кандидат смог как-то решить одну задачу на массив и Two Pointers с гигантским числом ошибок к коде. И не смог найти ни одной. Даже когда я на них указывал
3) Не реагирует на подсказки. Когда кандидат делает что-то не так или застрял, я пытаюсь ему помочь наводящей мыслью или вопросом. Кандидат просто это игнорировал и даже спорил. Интервью это не соревнование, кто кого переспорит. Если вас просят найти плюсы и минусы решения, дизайна, обсудить трейдофы, то тут надо проводить сравнение. Когда вы застряли и не можете продвинуться далее, интервьюер своими вопросами не пытается с вами спорить, он пытается вам подсказать.
4) Не задает уточняющие вопросы. Тут все по классике, ничего не уточнил, сразу стал думать над решением, потом во время написания кода понял, что возможно он решает другую задачу и начал уточнять потратив куча времени.
5) Тратит куча времени на второстепенные вещи. Собеседование ограниченно по времени. При написании кода кандидат меня пытался впечатлить объявлением не обязательных структур в c++ коде, которые не продвигают решение ни на сколько. Потратил на это 50% времени написания кода, сделав тонну ошибок.
👍18🔥3🤔2💘1
Как я готовился к собеседованию и попал в FAANG

Можно сказать, что начало этой истории - это неожиданное собеседование в Google в 2015 году, которое я провалил еще на Phone Screen. История об этом тут: История о том, как я провалил собеседование в Google. На тот момент я не имел никакого представления о собеседованиях в FAANG. Были только какие-то домыслы об этом. Leetcode, на тот момент, не был чем-то особо известным. Задач там тоже было очень мало. Когда я готовился к Phone Screen в Google, рекрутер мне посоветовал порешать задачи на topcoder. Он посоветовал мне открыть архив контестов и посмотреть вторые задачи из контестов (среднего уровня сложности, там в каждом контесте по 3 задачи, простая, средняя и сложная). А также посоветовал книгу Cracking The Coding Interview. Т.к. времени на подготовку я взял мало (я не имел никакого представления сколько подготовка у меня займет, чтобы я смог такое собеседование пройти), то успел только выучить основные алгоритмы из книги Cracking The Coding Interview и посмотреть небольшое число задач из книги и topcoder. Собеседование я провалил.
Тогда я загорелся идеей поработать в FAANG или, как минимум, зарубежом. Я понял, что мне не хватило знаний по алгоритмам, навыков решения задач, разговорного английского, чтобы пройти такое собеседование.
Для подтягивания английского я перешел на чтение технической литературы только на английском. А для прокачки разговорного английского - использовал italki (где можно беседовать с носителем языка на любые темы). Грамматику тоже изучал, но не особо интенсивно. Просто использовал книгу (macmillan english grammar in context).
Начал более системного изучать книгу Cracking The Coding Interview. Выучил основные алгоритмы до автоматизма. Мог и до сих пор могу написать ключевые алгоритмы на бумаге без ошибок за 5 минут. Практиковался с решением задач из книги и разбирал решения.
Купил еще несколько книг: Роберт Лафоре Структуры Данных и Алгоритмы, Алгоритмы (Седжвик). Также у меня уже была книга Алгоритмы: построение и анализ (Кормен). Первую из этих книг я изучил очень подробно. Но это было скорее избыточно. Я зачем-то выучил как реализовать по памяти основные операции с красно-черными деревьями, B-tree и много чего другого. Но это оказалось не нужно для собеседования. По факту алгоритмов из Cracking The Coding Interview было достаточно. Кормена и Сэджика я почитал немного, но это было очень сложно, долго и не нужно для собеседования вообще.
Параллельно, я прочитал несколько раз и заботал в деталях Java Concurrency In Practice. Мне это пригодилось на собеседованиях не в FAANG, в том числе в Европе. После года бота, параллельного с работой, я начал откликаться на вакансии в Европе, не в FAANG. Прособеседовался в десяток компаний и получил один офер в Германии. Пораздумав над офером, решил его принять. Офер был не в FAANG компанию, на среднюю для Германии зп для программиста.
👍7🔥6💘51
После того, как немного адаптировался в немецкой компании, я продолжил решать задачи из Cracking The Coding Interview до состояния, что я мог решить задачи из основных глав книги за 15 минут. Меньше чем через год, я решил податься в Amazon для проверки своей текущей подготовки. Откликнулся на вакансию. Потом короткий созвон с рекрутером. Потом онлайн тест. Задачи мне показались простыми. Я их быстро и правильно решил. Потом меня сразу пригласили на full-loop. Собеседование было в офисе. 4 собеседования по 45 минут. 3 coding + leadership principles и 1 system design + leadership principles. Я на подготовке еще раз повторил задачи из Cracking The Coding Interview, подготовился к собеседованию по leadership principles и посмотрел немного system design. На full loop задачи мне показались сложнее. Но я все 3 решил на доске маркером. 1 я уже видел, благо самую сложную. Две другие я не видел, но сразу понял на какие алгоритмы и стуктуры данных они и мог их легко применить для задачи. System Design для меня был в новинку, поэтому я многое использовал из своего опыта или того что я видел или читал про это. После собеседования, я не был уверен, что я прошел. Но точно знал, что и не провалился на 100%. Еще не зная решения, я считал, что моя подготовка идет хорошо и я себя показал хорошо. Но неожиданно, я получил офер. Также неожиданно для себя я долго думал над офером. Т.к. я не планировал менять работу, а просто хотел себя проверить. А в текущей компании я был не очень долго и нужно было снова переезжать. Но в итоге офер я принял.
В следующих постах опишу как я готовился в Facebook.
👍12🔥8💘6
Самая популярная задача с собеседования в Google в данный момент: Удалить вершины в дереве и вернуть оставшийся лес/forest

Задача. Дано бинарное дерево. Все значения в вершинах уникальны в рамках всего дерева. Также дан массив значений, которые нужно удалить. Нужно удалить вершины с данными значениями. После удаления этих вершин у нас останутся разъединенные деревья (лес или forest). Нужно вернуть корни оставшихся после удаления деревьев в любом порядке.

Ссылка на leetcode: https://leetcode.com/problems/delete-nodes-and-return-forest/

Решение. Решение описал тут: Задача с собеседования в Google: Удалить вершины в дереве и вернуть оставшийся лес/forest

P.S. Ее смогут решить только тру вертельщики деревьев.
👍51
😁16👍10
Используют ли в FAANG\Big Tech Spring и Spring Boot?

Начну с того, что его не спрашивают на собеседованиях в FAANG. На собеседовании спрашивают алгоритмические задачи, system design и поведенческие вопросы. На system design может понадобиться знание конкретных баз данных, key-value хранилищ и распределенных кэшей. Знание фреймворков типа Spring вас не будут спрашивать. Я начал публиковать вопросы с собеседований по Spring, потому что меня попросили и их могут спрашивать на собеседовании на Java программиста не в Big Tech компании.

Теперь, что касается использование Spring в Big Tech компаниях. Во-первых, далеко не во всех компаниях сильно используется Java. Например, в Facebook, Java используется, в основном, для мобильной разработки под Android. Для Backend тоже используется, но очень редко. В Microsoft тоже предпочитают C++, C#. В Google Go. Но так или иначе на Java и в этих компаниях что-то пишут.
Среди Big Tech в использовании Java выделяются Amazon и Netflix. Там очень много backend на Java. Я работал в Amazon, поэтому расскажу про него. Мы использовали Java в качестве основного языка для backend части. Но в нашей команде Spring не использовался. Мы использовали внутренние тулы и библиотеки, а также среди сторонних библиотек использовали Google Guice для Dependency Injection и Google Guava для локальных кэшей, коллекций и т.д. Но я видел другие команды в Amazon использовали Spring. Правда, в основном, для Dependency Injection. А не, скажем, Spring Boot. Хотя некоторые вещи я видел и даже сделал с использование Spring Boot. Но это скорее исключение, чем правило.
Такие компании предпочитают иметь большую гибкость и переписать любую библиотеку под себя. Spring кастомизируем, но до определенной степени. Крупные компании чаще предпочитают более легковесные сторонние библиотеки и иметь все рычаги управления над кодом.
В Netflix же - очень много Java и в том числе они используют Spring и Spring Boot. Они также сделали много своих внутренних библиотек open source под Java.
👍241
Как я готовился к собеседованию и попал Facebook?

Ранее я описывал, как я готовился и попал в Amazon (Часть 1, Часть 2)

При подготовке я использовал, в основном, Cracking The Coding Interview. Но и читал другие книги по алгоритмам и структурам данных. Leetcode не пользовался вообще.
После того, как я начал работать в Amazon, я перестал решать задачи или читать книги по алгоритмам и систем дизайну. Я больше сосредоточился на адаптации в компании. В первые месяцы из книг я прочитал Clean Code. Что пригодилось мне в работе.
Через месяца 3 работы в компании, со мной связался рекрутер из Facebook. Предложил пройти собеседование. Я немного подумал, т.к. я только пришел в компанию и если бы я прошел сейчас собеседование в Facebook и принял оффер, то мне надо было снова переезжать, а также возвращать деньги амазону, потраченные на переезд. А там тысяч 30 долларов. Но я решил просто попробовать свои силы, и уже по результатам оценивать, принимать мне офер или нет, я ничего не терял от прохождения собеседования.
Рекрутер прислал мне материалы для подготовки. Среди прочего там была ссылка на leetcode. Тогда 7 лет назад я впервые зашел на leetcode и порешал там свои первые задачи. Готовился я не долго к собеседованию и в итоге провалил Phone Screen. Там дали 2 задачи на 15-20 минут каждую. Я их не осилил. Частично решил одну, но вторую - только общую идею. Я не сильно расстроился, но решил через какое-то время попробовать еще раз.
Примерно, через полгода, я снова стал активно решать задачи. Вначале это был leetcode, на котором за ~2 лет я решил ~300 задач. Потом, как только появился algoexpert.io, то я там решил 100 задач и получил сертификат. Прочитал несколько книг по system design, которые я уже рекомендовал в этом канале. Также попробовал поучаствовать в соревнованиях на topcoder. Но это было не долго, может раз 5 участвовал. Особо прогресса это мне не дало.
И после пару лет подготовки, параллельно с работой в Amazon, я подготовился неплохо к собеседованию.
После очередного раза, когда мне написал рекрутер из Facebook, я откликнулся. Потом отправил резюме, быстрый созвон на 15 минут с рекрутером. Потом Phone Screen с двумя задачами на 40 минут в сумме. Их я легко решил. Потом получил приглашение на full loop. Он был все равно online. Тогда уже ковид начался. Я взял месяц на подготовку к full loop. Я еще раз порешал задачи с algoexpert.io и 100 самых популярных задач с leetcode для Facebook. А также прошел курс по system design (https://www.designgurus.io/course/grokking-the-system-design-interview). Его мне прислали в качестве материалов для подготовки сами рекрутеры.
Full loop состоял из 4 собеседований:
1) 2 coding, по 2 задачи каждый
2) 1 system design
3) 1 поведенческое.
Каждое собеседование было по 45 минут. Кодинг я решил очень хорошо. Половину задач я уже просто видел, а половину я видел похожие и решить по аналогии не состовляло труда. Поведенческое тоже прошло хорошо. Я к нему частично подготовился на algoexpert.io, а также заранее продумал примеры из опыта и потренировался их рассказывать. А вот system design прошел сложно. Задача на дизайн была не тривиальной. Придумать дизайн, удовлетворяющий требованиям было очень сложно. Сначала я придумал, что-то из опыта и что-то я читал в курсе по system design. Но это не покрывало основные, ключевые требования. Но в итоге я выкрутился и что-то придумал.
После собеседования и сомневался, что я прошел. Особенно из-за system design. Но в итоге я получил офер, который я принял.
🔥14👍61🗿1
Характерные числовые характеристики, которые нужно знать для System Design собеседования

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

Время отклика:
1) Кэш процессора. L1 - 0.9 наносекунд, L2 - 2.8 наносекунд, L3 - 12.9 наносекунд.
2) Обращение к ячейке памяти RAM (RAM access time): ~100 наносекунд.
3) Последовательное чтение 1 MB из RAM(топовая): 9 микросекунд.
4) Последовательное чтение 1MB из SSD (около топовые): 200 микросекунд.
5) Задержка сети в рамках одного дата центра: 0,5 миллисекунды.
6) Последовательное чтение 1MB из SSD (~1 GB/s): 1 миллисекунда.
7) Последовательное чтение 1MB из HDD: 2 миллисекунды.
8) Disk seek (disk access time): 4 миллисекунды.
9) Задержка сети при отправки через интернет с одного континента/страны в другую. ~50-150 миллисекунд.

Throughput на один сервер:
1) MySQL. ~1000 QPS (запросов в секунду)
2) Key-value storage/NoSQL. ~10k QPS
3) Cache server. ~100k -1M QPS.

Типичная спецификация современного сервера:
1) Число ядер: 64.
2) RAM 256 GB
3) Cache L3 112.5 MB
4) Storage 16TB.

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

Например, если у вас приложение запущено на одном сервере, а кэш сервер на другом, но они находятся в рамках одного дата центра, то несмотря на то, что чтение из RAM очень быстрое, вы будете ограничены задержкой сети 2 * ~0.5 = ~1 миллисекунды. А если ваш клиент делает запрос в ваше приложение и у вас нет локальных серверов, а они находятся в другой стране от клиента, то нужно учесть задержку как минимум в 50-200 миллисекунд на roundtrip по сети.
👍21🔥112🤬1
Вопрос с System Design собеседования: Задизайнить Google Maps

Ответ описал тут: Дизайн Google Maps

В ближайшее время дополню его частью про добавление, хранение и использование сегментов графа дорог.
🔥15👍41
Провел сегодня очередное coding interview, и когда заполнял feedback у нас в системе появилась галочка "подозреваете ли вы кандидата в использовании внешних ресурсов, в качестве подсказок?"
Значит не у меня одного возникают такие чувства. Смотрите также истории, когда я подозревал в использовании chatgpt:
Случай на собеседовании в FAANG

Еще один подозрительный случай на собеседовании
😁13👍4
Задача с собеседования: Реализовать потокобезопасную неблокирующую очередь на Java
#java #concurrency

Задача. Реализовать потокобезопасную (Thread Safe) неблокирующую очередь на Java Т.е. нельзя использовать локи или synchonized, при этом она должна корректно работать в многопоточной среде.
Решение. Описал тут: Реализовать потокобезопасную неблокирующую очередь на Java

Смотрите также: Реализовать потокобезопасный неблокирующий стек на Java
👍13🔥5
К нам стало аплаится большое число сотрудников Google. Видимо узнали про гиганский рост акций. Только, как по мне, надо приходить, когда акции на дне. Чтобы при росте, получить рост полученных акций. Ситуация напоминает ситуацию с биткоином. Когда все покупают по максимальной цене, когда каждый утюг говорит про высокую цену, а потом как акции падают, продают, получая убыток.

Благодаря росту акций я сейчас зарабатываю, больше чем когда либо. Я даже не думал, что могу столько зарабатывать будучу разрабом.
При текущей цене акций это ~$680 000 в год. При этом это в Европе. В США на той же позиции это в в 1.5 раза больше.
Я собеседовал 4 кандидата из Google за последний месяц. Все они хорошо себя показали на технической части (кодинг и систем дизайн), но не все прошли поведенческое собеседование. Поведенческое собеседование в Facebook и Amazon сложнее, чем в Google. Поэтому нужно готовится ко всем видам собесов.
В Facebook проверяется с какими конфликтами вы встречались, как их разрешили, как достигли common ground, как драйвили до получения нужного результата, как взаимодействовали, какой сложности проблемы решали, как задавали direction и т.д.
👍141🔥1