Search
Write a publication
Pull to refresh

Побеждаем алгоритмическую секцию

Level of difficultyMedium
Reading time3 min
Views3.9K

Всем привет!
Я Алёна, 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
Only registered users can participate in poll. Log in, please.
Алгоритмическая секция — это сложно?
54%Да27
18%Нет9
28%Есть нюансы14
50 users voted. 12 users abstained.
Tags:
Hubs:
-13
Comments14

Articles