Подборка алгоритмических задач с решениями и описание алгоритмов уже опубликованных в этом канале
#interview #собеседование #алгоритмы #подборка

Обновление подборки. Часть опубликована на medium (возможно потребуется vpn).

Two Pointers:
1) Проверка на палиндром.
2) Усложненная версия проверки на палиндром.
3) Merge Two Sorted Arrays
4) Самая длинная палиндромная подстрока
5) Удалить дубликаты в отсортированном массиве
HashTable:
6) Two Sum
Stack:
7) Проверить скобочное выражение.
LinkedList:
8) Удалить n-й элемент с конца в односвязном списке
9) Deep Copy списка со ссылкой на случайный элемент.
BinarySearch:
Описание алгоритма BinarySearch.
10) Пропущенный элемент в отсортированном массиве.
11) Пиковый элемент.
12) Число итераций в бинарном поиске.
13) Первая плохая версия
DFS:
Описание алгоритма DFS.
14) Flood Fill.
BFS:
Описание алгоритма BFS.
15) Проверить полноту дерева.
16) Обход дерева по уровням.
Binary Tree:
Алгоритмы обхода двоичного дерева
17) Invert Binary Tree
18) BranchSums
19) Максимальная высота дерева
21) Максимальная сумма пути в бинарном дереве
22) Сумма элементов бинарного дерева поиска в диапазоне значение
Dynamic Programming:
Основные этапы решения задач на динамическое программирование Top-Down методом
23) Top Down подход на примере задачи про ступеньки
24) Задача на динамическое программирование. Разделение на слова.
25) Количество дождевой воды
26) Bottom-up подход: разменять деньги
👍95
Задача на system design: Задизайнить мессенджер по типу Telegram или WhatsApp.
#systemdesign
Задача. Задизайнить мессенджер по типу Telegram или WhatsApp.
Решение. Описал тут: Дизайн мессенджера Telegram
👍91👏1
Что такое CDN?
#systemdesign

Хорошая и короткая статья на сайте AWS о том, что такое CDN(content delivery network): Content Delivery Network

Эта технология незаменима для быстрого доступа, например, к медиа контенту. Картинкам, видео и аудио. Такие сервисы как Netflix, youtube, instagram опираются на CDN для быстрого доступа к медиа контенту.
👍6
Обработка ошибок при вызове другой компоненты
#systemdesign

Допустим у вас есть две компоненты, и одна компонента вызывает другую. Например, у вас есть сервис Users Service (сервис пользователей) и он вызывает сервис Orders Service (сервис заказов) для получения списка заказов для конкретного пользователя. Или ваша компонента читает/пишет сообщения из очереди типа AWS SQS или Rabbit MQ, или вы читаете/пишите из стрима типа Kafka или AWS Kinesis. Если вторая компонента не отвечает или бросает ошибки, то нужно соответствующим образом реагировать на такие ситуации.

Какие могут возникнуть проблемы?
1) Не удается установить соединение. Проблемы сети или компонента лежит.
2) Соединение удалось установить, но вызываемая компонента не возвращает никакого результата длительное время.
3) Соединение удалось установить, но вызываемая компонента возвращает ошибку.
4) Соединение удалось установить, но в процессе выполнения операции соединение прервалось.
5) Установление соединения занимает очень длительный период времени, но не возвращается ошибка о том, что сервер не доступен, т.к. сервер постоянно занят.
6) Сервер доступен, но он бросает ошибку по типу Throttling Exception, если для компоненты настроен Throttling (например, максимальное число вызовов в единицу времени или максимальное число соединений и т.д.)

Как можно реагировать в подобных случаях для достижения low latency, fault tolerance, resilience и availability?

Описал тут: https://telegra.ph/Obrabotka-oshibok-pri-vyzove-drugoj-komponenty-10-24

Все эти подходы широко используются во многих компаниях, особенно, в FAANG. Почти каждый вызов другой компоненты обернут во все эти подходы.
👍7
Global Talent Visa UK

Если вы программист и хотите переехать в UK для работы и жизни, то в большинстве случаев вам вначале нужно найти работодателя, который может предоставить вам визу. Тип этой визы будет Skilled Worker Visa. Она позволяет вам прожить в UK 5 лет, через 5 лет получить ILR (вид на жительство). Прожить еще один год по ILR и получить гражданство UK.
Минус такой визы в том, что вы привязаны к работодателю. Если вы захотите сменить работодателя, вам нужно найти другого работодателя, кто может быть спонсором такой визы. Далеко не все работодатели в UK могут предоставить такое спонсорство. Более того, если вас уволят (например, в результате сокращений (layoffs)), у вас будет 60 дней, чтобы найти новую работу. Иначе вам нужно выехать из страны. Вы также не можете заниматься бизнесом или консультированием имея эту визу или жить в UK не работая.

