❓Почему синьорам тяжелее пройти в 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, с годами такие штуки даются намного сложнее.
🤔 Задумывались ли вы о том, почему на собеседованиях в 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 сложных задач. Будем решать задачки вместе 🤝
👩💻 Наткнулся на такую статью 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 сложных задач. Будем решать задачки вместе 🤝
Medium
How I prepared for Google — Solving 200 leetcode questions.
The journey has been something unbelievable. If someone would ask me 1 year back why don’t you try for Google, I would have said no no. I…
🔥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
https://leetcode.com/problems/remove-letter-to-equalize-frequency/
Difficulty: Easy, Acceptance: 17.4%
Делитесь своими решениями в комментариях, для удобства можно использовать https://pastebin.com/
#problemoftheday
Pastebin
Pastebin.com - #1 paste tool since 2002!
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
👍1
Как вам сегодняшняя задачка?
Anonymous Poll
31%
Не знаю с чего начать, как решать, куда нажимать 🐱
23%
Слишком сложная, давай легче 😭
38%
Норм, в самый раз 🙂
8%
Изи, можно и посложнее 😒
🧩 Задача 2/200. ✅
https://leetcode.com/problems/latest-time-by-replacing-hidden-digits/
Сложность: Легкая, Процент успешных попыток: 42.1%
🤓 Условие на русском:
Нужно реализовать метод, который на вход принимет строку в формате
Правильным временем считаются те, что в промежутку от
Метод должен возвращать самое позднее время, которое может быть получено, если заменить символы
Пример:
Ввод: "2?:?0"
Результат: "23:50"
Если есть вопросы, пишите в комментариях, будем вместе думать.
Делитесь решениями, https://pastebin.com/ в помощь
В течении дня скину решение на Java, кстати если интересно решение на других языках, тоже дайте знать, напишу.
#problemoftheday
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
LeetCode
Latest Time by Replacing Hidden Digits - LeetCode
Can you solve this real interview question? Latest Time by Replacing Hidden Digits - You are given a string time in the form of hh:mm, where some of the digits in the string are hidden (represented by ?).
The valid times are those inclusively between 00:00…
The valid times are those inclusively between 00:00…
👍5
😉 Мини тест
Какая конечная сложность у данного кода? ``` for (int i = 0; i < 100; i++) { for (int j = 0; j < N; j++) { ... } } ```
Какая конечная сложность у данного кода? ``` 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
👍1
🥲Боли
Напишите в комментариях, что вам мешаем решать задачки прямо сейчас
- не знаю английского 🏴🇺🇸
- слишком сложные задачи 🫣
- не понимаю с чего начать, куда нажимать🧑🏻💻
- не понимаю как это связано с Гугл, Амазон, Фейсбук🤨
- не знаю что такое алгоритмическая сложность 🧮
- у меня лапки 🐱
И так далее, свои варианты приветствуются
Закидывайте свои боли, буду по самым горячим делать стримы, отвечать на вопросы, приглашать умных ребят 🎥
Напишите в комментариях, что вам мешаем решать задачки прямо сейчас
- не знаю английского 🏴🇺🇸
- слишком сложные задачи 🫣
- не понимаю с чего начать, куда нажимать🧑🏻💻
- не понимаю как это связано с Гугл, Амазон, Фейсбук🤨
- не знаю что такое алгоритмическая сложность 🧮
- у меня лапки 🐱
И так далее, свои варианты приветствуются
Закидывайте свои боли, буду по самым горячим делать стримы, отвечать на вопросы, приглашать умных ребят 🎥
🧩 Задача 3/200 ✅
https://leetcode.com/problems/two-sum/
Сложность: Легкая, Процент успешных попыток 49.1%
⛔️ Задача классическая и встречается в реальных собеседованиях.
🤓 Условие на русском:
Есть массив целых чисел
Гарантируется, что для каждых входных данных, есть как минимум одно решение. И нельзя использовать один и тот же элемент дважды.
Ответ можно возвращать в любом порядке.
Ввод: nums = [2,7,11,15], target = 9
Результат: [0,1]
Объяснение: чтобы получить 9, мы должны сложить
Удачи 🙂
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]Удачи 🙂
LeetCode
Two Sum - LeetCode
Can you solve this real interview question? Two Sum - Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not…
You may assume that each input would have exactly one solution, and you may not…
👍1🤯1
🤔 Что общего между алгоритмическими задачками и обычной работой разработчика?
Ничего! - скажете вы или даже скажу я сам. Казалось бы, задачки на собеседованиях не так уж и сильно коррелируют с теми задачами, которые нужно кодить каждый день. Например навык считать сложность мне вообще ни разу не пригодился в реальной работе.
Но общее все таки есть - это подход. Ведь каждая задача на интервью это тех задание от руководства в миниатюре. Сейчас объясню.
💻 Давайте вспомним, через какие круги ада этапы проходит разработчик, когда получает задачу от тимлида/аналитика/манагера:
1️⃣ Уточняем требования, задаем вопросы. Примеры: какого цвета должна быть кнопка? какая будет нагрузка на сервис? какие сроки? и так далее
2️⃣ Предлагаем решения, обсуждаем архитектуру и трудозатраты. Типичный пример: можем так за неделю или нормально за 6 месяцев (угадайте что выберут🙂)
3️⃣ Реализуем решение - пишем код
4️⃣ Проверяем, тестируем - автотесты, регрессионное тестирование, MVP, клянемся что все работало локально
5️⃣ Выкатываем в продакшн - говорим об успешное реализации проекта, если/когда будут баги, то чиним/хотфиксим
👩🏫 Теперь если взглянем на этапы, которые проходит кандидат при собеседовании, окажется что они точно такие же:
1️⃣ Уточняем требования - какого размер массив, могут ли быть цифры или только буквы, метод используется одним потоком или многими и так далее
2️⃣ Предлагаем решения - можем решить за один проход по массиву, но придется создать кучу объектов в памяти или алгоритм будет долго работать, но зато никаких дополнительных структур данных
3️⃣ Реализуем решение - пишем код
4️⃣ Проверяем - самостоятельно дебажим свой код на примерах - это кстати плюс в копилку кандидата
5️⃣ Сдаем решение интервьюеру - если он видит проблему, то находим и исправляем
✔️ То есть цель собеседующего оценить не только навыки программирования и знания структур данных, но и еще и сам подход к решению. Как хорошо кандидат справится с маленькой задачей можно спрогнозировать, как хорошо разработчик будет справляться с техническими задачами на работе.
🏄♂️ Для меня это долгое время было неочевидно, на собеседованиях я торопился приступить к написанию кода. Я думал, что время является важным, если не важнейшим критерием при оценки моей кандидатуры. Сказалось прошлое спортивного программиста 👀. Ошибку осознал, когда стал сам проводить интервью.
☝️ Поэтому хороший способ сдать успешно интервью - это относится к задаче как к обычной задаче из трекера. Уточнить, обсудить, действовать. Но и про время конечно не забываем ⏳
Ничего! - скажете вы или даже скажу я сам. Казалось бы, задачки на собеседованиях не так уж и сильно коррелируют с теми задачами, которые нужно кодить каждый день. Например навык считать сложность мне вообще ни разу не пригодился в реальной работе.
Но общее все таки есть - это подход. Ведь каждая задача на интервью это тех задание от руководства в миниатюре. Сейчас объясню.
💻 Давайте вспомним, через какие к
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 = [1,3,5,4,7]
Результат: 3
Объяснение: Самая длинный подмассив подряд возрастающих чисел это [1, 3, 5], поэтому ответ 3. Есть еще подпоследовательность [1, 3, 5, 7] но так как эти числа идут неподряд, то не считаем за ответ.
Сегодня будет решение на Javanoscript (почти что Java)
#problemoftheday
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
LeetCode
Longest Continuous Increasing Subsequence - LeetCode
Can you solve this real interview question? Longest Continuous Increasing Subsequence - Given an unsorted array of integers nums, return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing.…
👍3
