Что такое Availability и чем оно измеряется?
#systemdesign

Availability - это процент времени, в течении которого сервис или инфраструктура доступна клиентам и работает в обычном режиме. Например, если сервис обладает 100% Availability, это означает что сервис работает и отвечает на запросы так, как и ожидается все время.

Как измеряется Availability?

Это отношение времени, в течении которого сервис доступен, к общему времени.
Или в виде формулы: Availability = (Общее время - Время, когда сервис был не доступен) / Общее время * 100%
На практике, Availability измеряется в числе девяток (nines).

Например,
1 nines - Availability 90%
2 nines - Availability 99%
3 nines - Availability 99.9%
4 nines - Availability 99.99%
5 nines - Availability 99.999%
6 nines - Availability 99.9999%
7 nines - Availability 99.99999%

Если сервис обладает Availability 4 nines, это означает, что он доступен 99.99% времени. Или он может быть недоступен в течении ~53 минут в год суммарно.
Если сервис обладает Availability 7 nines, то он может быть недоступен максимум ~3 секунды в год.

Обычно, кибер атаки или запланированный downtime не берется в расчет. Иногда также исключают частичный downtime, когда сервис был не доступен только части клиентов.

Также часто используется выражение High Availability (или HA). Так называют сервисы с высоким Availability, обычно так говорят про сервисы с 5 nines и выше.
🔥11👍5
Задача с собеседования в Amazon: Deep Copy списка со ссылкой на случайный элемент
#алгоритмы #linkedlist #hashmap

Эту задачу у меня спрашивали на on-site собеседовании в Amazon. Решил я ее минут за 5-10 с кодом написанным маркером на доске. Это не единственное решение этой задачи. Привожу решение, которое я придумал тогда.

Задача. Дан связный список, в котором каждый элемент списка имеет ссылку на следующий элемент списка и ссылку на случайный элемент из этого же списка. Нужно сделать deep copy этого списка. Копия должна содержать в точности n полностью новых элементов списка, где n это размер исходного списка. Каждый новый элемент должен содержать соответствующее значение из элемента старого списка, а также иметь ссылки на соответствующие следующий и случайный элемент в новом списке. Элементы нового списка не должны содержать ссылки на элементы из старого списка.

Решение. Решение описал тут: Deep Copy списка со ссылкой на случайный элемент.

Код решения:

public Node copyRandomList(Node head) {
Map<Node, Node> oldToNew = new HashMap<>();
Node current = head;
while (current != null) {
Node copy = new Node(current.val);
oldToNew.put(current, copy);
current = current.next;
}
current = head;
while (current != null) {
Node copy = oldToNew.get(current);
copy.next = oldToNew.get(current.next);
copy.random = oldToNew.get(current.random);
current = current.next;
}
return oldToNew.get(head);
}

Time Complexity O(n), Space Complexity O(n).

Пишите в комментариях, можно ли улучшить решение до O(1) Space Complexity и если да то как.
👍10🤔1🕊1
Подборка из easy задач на leetcode для начинающих подготовку к алгоритмическому собеседованию

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

1) Two Sum
2) Valid Parentheses
3) Best Time to Buy and Sell Stock
4) Longest Common Prefix
5) Merge Sorted Array
6) Climbing Stairs
7) Palindrome Linked List
8) Merge Two Sorted Lists
9) Remove Duplicates from Sorted Array
10) Move Zeroes
11) Reverse Linked List
12) Valid Anagram
13) Reverse String
14) Valid Palindrome
15) Intersection of Two Arrays
16) Valid Palindrome II
17) Flood Fill
18) Add Binary
19) First Bad Version
20) Island Perimeter
21) Missing Number
22) Invert Binary Tree
23) Diameter of Binary Tree
24) Balanced Binary Tree
25) Meeting Rooms
26) Moving Average from Data Stream
27) Remove Linked List Elements
28) Monotonic Array
29) Longest Palindrome
30) Maximum Depth of Binary Tree
31) Closest Binary Search Tree Value
32) Convert Sorted Array to Binary Search Tree
33) Range Sum of BST
👍18🔥9
Является ли immutable class в Java Thread safe?
Final Results
64%
Да
15%
Нет
21%
Иногда да, иногда нет
Сколько я зарабатывал в Facebook?