Но в UK есть другой тип визы: Global Talent Visa. Она позволяет приехать и жить в UK не имея работодателя. Вы можете работать, заниматься бизнесом и консалтингом в UK. При этом вы не привязаны к работодателю. Она также сокращает время для получения ILR c 5 до 3 лет. Через 3 года жизни в UK вы можете получить вид на жительство и еще через 2 - гражданство.

Вначале я переехал в UK по Skilled Worker Visa. Но после я подался и получил Global Talent. Для Global Talent нужно подготовить много документов, но это стоит того. Основные документы: отзывы от высокоуровневых менеджеров (уровни CEO, CTO, VP, Director) с ваших прошлых мест работы о ваших достижениях в этих компаниях, какие-то подтверждения этого + подтверждения ваших контрибьюшенов вне работы в Digital Sector. В качестве таких контрибьюшенов можно предоставим ваши выступления на IT конференциях, публикации на известных IT форумах, видео на youtube с вашими выступлениями на IT темы, контрибьюшены в open source и т.д. Если у вас это все есть, то я сильно рекомендую вам получить именно такую визу.
Если вы скажем можете получить отзывы от работодателей, но контрибьюшенов вне работы у вас нет, то вы можете воспользоваться услугами сторонних компаний, которые помогут вам это организовать. Например, есть компания https://www.immigram.io/ У них есть связи с разными площадками, которые помогут вам где-то выступить, где-то написать статью и т.д. И в целом подготовить пакет документов для Global Talent Visa.
🔥6👍2
Число вакансий в tech индустрии медленно, но растет

В соответствии с https://www.trueup.io/job-trend число вакансий достигло дна в марте 2023 года и начало медленно расти.

У нас в компании тоже появилось много новых вакансий и я снова начал проводить 1-2 собеседования в неделю. Тоже касается других FAANG и не FAANG компаний.
🔥8👍3
Googleyness interview

В Google поведенческое собеседование называется Googleyness interview. Оно частично похоже по поведенческое собеседование в Amazon, где нужно привести примеры из карьеры, где вы демонстрировали те или иные Amazon Leadership Principles. В Google принципы частично пересекаются, но есть различия. Вот хороший канал, где hr из Google рассказывает про это собеседование, что такое Googleyness и как к нему подготовиться. Пригодится и для подготовки к поведенческому собеседованию в другие компании https://youtu.be/TWFs3dxfiOc?si=ctE_Zx5FI5Dv53pM
👍8🔥21
Задача с собеседования: сгруппировать анаграммы

Завел youtube канал, записал видео разбора задачи с leetcode. Т.к. это мое первое видео, качество может храмать: https://youtu.be/QvhS-8qScvo?si=LJxEHy1tRrceavo5

Пишите свой фидбек на видео в комментариях.
👍11🔥5
Где я был предыдущие пару недель

Учил историю, культуру и государственное устройство UK. Это было нужно для сдачи экзамена Live in UK Test. Я его наконец вчера сдал и теперь знаю всех жен Генриха 8, их порядок, его детей и причины развода. Этот экзамен нужно сдавать всем, кто хочет получить ILR (ВНЖ) в Великобритании. ВНЖ в UK можно получить после 5 лет жизни в UK или после 3 лет, если вы обладатель Global Talent визы (мой случай).
🔥16😁6👍2👎2👏1
Случай на собеседовании в FAANG

