Тимур Тибеев | BigTechDream – Telegram
Тимур Тибеев | BigTechDream
2.15K subscribers
99 photos
5 videos
1 file
337 links
Senior Backend Engineer @ Canva
Бывший Яндексоид

🧑🏻‍💻Пишу про карьерный рост в IT
📚Делюсь советами, как пройти собеседования в MAANG
👨‍🏫Обучаю алгоритмам и структурам данных

👋Новопришедшие, читайте закрепленный пост
Download Telegram
Are Right A Lot

👀 Когда я готовился к собеседованиям от Амазона, всегда затормаживал на одном принципе лидерства «Are Right A Lot». Дословно переводится «Лидеры правы, очень часто». Если я допускаю баги в коде, значит я не лидер? Или если я ложил продакшн, значит я не лидер?

🧐 Но этот принцип больше про спорные моменты, умеет ли человек находить и доносить правильные решения до других.

🗣 В споре не всегда побеждает самый умный, а зачастую тот, кто своими знаниями, харизмой или своим авторитетом может убедить других. Так вот «Are Right A Lot» - это принцип про предвидение и убеждение. Это может звучать контринтуитивно, но если ты убедил, значит ты прав, потому что история не терпит сослагательных наклонений. Современный бизнес живет слишком быстро чтобы помнить плохое и слишком жаден, чтобы разбрасываться ресурсами, которые могут брать на себя ответственность.

💪 Как тренировать этот принцип или как получить опыт, которым можно продемонстрировать этот принцип?

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

😬 Ошибки тоже хорошо. Неправильные решения учат нас лучше выбирать правильные в будущем. Это именно тот принцип когда количество рано или поздно приведет к качеству. Но если не начинать, опыт сам по себе не появится.

🏆 Чтобы завтра быть в Амазоне, нужно становиться лидером уже сегодня.

💭 Делитесь, как вы понимаете этот принцип
👍8
🧩 Задача 17/200

Сегодня еще одна классическая задача, которая довольно часто попадается на собеседованиях. Сам встречал ее, когда приходил в Яндекс 🥲

https://leetcode.com/problems/group-anagrams/
Сложность: Средняя, Процент успешных попыток 65.9%

#problemoftheday
Про коллизии в хэш таблицах 🚚💥🚗

Мы привыкли, что хэштаблицы это магическое место, куда можно складывать элементы и брать оттуда за единицу времени. Есть некая хэш функция, которая вычисляет номер ячейки, но бывает так, что для нескольких разных объектов хэш функция вернет одно и тоже число. Если у вас 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
🔥4
🧩 Задача 18/200

https://leetcode.com/problems/top-k-frequent-elements/
Сложность: Средняя, Процент успешных попыток 64.8%

Требование внутри задачи, сложность должна быть меньше O(N log N), где N это длина входного массива.

#problemoftheday
Forwarded from Opportunity for you by FutureToday.KZ (Talap Kenzhebaev)
Manga.pdf
204.8 KB
Cracking the MAANGM technical
interviews
Tips and Preparation resources
🔥5🤔1
Осторожно, конкурс!

🤖 Задачи решать интереснее, когда есть материальные плюшки, поэтому запускаю конкурс с призом «Месячный премиум в LeetCode». Давно хотел попробовать такой формат. Если эксперимент пройдет успешно, конкурсы будут чаще, разнообразнее, а призы более ценными 🎁.

🎯 Что нужно сделать:
⁃ Зарегистрироваться по форме ниже
⁃ Решать ежедневные задачки, публикуемые в этом канале с тэгом #problemoftheday
⁃ Чтобы задача засчиталась, нужно ее решить в течении 24 часов с момента ее публикации
⁃ Срок с 1 ноября до 30 ноября включтельно, итоги подведем 1 декабря
⁃ Для чистоты эксперимента, я буду модерировать, но не участвовать

📊 Правила подсчета баллов:
⁃ Сложные задачи оцениваются в 1.5 балла, средние в 1, легкие в 0.5
⁃ При равных суммах баллов, будет оцениваться количество задач, при всех равных закину доп задачи или же просто раздам несколько премиумов (но это не точно 😈)
⁃ В конце каждой недели буду публиковать промежуточные итоги

🤞 Верю в честность и сугубо спортивный интерес ребят, надеюсь, что не придется решать спорные моменты с читингом.