Я уже публиковал пост о том, сколько я зарабатывал в Amazon.

Facebook платит больше, я бы сказал, что больше чем все другие FAANG компании.
Это было в Европе, в США зп сильно больше. Надо так же отметить, что позиция в Facebook у меня была выше, чем в Amazon.

Изначальный оффер:

Базовая зп - 101 000 фунтов в год. Бонус 15% в год от годовой зп, RSU (акции) ~60 000 фунтов в год. Также в первый год: 20 000 фунтов sign-on бонус за подписание контракта. Еще деньги, часть из которых выплачивается кешем за переезд (~13 600 фунтов после уплаты налогов).

Итого, ~£176 000 в год (~$234 000,или $264 000 с учетом инфляции) изначальный оффер. + £36 600 дополнительно в первый год работы (~$48 800, ~$55 000 с учетом инфляции).

Сколько я зарабатывал в реальности:

1) Первый год: базовая £101 000, все бонусы и разовые выплаты £46 180, RSU £34 200. Итого ~£181 380 ($241 000, с учетом инфляции $273 000)
2) Второй год: базовая £111 000, бонусы £16 200, RSU £22 440 (стоимость акций резко упала). Итого ~£149 640 ($176 000, с учетом инфляции $184 000)
3) Третий год: базовая £119 000, бонусы £18 700, RSU £122 080 (дали много рефрешеров и акции взлетели в цене). Итого ~£259 780 ($324 000)
👍152🔥2
Что лучше: большая зп в абсолютных значениях или лучше меньше зарабатывать и жить в стране с меньшими ценами?
#мысли

Для себя я понял, что лучше первое. Условно, если вы после налогов и ежемесячных расходов (аренда, ипотека, коммуналка, еда, транспорт и т.д.) у вас остается 20-40% и там и там. То в абсолютных числах большая абсолютная зп лучше. Т.к. эти сбережения вы скорее всего будете тратить на вещи, которые стоят одинаково и для программера из России и Европы. Типа электроники, одежды, путешествий, автомобилей.
На бумаге вы можете жить одинаково и там и там, но при условии, что вы будете покупать в России более дешевые товары. Типа, отпуск не в Дубае, а в Анапе. Автомобиль лада, а не последняя BMW, не последний айфон, а ноунейм китайский телефон и т.д. И там и там у вас будут теже блага, но есть нюансы.
Если же считать сколько картошки вы можете купить на свою зп в Москве и Лондоне, имея зп в 300-400 тысяч в Москве. вы будете даже богаче, но никому столько картошки не нужно. А вот покупать последних моделей электронику вы скорее всего захотите. А айфон стоит примерно одинаково и там и там.

А как вы считаете?
👍8🤔31
Что делать если вы застряли на алгоритмическом собеседовании и не знаете как решить задачу?

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

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