Компания, в которой я работаю, возобновила активный набор сотрудников, после практически годовой паузы. Я снова сейчас активно собеседую кандидатов.
Собеседования все также проходят online, как и в ковид. Я недавно собеседовал кандидата, на позицию E6 (Staff Software Engineer, с зп от $ 500 000 в USA). И мне кажется, что я первый раз серьезно заподозрил кандидата в читерстве. Во-первых, он периодически переводил глаза, во время написания кода. Но это еще ничего не значит, т.к. я не вижу его сетап рабочего стола и не могу точно сказать, куда он смотрел. А во-вторых, Он ничего не уточнял в условии задачи. А обычно, задачи формулируются так, чтобы там была какая-то неопределенность в формулировке, чтобы посмотреть как кандидат коммуницирует и работает с неопределенностью (ambiguity). Он же вообще мало говорил, ничего не уточнял. Словно зависал на время и потом словно ниоткуда писал оптимальное решение, но не обязательно на те условия задачи, которые я имел ввиду. При этом не поясняя решение до того, как его написать и обсудить его, проанализировать плюсы и минусы решения. А просто его писал, периодически поглядывая в другой экран. А потом с трудом пытался его объяснить.
Кандидат, конечно же, был зареджекчен. Но не потому, что читерил. Доказательств этого у меня нет. А по communication. На алгоритмическом собеседовании основное это не "решил или не решил" задачу. На нем кандидат оценивается по 4 осям: communication, problem solving, coding, testing. А задача используется как способ получить сигналы от кандидата по этим осям. Если вы ничего не объясняете, не уточняете, не реагируете на вопросы и подсказки, но при этом вывалили откуда-то правильный код, то вы не пройдете ни по одной из осей.
👍183😁2🤔2💘21
Задача с собеседования в Google: Слияние интервалов

Записал разбор еще одной задачи с собеседовая: https://www.youtube.com/watch?v=b7UuqAIrpgM

Ссылка на leetcode: https://leetcode.com/problems/merge-intervals/
👍7🔥1
Incident management в Amazon

В любых софтверных сервисах и продуктах случаются outages, полные или частичные. Когда сервис падает и становится недоступным или часть функционала перестает работать.
Как в Amazon реагируют на такие ситуации, как обнаруживают, что делают во время инцидента и после него?
В Amazon все разработчики без исключения участвуют в так называемом oncall. Т.е. по очереди дежурят в поддержке работы сервисов, которые они разрабатывают. Обычно это длится одну неделю раз в в 1.5 - 2 месяца. В течении этого времени они реагируют на тикеты и таски связанные с саппортом продукта и участвуют в их митигации (именно митигации, а не починке root cause). Все сервисы производят огромное число метрик, на которые созданы alarms, которые в случае проблем автоматически создают таски. Например, это может быть AWS Cloudwatch. Тикеты и таски имеют свой severity. Самые важные автоматически приходят на рабочий телефон и очень громко звенят(paging). В том числе это может произойти ночью. В таком случае нужно принять этот paging в течении короткого промежутка времени и надо начать смотреть тикет. Если это не сделать, то такой alarm начнет будить вашего менеджера, потом менеджера его менеджера. Вплоть до CEO если это очень серьезный инцидент и никто не реагирует.
Далее oncall смотрит тикет и принимает шаги по митигации (stop the bleeding, не починки). Например, делает rollback до последней стабильной версии, восстановление из backup, перезагрузку кластера и тому подобное.
При этом активно комментирует все свои действия в тикеты, т.к. часто это может повлиять на другие компоненты и сервисы, которые активно пишут, что они тоже заафекчены. Иногда перебои в Amazon приводят к outage в других продуктах. Например, однажды outage в AWS S3 привел к недоступности видео в Netflix. Иногда происходит мониторинг медиа типа twitter, на предмет жалоб на outage. Как только инцидент был замитигирован(stop bleeding) начинается формирование документа COE ревью, который призван помочь в предотвращении таких инцидентов в будущем. Одна из особенностей как митигации так и COE ревью - no blame culture. Т.е. не заниматься поиском виноватых людей, а поиском дыр в системе, процессах, которые позволили этому случиться. Про COE ревью детально напишу в следующих постах.
👍193
Будут ли вам интересны видосы для начинающих по Java? Условно с полного нуля.
Final Results
46%
Да
54%
Нет
COE Review в Amazon

В продолжении к посту: https://t.me/faangmaster/217

После серьезного инцидента, как правило, пишется документ под названием COE Review. Серьезность инцидента зависит от того, какой был impact, какой сервис был заафекчен, какая функциональность перестала работать и т.д. Обычно это делается для инцидентов уровня LSE (Large Scale Event), Sev0, Sev1, Sev2, Sev3. Sev0 - это, обычно, значит, что перестала работать функциональность, которая непосредственно влияет на конечного пользователя (Tier0 сервис). Sev3 - непосредственно влияния на конечного пользователя нет, но могут быть отсроченные небольшие эффекты на пользователя или небольшие потери для бизнеса.
На написание и ревью документа отводится ограниченное количество дней. У документа есть owner, который работает над документом, но ему могут помогать и другие люди.
Основная цель документа - понять, что и почему произошло и что можно сделать, чтобы это не произошло в будущем (prevention).
Из чего состоит документ:

1) Into. Краткое summary. Описывается на абзац, что произошло, какой impact в цифрах (например, сервис был offline 2 часа, что привело к потере ~40 миллионов долларов прибыли), как обнаружили, как замитигировалли, какой root cause.

2) Impact. Более детально описывается влияние данного инцидента. Приводится расчет убытков, приводятся метрики, графики с детальным анализом, запросы и т.д.

3) Timeline. Описывается последовательность событий с временем, что происходило, какие были предприняты меры. Когда случился сбой, когда он был обнаружен, когда стало понятно как митигировать, какие шаги по митигации были предприняты и т.д.

4) Detection. Описывается как было обнаружено, что что-то не так. Какие метрики, alarms позволили это обнаружить. С какой задержкой это было обнаружено.

5) Mitigation. Какие шаги были предприняты, чтобы замитигировать проблему (stop the bleeding). Сколько это заняло времени и почему.

6) Five whys. Позволяют ответить на вопрос, что послужило реальной причиной (root cause).

7) Monitoring/Detection Improvement. Что можно сделать, чтобы быстрее в следующий раз обнаружить подобную проблему (улучшить метрики, алармы, добавить независимые методы детектирования и т.д.)

8) Mitigation Improvement. Что можно улучшить, чтобы быстрее митигировать проблему (улучшить или добавить автоматические системы, которые задетектируют проблему и автоматически сделают rollback, улучшить качество runbooks, добавить метрик, dashboard’ов и т.д.)

9) Root Cause Fix. Что нужно сделать, чтобы починить root cause.

10) Prevention. Какие шаги нужно предпринять, чтобы это не случилось в будущем.

Все это описывается, проходит цепочка ревью (внутри команды, внутри организации, в целом в компании), происходит публикация. Другие люди, могут найти этот документ в общей системе по ключевым словам и прочитать то, что произошло и как это можно починить, чтобы использовать в своих целях. Далее все эти action items реализуются разработчиками. В Amazon этому уделяется серьезное внимание, но и процесс очень сложный и бюрократический. В Facebook он намного более легковесный.
👍75
Дан неотсортированный массив чисел длины n, нужно найти k наибольших чисел. Какая алгоритмическая сложность оптимального решения такой задачи?
Final Results
7%
O(n^2)
19%
O(n*log(n))
14%
O(n*log(k))
10%
O(k*log(n))
15%
O(n*k)
28%
O(n)
2%
O(k)
5%
O(log(n))
0%
O(log(k))
1%
O(1)
Хорошее видео для тех, кто хочет написать свой LLM(то что использует ChatGPT) с нуля: https://youtu.be/kCc8FmEb1nY?si=65pUV5i45MTX_U8T
Автор канала один из основателей OpenAI и долгое время работал в Tesla AI.
👍8🔥21
Сделал еще один ролик для youtube про ресурсы для подготовки в виде топа: https://youtu.be/DnQdKvlosKk?si=5j3UN6RSz-wngo2z
👍13
Для тех, кто интерисуется шахматами.
Недавно, 14 чемпион мира по шахматам Владимир Крамник опубликовал статистику игр Хикару Накамуры на платформе chess.com. Из нее следует, что Хикару набрал 45.5 очков из 46 в 46 играх. Все это с намеком на то, что Хикару читер. Я написал небольшую програмку, которая проводит симуляцию и рассчитывает вероятность того, что в большой выборке игр можно найти последовательности из 46 и более побед при заданной вероятности выиграша. С параметрами: выборка 10 тысяч игр, вероятность выиграша (88%, Хикару играл с противниками на ~350 пунктов ниже) и ищем серии из 46 и более выиграшей подряд. У меня получилось вероятность этого около 96%. Но она быстро падает с уменьшением вероятности выиграша в каждой игре. Что думаете вы? Код выложил тутhttps://github.com/faangmaster/kramnik/blob/main/Main.java

Развитие истории можно посмотреть по последним роликам в каналах Хикару https://youtube.com/@GMHikaru?si=ddMRyd-avgVNR0h5 и LevitovChess https://youtube.com/@LevitovChess?si=eB5u3O1kAzDZSP22
👍6