Публикую решение на задачу: найти k-й пропущенный элемент в отсортированном массиве
Дан отсортированный по возрастанию массив целых чисел, все элементы которого уникальны. В массиве есть пропущенные элементы.
Необходимо найти k-й пропущенный элемент начиная с нулевого элемента массива.
Например: [4, 7, 9, 10], k = 1 -> Ответ 5. [4, 7, 9, 10], k = 3 -> Ответ 8 (пропущены 5, 6, 8)
Решение описал тут: Решение
Дан отсортированный по возрастанию массив целых чисел, все элементы которого уникальны. В массиве есть пропущенные элементы.
Необходимо найти k-й пропущенный элемент начиная с нулевого элемента массива.
Например: [4, 7, 9, 10], k = 1 -> Ответ 5. [4, 7, 9, 10], k = 3 -> Ответ 8 (пропущены 5, 6, 8)
Решение описал тут: Решение
Medium
Задача: пропущенный элемент в отсортированном массиве
Дан отсортированный по возрастанию массив целых чисел, все элементы которого уникальны. В массиве есть пропущенные элементы. Необходимо…
👍4
Иерархия исключений в Java
#interview #собеседование #java
Я сразу рассмотрю несколько связанных вопросов с собеседования на Java программиста:
1) Какая иерархия исключений в Java?
2) Чем отличаются checked от unchecked исключений?
3) Что такое Error?
4) Какой пример Error вы знаете?
5) Можно и нужно ли перехватывать OutOfMemoryError?
6) Какие примеры RuntimeException вы знаете?
7) Можно и нужно ли перехватывать Throwable?
Ответ описал тут: Иерархия исключений в Java.
#interview #собеседование #java
Я сразу рассмотрю несколько связанных вопросов с собеседования на Java программиста:
1) Какая иерархия исключений в Java?
2) Чем отличаются checked от unchecked исключений?
3) Что такое Error?
4) Какой пример Error вы знаете?
5) Можно и нужно ли перехватывать OutOfMemoryError?
6) Какие примеры RuntimeException вы знаете?
7) Можно и нужно ли перехватывать Throwable?
Ответ описал тут: Иерархия исключений в Java.
Telegraph
Иерархия исключений в Java
Я сразу рассмотрю несколько связанных вопросов с собеседования на Java программиста: 1) Какая иерархия исключений в Java? 2) Чем отличаются checked от unchecked исключений? 3) Что такое Error? 4) Какой пример Error вы знаете? 5) Можно и нужно ли перехватывать…
👍7💘2
Хотите узнать сколько зарабатывают в топ IT компаниях мира?
Рекомендую сервис https://www.levels.fyi/
Там вы можете сравнить сколько платят в разных топ IT компаниях мира разным уровням программистов.
Например, сравним зп в Google, Amazon и Facebook: Сравнение.
Эти зп в год в США в кремниевой долине. В Европе в тех же компаниях зп меньше. Например, в Лондоне зп примерно в 1.5 раза ниже в тех же компаниях и тех же должностях.
Краткая выжимка для Facebook:
1) E3 (Junior) - $182 000
2) E4 (Mid) - $255 000
3) E5 (Senior) - $368 000
4) E6 (Staff) - $557 000
5) E7 (Principal) - $980 000
6) E8 (Senior Principal) - $1 660 000
7) E9 (Distinguished/Выдающийся инженер) - $2 534 000
Компенсация в таких компаниях состоит из трех частей: базовой зп (выплачивается каждый месяц), бонус(выплачивается раз или два раза в год), и акции компании (выдаются 1-4 раз в год). Акции таких компаний ликвидны. Как только вы получили акции Google или Amazon, вы можете их продать в тот же день или хранить с надежной, что они вырастут в цене.
На позиции Distinguished работают очень мало программистов. Это десятки или сотня программистов в одной такой компании. Я помню, когда работал в Amazon, у нас на позиции Distinguished работал создатель Java James Gosling.
Рекомендую сервис https://www.levels.fyi/
Там вы можете сравнить сколько платят в разных топ IT компаниях мира разным уровням программистов.
Например, сравним зп в Google, Amazon и Facebook: Сравнение.
Эти зп в год в США в кремниевой долине. В Европе в тех же компаниях зп меньше. Например, в Лондоне зп примерно в 1.5 раза ниже в тех же компаниях и тех же должностях.
Краткая выжимка для Facebook:
1) E3 (Junior) - $182 000
2) E4 (Mid) - $255 000
3) E5 (Senior) - $368 000
4) E6 (Staff) - $557 000
5) E7 (Principal) - $980 000
6) E8 (Senior Principal) - $1 660 000
7) E9 (Distinguished/Выдающийся инженер) - $2 534 000
Компенсация в таких компаниях состоит из трех частей: базовой зп (выплачивается каждый месяц), бонус(выплачивается раз или два раза в год), и акции компании (выдаются 1-4 раз в год). Акции таких компаний ликвидны. Как только вы получили акции Google или Amazon, вы можете их продать в тот же день или хранить с надежной, что они вырастут в цене.
На позиции Distinguished работают очень мало программистов. Это десятки или сотня программистов в одной такой компании. Я помню, когда работал в Amazon, у нас на позиции Distinguished работал создатель Java James Gosling.
Levels.fyi
Levels.fyi | Salaries & Tools to Level Up Your Career
Search 300k+ salaries for different companies, job titles, career levels, and locations. Explore our tools to help you get paid more!
🔥6👍3🤩2❤1💘1
Задача на многопоточность в Java: Приостанавливаемый поток
#interview #собеседование #java #concurrency
Напишите поток, который можно приостановить, продолжить/возобновить его выполнение и остановить.
Это вопрос на знание нескольких фактов:
1) Как в Java создать поток
2) Знание того факта, что Thread.stop(), Thread.suspend() и Thread.resume() не безопасны и deprecated. Их нельзя использовать.
3) Знание wait-notify механизма в Java
4) Знание volatile и/или synchronized в Java
5) Как работает interrupt()
Решение описал тут: ResumableThread
#interview #собеседование #java #concurrency
Напишите поток, который можно приостановить, продолжить/возобновить его выполнение и остановить.
Это вопрос на знание нескольких фактов:
1) Как в Java создать поток
2) Знание того факта, что Thread.stop(), Thread.suspend() и Thread.resume() не безопасны и deprecated. Их нельзя использовать.
3) Знание wait-notify механизма в Java
4) Знание volatile и/или synchronized в Java
5) Как работает interrupt()
Решение описал тут: ResumableThread
Medium
Задача с собеседования на Java программиста
Напишите поток, который можно приостановить, продолжить/возобновить его выполнение и остановить.
👍6❤2😁1💘1
Через сколько лет можно получить гражданство разных стран Европы?
Если вы итишник и переезжаете в одну из стран Европы, то через некоторое время вы можете претендовать на получение гражданства этой страны. Во многих странах ЕС итишникам, которые нашли работодателя в их стране, выдается долгосрочная рабочая виза для высококвалифицированных специалистов. Во многих странах шенгена это blue card, в UK это Tier 2 Skilled Worker Visa или аналоги этих виз. Чтобы получить такую визу, вам нужно получить офер от компании, которая может предоставить вам спонсорство по этой визе, и вы должны соответствовать некоторым критериям. Например, есть нижняя граница зп, ниже которой такая виза не выдается. Прожив необходимое количество лет, вы можете подать документы на получения гражданства. Обычно нужно еще сдать экзамены на знание языка и базовые знания про страну. Иногда нужны еще рекомендации от других граждан этой страны.
Так сколько лет нужно прожить, чтобы получить гражданство? Я привел несколько популярных стран для миграции для итишников:
1) Германия - 8 лет
2) UK - 6 лет или 5 лет, если вы по визе глобальных талантов
3) Нидерланды - 5 лет
4) Чехия - 10 лет (5 лет до пмж + 5 лет до граждаства)
5) Швейцария - 10 лет
6) Франция - 5 лет
7) Люксембург - 5 лет
8) Испания - 10 лет
9) Италия - 10 лет
10) Португалия - 5 лет
11) Швеция - 5 лет
12) Польша - 3 года
13) Кипр - 7 лет
Если вы итишник и переезжаете в одну из стран Европы, то через некоторое время вы можете претендовать на получение гражданства этой страны. Во многих странах ЕС итишникам, которые нашли работодателя в их стране, выдается долгосрочная рабочая виза для высококвалифицированных специалистов. Во многих странах шенгена это blue card, в UK это Tier 2 Skilled Worker Visa или аналоги этих виз. Чтобы получить такую визу, вам нужно получить офер от компании, которая может предоставить вам спонсорство по этой визе, и вы должны соответствовать некоторым критериям. Например, есть нижняя граница зп, ниже которой такая виза не выдается. Прожив необходимое количество лет, вы можете подать документы на получения гражданства. Обычно нужно еще сдать экзамены на знание языка и базовые знания про страну. Иногда нужны еще рекомендации от других граждан этой страны.
Так сколько лет нужно прожить, чтобы получить гражданство? Я привел несколько популярных стран для миграции для итишников:
1) Германия - 8 лет
2) UK - 6 лет или 5 лет, если вы по визе глобальных талантов
3) Нидерланды - 5 лет
4) Чехия - 10 лет (5 лет до пмж + 5 лет до граждаства)
5) Швейцария - 10 лет
6) Франция - 5 лет
7) Люксембург - 5 лет
8) Испания - 10 лет
9) Италия - 10 лет
10) Португалия - 5 лет
11) Швеция - 5 лет
12) Польша - 3 года
13) Кипр - 7 лет
👍6❤4💘1
Задача на многопоточность в Java: перевод денег с одного счета на другой
#interview #собеседование #java #concurrency
Необходимо написать Thread Safe функцию перевода денег с одного счета на другой.
Это классическая задача на dead-lock.
Решение описал тут: Решение.
#interview #собеседование #java #concurrency
Необходимо написать Thread Safe функцию перевода денег с одного счета на другой.
Это классическая задача на dead-lock.
Решение описал тут: Решение.
Medium
Задача с собеседования на Java программиста: Thread Safe перевод денег между двумя банковскими аккаунтами
Необходимо написать Thread Safe (потокобезопасную) функцию, которая списывает деньги с одного счета и зачисляет на другой. Иногда…
👍7❤1
Поиск в ширину (Breadth-first Search)
#algo #algorithms #собеседование #interview #bfs #graphs
Описал второй алгоритм обхода графа - поиск в ширину: BFS.
Если тема интересна, то накидаю задач с решениями с собеседований в FAANG компании.
#algo #algorithms #собеседование #interview #bfs #graphs
Описал второй алгоритм обхода графа - поиск в ширину: BFS.
Если тема интересна, то накидаю задач с решениями с собеседований в FAANG компании.
Medium
Поиск в ширину (Breadth-first Search)
Еще одним алгоритмом обхода графа является поиск в ширину. Смотри также мою статью про обход в глубину: DFS.
👍8❤1
Вопрос с собеседования на Java программиста: как работает Garbage Collector в Java?
#java #собеседование #interview
Тут может быть много различных вопросов:
1) Как устроен Java Heap?
2) Чем отличаются Minor от Major сборки мусора?
3) Что такое Generational GC?
4) Какие бывают Garbage Collectors?
5) Что такое MetaSpace/PermGen?
Могут быть и другие, более продвинутые вопросы. Я рассмотрел лишь самые базовые моменты, знание которых для большинства случаев будет хватать.
Описал ответы тут: https://telegra.ph/Kak-rabotaet-Garbage-Collector-v-Java-06-02
#java #собеседование #interview
Тут может быть много различных вопросов:
1) Как устроен Java Heap?
2) Чем отличаются Minor от Major сборки мусора?
3) Что такое Generational GC?
4) Какие бывают Garbage Collectors?
5) Что такое MetaSpace/PermGen?
Могут быть и другие, более продвинутые вопросы. Я рассмотрел лишь самые базовые моменты, знание которых для большинства случаев будет хватать.
Описал ответы тут: https://telegra.ph/Kak-rabotaet-Garbage-Collector-v-Java-06-02
Telegraph
Как работает Garbage Collector в Java?
Это достаточно большая тема. По ней может быть множество вопросов на собеседовании. Я рассмотрю самые популярные и базовые. Новичек может ответить как-то так: GC считает ссылки на объекты. Если число ссылок равно нулю, то объект не используется и его можно…
❤3👍3💘3
Относительно свежее видео от Veritasium, в котором упоминаются DFS и BFS
Напрямую эти алгоритмы не рассматриваются. Лишь упоминаются как варианты решения нахождения пути в лабиринте. Упоминания алгоритмов с 6 минуты.
https://youtu.be/ZMQbHMgK2rw
Напрямую эти алгоритмы не рассматриваются. Лишь упоминаются как варианты решения нахождения пути в лабиринте. Упоминания алгоритмов с 6 минуты.
https://youtu.be/ZMQbHMgK2rw
YouTube
The Fastest Maze-Solving Competition On Earth
Welcome to Micromouse, the fastest maze-solving competition on Earth. Join Onshape’s community of over 3 million CAD users by creating a free account here: https://Onshape.pro/Veritasium.
Special thanks to our Patreon supporters! Join this community to help…
Special thanks to our Patreon supporters! Join this community to help…
👍4
Большая подборка вопросов и ответов по многопоточности в Java
#interview #собеседование #java #concurrency
Тут хорошая подборка вопросов по многопоточности: https://github.com/arteam/100-Java-Concurrency-questions
Часть про "Железо" можно пропустить, т.к. встречается крайне редко.
#interview #собеседование #java #concurrency
Тут хорошая подборка вопросов по многопоточности: https://github.com/arteam/100-Java-Concurrency-questions
Часть про "Железо" можно пропустить, т.к. встречается крайне редко.
GitHub
GitHub - arteam/100-Java-Concurrency-questions: An attempt to answer to the concurrency questions from a famous Habr blog post…
An attempt to answer to the concurrency questions from a famous Habr blog post (in Russian) - arteam/100-Java-Concurrency-questions
👍5🔥2
Какие языки программирования используются в крупнейших IT компаниях?
Я работал в Amazon и Facebook, в одном из крупнейших инвест банков мира и других компаниях. Все они используют множество разных языков для разных целей. Вот их неполный список: Java Script, C++, C, C#, Java, Python, Rust, Kotlin, Swift, Objective C, Hack, Go, Php, Erlang, Ocaml, Haskell. FAANG компании обычно не собеседуют на знания каких-то конкретных языков программирования. Они спрашивают задачи на алгоритмы и System Design. Но код на собеседовании вам нужно писать на реальном языке программирования на ваш выбор. Псевдокод использовать нельзя. При этом писать без IDE и кодкомплишена. Код должен быть приближен к реально компилируемому коду.
Для каких целей используют разные языки?
Например инста написана на python и django фреймворке. Но использует куча других сервисов, написанных на других языках. Очень много платформенных вещей написано на C++, Rust. Мобильные клиенты, очевидно, написаны на Objective C, Swift, Kotlin, Java. Бэкенд вотсапа написан на языке Erlang. Веб версии Амазона и фейсбука написаны на JS, с использование реакта. В Амазоне очень много бэкенда на Java. Платформенные вещи C++. Бэкенд фейсбука это язык Hack, которые дергает другие платформенные вещи, которые в основном на C++. В твиттере бэкенд, в основном, на Java. В однокласниках тоже на Java. Machine Learning и Data Science это, в основном, python. В Microsoft очень много C# и C++. В Google много Go. Работая в FAANG очень часто приходится писать на разных языках. Поэтому нужно знать скорее не язык, а базовые подходы в разработке, алгоритмы и структуры данных и быть инженером, а не кодером на одном языке.
Я работал в Amazon и Facebook, в одном из крупнейших инвест банков мира и других компаниях. Все они используют множество разных языков для разных целей. Вот их неполный список: Java Script, C++, C, C#, Java, Python, Rust, Kotlin, Swift, Objective C, Hack, Go, Php, Erlang, Ocaml, Haskell. FAANG компании обычно не собеседуют на знания каких-то конкретных языков программирования. Они спрашивают задачи на алгоритмы и System Design. Но код на собеседовании вам нужно писать на реальном языке программирования на ваш выбор. Псевдокод использовать нельзя. При этом писать без IDE и кодкомплишена. Код должен быть приближен к реально компилируемому коду.
Для каких целей используют разные языки?
Например инста написана на python и django фреймворке. Но использует куча других сервисов, написанных на других языках. Очень много платформенных вещей написано на C++, Rust. Мобильные клиенты, очевидно, написаны на Objective C, Swift, Kotlin, Java. Бэкенд вотсапа написан на языке Erlang. Веб версии Амазона и фейсбука написаны на JS, с использование реакта. В Амазоне очень много бэкенда на Java. Платформенные вещи C++. Бэкенд фейсбука это язык Hack, которые дергает другие платформенные вещи, которые в основном на C++. В твиттере бэкенд, в основном, на Java. В однокласниках тоже на Java. Machine Learning и Data Science это, в основном, python. В Microsoft очень много C# и C++. В Google много Go. Работая в FAANG очень часто приходится писать на разных языках. Поэтому нужно знать скорее не язык, а базовые подходы в разработке, алгоритмы и структуры данных и быть инженером, а не кодером на одном языке.
👍9
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование
Подборку составил из постов, которые я уже публиковал ранее в этом канале.
1) Методы класса Object: https://telegra.ph/Kakie-metody-klassa-Object-vy-znaete-05-28
2) HashMap: https://telegra.ph/HashMap-05-18
3) ArrayList vs LinkedList: https://telegra.ph/ArrayList-vs-LinkedList-05-03
4) Иерархия коллекций в Java: https://telegra.ph/Ierarhiya-kollekcij-v-Java-05-08
5) Иерархия Map: https://telegra.ph/Ierarhiya-kollekcij-v-Java-chast-2-05-08
6) Иерархия и типы исключений: https://telegra.ph/Ierarhiya-isklyuchenij-v-Java-05-30
7) GC: https://telegra.ph/Kak-rabotaet-Garbage-Collector-v-Java-06-02
8) Перевод между банковскими аккаунтами (dead-lock): Решение.
9) Ping-Pong (wait-notify): Решение.
10) Приостанавливаемый поток: Решение.
11) Подборка вопросов по многопоточности: https://github.com/arteam/100-Java-Concurrency-questions
#java #interview #собеседование
Подборку составил из постов, которые я уже публиковал ранее в этом канале.
1) Методы класса Object: https://telegra.ph/Kakie-metody-klassa-Object-vy-znaete-05-28
2) HashMap: https://telegra.ph/HashMap-05-18
3) ArrayList vs LinkedList: https://telegra.ph/ArrayList-vs-LinkedList-05-03
4) Иерархия коллекций в Java: https://telegra.ph/Ierarhiya-kollekcij-v-Java-05-08
5) Иерархия Map: https://telegra.ph/Ierarhiya-kollekcij-v-Java-chast-2-05-08
6) Иерархия и типы исключений: https://telegra.ph/Ierarhiya-isklyuchenij-v-Java-05-30
7) GC: https://telegra.ph/Kak-rabotaet-Garbage-Collector-v-Java-06-02
8) Перевод между банковскими аккаунтами (dead-lock): Решение.
9) Ping-Pong (wait-notify): Решение.
10) Приостанавливаемый поток: Решение.
11) Подборка вопросов по многопоточности: https://github.com/arteam/100-Java-Concurrency-questions
Telegraph
Какие методы класса Object вы знаете?
Все классы в Java наследуют класс Object. Официальная документация: Object. Его методы: 1) getClass() - получить runtime класс объекта. 2) toString() - возвращает текстовое представление объекта 3) hashCode() - Возвращает hash code объекта. Используется,…
🔥9👍3❤1
Сколько нужно решить задач на leetcode, чтобы пройти собеседование в FAANG компанию?
Я сразу оговорюсь, что умение решать алгоритмические задачи это необходимое, но недостаточное условие для успешного прохождения собеседования в компании типа: Facebook, Apple, Amazon, Netflix, Google, Uber, Microsoft, Lyft, Booking, Two Sigma, Jane Street, Citadel и другие. Там еще есть System Design и поведенческая часть.
В этом посте я сосредоточусь только на алгоритмической части.
В моем случае у меня 317 решенных задач на leetcode на данный момент. Кроме этого я решил ~100 задач из Cracking the Coding Interview, ~100 задач на платформе algoexpert.io, и еще ~100 задач на других платформах и из других книг. В сумме получается ~600 задач.
Мой процент успешного прохождения собеседований в FAANG компании 50%. Из 4 попыток, я получил 2 офера.
В среднем, этот процент ~1-5%. А по откликам на вакансии это еще меньше: 0.1-1%.
В основном, процент такой низкий, потому что люди приходят неподготовленными на собеседование.
Сколько алгоритмических задач я бы рекомендовал решить перед первой попыткой?
Все зависит от вашей текущей подготовки:
1) Если вы опытный олимпиадник по программированию, победитель или призер крупных соревнований, имеете высокий рейтинг на платформах типа topcoder, codeforces. То вам или не надо вообще готовиться к этой части собеседования или посмотреть на leetcode ~10-30 задач отфильтрованные по компании, в которую вы собеседуетесь, чтобы понять примерные типы задач.
2) Вы изучали алгоритмы раньше (в универе, самостоятельно и решали какие-то задачи). Но звезд с неба не хватали, в олимпиадах не участвовали или ничего не занимали. Я бы рекомендовал решить хотя бы 100-200 задач. Из которых, половина easy, чтобы постепенно развить скил решения таких задач. И половина medium.
3) Вы новичок в алгоритмах. Я бы рекомендовал хотя бы 300 задач, из которых больше половина это easy задачи. И хотя бы 100 medium задач. Вообще, новичкам я бы рекомендовал или начать с книги Cracking the Coding Interview (главы, которые относятся к алгоритмическим задачам) и/или algoexpert.io потому что там очень детальное пошаговое решение.
Я начинал с уровня между 2 и 3. Для успешного прохождения в Amazon мне понадобилось решить ~200-300 задач (из Cracking the Coding Interview, leetcode, hackerrank, и других книг). Еще 300-400 я решил for fun и для подготовки в Facebook.
Я сразу оговорюсь, что умение решать алгоритмические задачи это необходимое, но недостаточное условие для успешного прохождения собеседования в компании типа: Facebook, Apple, Amazon, Netflix, Google, Uber, Microsoft, Lyft, Booking, Two Sigma, Jane Street, Citadel и другие. Там еще есть System Design и поведенческая часть.
В этом посте я сосредоточусь только на алгоритмической части.
В моем случае у меня 317 решенных задач на leetcode на данный момент. Кроме этого я решил ~100 задач из Cracking the Coding Interview, ~100 задач на платформе algoexpert.io, и еще ~100 задач на других платформах и из других книг. В сумме получается ~600 задач.
Мой процент успешного прохождения собеседований в FAANG компании 50%. Из 4 попыток, я получил 2 офера.
В среднем, этот процент ~1-5%. А по откликам на вакансии это еще меньше: 0.1-1%.
В основном, процент такой низкий, потому что люди приходят неподготовленными на собеседование.
Сколько алгоритмических задач я бы рекомендовал решить перед первой попыткой?
Все зависит от вашей текущей подготовки:
1) Если вы опытный олимпиадник по программированию, победитель или призер крупных соревнований, имеете высокий рейтинг на платформах типа topcoder, codeforces. То вам или не надо вообще готовиться к этой части собеседования или посмотреть на leetcode ~10-30 задач отфильтрованные по компании, в которую вы собеседуетесь, чтобы понять примерные типы задач.
2) Вы изучали алгоритмы раньше (в универе, самостоятельно и решали какие-то задачи). Но звезд с неба не хватали, в олимпиадах не участвовали или ничего не занимали. Я бы рекомендовал решить хотя бы 100-200 задач. Из которых, половина easy, чтобы постепенно развить скил решения таких задач. И половина medium.
3) Вы новичок в алгоритмах. Я бы рекомендовал хотя бы 300 задач, из которых больше половина это easy задачи. И хотя бы 100 medium задач. Вообще, новичкам я бы рекомендовал или начать с книги Cracking the Coding Interview (главы, которые относятся к алгоритмическим задачам) и/или algoexpert.io потому что там очень детальное пошаговое решение.
Я начинал с уровня между 2 и 3. Для успешного прохождения в Amazon мне понадобилось решить ~200-300 задач (из Cracking the Coding Interview, leetcode, hackerrank, и других книг). Еще 300-400 я решил for fun и для подготовки в Facebook.
👍12
Хотите научиться проектировать современные высоконагруженные системы, вырасти в Senior+ (Senior, Lead, Architect, Staff, Principal) программиста или же готовитесь к System Design собеседованию?
#systemdesign #собеседование #interview
Набросал подборку для изучения:
1) Курс на educative.io: Grokking Modern System Design Interview for Engineers & Managers (https://www.educative.io/courses/grokking-modern-system-design-interview-for-engineers-managers). Этот курс мне порекомендовали, когда я готовился к собеседованию в Facebook. Мне его хватило, чтобы успешно пройти System Design собеседование в Facebook. Если у вас ограниченное время и вам надо за ~1 месяц подготовиться к System Design собеседованию - то этого курса достаточно.
2) Курс на algoexpert.io: https://www.algoexpert.io/systems/product. Стоит его пройти, если уже на той же платформе проходите курс по алгоритмам.
3) Книги “System Design Interview – An insider's guide” Volume 1, Volume 2. By Alex Xu. Очень похоже на курс от educative, но в виде двух книг.
4) Книга "Designing Data-Intensive Applications by Martin Kleppmann". Очень крутая книга, если вы не торопитесь с подготовкой, то очень советую прочитать. Там вы узнаете про replication, sharding, transaction isolation levels, two phase commits, про стримы типа Kafka, про SQL и No-SQL базы, про основные характеристики и подходы в распределенных системах и многом другом.
5) Книга “Building Microservices by Sam Newman”. Тут вы узнаете про все аспекты создания микросервисов. Книга небольшая, читается легко. Несмотря на то, что микросервисы это достаточно спорный подход, многие моменты применимы и для других подходов.
6) Если у вас очень много времени и вам интересно, что и как делают топ компании, то можете читать их тех блоги:
Engineering at Meta, Meta Research, AWS Architecture Blog, Amazon Science Blog, Netflix TechBlog, Google Research, Engineering at Quora, Uber Engineering Blog, Databricks Blog, Pinterest Engineering, BlackRock Engineering, Lyft Engineering, and Salesforce Engineering.
7) Пару youtube каналов по теме:
https://www.youtube.com/@gkcs
https://www.youtube.com/@TechDummiesNarendraL
#systemdesign #собеседование #interview
Набросал подборку для изучения:
1) Курс на educative.io: Grokking Modern System Design Interview for Engineers & Managers (https://www.educative.io/courses/grokking-modern-system-design-interview-for-engineers-managers). Этот курс мне порекомендовали, когда я готовился к собеседованию в Facebook. Мне его хватило, чтобы успешно пройти System Design собеседование в Facebook. Если у вас ограниченное время и вам надо за ~1 месяц подготовиться к System Design собеседованию - то этого курса достаточно.
2) Курс на algoexpert.io: https://www.algoexpert.io/systems/product. Стоит его пройти, если уже на той же платформе проходите курс по алгоритмам.
3) Книги “System Design Interview – An insider's guide” Volume 1, Volume 2. By Alex Xu. Очень похоже на курс от educative, но в виде двух книг.
4) Книга "Designing Data-Intensive Applications by Martin Kleppmann". Очень крутая книга, если вы не торопитесь с подготовкой, то очень советую прочитать. Там вы узнаете про replication, sharding, transaction isolation levels, two phase commits, про стримы типа Kafka, про SQL и No-SQL базы, про основные характеристики и подходы в распределенных системах и многом другом.
5) Книга “Building Microservices by Sam Newman”. Тут вы узнаете про все аспекты создания микросервисов. Книга небольшая, читается легко. Несмотря на то, что микросервисы это достаточно спорный подход, многие моменты применимы и для других подходов.
6) Если у вас очень много времени и вам интересно, что и как делают топ компании, то можете читать их тех блоги:
Engineering at Meta, Meta Research, AWS Architecture Blog, Amazon Science Blog, Netflix TechBlog, Google Research, Engineering at Quora, Uber Engineering Blog, Databricks Blog, Pinterest Engineering, BlackRock Engineering, Lyft Engineering, and Salesforce Engineering.
7) Пару youtube каналов по теме:
https://www.youtube.com/@gkcs
https://www.youtube.com/@TechDummiesNarendraL
www.educative.io
Grokking System Design Interview: Patterns & Mock Interviews
A modern approach to System Design Interviews. One course to master distributed systems and scalable architecture patterns. Practice with mock interviews. Built by FAANG engineers.
🔥12👍4
Почему FAANG компании используют алгоритмические задачи на собеседовании?
#мысли
Представьте, что вы человек, который должен организовать процесс собеседований в Google, Amazon или Facebook.
Какие у вас вводные данные?
1) Вы хотите нанять самых лучших специалистов на рынке труда. Причем не только на рынке труда конкретной страны, но найти лучших специалистов со всего мира.
2) Вы хотите сделать этот процесс справедливым, чтобы в нем могли участвовать люди со всего мира, любого пола, расы, национальности, культуры и вероисповедания.
3) Вы предлагаете работу над самыми крупными и известными IT-продуктами мира.
4) Вы предлагаете самые высокие зарплаты по сравнению с другими IT-компаниями.
5) Вы позволяете сотрудникам менять команды и подразделения раз в год. Т.е. задачи и технологии, над которыми человек будет работать через пару лет не известно.
6) Вам нужно нанять много специалистов. Скажем 10 000 человек за год.
7) Вы получили ~100-500 откликов и резюме на каждую вакансию. В сумме 1-5 миллионов резюме.
8) У вас используются кастомные тулы и технологии, которые нигде больше не используются.
Описал свои мысли тут: Почему FAANG компании используют алгоритмические задачи на собеседовании?
Пишите в комментариях, что вы думаете про такой подход в собеседованиях. Как бы вы организовали этот процесс?
#мысли
Представьте, что вы человек, который должен организовать процесс собеседований в Google, Amazon или Facebook.
Какие у вас вводные данные?
1) Вы хотите нанять самых лучших специалистов на рынке труда. Причем не только на рынке труда конкретной страны, но найти лучших специалистов со всего мира.
2) Вы хотите сделать этот процесс справедливым, чтобы в нем могли участвовать люди со всего мира, любого пола, расы, национальности, культуры и вероисповедания.
3) Вы предлагаете работу над самыми крупными и известными IT-продуктами мира.
4) Вы предлагаете самые высокие зарплаты по сравнению с другими IT-компаниями.
5) Вы позволяете сотрудникам менять команды и подразделения раз в год. Т.е. задачи и технологии, над которыми человек будет работать через пару лет не известно.
6) Вам нужно нанять много специалистов. Скажем 10 000 человек за год.
7) Вы получили ~100-500 откликов и резюме на каждую вакансию. В сумме 1-5 миллионов резюме.
8) У вас используются кастомные тулы и технологии, которые нигде больше не используются.
Описал свои мысли тут: Почему FAANG компании используют алгоритмические задачи на собеседовании?
Пишите в комментариях, что вы думаете про такой подход в собеседованиях. Как бы вы организовали этот процесс?
Telegraph
Почему FAANG компании используют алгоритмические задачи на собеседовании?
Представьте, что вы человек, который должен организовать процесс собеседований в Google, Amazon или Facebook. Какие у вас вводные данные? 1) Вы хотите нанять самых лучших специалистов на рынке труда. Причем не только на рынке труда конкретной страны, но найти…
❤5👍4
Задача на BFS: Проверить полноту двоичного дерева
#bfs #algorithms #algo #собеседование #interview
Встречалось на собеседованиях в Apple, Amazon и Facebook.
Дано двоичное дерево. Нужно проверить его полноту. Полным называется дерево, в котором заполнены все уровни, за исключением быть может только последнего уровня. При этом на последнем уровне все вершины расположены как можно левее.
Решение: Проверить полноту двоичного дерева
#bfs #algorithms #algo #собеседование #interview
Встречалось на собеседованиях в Apple, Amazon и Facebook.
Дано двоичное дерево. Нужно проверить его полноту. Полным называется дерево, в котором заполнены все уровни, за исключением быть может только последнего уровня. При этом на последнем уровне все вершины расположены как можно левее.
Решение: Проверить полноту двоичного дерева
Medium
Проверить полноту двоичного дерева
Ссылка на задачу на leetcode: https://leetcode.com/problems/check-completeness-of-a-binary-tree/description/
👍4
Задача на BFS: Обход бинарного дерева по слоям/уровням
#bfs #algorithms #algo #собеседование #interview
Встречалось на собеседованиях в Amazon, LinkedIn, Bloomberg, Uber, Apple.
Дано двоичное дерево. Нужно обойти его по слоям/уровням. Каждый уровень обходить слева направо. Результат вернуть в виде списка списков. Каждый вложенный список это элементы одного уровня.
Решение: Обход бинарного дерева по слоям/уровням.
#bfs #algorithms #algo #собеседование #interview
Встречалось на собеседованиях в Amazon, LinkedIn, Bloomberg, Uber, Apple.
Дано двоичное дерево. Нужно обойти его по слоям/уровням. Каждый уровень обходить слева направо. Результат вернуть в виде списка списков. Каждый вложенный список это элементы одного уровня.
Решение: Обход бинарного дерева по слоям/уровням.
Medium
Обход бинарного дерева по слоям/уровням
Ссылка на задачу на leetcode: https://leetcode.com/problems/binary-tree-level-order-traversal/description/
👍3
Задача на многопоточность в Java: Напечатать последовательность чисел при помощи нескольких потоков
#java #concurrency #interview #собеседование
Необходимо написать программу на Java, которая напечатает последовательно числа от 0 до N — 1 (или от 1 до N) при помощи нескольких потоков.
Решение: Напечатать последовательность чисел при помощи нескольких потоков на Java
#java #concurrency #interview #собеседование
Необходимо написать программу на Java, которая напечатает последовательно числа от 0 до N — 1 (или от 1 до N) при помощи нескольких потоков.
Решение: Напечатать последовательность чисел при помощи нескольких потоков на Java
Medium
Напечатать последовательность чисел при помощи нескольких потоков на Java
Условие. Необходимо написать программу на Java, которая напечатает последовательно числа от 0 до N — 1 (или от 1 до N) при помощи…
👍7
Какие version control практики используют топ компании?
Одним из моих удивлений, когда я начал работать в топ компаниях, стало то, что они, в основном, используют так называемый Trunk-based development. В то время как в других, маленьких и средних компаниях, использовался, в основном, Gitflow Workflow.
Я начал работать в FAANG компаниях 6 лет назад. В то время, в более маленьких компаниях, стандартом был Git Workflow. Это когда есть множество долгоживущих feature бранчей, есть develop branch, есть release branch, который периодически мержится в trunk. На тот момент я думал, что такой подход более безопасный. Когда я пришел в Amazon, а потом в Facebook, я с удивлением узнал, что они используют Trunk-based development. В таком подходе, есть только trunk/master и все разработчики делают очень маленькие инкрементальные изменения, которые тут же попадают в trunk и через несколько часов попадают в продакшен. Это позволяет организовать настоящий CI/CD (Continuous Integration/Continuous delivery).
Как выглядит типичный процесс разработки и деплоя кода при таком подходе?
Разработчик получает или создает таску, над которой он работает. В рамках одной таски разработчик может сделать одно или множество изменений кода. Каждое такое изменение кода проходит code review и не должно ломать trunk. При этом одно такое изменение не обязательно должно полностью реализовать функциональность, которую описывает таска. Например, в первом code change вы можете объявить некие интерфейсы, без реализации, во втором, реализовать методы этих интерфейсов, в третьем добавить вызовы этих методов. Каждое такое изменение кода должно сопровождаться добавлением соответствующих автоматических тестов (unit tests, integration-tests, performance tests, end-to-end tests, UI tests и т.д.). Т.к. выделенных QA обычно в таких компаниях не бывает. Все тестирование делается самими разработчиками. Как только code review пройден, все комментарии и замечания к коду учтены, то разработчик делает push в trunk. Это изменение последовательно проходит через множество шагов в рамках deployment pipeline. Вначале это все компилируется и собирается. Далее прогоняются автоматические unit тесты. Далее эта сборка деплоится на выделенный тестовый сервер, на котором прогоняются интеграционные тесты, перфоманс тесты и т.д. Далее деплоится на canary сервер (на один продакшен сервер, например). Где собираются разные метрики, на основе которых делается автоматическое решение деплоить ли эту сборку далее или сделать rollback. Если все хорошо, то далее эта сборка волнами попадает на все остальные сервера. Все эти деплоймент шаги выполняются автоматически.
Чем отличаются эти два подхода можно посмотреть, например, тут https://www.toptal.com/software/trunk-based-development-git-flow
Пишите в комментариях, какие практики используются в вашей компании.
Одним из моих удивлений, когда я начал работать в топ компаниях, стало то, что они, в основном, используют так называемый Trunk-based development. В то время как в других, маленьких и средних компаниях, использовался, в основном, Gitflow Workflow.
Я начал работать в FAANG компаниях 6 лет назад. В то время, в более маленьких компаниях, стандартом был Git Workflow. Это когда есть множество долгоживущих feature бранчей, есть develop branch, есть release branch, который периодически мержится в trunk. На тот момент я думал, что такой подход более безопасный. Когда я пришел в Amazon, а потом в Facebook, я с удивлением узнал, что они используют Trunk-based development. В таком подходе, есть только trunk/master и все разработчики делают очень маленькие инкрементальные изменения, которые тут же попадают в trunk и через несколько часов попадают в продакшен. Это позволяет организовать настоящий CI/CD (Continuous Integration/Continuous delivery).
Как выглядит типичный процесс разработки и деплоя кода при таком подходе?
Разработчик получает или создает таску, над которой он работает. В рамках одной таски разработчик может сделать одно или множество изменений кода. Каждое такое изменение кода проходит code review и не должно ломать trunk. При этом одно такое изменение не обязательно должно полностью реализовать функциональность, которую описывает таска. Например, в первом code change вы можете объявить некие интерфейсы, без реализации, во втором, реализовать методы этих интерфейсов, в третьем добавить вызовы этих методов. Каждое такое изменение кода должно сопровождаться добавлением соответствующих автоматических тестов (unit tests, integration-tests, performance tests, end-to-end tests, UI tests и т.д.). Т.к. выделенных QA обычно в таких компаниях не бывает. Все тестирование делается самими разработчиками. Как только code review пройден, все комментарии и замечания к коду учтены, то разработчик делает push в trunk. Это изменение последовательно проходит через множество шагов в рамках deployment pipeline. Вначале это все компилируется и собирается. Далее прогоняются автоматические unit тесты. Далее эта сборка деплоится на выделенный тестовый сервер, на котором прогоняются интеграционные тесты, перфоманс тесты и т.д. Далее деплоится на canary сервер (на один продакшен сервер, например). Где собираются разные метрики, на основе которых делается автоматическое решение деплоить ли эту сборку далее или сделать rollback. Если все хорошо, то далее эта сборка волнами попадает на все остальные сервера. Все эти деплоймент шаги выполняются автоматически.
Чем отличаются эти два подхода можно посмотреть, например, тут https://www.toptal.com/software/trunk-based-development-git-flow
Пишите в комментариях, какие практики используются в вашей компании.
Atlassian
Trunk-based Development | Atlassian
Learn about trunk-based development, a version control management practice where developers merge small, frequent updates to a core “trunk” or main branch
👍7
Какие бывают собеседования программистов и когда они имеют смысл?
Типы собеседований описал тут: Типы собеседований.
Пишите в комментариях, какие еще бывают собеседования, которые я не описал и какие вы считаете самыми лучшими.
Типы собеседований описал тут: Типы собеседований.
Пишите в комментариях, какие еще бывают собеседования, которые я не описал и какие вы считаете самыми лучшими.
Telegraph
Какие бывают собеседования программистов и когда они имеют смысл?
Техническое собеседование по типу вопрос-ответ. На таком собеседовании задается большое число вопросов на конкретные знания по языку программирования, конкретным технологиям, подходам в разработке и управления проектами и т.д. Это очень распространенный подход…
👍5