Попробуйте полный перебор подходов к решению алгоритмических задач, которые вы знаете.
Если у вас в задаче дерево. Это бинарное дерево? Это бинарное дерево поиска? Можно ли тут применить алгоритм обхода дерева и модифицировать его под задачу?
Если у вас в задаче массив. Это отсортированный массив? Если да, можно ли применить бинарный поиск? Если не отсортированный, можно ли его вначале отсортировать? Можно ли применить two pointers? Поможет ли использование вспомогательной структуры данных (хэш-таблицы, set, stack, queue)? Если в задаче сказано найти наилучший.. число способов.. можно ли применить динамическое программирование?
Если у вас граф. Можно ли применить поиск в глубину или ширину?
Если у вас список. Можно ли применить two pointers? Обычно задачи на списки достаточно прямолинейны, нужно просто аккуратно реализовать работу и изменение указателей в списке.
Можно ли добавить использование дополнительной структуры данных в вашу задачу, чтобы ее решить? Очень часто добавление хэш-таблицы позволяет улучшить решение с O(n^2) до O(n) за счет ухудшение решения за счет памяти (с O(1) до O(n)). Можно ли добавить set, stack или queue? stack помогает в задачах, где надо хранить что-то в обратном порядке.
Если у вас спрашивают найти число способов.. оптимальный... минимальный.. максимальный... Можно ли тут применить динамическое программирование?
Часто в задаче не указана структура данных. Можно ли тут применить массив, дерево, граф, хэш-таблицу и т.д.?
Надо найти top k элементов? Можно ли применить кучу (heap)? На практике в Java это делается через PriorityQueue.
В задаче дана строка? Нужно не забывать, что строки в Java immutable и как правильно с ними работать (s.charAt(i), s.toCharArray() для создания новой StringBuilder и т.д.). Можно ли применить префиксные деревья? Можно ли применить все теже подходы, что и к массивам (сортировка, бинарный поиск, two pointers)?
🔥11👍9👏1
Стоимость жизни в Лондоне и сколько нужно зарабатывать, чтобы хорошо тут жить

Жизнь в Лондоне не дешевая. Поэтому, если вы решите сюда переехать, то нужно примерно представлять стоимость жизни тут.

Начну с аренды недвижимости. Студия ~£1500, 1 bedroom(двушка по нашим понятиям) ~£2000, 2 bedroom(трешка по нашему) ~£2500.
Если вы один, то вам хватит студии или 1 bedroom, если вы с семьей, то лучше 2 bedroom.

Коммуналка. Электричество и тепло на 2 bedroom ~£300, вода ~£25, интернет £60. Итого ~£385 для трешки. Для одного человека соответственно меньше.

Еда без ресторанов, но хорошего качества ~£300-400 на человека.

Общественный транспорт ~£170, если вы ездите каждый день.

Фитнес. Или бесплатно или ~£60. Очень часто в многоквартирных домах есть бесплатный gym, бассейн, сауна и джакузи.

Теперь ориентировочная стоимость жизни для одного, пары и семьи из трех человек и нужная зп. Я разделил их также на 3 категории. Минимум (только жилье, еда, проезд, коммуналка), нормально(можно ездить в отпуск пару раз в год, покупать электронику, хорошую одежду, ходить в рестораны и развлечения), и хорошо(это нормально + 30% у вас останется).

Годовая зп указана до вычета налогов (gross). Т.е. то что вам озвучат как оффер.

Один:
1) Минимум £2500 в месяц. Или £40 000 в год.
2) Нормально. £3200 в месяц, £50 000 в год.
3) Хорошо. £4800 в месяц или £85 000 в год.

Пара:
1) Минимум. £3500 в месяц или £60 000 в год
2) Нормально. £5000 в месяц или £90 000 в год
3) Хорошо. £7500 в месяц или £140 000 в год.

Это все при условии, что вы работаете один. Если есть еще ребенок, то я бы добавил к цифрам для пары £10 000 в год: £70 000, £100 000, £150 000. Если оба работают, то у вас и финансовая ситуация другая. Вам возможно еще нужен частный садик и т.д.
🔥8👍31
Может ли такой код привести к deadlock?
#java #concurrency

class A {
public synchronized void foo() {
...
}
}

class B extends A {
public synchronized void foo() {
...
super.foo();
}
}

Как мы видим, оба метода foo в классе A и классе B synchronized. Синхронизация в данном случае на одном и том же объекте.
Обычно deadlock возникает в многопоточной среде, когда потоки получают локи на хотя бы двух объектах в разном порядке.
Например,
void foo(Object obj1, Object obj2) {
synchronized(obj1) {
synchronized(obj2) {
....
}
}
}
и один поток вызывает foo(obj1, obj2), а второй поток вызывает foo(obj2, obj1), то может возникнуть deadlock. Т.к. один поток получит лок на один объект и будет ждать получения лока на второй объект. А второй поток наоборот. Получит сначала лок на второй и будет ждать получения лока на первый объект, который держит первый поток.
В данном случае ситуация иная. У нас всего один объект.