Ссылка для регистрации:
https://forms.gle/FgiFDYFYZi1sRu1J7

Удачи 🦾
🔥11👍4
Тимур Тибеев | BigTechDream
🧩 Задача 19/200 Первая задача месячного контеста 💣 https://leetcode.com/problems/valid-palindrome/ Сложность: Легкая, Процент успешных попыток 43.6% #problemoftheday
Всем привет! 👋

Тестирую скрипт для проверки сдавших задание. Все кто сдал, в списке в комментариях.
Если вы также сдали, но вас почему-то нет в списке, напишите в комментариях свои данные, буду точечно решать проблемы.
Как не пропустить в челюсть

👷 Замечали ли вы, как утопичны собеседования по проектированию систем, они же архитектурные секции. Например тебе дают задачу, задизайнить аналог Инстаграмма. Начинаешь считать трафик, объемы хранимой информации, рисовать кучу микросервисов, подбирать множество баз данных, разные уровни балансировки, асинхронные очереди и так далее. По итогу получаешь большую и детальную схему, которая хороша в теории, но сразу же ломается на практике. Как говорил Майк Тайсон «У всех есть план... до первого удара в челюсть…».

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

🧱 Реальность работает по другому. Нынешний мир живет категориями MVP. Бизнес хочет уметь дешево проверить идею и только при наличии доказанного спроса, вкладывать свои миллионы на разработку. Поэтому когда компания решит делать местный аналог инстаграмма, никто не выделит столько ресурсов, сколько нарисовано на идеальной схеме.

🪚 Чтобы убедиться в этом, можно поспрашивать чем занимаются или чем занимались разработчики востребованных сервисов. Вангую, что довольно часто можно будет услышать ответ «Распиливаем монолит на микросервисы».

😍 Ожидания - пишем все на микросервисах, реализуем оркестрирование систем и используем зоопарк баз данных.
😐 Реальность - пишем монолит, используем простую инфраструктуру и 1-2 базы данных. И если все норм, спрос есть, то усложняем схему.

💰 Как техническому специалисту мне не хочется это признавать, но прибыль компании намного важнее популярных технологий и идеальной инфраструктуры. Поэтому периодически ловлю когнитивный диссонанс на собесах по дизайну систем.
👍7🔥3
🧐 Какая сложность по времени у метода выше, где N это длина массив?
Anonymous Quiz
10%
O(N^2)
6%
O(2^N)
81%
O(N)
2%
O(log N)
🥱9👍1
Салем, достар 👋

Прошла первая неделя челенджа, как и обещал, публикую промежуточные итоги.

Итак, все задачи этой недели решили следующие участники, с чем и поздравляю 🥳:
@zhenis000509
@aidynb
@spayev
@just_arsu
@Dias1718
@superpupermegaman
@YerlanKarakulov
@BeknurS
@qarapaiymbolll
@helpfdo
@bakytovnurzhan
@nrmkhd
@n_fano
@arstmbk

🏆 Все результаты этой недели можно глянуть по этой ссылке:
https://docs.google.com/spreadsheets/d/1uccEZWtXoEuk-0CGbgm67tp-UeyoZ-OqJEj_lXTNSoc/edit?usp=sharing
Напомню:
- Легкие 0.5 балла 🥉
- Средние 1 балл 🥈
- Сложные 1.5 балла 🥇

В таблице отображаются только те, кто решил как минимум 1 задачу, если зарегистрировались, но ничего не решили, то вас не будет.
Если вы должны быть в таблице или какую-то задачу я не засчитал, просто напишите мне в личку @argyntim

Спасибо всем, кто принимает участие в челендже, вы молодцы 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👏9🔥3👍1🥰1
🧩 Задача 23/200

Доброго понедельника, продолжаем решать задачи. 👩‍💻
Эта неделя будет посвящена стэкам и очередям. И первая задача - классика спортивного программирования, правильные скобочные последовательности. 🏆
Удачи 💪

https://leetcode.com/problems/valid-parentheses/
Сложность: Легкая, Процент успешных попыток 40.7%

#problemoftheday
👍10
English, do you speak it?

🗣 Почти половину времени при собеседовании в Amazon, а так же как минимум один час при собеседовании в Google вы будете отвечать на ситуационные вопросы (behavioral questions).

