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

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

👋Новопришедшие, читайте закрепленный пост
Download Telegram
Почему синьорам тяжелее пройти в Google, чем студентам?

🤔 Задумывались ли вы о том, почему на собеседованиях в FAANG не спрашивают про языки программирования, про технологии и фреймворки?
Вы не услышите вопрос - как устроен Garbage Collector или как работает HTTP запрос, вместо этого будут алгоритмические задачки - найти кратчайший маршрут между вершинами, повернуть дерево, убрать все нолики из массива и так далее.

Почему так?

📏 Принцип, которым руководствуются в Google и другие тех гиганты - принцип непредвязтости (unbiased). Идея такая - смышленный инженер, сможет завтра изучить любую технологию, любой язык программирования и даже написать свой фреймворк. Опыт конечно играет свою роль, но проявляется больше при проектировании систем (system design) и поведенческих (behavioral) интервью.

🚴‍♀️ Из-за того, что технологии меняются слишком быстро (каждый день новый JS framework), Google просто не может завязаться на них, не успеет. Можно для примера сравнить, на чем писали люди 5 лет назад и на чем пишут сейчас. Вот и пришлось построить систему, которая по определенным параметрам: data structures, system design, behavioral на выход отдает одно число: L3, L4, L5. Таким образом Google может сравнивать одного кандидата с другим и выбирать лучших. Конечная оценка конечно коррелирует с уровнем самого разработчика, но упускает один важный момент - практический опыт человека, из-за этого крутые ребята могут остаться за бортом.

🙁 В Яндекса я периодически собеседую ребят 30+, с большим багажом знаний, полезного опыта и критически важных навыков. Основная проблема этих ребят, что они не могут осилить задачки на алгоритмы и структуры данных, просто потому что их ежедневная деятельность не связана с посторением Минимального Оставного Дерева или динамическим программированием. С опытом понимаешь, что разработка внутри Google по сути такая же как в внутри Kaspi, те же базы, те же технологии, отличаются лишь детали. Теперь представьте, разработчик прошедший огонь, воду и лежаший прод - это золото для любого соискателя, за битого двух небитых дают. Такой человек может решать задачи любого уровня и достигать поставленных бизнесом показателей. Но такие ребята обычно получают оценки уровня middle. Не справедливо? Соглашусь.

👩‍🎓 Поэтому когда ты молод и только погружаешься в мир программирования, тебе легче уделять время leetcode, codeforces, topcoder. Среди студентов IT специальностей проходят всевозможные ACM соревнования, практически в каждом университете есть курсы по Алгоритмам и Структурам Данных. Все мечтают о Google и ты находишься в этом состоянии, и готов шерстить Кормена и Кнута ночами напролет. Важно как минимум получить необходимую базу, попробовать и провалить несколько собеседований в FAANG, с годами такие штуки даются намного сложнее.
👍7
🎯 Сколько задачек нужно решить, чтобы попасть в Гугол?

👩‍💻 Наткнулся на такую статью https://medium.com/@siddhism/how-i-prepared-for-google-0-leetcode-questions-to-200-questions-e37690ebce85. Парень делится своим опытом подготовки к интервью в Google. Он решил 200 задач на leetcode.com, 60 легких, 120 средних и 20 сложных. В результате он смог получить оффер.

🏋️ Конечно же можно не пройти в FAANG и с 500 задачами. Как и количество подходов в тренажерном зале не означает, что вы станете следующим Рони Колманом. Но взаимосвязь между количеством решенных задач и вероятностью успешного прохождения интервью все таки присутствует.

🧠 Поэтому запускаю ежедневный челендж, каждый день буду публиковать одну задачу из leetcode. Цель решить 200 задач: 60 легких, 100 средних и 40 сложных задач. Будем решать задачки вместе 🤝
🔥14
Тимур Тибеев | BigTechDream pinned «🎯 Сколько задачек нужно решить, чтобы попасть в Гугол? 👩‍💻 Наткнулся на такую статью https://medium.com/@siddhism/how-i-prepared-for-google-0-leetcode-questions-to-200-questions-e37690ebce85. Парень делится своим опытом подготовки к интервью в Google. Он…»
🧩 Задача 1/200.
https://leetcode.com/problems/remove-letter-to-equalize-frequency/
Difficulty: Easy, Acceptance: 17.4%
Делитесь своими решениями в комментариях, для удобства можно использовать https://pastebin.com/

#problemoftheday
👍1
🧩 Задача 2/200.
https://leetcode.com/problems/latest-time-by-replacing-hidden-digits/
Сложность: Легкая, Процент успешных попыток: 42.1%

🤓 Условие на русском:
Нужно реализовать метод, который на вход принимет строку в формате hh:mm, где некоторые цифры заменены символом ?.
Правильным временем считаются те, что в промежутку от 00:00 до 23:59 включительно.
Метод должен возвращать самое позднее время, которое может быть получено, если заменить символы ? на цифры.
Пример:
Ввод: "2?:?0"
Результат: "23:50"

Если есть вопросы, пишите в комментариях, будем вместе думать.
Делитесь решениями, https://pastebin.com/ в помощь

В течении дня скину решение на Java, кстати если интересно решение на других языках, тоже дайте знать, напишу.

#problemoftheday
👍5
😉 Мини тест

Какая конечная сложность у данного кода? ``` for (int i = 0; i < 100; i++) { for (int j = 0; j < N; j++) { ... } } ```
Anonymous Quiz
30%
O(100 * N)
30%
O(N)
0%
O(100)
40%
O(N^2)
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👍1
🥲Боли