Давайте посмотрим, что будет если у нас всего один поток.
Например, у нас такой код B b = new B(); b.foo();
Вызывающий поток получит лок на B при вызове foo из класса B. Далее дойдет до кода super.foo(). Этот вызов тоже synchronized на том же объекте.
Лок на этот объект уже получен вызывающим потоком. И если бы в Java synchronized был бы не reentrant, то поток бы ждал пока лок отпустят, чтобы его получить. В таком случае мог бы возникнуть deadlock. Но в силу того, что в Java synchronized в Java Reentrant один и тот же поток может получить лок на один и тот же объект множество раз. Для каждого такого лока (монитора) есть некий счетчик(сколько раз получен монитор на данный объект) и идентификатор потока, который его получил. Лок может получить только один поток, но множество раз. Как только счетчик упадет до нуля, это значит, что другой поток может получить теперь монитор (лок) на данном объекте.

Поэтому deadlock не возникнет благодаря свойству reentrancy локов при помощи synchronized (intrinsic locks).
👍14
Что сейчас происходит на рынке труда программистов США и Европы?

До и во время пандемии коронавируса большинство компаний США и Европы активно росли и развивались. Их капитализация росла колоссальными темпами, они нанимали все больше и больше людей, чтобы разрабатывать все новые и новые продукты и фичи, которые бы начали приносить еще больше денег, но в отдаленной перспективе.
Как только ковид закончился, спрос на многие IT продукты и сервисы начал падать, началась рецессия во многих странах.
Эта рецессии не привела к большим потерям в объемах выручки, но она перестала расти экспоненциальными темпами. А нанимали людей с расчетом, что выручка будет расти и дальше по экспоненте.
В итоге это привело к тому, что выручка перестала расти, а расходы на новых сотрудников, которые разрабатывают продукты, которые еще не приносят никаких денег увеличились существенно. Поэтому многие IT гиганты прибегли к layoffs (сокращениям).
Только один Facebook уволил 25% сотрудников с ноября 2022 по май 2023. В итоге на рынке труда оказались сотни тысяч высококвалифицированных программистов.
Более того, большинство из них достаточно состоятельные люди + им выплатили большие отступные десятки или сотни тысяч долларов. Поэтому далеко не все сразу бросились искать новую работу, а делают это постепенно и без спешки. Процесс их найма может затянуться на достаточно длительный период.
Кроме того, в силу того, что в Европе нельзя человека просто так уволить одним днем как в США (в США не нужно никаких причин для увольнения и тебя могут уволить просто одним днем), многие люди числились сотрудниками и получали зп еще 4-6 месяцев после сокращений.
Поэтому все эти люди сейчас на рынке труда и конкурируют со всеми остальными программистами, которые сейчас ищут работу.
Это приводит к тому, что менее квалицированным или начинающим программистам сейчас найти работу очень сложно из-за конкуренции. Но demand на программистов сейчас все еще высок и рано или поздно, все эти люди, которых сократили из IT гигантов найдут себе работу. Тогда ситуация на рынке труда станет более благоприятной.
👌5👍3🔥1
Задача на Двоичное Дерево Поиска: найти сумму элементов в заданном диапазоне в Двоичном Дереве Поиска
#алгоритмы #interview #bst #treetraversal #binarytree

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

Решение описал тут: Сумма элементов бинарного дерева поиска в диапазоне значение

Код самого решения:

public int rangeSumBST(TreeNode root, int low, int high) {
if (root == null) {
return 0;
}
int sum = 0;
if (root.val >= low && root.val <= high){
sum += root.val;
}
if (low < root.val) {
sum += rangeSumBST(root.left, low, high);
}
if (high > root.val) {
sum += rangeSumBST(root.right, low, high);
}
return sum;
}
5👍1
Какие главы из Cracking the Coding Interview нужно изучить для прохождения алгоритмического собеседования?

Я уже несколько раз рекомендовал книгу Cracking the Coding Interview by Gayle Laakmann Mcdowell тем, кто хочет начать готовиться к алгоритмическому собеседованию в FAANG или около FAANG компании (https://t.me/faangmaster/56).

Но не все главы актуальны на данный момент для именно алгоритмической части собеседования.

Какие же главы стоит изучить?

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 8. Recursion and Dynamic Programming
6) Chapter 10. Sorting and Searching
7) Chapter 16. Moderate
8) Chapter 17. Hard.

Т.е. из 17 глав, только 8 напрямую поможет вам в подготовке к алгоритмической части собеседования.

Сейчас я поясню, почему некоторые главы можно пропустить в такой подготовке:
1) Chapter 5. Bit Manipulation. Задачи на манипуляцию с битами крайне редко встречаются на собеседовании в FAANG или почти не встречаются.
2) Chapter 6. Math and Logic Puzzles. В FAANG головоломки перестали спрашивать много лет назад (хотя в некоторые российские компании типа Яндекса их еще спрашивали лет 7 назад. Сейчас не знаю).
3) Chapter 7. Object-Oriented Design. Эта глава для Junior программистов для подготовки к System Design части.
4) Chapter 9. System Design and Scalability. Эта глава тоже относится к System Design. Но это не самый лучший ресурс для подготовки. Я рекомендовал другие источники. Эту главу можно изучить для начинающих подготовку к System Design если у вас много времени для подготовки. При ограниченном времени, лучше не тратить на нее время.
5) Chapter 10. Testing. Не относится напрямую к алгоритмическому собеседованию.
6) Chapter 12. C и C++. Не относится к алгоритмическому собеседованию. Это на конкретный язык программирования.
7) Chapter 13. Java. Аналогично Chapter 12.
8) Chapter 14. Databases. Аналогично 12 и 13.
9) Chapter 15. Threads and Locks. Аналогично 12-14.
👍9🔥62
Какой у меня процент успешного прохождения технических собеседований?

За свою карьеру я доходил до стадии технического собеседования в ~21 компанию. Большинство из которых это топ компании России или мира.
Я не считаю число раз, когда я подавал резюме и не получал ответа или приходил reject по резюме. В некоторые из этих компаний я собеседовался 2 или 3 раза. В сумме я доходил до стадии технического собеседования ~24 раза.
Из этих 24 раз я 8 раз получил в итоге оффер. Т.е. мой средний процент за карьеру ~33%.

За последние 7 лет я больше сам собеседую. Я провел сотню собеседований как в FAANG так и в другие европейские компании. Сам же я за последние 7 лет проходил собеседование 4 раза и получил 3 оффера. 2 из них в FAANG.

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

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

Примеры компаний, в которые я собеседовался: Google, Facebook, Amazon, Booking, Atlassian, Яндекс, Сбертех, Skyscanner, Mail Ru, Zalando, Spotify, Huawei, Criteo, и многие другие.
В какое число компаний вы доходили до технического собеседования?
Final Results
25%
0
13%
1
30%
2-5
16%
5-10
9%
10-20
3%
20-25
2%
25-30
1%
30-40
2%
40+
Стоит ли использовать https://www.topcoder.com/ или https://codeforces.com/ для подготовки к собеседованию по алгоритмам?

https://www.topcoder.com/ и https://codeforces.com/ это самые популярные платформы для соревнований по олимпиадному программированию. Стоит ли их использовать в вашей подготовке к собеседованию по алгоритмам и структурам данных?

Краткий ответ: нет, это не будет эффективно.

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