📝 Излагать мысли нужно последовательно, следуя методологии S.T.A.R.
⁃ S - situation, обстоятельства в которых вы находились
⁃ T - task, задача, которая перед вами стояла
⁃ A - actions, действия, которые вы предприняли
⁃ R - results, чего вы в итоге добились

🙊 Звучит просто, не так ли? Но очень легко потерять нить повествования, начать прыгать от одной мысли к другой, превратить рассказ в кашу и быть остановленным интервьюером.

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

🎙Недостаточно перед зеркалом отрепетировать речь, нужно готовиться к встречным вопросам, к смежным темам, к вопросам с подвохом. Идеально, если есть собеседник, который поможет подготовиться, для всего остального существует Мастеркард.

☝️Есть замечательный ресурс Pramp, который помимо обычных вопросов по алгоритмам, также может помочь подготовиться к behavioral собеседованиям.
https://www.pramp.com/dev/uc-behavioral

✌️Теперь минутка рекламы. У Skyeng также есть направление «английский для IT-специалистов», который поможет прокачать разговорный английский. Курс научит свободно общаться на технические темы, читать документацию и даже выступать на конференциях. Пробный урок бесплатно, так что можно просто оценить качество преподавания прежде чем нести туда свои кровные. Я тут настроил реферальную программу, поэтому регистрируйтесь по ссылке https://go.redav.online/7ded98d9aa8b2600.
Я сейчас в процессе переговоров с Skyeng, попробую выбить еще и промокоды, буду держать в курсе.
🔥5👍1🤔1
🧩 Задача 24/200

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

https://leetcode.com/problems/design-circular-queue/
Сложность: Средняя, Процент успешных попыток 51.8%

#problemoftheday
👍4👌1
Строим свое окружение 🧑‍🏫👩‍💻🧑‍🏭

Все мы понимаем, что рекрутеры крупных компаний редко отзываются на вакансии отправленных через сайт. Я на протяжении нескольких лет периодически отправлял свое резюме через Google Careers, но ни разу не получил даже отказа. Самый быстрый способ быть замеченным, если кто-то изнутри порекомендует тебя. Это и называется рефералами.

🥷Нередкая проблема с рефералами, что человек, который тебя рекомендует, должен знать тебя. То есть для него, ты не можешь быть просто рандомным человеком из LinkedIn. Желательно, чтобы вы имели совместный опыт, учеба, работа или какие-нибудь side проекты.

Конечно, не все MAANG компаний такие строгие, некоторые не сильно заморачиваются как кандидат получил рекомендацию. Но мне кажется, что рано или поздно тех гиганты станут более требовательны к своим реферальным программам. Ведь интернет сейчас пестрит разными табличками с контактами инженеров Гугла и это генерирует огромный поток кандидатов не всегда высокого качества.

Как получить качественные рефералы?

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

Как вычислять такие компании?

Но есть у меня гипотеза, что сильные команды рождают сильных инженеров, а сильные инженеры имеет больше шансов устроится в MAANG. Так вот, нужно стремиться попадать в сильные команды. Вот мои критерии таковых:
1️⃣Во-первых, бизнес должен пройти стадию стартапа и иметь устойчивую экономику. Есть пользователи, есть профит, есть рост, соотвественно есть нагрузка и сопуствующие проблемы, на которых можно вырасти. Продукт кому-то нужен сегодня и завтра он будет нужнее, на таких очень легко расти инженерам. На 10K RPS вы набьете таких шишок, что никакой 100 RPS не даст.
2️⃣Во-вторых, команда разработки не стагнирует, а постоянно эволюционирует. С каждым разом появляются новые практики: дежурства, разбор инцидентов, учет техдолга и так далее. «Здоровые» процессы упрощают работу и позволяют сосредоточиться на главном. Как говорил Беар Гриллс "Импровизируй, адаптируйся, преодолевай" 🐻.
3️⃣В-третьих, количество высогрейдовых разработчиков в команде. Синьоры востребованы и немного заносчивы, в какой-то момент их перестают мотивировать только деньги. Если они остаются, значит их что-то держит помимо зарплаты. Рядом с мощными рано или поздно и сам становишься мощным, такая же логика как и с миллионерами.

Общий посыл такой:
🔴Не нужно стремиться окружать себя людьми, которые все время думают как устроиться в Google.
🟢Нужно окружать себя инженерами, при взгляде на которых думаешь, почему они до сих пор не в Google, изи устроились бы.
👍7🔥7🤔2