Задача на 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
Что будет результатом выполнения такой программы?
#interview #собеседование #java #concurrency
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
for (String el : list) {
if (el.equals("b")) {
list.remove(el);
}
}
System.out.println(list);
}
}
Ответ описал тут: Модификация коллекции Java в однопоточной и многопоточной среде
#interview #собеседование #java #concurrency
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
for (String el : list) {
if (el.equals("b")) {
list.remove(el);
}
}
System.out.println(list);
}
}
Ответ описал тут: Модификация коллекции Java в однопоточной и многопоточной среде
Medium
Модификация коллекции Java в однопоточной и многопоточной среде
Что будет результатом выполнения такой программы?
👍6
Что я думаю про курсы по программированию, которые рекламируют на каждом углу?
#мысли
Если смотришь youtube, то несколько раз за день увидишь рекламу такого рода курсов. Основной питч - закончите курсы, будете зарабатывать сотни тысяч рублей.
Я даже принял участие в создании одного такого курса по Java на одной из образовательных платформ (бесплатно).
Содержания курсов самих по себе неплохое, но отсутствует фундаментальное образование. Т.е. список тем полезный для будущего программиста, но для текущего состояния технологий. Я бы даже сказал, что неплохо бы такие курсы иметь в вузах. Но на этих курсах обычно отсутствует фундаментальное образование по программированию. В вузах же наоборот. В основном дают фундаментальное образование: алгоритмы, структуры данных, разные парадигмы программирования, операционные системы, разные типы программирования и т.д. Но не останавливаются на конкретных технологиях, потому что они устаревают за ~5 лет.
Нет жесткого отсева и контроля знаний студентов. В образовании два ключевых компонента: знания, которые дает преподаватель или любой другой источник(книга, видеокурс и т.д.) и контроль знаний студента. Если нет серьезного контроля знаний, то максимум что можно сказать, что человек прослушал курс лекций. Условно, если взять кассиршу пятерочки (ничего не имею против кассирш), и посадить ее слушать курс лекций по квантовой механики в Гарвардском университете, то это не значит, что она его усвоит. В хорошие вузы сложно поступить и сложно учиться. Это как минимум показатель, что студент может учиться и усваивать новые знания. На такого рода курсах, нет большого отсева на зачислении и при обучениии относятся мягко в плане контроля знаний.
Такого рода курсы создают избыточное предложение Junior программистов на рынке труда. Если посмотреть на спрос программистов (например на hh.ru), то требуются в основном мидлы и senior разработчики. Junior вакансий не очень много. Такие курсы же создают огромное число Junior разработчиков, которые будут конкуррировать между собой и теми, кто и так планировал стать программистом (выпускники вузов, в том числе выпускники топовых вузов по типу МФТИ, МГУ, ИТМО). Поэтому такие курсы еще больше повышают входную планку для того, чтобы стать программистом. Конкуренция сильно возросла.
P.S. Я тоже окончил курсы по программированию(17 лет назад), перед тем как стал программистом. Но я закончил вуз, в котором я получил фундаментальное образование и курсы были по конкретному языку программирования и конкретным технологиям (которые были релевантны тогда, сейчас они уже давно устарели). Более того, это были курсы от компании, которая готовила программистов для себя и после курсов мы сразу проходили упрощенное собеседование в эту компанию.
Пишите, что вы думаете про такие курсы и каков ваш опыт, если вы учились или окончили такие курсы.
#мысли
Если смотришь youtube, то несколько раз за день увидишь рекламу такого рода курсов. Основной питч - закончите курсы, будете зарабатывать сотни тысяч рублей.
Я даже принял участие в создании одного такого курса по Java на одной из образовательных платформ (бесплатно).
Содержания курсов самих по себе неплохое, но отсутствует фундаментальное образование. Т.е. список тем полезный для будущего программиста, но для текущего состояния технологий. Я бы даже сказал, что неплохо бы такие курсы иметь в вузах. Но на этих курсах обычно отсутствует фундаментальное образование по программированию. В вузах же наоборот. В основном дают фундаментальное образование: алгоритмы, структуры данных, разные парадигмы программирования, операционные системы, разные типы программирования и т.д. Но не останавливаются на конкретных технологиях, потому что они устаревают за ~5 лет.
Нет жесткого отсева и контроля знаний студентов. В образовании два ключевых компонента: знания, которые дает преподаватель или любой другой источник(книга, видеокурс и т.д.) и контроль знаний студента. Если нет серьезного контроля знаний, то максимум что можно сказать, что человек прослушал курс лекций. Условно, если взять кассиршу пятерочки (ничего не имею против кассирш), и посадить ее слушать курс лекций по квантовой механики в Гарвардском университете, то это не значит, что она его усвоит. В хорошие вузы сложно поступить и сложно учиться. Это как минимум показатель, что студент может учиться и усваивать новые знания. На такого рода курсах, нет большого отсева на зачислении и при обучениии относятся мягко в плане контроля знаний.
Такого рода курсы создают избыточное предложение Junior программистов на рынке труда. Если посмотреть на спрос программистов (например на hh.ru), то требуются в основном мидлы и senior разработчики. Junior вакансий не очень много. Такие курсы же создают огромное число Junior разработчиков, которые будут конкуррировать между собой и теми, кто и так планировал стать программистом (выпускники вузов, в том числе выпускники топовых вузов по типу МФТИ, МГУ, ИТМО). Поэтому такие курсы еще больше повышают входную планку для того, чтобы стать программистом. Конкуренция сильно возросла.
P.S. Я тоже окончил курсы по программированию(17 лет назад), перед тем как стал программистом. Но я закончил вуз, в котором я получил фундаментальное образование и курсы были по конкретному языку программирования и конкретным технологиям (которые были релевантны тогда, сейчас они уже давно устарели). Более того, это были курсы от компании, которая готовила программистов для себя и после курсов мы сразу проходили упрощенное собеседование в эту компанию.
Пишите, что вы думаете про такие курсы и каков ваш опыт, если вы учились или окончили такие курсы.
👍6❤1
Задача с собеседования в Amazon и Яндекс: Trapping Rain Water
#algo #algorithms #dymanicprogramming
Условие. Дан массив целых чисел. Каждое число отображает высоту рельефа в данной точке. Теперь представим, что сверху льют воду/идет дождь. Нужно вычислить, сколько накопится воды. Нужно предполагать, что слева и справа стенок нет и вода может свободно утекать влево и вправо.
Решение описал тут: Количество дождевой воды
#algo #algorithms #dymanicprogramming
Условие. Дан массив целых чисел. Каждое число отображает высоту рельефа в данной точке. Теперь представим, что сверху льют воду/идет дождь. Нужно вычислить, сколько накопится воды. Нужно предполагать, что слева и справа стенок нет и вода может свободно утекать влево и вправо.
Решение описал тут: Количество дождевой воды
Medium
Количество дождевой воды
Ссылка на leetcode: https://leetcode.com/problems/trapping-rain-water/description/
👍5
Задача с собеседования на Java программиста на строки
Что напечатает такая программа?
String s1 = "FAANG"; String s2 = "FAANG"; String s3 = new String("FAANG"); System.out.println((s1 == s2) + " " + (s1 == s3));
Что напечатает такая программа?
String s1 = "FAANG"; String s2 = "FAANG"; String s3 = new String("FAANG"); System.out.println((s1 == s2) + " " + (s1 == s3));
Anonymous Quiz
14%
true true
68%
true false
3%
false true
15%
false false
👍5👌4
Проверить, является ли строка палиндромом
#algo #twopointers #алгоритмы #собеседование #interview
Задача: Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево.
Эту задачу можно решить при помощи так называемого метода Two Pointers. Я дал краткую справку по этому методу в описании к решению.
Решение: Проверка на палиндром
Усложнение задачи: Также проверить, что это палиндром, но можно игнорировать пробелы, регистр букв и все символы, которые не являются английскими буквами и цифрами. Например: "A b a" -> палиндром, "A!23 * 32a"-> палиндром. Решение на усложненную версию опубликую завтра. Попробуйте решить ее сами сначала.
#algo #twopointers #алгоритмы #собеседование #interview
Задача: Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево.
Эту задачу можно решить при помощи так называемого метода Two Pointers. Я дал краткую справку по этому методу в описании к решению.
Решение: Проверка на палиндром
Усложнение задачи: Также проверить, что это палиндром, но можно игнорировать пробелы, регистр букв и все символы, которые не являются английскими буквами и цифрами. Например: "A b a" -> палиндром, "A!23 * 32a"-> палиндром. Решение на усложненную версию опубликую завтра. Попробуйте решить ее сами сначала.
Medium
Проверка на палиндром
Задача. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справо налево.
👍6👎1👏1
Усложнение задачи на палиндром
#algo #twopointers #алгоритмы #собеседование #interview
Публикую решение вчерашней задачи.
Встречается на реальном собеседовании в Facebook как разминочная.
Условие. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево. Нужно игнорировать пробелы, регистр букв и все символы, которые не являются английскими буквами и цифрами. Например: “A b a” -> палиндром, “A!23 * 32a”-> палиндром.
Решение: Проверка на палиндром, усложненная версия
#algo #twopointers #алгоритмы #собеседование #interview
Публикую решение вчерашней задачи.
Встречается на реальном собеседовании в Facebook как разминочная.
Условие. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справа налево. Нужно игнорировать пробелы, регистр букв и все символы, которые не являются английскими буквами и цифрами. Например: “A b a” -> палиндром, “A!23 * 32a”-> палиндром.
Решение: Проверка на палиндром, усложненная версия
Medium
Проверка на палиндром, усложненная версия
Ссылка на leetcode: https://leetcode.com/problems/valid-palindrome/description/
👍4
Подборка алгоритмических задач с решениями и описание алгоритмов уже опубликованных в этом канале
#interview #собеседование #алгоритмы #подборка
Two Pointers:
1) Проверка на палиндром.
2) Усложненная версия проверки на палиндром.
Stack:
3) Проверить скобочное выражение.
BinarySearch:
Описание алгоритма BinarySearch.
4) Пропущенный элемент в отсортированном массиве.
5) Пиковый элемент.
6) Число итераций в бинарном поиске.
DFS:
Описание алгоритма DFS.
7) Flood Fill.
BFS:
Описание алгоритма BFS.
8) Проверить полноту дерева.
9) Обход дерева по уровням.
Dynamic Programming:
10) Количество дождевой воды
#interview #собеседование #алгоритмы #подборка
Two Pointers:
1) Проверка на палиндром.
2) Усложненная версия проверки на палиндром.
Stack:
3) Проверить скобочное выражение.
BinarySearch:
Описание алгоритма BinarySearch.
4) Пропущенный элемент в отсортированном массиве.
5) Пиковый элемент.
6) Число итераций в бинарном поиске.
DFS:
Описание алгоритма DFS.
7) Flood Fill.
BFS:
Описание алгоритма BFS.
8) Проверить полноту дерева.
9) Обход дерева по уровням.
Dynamic Programming:
10) Количество дождевой воды
Medium
Проверка на палиндром
Задача. Проверить, является ли строка палиндромом. Палиндром — это строка, которая читается одинаково слева направо и справо налево.
👍10🔥1
Небольшая подборка компаний в Европе, которые нанимают людей из постсоветского пространства
Таких компаний в десятки или сотни раз больше. Я просто выбрал те, в которые я собеседовался, работал или у меня есть знакомые, кто там работает.
Германия:
Берлин:
1) Deutsche Bank: https://www.linkedin.com/company/deutsche-bank/jobs/
2) Zalando: https://www.linkedin.com/company/zalando/jobs/
3) HelloFresh: https://www.linkedin.com/company/hellofresh/jobs/
4) Stripe: https://www.linkedin.com/company/stripe/jobs/
5) HERE Technologies: https://www.linkedin.com/company/here/jobs/
6) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
7) KAYAK (сейчас не набирают активно): https://www.linkedin.com/company/kayak/jobs/
Дюссельдорф:
8) Trivago: https://www.linkedin.com/company/trivagonv/jobs/
Мюнхен:
9) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
Люксембург:
10) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
Нидерланды:
11) Booking:https://www.linkedin.com/company/booking.com/jobs/
12) TomTom: https://www.linkedin.com/company/tomtom/jobs/
13) Flow Traders: https://www.linkedin.com/company/flow-traders/jobs/
14) Uber: https://www.linkedin.com/company/uber-com/jobs/
Франция:
15) Criteo: https://www.linkedin.com/company/criteo/jobs/
Великобритания:
16) JPMorgan: https://www.linkedin.com/company/jpmorganchase/
17) Deutsche Bank: https://www.linkedin.com/company/deutsche-bank/jobs/
18) Wise: https://www.linkedin.com/company/wiseaccount/jobs/
19) Revolut: https://www.linkedin.com/company/revolut/jobs/
20) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
21) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
22) Apple: https://www.linkedin.com/company/apple/jobs/
23) Facebook (сейчас не набирают активно): https://www.linkedin.com/company/meta/jobs/
24) Goldman Sachs: https://www.linkedin.com/company/goldman-sachs/jobs/
25) Twitter (не набирает сейчас): https://www.linkedin.com/company/twitter/jobs/
Швеция:
26) Spotify: https://www.linkedin.com/company/spotify/jobs/
Швейцария:
27) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
Таких компаний в десятки или сотни раз больше. Я просто выбрал те, в которые я собеседовался, работал или у меня есть знакомые, кто там работает.
Германия:
Берлин:
1) Deutsche Bank: https://www.linkedin.com/company/deutsche-bank/jobs/
2) Zalando: https://www.linkedin.com/company/zalando/jobs/
3) HelloFresh: https://www.linkedin.com/company/hellofresh/jobs/
4) Stripe: https://www.linkedin.com/company/stripe/jobs/
5) HERE Technologies: https://www.linkedin.com/company/here/jobs/
6) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
7) KAYAK (сейчас не набирают активно): https://www.linkedin.com/company/kayak/jobs/
Дюссельдорф:
8) Trivago: https://www.linkedin.com/company/trivagonv/jobs/
Мюнхен:
9) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
Люксембург:
10) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
Нидерланды:
11) Booking:https://www.linkedin.com/company/booking.com/jobs/
12) TomTom: https://www.linkedin.com/company/tomtom/jobs/
13) Flow Traders: https://www.linkedin.com/company/flow-traders/jobs/
14) Uber: https://www.linkedin.com/company/uber-com/jobs/
Франция:
15) Criteo: https://www.linkedin.com/company/criteo/jobs/
Великобритания:
16) JPMorgan: https://www.linkedin.com/company/jpmorganchase/
17) Deutsche Bank: https://www.linkedin.com/company/deutsche-bank/jobs/
18) Wise: https://www.linkedin.com/company/wiseaccount/jobs/
19) Revolut: https://www.linkedin.com/company/revolut/jobs/
20) Amazon (сейчас не набирают активно): https://www.linkedin.com/company/amazon/jobs/
21) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
22) Apple: https://www.linkedin.com/company/apple/jobs/
23) Facebook (сейчас не набирают активно): https://www.linkedin.com/company/meta/jobs/
24) Goldman Sachs: https://www.linkedin.com/company/goldman-sachs/jobs/
25) Twitter (не набирает сейчас): https://www.linkedin.com/company/twitter/jobs/
Швеция:
26) Spotify: https://www.linkedin.com/company/spotify/jobs/
Швейцария:
27) Google(сейчас не набирают активно): https://www.linkedin.com/company/google/jobs/
👍6❤1
Мемная задача с собеседования:Инвертировать двоичное дерево
Max Howell, создатель Homebrew, не был нанят в Google, потому что не смог решить эту задачу. Попробуйте решить задачу сами. Завтра опубликую решение. Оригинальный твит
Max Howell, создатель Homebrew, не был нанят в Google, потому что не смог решить эту задачу. Попробуйте решить задачу сами. Завтра опубликую решение. Оригинальный твит
👍4
Решение задачи: инвертировать двоичное дерево
#алгоритмы #собеседование #binarytree #dfs #treetraversal
Решение: Invert Binary Tree
Код самого решения:
public static void invertBinaryTree(BinaryTree tree) {
if (tree == null) {
return;
}
//Меняем местами левого и правого ребенка
BinaryTree tmp = tree.left;
tree.left = tree.right;
tree.right = tmp;
//Рекурсивно вызываем функцию для левого и правого ребенка
invertBinaryTree(tree.left);
invertBinaryTree(tree.right);
}
#алгоритмы #собеседование #binarytree #dfs #treetraversal
Решение: Invert Binary Tree
Код самого решения:
public static void invertBinaryTree(BinaryTree tree) {
if (tree == null) {
return;
}
//Меняем местами левого и правого ребенка
BinaryTree tmp = tree.left;
tree.left = tree.right;
tree.right = tmp;
//Рекурсивно вызываем функцию для левого и правого ребенка
invertBinaryTree(tree.left);
invertBinaryTree(tree.right);
}
Medium
Invert Binary Tree
Условие. Нужно инвертировать двоичное дерево. Т.е. поменять местами все левые и правые вершины. Например:
🔥7❤1
Минусы жизни в Великобритании
Ранее я публиковал какие есть плюсы жизни в Великобритании: https://t.me/faangmaster/23
Сейчас я расскажу какие есть минусы, по моему мнению:
1) Преступность. Это касается в первую очередь Лондона. Наркоторговля, разборки банд, поножовщина, воровство случаются тут довольно часто. Это было для меня большим удивлением, когда я переехал сюда из Европы. Большинство стран Евросоюза намного безопасней (та же Германия, а Люксембург вообще рай в этом смысле). Поэтому нужно тщательно выбирать район для жизни. Есть районы с низкой преступностью, есть с очень высокой. Чем ниже уровень преступности, тем дороже там жилье.
2) Условный ЖКХ. Если у вас что-то поломалось в квартире или доме, протекла труба, поломался бойлер или что-то подобное, то вам придется иметь дело с местными сантехниками. Вам придется заблаговременно договариваться, чтобы он пришел. Качество ремонта оставляет желать лучшего. Мне почти всегда приходилось самому переделывать. Более того, часто они говорят на очень сложных диалектах английского, который очень сложно понять (тот же кокни).
3) Почти все работает через почту. Это характерно не только для Англии, но и для других стран Европы. Если вы жили в крупных городах постсоветского пространства, то скорее всего вы привыкли, что много всего можно сделать онлайн и получить результат в течении нескольких часов или максимум дней. Тут же все очень часто завязано на то, что вам нужно отправить что-то почтой.
4) Медицина. Чтобы попасть к врачу нужно записываться заблаговременно. Нельзя просто взять и пойти в больницу и выждать очередь, если это не что-то срочное. Иногда по записи нужно ждать неделями или месяцами какого-то обследования или сдачи анализов.
5) Виза в Великобританию, не позволяет путешествовать в шенгенскую зону. Если вы программист, который работает в Англии, то у вас виза типа Skilled Worker или Global Talent. Она не позволяет вам поехать в страны шенгена. Вам надо отдельно получать шенгенскую визу. Запись на подачу в страны шенгена в Лондоне сейчас за много месяцев или вообще нет слотов, их надо вылавливать. Работая, скажем в Германии, вы спокойно можете путешествовать по всем странам шенгена без доп. виз.
Ранее я публиковал какие есть плюсы жизни в Великобритании: https://t.me/faangmaster/23
Сейчас я расскажу какие есть минусы, по моему мнению:
1) Преступность. Это касается в первую очередь Лондона. Наркоторговля, разборки банд, поножовщина, воровство случаются тут довольно часто. Это было для меня большим удивлением, когда я переехал сюда из Европы. Большинство стран Евросоюза намного безопасней (та же Германия, а Люксембург вообще рай в этом смысле). Поэтому нужно тщательно выбирать район для жизни. Есть районы с низкой преступностью, есть с очень высокой. Чем ниже уровень преступности, тем дороже там жилье.
2) Условный ЖКХ. Если у вас что-то поломалось в квартире или доме, протекла труба, поломался бойлер или что-то подобное, то вам придется иметь дело с местными сантехниками. Вам придется заблаговременно договариваться, чтобы он пришел. Качество ремонта оставляет желать лучшего. Мне почти всегда приходилось самому переделывать. Более того, часто они говорят на очень сложных диалектах английского, который очень сложно понять (тот же кокни).
3) Почти все работает через почту. Это характерно не только для Англии, но и для других стран Европы. Если вы жили в крупных городах постсоветского пространства, то скорее всего вы привыкли, что много всего можно сделать онлайн и получить результат в течении нескольких часов или максимум дней. Тут же все очень часто завязано на то, что вам нужно отправить что-то почтой.
4) Медицина. Чтобы попасть к врачу нужно записываться заблаговременно. Нельзя просто взять и пойти в больницу и выждать очередь, если это не что-то срочное. Иногда по записи нужно ждать неделями или месяцами какого-то обследования или сдачи анализов.
5) Виза в Великобританию, не позволяет путешествовать в шенгенскую зону. Если вы программист, который работает в Англии, то у вас виза типа Skilled Worker или Global Talent. Она не позволяет вам поехать в страны шенгена. Вам надо отдельно получать шенгенскую визу. Запись на подачу в страны шенгена в Лондоне сейчас за много месяцев или вообще нет слотов, их надо вылавливать. Работая, скажем в Германии, вы спокойно можете путешествовать по всем странам шенгена без доп. виз.
Telegram
FAANG Master
Плюсы работы и жизни в Лондоне
Я уже несколько лет живу и работаю в Лондоне и хотел бы поделиться некоторыми плюсами, которые я для себя выделил:
1) Достаточно знать только английский язык для жизни и работы. Этот плюс я выделил для себя, т.к. для жизни,…
Я уже несколько лет живу и работаю в Лондоне и хотел бы поделиться некоторыми плюсами, которые я для себя выделил:
1) Достаточно знать только английский язык для жизни и работы. Этот плюс я выделил для себя, т.к. для жизни,…
🤔4👍1
Какой язык программирования вы знаете лучше всего (если только учитесь, какой язык изучаете)?
Anonymous Poll
75%
Java
13%
Python
4%
C#
10%
JavaScript
4%
PHP
5%
C++
4%
Go
0%
Objective C
0%
Swift
5%
Другой
👍3
Задача на system design: Design Web Crawler
#systemdesign
Нужно задизайнить Web Crawler, который будет сканировать интернет и сохранять его в неком хранилище или индексе для последующего использования. Например, для поиска. Как делают поисковики типа google.
Решение описал тут: Design Web Crawler
#systemdesign
Нужно задизайнить Web Crawler, который будет сканировать интернет и сохранять его в неком хранилище или индексе для последующего использования. Например, для поиска. Как делают поисковики типа google.
Решение описал тут: Design Web Crawler
Medium
Design Web Crawler
Задача. Сделать дизайн Web Crawler’а.
👍3
Задача с собеседования в Яндекс на Java программиста
Что не так с этим кодом?
public class Singleton {
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// private constructor and other methods ...
}
Решение опубликую завтра.
Что не так с этим кодом?
public class Singleton {
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// private constructor and other methods ...
}
Решение опубликую завтра.
👍3
Решение на задачу про Singleton через Double-Checked Locking
#concurrency #java
Задача:
Что не так с этим кодом?
public class Singleton {
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// private constructor and other methods ...
}
Решение: Thread Safe Java Singleton
#concurrency #java
Задача:
Что не так с этим кодом?
public class Singleton {
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// private constructor and other methods ...
}
Решение: Thread Safe Java Singleton
Medium
Thread Safe Java Singleton
Задача. Что не так с этим кодом?
👍2