Но если вы уже топовый олимпиадник, то вы уже инвестировали много времени в подготовку и вам будет намного проще пройти собеседование по алгоритмам. Поэтому заниматься олимпиадами я бы рекомендовал тем, кому это нравится, не надо себя заставлять и у вас очень много времени на это. Чаще это подходит школьникам и студентам. Если у вас очень много свободного времени, которое вы можете и главное хотите тратить на олимпиады, то это очень хорошая инвестиция в свое будущее.
👍8🔥3
Какие алгоритмы сортировки нужно знать для алгоритмического собеседования?

Наизусть обязательно нужно знать (вы можете написать код этих сортировок без подсказок на листе бумаге минут за 5 без ошибок):
1) Merge Sort
2) Quick Sort

В чистом виде вас не попросят - напишите ту или иную сортировку (в FAANG компании точно не спросят, не в FAANG могут спросить просто написать. Иногда встречал такие вопросы в Российские не FAANG компании типа Яндекса). Но есть много задач на массивы (строки и списки), решением которых является часть известного алгоритма сортировки. Если же вам просто надо отсортировать массив для решения задачи, вам не надо писать сортировку с нуля. Просто в Java можно вызвать Collections.sort или Arrays.sort.
Есть также известный алгоритм QuickSelect, который позволяет найти оптимальным образом k-топ элемент (вместо полной сортировки или использования кучи (PriorityQueue в Java)). Этот алгоритм частично повторяет Quick Sort. QuickSelect также нужно знать наизусть.

Желательно также знать и уметь реализовать самостоятельно:
3) Bucket Sort
4) Radix Sort

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

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

Кроме самих алгоритмов нужно знать их алгоритмические сложности, что такое устойчивая сортировка, какая сложность той или иной сортировки в наихудшем случае и какой случай является наихудшим.
👍8🔥3
На чем проваливаются чаще на собеседовании в FAANG компании?

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

Процесс начинается с апликейшена или с контакта рекрутера. Если с вами сконтактировал рекрутер и вы решите пройти собеседование, то вы практически гарантированно попадете на собеседование, если у вас нет жестких проблем с английским. На вас он вышел при помощи поиска на linkedin по ключевым словам или вашим контактам. Обычно, они смотрят на ваше образование и опыт работы. Они смотрят, чтобы там были или серьезные вузы для вашей страны/мира или топ компании вашей страны мира. Например, для России по вузам это может быть МФТИ, ИТМО, МГУ, Бауманка, МИФИ и т.д. По работодателям это может быть Яндекс, OK, VK, Mail, Сбертех, Ozon. Иногда могут пригласить победителя олимпиад или топового олимпиадника. Но тут надо быть в топ 10 в мире или хотя бы в топ 100 или победителем/призером известных олимпиад.
Если у вас этого ничего нет, то вероятность того, что вам напишет рекрутер Google или Facebook сильно уменьшается. Тут лучше самому аплаится. Если делать это напрямую на сайте компании и у вас нет ничего интересного в резюме, то с большой вероятностью там будет 100 других кандидатов, у которых резюме будет интереснее вашего. В таком случае аплаится лучше через кого-то, кто уже работает в этой компании. Тогда вероятность того, что вас пригласят на собеседование кратно повышается. Если у вас таких знакомых нет, можете просто найти кого-то на linkedin и попросить вас зареферить (например у вас с этим человеком есть общие контакты, или вы учились в одном вузе, работали в одной компании ну или просто он из той же страны, что и вы).

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

