Как я готовился к DSA и получил должность в Microsoft
Если вы разработчик, то все мы знаем, насколько важны структуры данных и алгоритмы (DSA) для прохождения первого раунда собеседований почти в 90% компаний, принимающих на работу, и я хочу процитировать очень известное высказывание, которое, как мне кажется, применимо к DSA
“нравится вам это или нет, но вы не можете игнорировать это”
Я делюсь своим опытом подготовки к собеседованиям в DSA для таких компаний, как Microsoft и других крупных компаний, во время работы, несмотря на то, что последние четыре года я не готовился к собеседованиям в DSA.
Первоначальная история
Ближе к концу 2023 года я, наконец, решил сменить работу. На следующий день я обновил свое резюме и профиль в LinkedIn, чтобы дать понять рекрутерам, что я открыт для новых возможностей. К моему удивлению, на следующий день рекрутер Google связалась со мной по поводу собеседования и сказала, что первым раундом будет DSA.
Я знал, что не готов к собеседованию в DSA, подобному Google, поэтому сказал рекрутеру, что мне нужно время на подготовку и что я назначу собеседование, когда буду готов.
Составление плана
Когда дело доходит до собеседований по программированию, мы все знаем, что LeetCode — это платформа, на которой можно практиковать DSA. Итак, я так и сделал — спустя годы я вошел в свою учетную запись LeetCode и понял, что решил всего 50 задач! В последний раз, когда я менял работу, я больше полагался на GeeksforGeeks, чем на LeetCode.
Проведя тщательное исследование, я составил список тем, на которых мне нужно было сосредоточиться во время собеседований.

Различные этапы моей подготовки
Я хотел поставить перед собой реалистичные цели при подготовке, поскольку я уже работал в стартапе, и у меня, как у старшего инженера, было много задач, но цель состояла в том, чтобы решить простые задачи за 15 минут, средние – за 20 минут, а сложные — за 40-50 минут.
Первоначальные трудности
В первые два месяца я сосредоточился на изучении основ, начав с простых тем, таких как массивы, связанные списки, стек, очередь и кучи.
После работы в офисе я старался посвящать 3 часа исключительно для подготовки к собеседованию. По каждой теме я начинал с простых задач, затем постепенно переходил к средним. Я ставил качество превыше количества и концентрировался на выявлении закономерностей в каждой проблеме, старательно записывая их.
Когда я перешел к задачам средней сложности, бывали дни, когда я тратил на решение одной задачи более 4 часов, чувствуя себя в тупике. Однако вскоре я перешел к структурированному подходу: сначала я сосредоточился на понимании проблемы, используя ручку и бумагу, чтобы наметить логику, прежде чем писать какой-либо код. Написание кода было легкой частью работы, а вот правильная логика была сложной задачей. Я выбрал Java в качестве основного языка программирования.
Если я задерживался над проблемой более чем на час, я проверял подсказки и пытался решить ее снова. Если я все еще не мог в ней разобраться, я читал редакционную статью или обсуждения, чтобы понять логику, но при этом обязательно писал код сам. Я также отмечал сложные вопросы в закладки, добавляя комментарии, чтобы напоминать себе, где я застрял, и чтобы это помогло мне исправлять ошибки в будущем.
Динамика и рост
Через 2 месяца я был искренне рад вернуться домой и решить проблемы с leet-кодом.
Чтобы поддерживать последовательность, я начал ежедневно решать вопросы по leetcode, чтобы не отставать от графика. Я также начал участвовать в проводимых раз в две недели конкурсах, которые не только расширили мои возможности, но и подготовили меня к решению вопросов за ограниченное время, имитируя условия собеседования.
К этому времени я перешел к более сложным темам, таким как динамическое программирование (DP), графики, попытки и обратный поиск. Мой прогресс был заметен — теперь я мог решать задачи средней сложности за 30 минут и даже справился с несколькими сложными задачами. Этот этап принес мне удовлетворение, и я заметил, что мои навыки решения проблем растут.
Подготовка к собеседованиям
После первых нескольких месяцев подготовки я почувствовал себя достаточно уверенно, чтобы начать проводить собеседования в компаниях среднего размера. Хотя поначалу я сталкивался с отказами, этот ранний опыт, а также несколько пробных собеседований помогли мне усовершенствовать мой подход к решению проблем и освоить технику проведения собеседований.
Этот процесс придал мне уверенности, и я одновременно начал готовиться к собеседованиям низкого уровня (LLD) и высокого уровня проектирования (HLD).
За это время я также разобрался со 150 основными задачами Leetcode для собеседований. Перед каждым собеседованием я решал ранее заданные вопросы от компании и обнаружил, что в 50-60% случаев возникают похожие вопросы или шаблоны.
Когда я, наконец, взломал Microsoft, мне показалось, что вся тяжелая работа окупилась.
Советы по подготовке DSA
- Последовательность — это ключ к успеху: Возможно, это звучит банально, но последовательность — это то, что действительно меняет правила игры, когда речь заходит о DSA. Некоторые люди учатся быстрее, в то время как другим требуется больше времени, но если вы будете последовательны, то в конечном итоге наверстаете упущенное. Главное — проявить себя и продолжать идти вперед.
- Сосредоточьтесь на закономерностях: вместо того, чтобы пытаться решить каждую проблему, сосредоточьтесь на распознавании закономерностей в каждой из них. Как только вы будете уверены в определенной закономерности, переходите к другим типам проблем, которые требуют другого подхода. Это поможет вам заложить прочный фундамент.
- Отмечайте маленькие победы: ставьте перед собой реалистичные цели, когда начинаете. Например, стремитесь решать по три задачи каждый день в течение недели. Как только вы достигнете этого, найдите минутку, чтобы отметить свой прогресс. Каждая маленькая победа имеет значение, и вы заслуживаете того, чтобы ее праздновать.
- Не сравнивайте, верьте в себя: всегда найдется кто-то, кто покажется вам лучше, но это не то, что вы можете контролировать. Что вы можете контролировать, так это сравнивать себя с собой в прошлом и стремиться улучшаться на 1% каждый день. Доверяйте своему собственному пути.
Это личная история, которой я давно хотел поделиться. Хотя в будущем я планирую писать больше статей о технологиях, я уже давно думал об этом, поэтому решил поделиться ею со всеми вами.
С тех пор, как я приступил к своей нынешней должности, я отошел от ежедневной работы с leetcode, но вскоре планирую вернуться к ней снова. Любой, кто знаком с DSA, знает, что после того, как вы отвыкли от практики, требуется время, чтобы восстановить прежнюю скорость и эффективность.
Обсуждение закрыто.