Ресурсы для подготовки к system design интервью
👩🎓 Курсы:
https://www.udemy.com/course/system-design-interview-prep/
https://www.educative.io/courses/grokking-the-system-design-interview
https://www.coursera.org/specializations/software-design-architecture
https://www.udemy.com/course/system-design-a-comprehensive-guide/
https://www.educative.io/courses/web-application-software-architecture-101
🙂 Бесплатные материалы:
https://github.com/donnemartin/system-design-primer
https://github.com/karanpratapsingh/system-design
❓ Вопросы:
https://medium.com/double-pointer/top-25-system-design-interview-questions-c468e025b370
☑️ Выделю отдельно educative, тут есть каталог вопросов и ответов на них:
https://www.educative.io/courses/grokking-the-system-design-interview
👨🏫 По процессу прохождения system design интервью:
https://habr.com/ru/company/piter/blog/650785/
https://habr.com/ru/company/getmatch/blog/516718/
https://hackernoon.com/anatomy-of-a-system-design-interview-4cb57d75a53f
Список будет дополняться.
👩🎓 Курсы:
https://www.udemy.com/course/system-design-interview-prep/
https://www.educative.io/courses/grokking-the-system-design-interview
https://www.coursera.org/specializations/software-design-architecture
https://www.udemy.com/course/system-design-a-comprehensive-guide/
https://www.educative.io/courses/web-application-software-architecture-101
🙂 Бесплатные материалы:
https://github.com/donnemartin/system-design-primer
https://github.com/karanpratapsingh/system-design
❓ Вопросы:
https://medium.com/double-pointer/top-25-system-design-interview-questions-c468e025b370
☑️ Выделю отдельно educative, тут есть каталог вопросов и ответов на них:
https://www.educative.io/courses/grokking-the-system-design-interview
👨🏫 По процессу прохождения system design интервью:
https://habr.com/ru/company/piter/blog/650785/
https://habr.com/ru/company/getmatch/blog/516718/
https://hackernoon.com/anatomy-of-a-system-design-interview-4cb57d75a53f
Список будет дополняться.
👍7
Тимур Тибеев | BigTechDream pinned «Ресурсы для подготовки к system design интервью 👩🎓 Курсы: https://www.udemy.com/course/system-design-interview-prep/ https://www.educative.io/courses/grokking-the-system-design-interview https://www.coursera.org/specializations/software-design-architecture…»
🧩 Задача 13/200 ✅
https://leetcode.com/problems/make-the-string-great/
Сложность: Легкая, Процент успешных попыток 57.0%
#problemoftheday
https://leetcode.com/problems/make-the-string-great/
Сложность: Легкая, Процент успешных попыток 57.0%
#problemoftheday
LeetCode
Make The String Great - LeetCode
Can you solve this real interview question? Make The String Great - Given a string s of lower and upper case English letters.
A good string is a string which doesn't have two adjacent characters s[i] and s[i + 1] where:
* 0 <= i <= s.length - 2
* s[i]…
A good string is a string which doesn't have two adjacent characters s[i] and s[i + 1] where:
* 0 <= i <= s.length - 2
* s[i]…
🍌1
🧩 Задача 14/200 ✅
https://leetcode.com/problems/string-compression/
Сложность: Средняя, Процент успешных попыток 48.7%
#problemoftheday
https://leetcode.com/problems/string-compression/
Сложность: Средняя, Процент успешных попыток 48.7%
#problemoftheday
LeetCode
String Compression - LeetCode
Can you solve this real interview question? String Compression - Given an array of characters chars, compress it using the following algorithm:
Begin with an empty string s. For each group of consecutive repeating characters in chars:
* If the group's…
Begin with an empty string s. For each group of consecutive repeating characters in chars:
* If the group's…
👍1
Как научиться думать вслух 🗣
😷 На собесах нельзя молчать. Из уст всегда должны излагаться вопросы, идеи (даже тупые), решения.
Интервьюер хочет понять, как ты думаешь, насколько креативно подходишь к решению задач, умеешь ли объяснять свой код, не уходишь ли в лес. В идеале интервью от начала до конца должно проходить без пауз, все время нужно что-то говорить.
Большие молчаливые паузы это минус в финальный отчет кандидата.
🤕 Самое сложное, это научиться писать и одновременно комментировать свой код, особенно на английском 🙂
И комментировать не строчку за строчкой, а для чего ты пишешь эту часть кода, какой кейс она должна покрыть.
👥 Поэтому я при подготовке к собесам использую https://www.pramp.com/. Бесплатный сервис, который матчит двух кандидатов и вы поочереди собеседуете друг друга. Ценен не фидбек второго кандидата, а то насколько ты можешь комментировать свое решение. Навык довольно быстро осваивается.
Вторая ценность pramp, это то, что твоим собеседующим может стать любой инженер с любым уровнем английского. Страх перед интервьюерами из Индии уходит буквально через пару звонков 🇮🇳.
😷 На собесах нельзя молчать. Из уст всегда должны излагаться вопросы, идеи (даже тупые), решения.
Интервьюер хочет понять, как ты думаешь, насколько креативно подходишь к решению задач, умеешь ли объяснять свой код, не уходишь ли в лес. В идеале интервью от начала до конца должно проходить без пауз, все время нужно что-то говорить.
Большие молчаливые паузы это минус в финальный отчет кандидата.
🤕 Самое сложное, это научиться писать и одновременно комментировать свой код, особенно на английском 🙂
И комментировать не строчку за строчкой, а для чего ты пишешь эту часть кода, какой кейс она должна покрыть.
👥 Поэтому я при подготовке к собесам использую https://www.pramp.com/. Бесплатный сервис, который матчит двух кандидатов и вы поочереди собеседуете друг друга. Ценен не фидбек второго кандидата, а то насколько ты можешь комментировать свое решение. Навык довольно быстро осваивается.
Вторая ценность pramp, это то, что твоим собеседующим может стать любой инженер с любым уровнем английского. Страх перед интервьюерами из Индии уходит буквально через пару звонков 🇮🇳.
Pramp
Practice Live Job Interviews - For Free
We match you the best practice peers and set your interviews together, including real-world interview questions, high-quality video chat, collaborative environment, and peer feedback.
👍5
🧩 Задача 15/200 ✅
Пятница это повод для сложных задач 🍻🙂
https://leetcode.com/problems/string-compression-ii/
Сложность: Сложная, Процент успешных попыток 50.1%
#problemoftheday
Пятница это повод для сложных задач 🍻🙂
https://leetcode.com/problems/string-compression-ii/
Сложность: Сложная, Процент успешных попыток 50.1%
#problemoftheday
LeetCode
String Compression II - LeetCode
Can you solve this real interview question? String Compression II - Run-length encoding [http://en.wikipedia.org/wiki/Run-length_encoding] is a string compression method that works by replacing consecutive identical characters (repeated 2 or more times) with…
Салем друзья! 👋
Новая неделя, новые идеи. 🙂
Появилась мысль подготовить довольно подробный план на 3-4 месяца по подготовке к Google и Amazon. И не просто решать задачи, читать посты/книги, а больше увязать получение знаний с текущий местом работы. Что это значит? сейчас объясню
Алгоритмы и структуры данных - это просто навык, который нарабатывается решением задач на том же литкод и умением их объяснять, тот же pramp. Никакой магии, только практика.
Дизайн систем - тут тоже есть последовательность действий и некоторые необходимые базовые знания. Но очень хорошо тут заходит реальный опыт, поэтому синьоры обычно его лучше проходят, чем секцию с алгоритмами. А это значит, что ничего не мешает взять разобрать архитектуру вашего текущего проекта, попытаться нарисовать схему, попробовать найти узкие места и устранить их, или хотя бы подсветить для своего лида. Так же можно напроситься на проектирование какой-нибудь новой фичи, нового микросервиса, схем базы и так далее. По мне это лучше, чем просто рисовать абстрактные схемки для твитера, инстаграмма и так далее.
Ситуационные вопросы (behavioral questions) - для меня самая сложная часть собеседований. В отличии от двух предыдущих, тут не обойдись просто знаниями как правильно/неправильно, нужно рассказывать про свой реальный опыт из жизни. Поэтому легко попасть в ситуацию, когда начинаешь просто придумывать/подстраивать нерелевантный опыт под вопрос собеседующего. Мой главный инсайт после собеседований - ты уже на текущием месте работы должен следовать принципам Гугла/Амазона/Меты и просто нужно продемонстировать использование этих принципов на реальном интервью. Значит берем потенциальные ситуации и пробуем их спровоцировать на текущем проекте, нарабатываем необходимый опыт.
Подготовка резюме (CV screening) - тоже не люблю придумывать достижения на ровном месте, высасывать из пальца. Лучше наоборот, ввязываться в задачи, которые могут показать прирост пользователей/ускорение работы сервиса/больше денег бизнесу/управление командой. И отказываться от простых задач, которые несут ноль пользы твоему портфолио, рефакторинг кода, фикс багов, написание тестов и так далее.
Если кратко, то идея перевернуть игру. Стать тем, кто следует принципам лидерства Amazon уже сейчас. Стать гуглером, который временно работает в другой компании. Быть, делать, иметь.
Поделюсь, как накидаю шаблон. Stay tuned. 💻
Новая неделя, новые идеи. 🙂
Появилась мысль подготовить довольно подробный план на 3-4 месяца по подготовке к Google и Amazon. И не просто решать задачи, читать посты/книги, а больше увязать получение знаний с текущий местом работы. Что это значит? сейчас объясню
Алгоритмы и структуры данных - это просто навык, который нарабатывается решением задач на том же литкод и умением их объяснять, тот же pramp. Никакой магии, только практика.
Дизайн систем - тут тоже есть последовательность действий и некоторые необходимые базовые знания. Но очень хорошо тут заходит реальный опыт, поэтому синьоры обычно его лучше проходят, чем секцию с алгоритмами. А это значит, что ничего не мешает взять разобрать архитектуру вашего текущего проекта, попытаться нарисовать схему, попробовать найти узкие места и устранить их, или хотя бы подсветить для своего лида. Так же можно напроситься на проектирование какой-нибудь новой фичи, нового микросервиса, схем базы и так далее. По мне это лучше, чем просто рисовать абстрактные схемки для твитера, инстаграмма и так далее.
Ситуационные вопросы (behavioral questions) - для меня самая сложная часть собеседований. В отличии от двух предыдущих, тут не обойдись просто знаниями как правильно/неправильно, нужно рассказывать про свой реальный опыт из жизни. Поэтому легко попасть в ситуацию, когда начинаешь просто придумывать/подстраивать нерелевантный опыт под вопрос собеседующего. Мой главный инсайт после собеседований - ты уже на текущием месте работы должен следовать принципам Гугла/Амазона/Меты и просто нужно продемонстировать использование этих принципов на реальном интервью. Значит берем потенциальные ситуации и пробуем их спровоцировать на текущем проекте, нарабатываем необходимый опыт.
Подготовка резюме (CV screening) - тоже не люблю придумывать достижения на ровном месте, высасывать из пальца. Лучше наоборот, ввязываться в задачи, которые могут показать прирост пользователей/ускорение работы сервиса/больше денег бизнесу/управление командой. И отказываться от простых задач, которые несут ноль пользы твоему портфолио, рефакторинг кода, фикс багов, написание тестов и так далее.
Если кратко, то идея перевернуть игру. Стать тем, кто следует принципам лидерства Amazon уже сейчас. Стать гуглером, который временно работает в другой компании. Быть, делать, иметь.
Поделюсь, как накидаю шаблон. Stay tuned. 💻
🔥8👍1👏1
Еще раз привет!
😅 Я как-то плавно обошел знакомство, поэтому наверстываю упущенное.
Меня зовут Тибеев Тимур, мне 30 лет, senior backend engineer в Яндексе, по совместительству тимлид бэкендеров в продуктовой команде. Больше года провожу алгоритмические секции и последние полгода провожу финальные интервью в команды.
UPD: Я уже бывший Яндексоид и нынешний Канванафт (Canva, Sydney)
🎓 Закончил Костанайский казахско-турекцкий лицей. Бакалавр сделал в Suleyman Demirel University, магистратуру в Nazarbayev University.
🦾 Участвовал в олимпиадах по программированию, призер республиканских и международных соревнований. Доходил до полуфинала ACM среди студенческих команд. Сейчас иногда участвую в онлайн контестах, но это больше как хобби.
👩🚀 Участвовал в Google Summer of Code, как студент и два раза как ментор. Некоторое время усиленно занимался opensource проектом Checkstyle, еще заопенсорсил sdk для сервиса Toloka.
Этой весной и летом подавал в разные компании свою кандидатуру, вот мои результаты:
⁃ Meta (London) - прошел предварительный online coding, заморозили найм.
⁃ Amazon (Germany) - прошел все интервью, получил офер на L5, отказал
⁃ Google (Zurich) - прошел все интервью, получил офер на L4, отказал
⁃ Revolut (Porto) - прошел все интервью, получил офер на middle/senior, отказал
⁃ Bolt (Talinn) - прошел все интервью, получил офер на senior, отказал
⁃ Canva (Sydney) - прошел все интервью, получил офер на senior, принял
🙅 Я не сильно готовился к собеседованиям, совершал ошибки, как следствие не везде смог получить высокую оценку. Я слишком стар, чтобы опять начинать расти из мидла вверх, поэтому решил, что лучше потрачу время, чтобы наполнить резюме значимыми показателями и улучшить свои навыки прохождения интервью.
🤞 Моя цель на следующий год получить офер от Google на уровень L6, в принципе поэтому и появился этот канал, чтобы делиться опытом подготовки и самому получать опыт от других ребят. Вместе идти к целям интереснее и легче.
Будем знакомы 🖖
😅 Я как-то плавно обошел знакомство, поэтому наверстываю упущенное.
Меня зовут Тибеев Тимур, мне 30 лет, senior backend engineer в Яндексе, по совместительству тимлид бэкендеров в продуктовой команде. Больше года провожу алгоритмические секции и последние полгода провожу финальные интервью в команды.
UPD: Я уже бывший Яндексоид и нынешний Канванафт (Canva, Sydney)
🎓 Закончил Костанайский казахско-турекцкий лицей. Бакалавр сделал в Suleyman Demirel University, магистратуру в Nazarbayev University.
🦾 Участвовал в олимпиадах по программированию, призер республиканских и международных соревнований. Доходил до полуфинала ACM среди студенческих команд. Сейчас иногда участвую в онлайн контестах, но это больше как хобби.
👩🚀 Участвовал в Google Summer of Code, как студент и два раза как ментор. Некоторое время усиленно занимался opensource проектом Checkstyle, еще заопенсорсил sdk для сервиса Toloka.
Этой весной и летом подавал в разные компании свою кандидатуру, вот мои результаты:
⁃ Meta (London) - прошел предварительный online coding, заморозили найм.
⁃ Amazon (Germany) - прошел все интервью, получил офер на L5, отказал
⁃ Google (Zurich) - прошел все интервью, получил офер на L4, отказал
⁃ Revolut (Porto) - прошел все интервью, получил офер на middle/senior, отказал
⁃ Bolt (Talinn) - прошел все интервью, получил офер на senior, отказал
⁃ Canva (Sydney) - прошел все интервью, получил офер на senior, принял
🙅 Я не сильно готовился к собеседованиям, совершал ошибки, как следствие не везде смог получить высокую оценку. Я слишком стар, чтобы опять начинать расти из мидла вверх, поэтому решил, что лучше потрачу время, чтобы наполнить резюме значимыми показателями и улучшить свои навыки прохождения интервью.
Будем знакомы 🖖
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍13❤1
Оферы за 2 дня 🏃♂️
⏳ Обычно весь процесс интервью занимает от пару недель до месяца.
Не всем это подходит, поэтому компании иногда проводят hiring event, где за короткое время собеседуют множество кандидатов и сразу могут предложить офер.
Яндекс не исключение, они периодически проводят такие события и скажу они пользуются спросом.
👾 29-30 октября будет Weekend Offer Backend для бэкенд разработчиков.
Что нужно сделать, чтобы попасть?
- до 26 октября решить 4 задачи на платформе Яндекс.Контекст
- 29 октября пройти два онлайн собеседования с инженерами Яндекса
- 30 октября получить офер и познакомиться с командой
Все полностью онлайн!
👨💻 Даже если вы не планируете устраиваться в Яндекс, это все равно шанс прокачать свои навыки прохождения интервью, попробуйте получить максимально выгодный офер. Вас никто не заставит потом подписывать с ними контракт, но зато получите приличный буст к самооценке 😅
Больше информации тут:
https://yandex.ru/promo/events/weekend-backend-291022
⏳ Обычно весь процесс интервью занимает от пару недель до месяца.
Не всем это подходит, поэтому компании иногда проводят hiring event, где за короткое время собеседуют множество кандидатов и сразу могут предложить офер.
Яндекс не исключение, они периодически проводят такие события и скажу они пользуются спросом.
👾 29-30 октября будет Weekend Offer Backend для бэкенд разработчиков.
Что нужно сделать, чтобы попасть?
- до 26 октября решить 4 задачи на платформе Яндекс.Контекст
- 29 октября пройти два онлайн собеседования с инженерами Яндекса
- 30 октября получить офер и познакомиться с командой
Все полностью онлайн!
👨💻 Даже если вы не планируете устраиваться в Яндекс, это все равно шанс прокачать свои навыки прохождения интервью, попробуйте получить максимально выгодный офер. Вас никто не заставит потом подписывать с ними контракт, но зато получите приличный буст к самооценке 😅
Больше информации тут:
https://yandex.ru/promo/events/weekend-backend-291022
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤🔥1👍1👎1
Давайте на этой неделе порешаем задачи, связанные с хэшами 📦
🧩 Задача 16/200 ✅
https://leetcode.com/problems/contains-duplicate/
Сложность: Легкая, Процент успешных попыток 61.3%
#problemoftheday
🧩 Задача 16/200 ✅
https://leetcode.com/problems/contains-duplicate/
Сложность: Легкая, Процент успешных попыток 61.3%
#problemoftheday
LeetCode
Contains Duplicate - LeetCode
Can you solve this real interview question? Contains Duplicate - Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.
Example 1:
Input: nums = [1,2,3,1]
Output: true…
Example 1:
Input: nums = [1,2,3,1]
Output: true…
Are Right A Lot
👀 Когда я готовился к собеседованиям от Амазона, всегда затормаживал на одном принципе лидерства «Are Right A Lot». Дословно переводится «Лидеры правы, очень часто». Если я допускаю баги в коде, значит я не лидер? Или если я ложил продакшн, значит я не лидер?
🧐 Но этот принцип больше про спорные моменты, умеет ли человек находить и доносить правильные решения до других.
🗣 В споре не всегда побеждает самый умный, а зачастую тот, кто своими знаниями, харизмой или своим авторитетом может убедить других. Так вот «Are Right A Lot» - это принцип про предвидение и убеждение. Это может звучать контринтуитивно, но если ты убедил, значит ты прав, потому что история не терпит сослагательных наклонений. Современный бизнес живет слишком быстро чтобы помнить плохое и слишком жаден, чтобы разбрасываться ресурсами, которые могут брать на себя ответственность.
💪 Как тренировать этот принцип или как получить опыт, которым можно продемонстрировать этот принцип?
Учиться отстаивать свою точку зрения, желательно спокойно и с разумными доводами. Даже маленькая победа в копилку, убедил коллегу или подчиненного, это круто. Смог доказать целесообразность своей идей перед командой или руководителем, это еще лучше. Высший пилотаж, если смог убедить бизнес и при этом принести профит компании.
😬 Ошибки тоже хорошо. Неправильные решения учат нас лучше выбирать правильные в будущем. Это именно тот принцип когда количество рано или поздно приведет к качеству. Но если не начинать, опыт сам по себе не появится.
🏆 Чтобы завтра быть в Амазоне, нужно становиться лидером уже сегодня.
💭 Делитесь, как вы понимаете этот принцип
👀 Когда я готовился к собеседованиям от Амазона, всегда затормаживал на одном принципе лидерства «Are Right A Lot». Дословно переводится «Лидеры правы, очень часто». Если я допускаю баги в коде, значит я не лидер? Или если я ложил продакшн, значит я не лидер?
🧐 Но этот принцип больше про спорные моменты, умеет ли человек находить и доносить правильные решения до других.
🗣 В споре не всегда побеждает самый умный, а зачастую тот, кто своими знаниями, харизмой или своим авторитетом может убедить других. Так вот «Are Right A Lot» - это принцип про предвидение и убеждение. Это может звучать контринтуитивно, но если ты убедил, значит ты прав, потому что история не терпит сослагательных наклонений. Современный бизнес живет слишком быстро чтобы помнить плохое и слишком жаден, чтобы разбрасываться ресурсами, которые могут брать на себя ответственность.
💪 Как тренировать этот принцип или как получить опыт, которым можно продемонстрировать этот принцип?
Учиться отстаивать свою точку зрения, желательно спокойно и с разумными доводами. Даже маленькая победа в копилку, убедил коллегу или подчиненного, это круто. Смог доказать целесообразность своей идей перед командой или руководителем, это еще лучше. Высший пилотаж, если смог убедить бизнес и при этом принести профит компании.
😬 Ошибки тоже хорошо. Неправильные решения учат нас лучше выбирать правильные в будущем. Это именно тот принцип когда количество рано или поздно приведет к качеству. Но если не начинать, опыт сам по себе не появится.
🏆 Чтобы завтра быть в Амазоне, нужно становиться лидером уже сегодня.
💭 Делитесь, как вы понимаете этот принцип
👍8
🧩 Задача 17/200 ✅
Сегодня еще одна классическая задача, которая довольно часто попадается на собеседованиях. Сам встречал ее, когда приходил в Яндекс 🥲
https://leetcode.com/problems/group-anagrams/
Сложность: Средняя, Процент успешных попыток 65.9%
#problemoftheday
Сегодня еще одна классическая задача, которая довольно часто попадается на собеседованиях. Сам встречал ее, когда приходил в Яндекс 🥲
https://leetcode.com/problems/group-anagrams/
Сложность: Средняя, Процент успешных попыток 65.9%
#problemoftheday
LeetCode
Group Anagrams - LeetCode
Can you solve this real interview question? Group Anagrams - Given an array of strings strs, group the anagrams together. You can return the answer in any order.
Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat"…
Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat"…
Про коллизии в хэш таблицах 🚚💥🚗
Мы привыкли, что хэштаблицы это магическое место, куда можно складывать элементы и брать оттуда за единицу времени. Есть некая хэш функция, которая вычисляет номер ячейки, но бывает так, что для нескольких разных объектов хэш функция вернет одно и тоже число. Если у вас 100 попугаев и 80 клеток, значит в какой-то клетке будет несколько попугаев. Это и называется коллизия.
Попробуем рассмотреть какие виды устранения коллизии существует и как они реализованы в языках программирования.
Separate chaining ⛓
В данном подходе используется вместо одной ячейки используется двухсвязанный список. Соотвественно когда добавляется элемент, высчитывается номер ячейки, находится соответствующий список и добавляется в конец объект. Такой подход используется во многих языках программирования, в том числе в Java, Go, C++.
Основным минусом данного подхода является то, что если все элементы попадают в один список, то получится длинный связанный список, соотвественно результирующая сложность будет соответствующая.
Давайте посчитает ассимптотику по времени.
⁃ Поиск элемента: в среднем O(1), в худшем случае O(N)
⁃ Добавление элемента: в среднем O(1), в худшем случае O(N)
⁃ Удаление элемента: в среднем O(1), в худшем случае O(N)
В Java есть оптимизация, если список разрастается и становится больше определенного количество элементов, то список превращается в сбалансированное двоичное дерево. Соотвественно сложность уменьшается до O(log N)
https://www.geeksforgeeks.org/hashing-set-2-separate-chaining/
Open addressing 🛤
Второй подход называется открытая адресация. Подход предполагает, что количество элементов для вставки не больше, чем количество ячеек в таблице. Если при вставке элемента оказывается, что ячейка уже занята, то смотрим на ячейку +1, если свободна то вставляем туда, иначе проверяем +2, +3 и так далее. Есть мини оптимизации, позволяющие не линейно прыгать по ячейкам в поисках свободного слота, а квадратично.
Стоит отметить, что удаление здесь это просто флажок (tombstone), означающий что ячейка свободна. Такой хак позволяет продолжать прыгать по ячейкам при поиске элемента, чтобы не остановиться раньше времени.
Сложность по времени.
⁃ Поиск элемента: в среднем O(1), в худшем случае O(N)
⁃ Добавление элемента: в среднем O(1), в худшем случае O(N)
⁃ Удаление элемента: в среднем O(1), в худшем случае O(N)
Такой подход тоже находит свою реализация в языках программирования, таких как Python, Ruby, Rust.
https://www.geeksforgeeks.org/hashing-set-3-open-addressing
Мы привыкли, что хэштаблицы это магическое место, куда можно складывать элементы и брать оттуда за единицу времени. Есть некая хэш функция, которая вычисляет номер ячейки, но бывает так, что для нескольких разных объектов хэш функция вернет одно и тоже число. Если у вас 100 попугаев и 80 клеток, значит в какой-то клетке будет несколько попугаев. Это и называется коллизия.
Попробуем рассмотреть какие виды устранения коллизии существует и как они реализованы в языках программирования.
Separate chaining ⛓
В данном подходе используется вместо одной ячейки используется двухсвязанный список. Соотвественно когда добавляется элемент, высчитывается номер ячейки, находится соответствующий список и добавляется в конец объект. Такой подход используется во многих языках программирования, в том числе в Java, Go, C++.
Основным минусом данного подхода является то, что если все элементы попадают в один список, то получится длинный связанный список, соотвественно результирующая сложность будет соответствующая.
Давайте посчитает ассимптотику по времени.
⁃ Поиск элемента: в среднем O(1), в худшем случае O(N)
⁃ Добавление элемента: в среднем O(1), в худшем случае O(N)
⁃ Удаление элемента: в среднем O(1), в худшем случае O(N)
В Java есть оптимизация, если список разрастается и становится больше определенного количество элементов, то список превращается в сбалансированное двоичное дерево. Соотвественно сложность уменьшается до O(log N)
https://www.geeksforgeeks.org/hashing-set-2-separate-chaining/
Open addressing 🛤
Второй подход называется открытая адресация. Подход предполагает, что количество элементов для вставки не больше, чем количество ячеек в таблице. Если при вставке элемента оказывается, что ячейка уже занята, то смотрим на ячейку +1, если свободна то вставляем туда, иначе проверяем +2, +3 и так далее. Есть мини оптимизации, позволяющие не линейно прыгать по ячейкам в поисках свободного слота, а квадратично.
Стоит отметить, что удаление здесь это просто флажок (tombstone), означающий что ячейка свободна. Такой хак позволяет продолжать прыгать по ячейкам при поиске элемента, чтобы не остановиться раньше времени.
Сложность по времени.
⁃ Поиск элемента: в среднем O(1), в худшем случае O(N)
⁃ Добавление элемента: в среднем O(1), в худшем случае O(N)
⁃ Удаление элемента: в среднем O(1), в худшем случае O(N)
Такой подход тоже находит свою реализация в языках программирования, таких как Python, Ruby, Rust.
https://www.geeksforgeeks.org/hashing-set-3-open-addressing
GeeksforGeeks
Separate Chaining Collision Handling Technique in Hashing - GeeksforGeeks
Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.
🔥4
🧩 Задача 18/200 ✅
https://leetcode.com/problems/top-k-frequent-elements/
Сложность: Средняя, Процент успешных попыток 64.8%
Требование внутри задачи, сложность должна быть меньше O(N log N), где N это длина входного массива.
#problemoftheday
https://leetcode.com/problems/top-k-frequent-elements/
Сложность: Средняя, Процент успешных попыток 64.8%
Требование внутри задачи, сложность должна быть меньше O(N log N), где N это длина входного массива.
#problemoftheday
LeetCode
Top K Frequent Elements - LeetCode
Can you solve this real interview question? Top K Frequent Elements - Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1…
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1…
Forwarded from Opportunity for you by FutureToday.KZ (Talap Kenzhebaev)
Manga.pdf
204.8 KB
Cracking the MAANGM technical
interviews
Tips and Preparation resources
interviews
Tips and Preparation resources
🔥5🤔1
Осторожно, конкурс!
🤖 Задачи решать интереснее, когда есть материальные плюшки, поэтому запускаю конкурс с призом «Месячный премиум в LeetCode». Давно хотел попробовать такой формат. Если эксперимент пройдет успешно, конкурсы будут чаще, разнообразнее, а призы более ценными 🎁.
🎯 Что нужно сделать:
⁃ Зарегистрироваться по форме ниже
⁃ Решать ежедневные задачки, публикуемые в этом канале с тэгом #problemoftheday
⁃ Чтобы задача засчиталась, нужно ее решить в течении 24 часов с момента ее публикации
⁃ Срок с 1 ноября до 30 ноября включтельно, итоги подведем 1 декабря
⁃ Для чистоты эксперимента, я буду модерировать, но не участвовать
📊 Правила подсчета баллов:
⁃ Сложные задачи оцениваются в 1.5 балла, средние в 1, легкие в 0.5
⁃ При равных суммах баллов, будет оцениваться количество задач, при всех равных закину доп задачи или же просто раздам несколько премиумов (но это не точно 😈)
⁃ В конце каждой недели буду публиковать промежуточные итоги
🤞 Верю в честность и сугубо спортивный интерес ребят, надеюсь, что не придется решать спорные моменты с читингом.
Ссылка для регистрации:
https://forms.gle/FgiFDYFYZi1sRu1J7
Удачи 🦾
🤖 Задачи решать интереснее, когда есть материальные плюшки, поэтому запускаю конкурс с призом «Месячный премиум в LeetCode». Давно хотел попробовать такой формат. Если эксперимент пройдет успешно, конкурсы будут чаще, разнообразнее, а призы более ценными 🎁.
🎯 Что нужно сделать:
⁃ Зарегистрироваться по форме ниже
⁃ Решать ежедневные задачки, публикуемые в этом канале с тэгом #problemoftheday
⁃ Чтобы задача засчиталась, нужно ее решить в течении 24 часов с момента ее публикации
⁃ Срок с 1 ноября до 30 ноября включтельно, итоги подведем 1 декабря
⁃ Для чистоты эксперимента, я буду модерировать, но не участвовать
📊 Правила подсчета баллов:
⁃ Сложные задачи оцениваются в 1.5 балла, средние в 1, легкие в 0.5
⁃ При равных суммах баллов, будет оцениваться количество задач, при всех равных закину доп задачи или же просто раздам несколько премиумов (но это не точно 😈)
⁃ В конце каждой недели буду публиковать промежуточные итоги
🤞 Верю в честность и сугубо спортивный интерес ребят, надеюсь, что не придется решать спорные моменты с читингом.
Ссылка для регистрации:
https://forms.gle/FgiFDYFYZi1sRu1J7
Удачи 🦾
🔥11👍4
Тимур Тибеев | BigTechDream
Осторожно, конкурс! 🤖 Задачи решать интереснее, когда есть материальные плюшки, поэтому запускаю конкурс с призом «Месячный премиум в LeetCode». Давно хотел попробовать такой формат. Если эксперимент пройдет успешно, конкурсы будут чаще, разнообразнее, а…
🧩 Задача 19/200 ✅
Первая задача месячного контеста 💣
https://leetcode.com/problems/valid-palindrome/
Сложность: Легкая, Процент успешных попыток 43.6%
#problemoftheday
Первая задача месячного контеста 💣
https://leetcode.com/problems/valid-palindrome/
Сложность: Легкая, Процент успешных попыток 43.6%
#problemoftheday
LeetCode
Valid Palindrome - LeetCode
Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters…
🤔2👍1
Тимур Тибеев | BigTechDream
Осторожно, конкурс! 🤖 Задачи решать интереснее, когда есть материальные плюшки, поэтому запускаю конкурс с призом «Месячный премиум в LeetCode». Давно хотел попробовать такой формат. Если эксперимент пройдет успешно, конкурсы будут чаще, разнообразнее, а…
❗️Небольшое уточнение❗️
Решение скидывать не нужно, буду мониторить по профилю в leetcode, который указали в форме регистрации
Всем хорошего дня☺️
Решение скидывать не нужно, буду мониторить по профилю в leetcode, который указали в форме регистрации
Всем хорошего дня
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Задача 20/200 ✅
https://leetcode.com/problems/merge-two-sorted-lists/
Сложность: Легкая, Процент успешных попыток 61.8%
#problemoftheday
https://leetcode.com/problems/merge-two-sorted-lists/
Сложность: Легкая, Процент успешных попыток 61.8%
#problemoftheday
LeetCode
Merge Two Sorted Lists - LeetCode
Can you solve this real interview question? Merge Two Sorted Lists - You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists.…
Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists.…
Тимур Тибеев | BigTechDream
🧩 Задача 19/200 ✅ Первая задача месячного контеста 💣 https://leetcode.com/problems/valid-palindrome/ Сложность: Легкая, Процент успешных попыток 43.6% #problemoftheday
Всем привет! 👋
Тестирую скрипт для проверки сдавших задание. Все кто сдал, в списке в комментариях.
Если вы также сдали, но вас почему-то нет в списке, напишите в комментариях свои данные, буду точечно решать проблемы.
Тестирую скрипт для проверки сдавших задание. Все кто сдал, в списке в комментариях.
Если вы также сдали, но вас почему-то нет в списке, напишите в комментариях свои данные, буду точечно решать проблемы.