Далее вам будет назначен Phone Screen. Это предварительное техническое собеседование. В Facebook это обычное кодинг интервью на алгоритмы, где вас попросят решить 2 алгоритмические задачки. Длительность 45 минут. В Amazon это может быть on-line тест также на алгоритмические задачки (тоже самое что в Facebook, просто без человека). Тут проваливается гиганское число людей. Лишь небольшой процент проходит этот этап. Я бы сказал, 10-20%. Зависит от компании и сложности задач. Основная причина - отсутствие какой либо подготовки. Большинство имеют смутное представление о том, что такое кодинг собеседование в FAANG и считают, что задачки на алгоритмы это детский сад и уж они то с 10 летним опытом их решат не задумываясь. Но на деле, большинство не может написать цикл for с условием внутри без интенсивного гугления. А уж про то, как решать задачи при помощи структур данных или алгоритмов я уже молчу.
👍14
Если вы прошли Phone Screen, то ваши шансы получить офер уже составляют ~25%. Т.е. примерно один из 4, кто прошел до on-site собеседования получает офер (в среднем конечно). On-site состоит из 4-5 собеседований по 45 минут. Обычно это кодинг, system design и поведенческое собеседование. В разные компании основная причина провалов разная. Т.к. вы уже прошли некий отбор по части кодинга, то провалится на кодинге шансов у вас намного меньше, чем в system design. Особенно это характерно для Facebook. На on-site на моем опыте люди чаще проваливаются на system design. Но опять же, не потому что это очень сложно, а потому что люди мало уделяют времени на подготовку этой части. Как по мне system design это достаточно простое собеседование, если вы несколько месяцев уделили подготовке именно этой части. В Amazon часто проваливаются на поведенческой части и на кодинг собеседовании. Как мне кажется, это связано с тем, что поведенческая часть в Amazon сложнее, чем в другие компании (там все завязано на Leadership Principles). А также с тем, что Phone Screen в Amazon достаточно лайтовый и его пройти легче, чем в Facebook или Google. А на on-site задачи могут быть сильно сложнее, чем были у вас в их онлайн тесте.
👍97
Стоит ли целенаправленно готовиться к собеседованию в FAANG, если у вас нет технического образования и вы учитесь на курсах и хотите стать программистом?

Краткий ответ - нет.

Вам в таком случае лучше сосредоточиться на поиске любой работы программистом для получения хоть какого-то опыта. Компании поменьше не собеседуют как FAANG. Вам следует состедоточится на основах языка программирования, SQL, Linux и получить опыт в создании собственных небольших проектов, чтобы потрогать на практике фреймворки и тулы, которые будут востребованы на работе. Для Java это может быть Spring, MySql, Postgress. Для full-stack это может быть еще JS, React. Также разобраться с основами структур данных, какие они поддерживают основные операции и их алгоритмическая сложность (массив, строка, список, хэш таблица, дерево, граф).

На первой работе вы поймете тяните вы или нет, нравится вам или нет. Если будете прогрессировать, можете изучить более сложные вещи и найти работу в более крутой компании. Изучить паттерны проектирования, многопоточность, начать практиковаться в решении алгоритмических задач, разобраться в более сложных концептах баз данных(транзакции, уровни изоляции, дед локи, индексы). И пройти собеседования в лучшии компании вашей страны/города. Туда обычно собеседования это что-то промежуточное между собеседованиями в маленькие компании и собеседованием в FAANG. Обычно там пол собеседования по языку программирования и технологиям, половину на алгоритмы.

И уже получив опыт в такой компании можно задуматься, если вы хотите в FAANG.

Целенаправленно готовится в FAANG я бы советовал если вы студент топ вуза или олимпиадник и вы можете сразу на стажера/Junior попасть в FAANG еще до окончания или сразу после. Или тем кто уже имеет опыт работы над большими высоконагруженными проектами в хороших компаниях.
13👍1
Вопрос с собеседования программиста: какие типы джойнов вы знаете?

Очень частый вопрос с собеседования на программиста: Какие типы SQL joins вы знаете и чем они отличаются?
Ответ.
Их 5 типов:
1) INNER JOIN
2) LEFT OUTER JOIN (или просто LEFT JOIN)
3) RIGHT OUTER JOIN (или просто RIGHT JOIN)
4) FULL OUTER JOIN (или просто FULL JOIN)
5) CROSS JOIN
Подробно описал тут: Типы SQL joins
👍10