Всем привет!

Я Алёна, Android разработчик. В последнее время активно проходила собеседования, в том числе алгоритмические.

В этой статье поделюсь своим опытом, как они проходят, какие есть подводные камни и нюансы.

So easy a monkey can do it
So easy a monkey can do it

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

Главная сложность на алго собесе — ограниченное время. Обычно даётся 30 минут, из которых первые 5 — рассказ о себе, последние 5 — вопросы интервьюеру. То есть надо ориентироваться на 20 минут, чтобы за это время прочитать задачу, написать и проверить решение, ответить на вопросы. Перелимит даже 5 минут, увы, отмечают :-(

Первый шаг - внимательно и спокойно прочитать условие, чтобы «узнать» задачу. Как вы мгновенно узнаёте знакомого человека вне зависимости от одежды, здесь нужно отгадать алгоритм, который хотят от вас увидеть, вне зависимости от «обёртки» конкретной задачи. Для этого нужно набить руку и прорешать достаточно задач, чтобы находить для них нужный алгоритм быстро.

Всего возможных алгоритмов не так много, как правило, rocket science не дают. Джентельменский набор - два указателя, рекурсивный обход дерева, алгоритмы с хэш мапой, работа со строками.

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

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

Это вы увидите на интервью
Это вы увидите на интервью

Перед тем, как писать решение, ещё важно продумать краевые случаи для задачи. Много времени на это тратить не стоит, напишите их в комментарии перед кодом, к реализации можно вернуться позже.

Про краевые случаи есть хорошее видео Михаила Густокашина
Если кратко, стоит посмотреть на такие краевые случаи:

  • Пустой массив или строка

  • Массив с одним элементом

  • Отрицательные элементы в массиве

  • Итерации в начале и в конце массива (моё любимое, не забудьте проверить, где находится указатель в конце цикла, возможно, придётся сделать ещё одну итерацию)

Писать код нужно, параллельно комментируя, и это тоже сложно, в обычной жизни мы пишем код молча, придётся потренироваться. Можно поступить так: написать строчку - прокомментировать, написать ещё одну - объяснить, и т. д.

Мы написали код, и сейчас самый ответственный момент - прогнать основные и краевые кейсы, убедиться, что наш код работает правильно во всех случаях. Обычно набор тестовых входных данных пишут в условии задачи. Как компилятор, внимательно прогоните код на тестовых примерах, результат промежуточных итераций можно писать рядом в комментариях. Большая вероятность, что здесь всплывут неучтённые моменты, самое время их исправить в коде.

Теперь вы полностью уверены в своём решении. Интервьюер задаст вопрос о сложности алгоритма. Как правило, это самая лёгкая часть, т. к. алгоритмы обычно попадаются линейной, квадратичной или логарифмической сложности. Могут помимо сложности по времени спросить про сложность по памяти.

Резюмируя, ключ к алгоритмической секции - насмотренность. Нет другого пути, кроме как решать много easy и medium leetcode и yandex.coderun задач, чтобы знать их в лицо. Лучше решать их с таймером, в среде без автодополнения, параллельно комментируя. Вы уменьшите волнение и влияние жёстких условий собеса, если будете к ним готовы.

Верьте в себя, и у вас всё получится!

Больше о мобильной разработке и других полезностях в моём ТГ

Just do it
Just do it

Комментарии (17)


  1. akod67
    09.08.2025 18:57

    Не хватает варианта ответа "это бесмысленно".


  1. Proscrito
    09.08.2025 18:57

    Только меня коробят сокращения слов в вульгарно-фамильярном стиле, а-ля 'алго', 'собесы', 'треня' и т.д.? Как пенопластом по стеклу. Нервы, видать, ни к черту...


    1. firehacker
      09.08.2025 18:57

      Меня сильнейшим образом бесит «продакт», вместо «продакт-менеджера» или «менеджера по продукту».


  1. nronnie
    09.08.2025 18:57

    Писать код обычно предлагают в Yandex Code, где нет автодополнения, подсветка синтаксиса очень условная, не выделяются ошибки.

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


    1. nickolaym
      09.08.2025 18:57

      Плохие аналогии подобны котёнку с дверцей. Куда пошлёт вас нанятый вами, ЖЭКом, сантехник, когда вы предложите ему купить себе весь инструмент самостоятельно, хоть ключи хоть плоскогубцы.

      И вы ещё не распробовали ценность удалённой виртуальной машины. Сколько ядер и мозгов доступно вам на вашем ноутбуке, и сколько - на ферме. Сколько нервов потратили интеграторы, чтобы у всех разработчиков были одинаковые версии компиляторов и библиотек. Как часто делаете бэкап вы на своём ноутбуке, по сравнению с виртуалкой.


      1. akod67
        09.08.2025 18:57

        Работать через RDP - это должен быть коннект с респонс таймом в 10мс, иначе это как играть в игры на удалёнке. Библиотеки прописываются в самом проекте. IDE ставится один раз. Бекап - чего, места разработки? Кому он нужен? Вообще слабые аргументы. Сильнее аргументы в контексте безопасности и контроля.


      1. ryanl
        09.08.2025 18:57

        В том-то и дело, что сантехник приходит с уже привычными, удобными для себя инструментами. Аналогия корректна.


      1. nronnie
        09.08.2025 18:57

        Куда пошлёт вас нанятый вами, ЖЭКом, сантехник, когда вы предложите ему купить себе весь инструмент самостоятельно, хоть ключи хоть плоскогубцы.

        За последние пять лет делал два капитальных ремонта. Все нормальные мастера мало того что имеют свой собственный инструмент, но еще и не станут работать с чужим - свой им привычней и они его знают. Насчет ЖЭКа - не знаю, с каким инструментом они там работают, но нанял однажды сантехника оттуда (потому что "мой" сантехник был в тот момент очень занят на каком-то крупном заказе и надо было ждать почти месяц) чтобы установить раковину и поставить смеситель в ванну. Мало того, что за пи*арасом пришлось потом всё переделывать, так за ним пришлось еще заново переделывать только что отделанную стену в смежной с ванной комнате (отдирать штукатурку до кирпича, ждать пару месяцев пока просохнет кирпич, и заново штукатурить и красить). С тех пор я скорее найму обезьяну из зоопарка, чем какого-нибудь "мастера" из ЖКХ.

        И вы ещё не распробовали ценность удалённой виртуальной машины.

        Я в полной мере распробовал ценность удаленной VM когда меня заставили работать на такой VM где:

        1. Не было админских прав.

        2. Заблокированы все мыслимые настройки - даже "тёмную" тему Windows нельзя было включить.

        3. Был полностью закрыт доступ в интернет.

        4. Заблокировано копирование по RDP с локального компьютера.

        5. На каждую привычную утилиту или расширение к VS / VS Code (коих у меня стоит больше чем по полдюжине и там и там) надо было писать отдельное заявление с обоснованием для чего оно тебе нужно.

        Проработал там ровно столько (пару недель) сколько мне потребовалось для поиска другой работы. С тех пор на собеседовании всегда едва ли не первым делом интересуюсь можно ли полностью работать на своей технике - я очень тщательно подхожу к настройке рабочего окружения и мне важно чтобы всё это было мне доступно без каких-либо анальных ограничений.

        Сколько ядер и мозгов доступно вам на вашем ноутбуке, и сколько - на ферме.

        К счастью, у меня уже достаточно давно уже нет нужды скитаться с ноутбуком по съемным квартирам, поэтому у меня стационарный ПК. 16 ядер, 128 Gb DDR5, два NVMe по 1 Tb. По нынешним меркам, конечно, так себе, но для работы полностью хватает и всё полностью под моим контролем - могу настроить себе рабочее окружение полностью как мне удобно.


  1. izibrizi2
    09.08.2025 18:57

    Алго секции нужны чтобы по формальным причинам отмести скуфов и откровенных идиотов, чтобы не разбивать им сердце и не нарушать ТК по дискриминации по возрасту.


    1. nickolaym
      09.08.2025 18:57

      Откровенные идиоты - это какая возрастная категория?


      1. Vict777
        09.08.2025 18:57

        Он же написал - скуфы. Что сразу выдает его как шклоло или студента 1-го курса


        1. Vitimbo
          09.08.2025 18:57

          Мы, скуфы, можем открыть резюме и получить работу за 300к в секунду без алгоритмическрй секции. Иногда, без собесов вообще.

          Сопляк завидует :)


    1. kenoma
      09.08.2025 18:57

      Чтобы отмести по возрасту или полу никакие пояснения не нужны, просто "вы нам не подходите" и досвидос.