Напишите в комментариях, что вам мешаем решать задачки прямо сейчас
- не знаю английского 🏴󠁧󠁢󠁥󠁮󠁧󠁿🇺🇸
- слишком сложные задачи 🫣
- не понимаю с чего начать, куда нажимать🧑🏻‍💻
- не понимаю как это связано с Гугл, Амазон, Фейсбук🤨
- не знаю что такое алгоритмическая сложность 🧮
- у меня лапки 🐱
И так далее, свои варианты приветствуются

Закидывайте свои боли, буду по самым горячим делать стримы, отвечать на вопросы, приглашать умных ребят 🎥
🧩 Задача 3/200

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

⛔️ Задача классическая и встречается в реальных собеседованиях.

🤓 Условие на русском:
Есть массив целых чисел nums и целое число target, нужно найти два индекса в массиве nums, так чтобы сумма этих элементов была равна target.
Гарантируется, что для каждых входных данных, есть как минимум одно решение. И нельзя использовать один и тот же элемент дважды.
Ответ можно возвращать в любом порядке.

Ввод: nums = [2,7,11,15], target = 9
Результат: [0,1]
Объяснение: чтобы получить 9, мы должны сложить nums[0] + nums[1], поэтому возвращаем индексы [0, 1]

Удачи 🙂
👍1🤯1
🤔 Что общего между алгоритмическими задачками и обычной работой разработчика?

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

Но общее все таки есть - это подход. Ведь каждая задача на интервью это тех задание от руководства в миниатюре. Сейчас объясню.

💻 Давайте вспомним, через какие круги ада этапы проходит разработчик, когда получает задачу от тимлида/аналитика/манагера:
1️⃣ Уточняем требования, задаем вопросы. Примеры: какого цвета должна быть кнопка? какая будет нагрузка на сервис? какие сроки? и так далее
2️⃣ Предлагаем решения, обсуждаем архитектуру и трудозатраты. Типичный пример: можем так за неделю или нормально за 6 месяцев (угадайте что выберут🙂)
3️⃣ Реализуем решение - пишем код
4️⃣ Проверяем, тестируем - автотесты, регрессионное тестирование, MVP, клянемся что все работало локально
5️⃣ Выкатываем в продакшн - говорим об успешное реализации проекта, если/когда будут баги, то чиним/хотфиксим

👩‍🏫 Теперь если взглянем на этапы, которые проходит кандидат при собеседовании, окажется что они точно такие же:
1️⃣ Уточняем требования - какого размер массив, могут ли быть цифры или только буквы, метод используется одним потоком или многими и так далее
2️⃣ Предлагаем решения - можем решить за один проход по массиву, но придется создать кучу объектов в памяти или алгоритм будет долго работать, но зато никаких дополнительных структур данных
3️⃣ Реализуем решение - пишем код
4️⃣ Проверяем - самостоятельно дебажим свой код на примерах - это кстати плюс в копилку кандидата
5️⃣ Сдаем решение интервьюеру - если он видит проблему, то находим и исправляем

✔️ То есть цель собеседующего оценить не только навыки программирования и знания структур данных, но и еще и сам подход к решению. Как хорошо кандидат справится с маленькой задачей можно спрогнозировать, как хорошо разработчик будет справляться с техническими задачами на работе.

🏄‍♂️ Для меня это долгое время было неочевидно, на собеседованиях я торопился приступить к написанию кода. Я думал, что время является важным, если не важнейшим критерием при оценки моей кандидатуры. Сказалось прошлое спортивного программиста 👀. Ошибку осознал, когда стал сам проводить интервью.

☝️ Поэтому хороший способ сдать успешно интервью - это относится к задаче как к обычной задаче из трекера. Уточнить, обсудить, действовать. Но и про время конечно не забываем
🔥4
🧩 Задача 4/200

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

🤓 Условие на русском:
Дается массив целых чисел nums, найдите максиммальную длину подмассива, где все элементы расположены в возрастающей последовательности. Подпоследовательность должна быть строго возрастающей.

Более формальное условие. Дается массив nums, найдите такие l и r (`0 <= l <= r < length(nums)`), чтобы выполнялось условие nums[i] < nums[i + 1] для l <= i < r. Верните разницу l и r.

Вход: nums = [1,3,5,4,7]
Результат: 3
Объяснение: Самая длинный подмассив подряд возрастающих чисел это [1, 3, 5], поэтому ответ 3. Есть еще подпоследовательность [1, 3, 5, 7] но так как эти числа идут неподряд, то не считаем за ответ.

Сегодня будет решение на Javanoscript (почти что Java)

#problemoftheday
👍3
Hiring freeze in MAANG

❄️ Наступили непростые времена в MAANG (Meta, Amazon, Apple, Netflix, Google).
Google объявил заморозку найма в июле, Facebook еще раньше в мае. Apple планирует ограничит найм в 23 году. Amazon начинает частично фризит найм. Увольнения, банкротства, сокращения инвестиций. Судя по опросам кандидатов внутри платформы interviewing.io, компании сейчас больше концентрируются на кандитатах высокого грейда.

😱 Что делать сейчас?
☝️Первый вариант - обратить внимания на компании поменьше, которые продолжают расти и нанимать. У маленьких компаний обычно не такой раздутый штат и нет огромного хвоста из неприбыльных продуктов и полуживых MVP.

✌️ Второй вариант - укрепить свои позиции на рынке труда. Плохие времена пройдут, а профиль в линкедин останется. Сейчас нужно максимально подготовиться "отморзке" найма, решать задачки, повышать свой уровень, ведь спрос на разработчиков никуда не изчезнет 🙆‍♂️
👍2😢1