Практические примеры и полезные ссылки: готовимся к каждому этапу технического собеседования

В прошлом материале нашей серии «Карьера в IT» мы рассказывали, как пройти собеседование на софт-скилы. В этом перейдем к более конкретным и техническим пунктам собеседования — алгоритмическим задачам, платформенной секции и проектированию систем.

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

Практические примеры и полезные ссылки: готовимся к каждому этапу технического собеседования

Алгоритмические задачи

Если вы всю жизнь ходили на олимпиады по программированию, этот пункт можно пропустить — вы и так все знаете. Для остальных эта секция часто становится самой сложной в подготовке.

Вам нужно:

  • Освоить основные структуры данных.
  • Уметь быстро оценить асимптотическую сложность алгоритма.
  • Быстро улавливать тип задачи и переходить от простого решения к сложному.

Для подготовки с нуля можно действовать по следующей схеме:

Еще можно купить фундаментальную книгу по алгоритмам и ее прочитать. Но это вариант не для всех — по YouTube будет быстрее.

На Leetcode можно купить платный тариф и выбирать задачки от конкретной компании, например, Amazon. Это поможет, если собеседуетесь в известную зарубежную фирму. Кстати, у нас в боте много вакансий, в том числе в такие компании, с удаленкой и релокейтом.

Чем больше задач вы прорешаете, тем лучше. Есть даже исследование на эту тему, хотя и старое, но все еще актуальное:

Практические примеры и полезные ссылки: готовимся к каждому этапу технического собеседования

От числа прорешанных алгоритмических задач сильно зависит процент успеха на алгоритмической секции.

Писать лучше всего на том языке, который вы хорошо знаете. Но пусть он будет достаточно популярным — например, лучше выбрать не Kotlin или Scala, а их прародителя Java. Стандартом считается C++, Python, Java и C# — лучше тренировать алгоритмическое собеседование именно на них.

Начинайте обязательно с легких задачек, а потом постепенно набирайте сложность. Причем если опыта нет никакого, не идите сразу на LeetCode и не пытайтесь решать все подряд. Лучше используйте подход «как в университете» — берите какую-то тему, изучайте ее и потом решайте задачи под нее.

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

Платформенная секция

Язык и среда. Нужно знать основные особенности языка, под который вы разрабатываете. Говорить про ООП и ФРП, управлять переменными, работать со структурами данных, потоками и распределенными вычислениями, управлять памятью. И знать тонкости — чем их больше, тем легче на стартапных собеседованиях, где любят спрашивать странные вещи. Например, могут спросить — «есть переменные а и b, мы переменной a присвоили значение b, потом b поменяли — что будет?». Нужно знать, как ответить в зависимости от языка.

Платформа. Фреймворк, на котором мы разрабатываем: Android, Java-машина в целом, все что угодно. Frontend, библиотеки вокруг него, умение работать с UI и расширениями. Фишки последних версий ОС, окружение библиотек — все, что пригодится в работе. Допустим, если вы Android-разработчик, но застряли в старом Android из-за работы с кассовыми терминалами, неплохо заглянуть в новости и послушать подкасты о том, что в новом Android происходит.

Здорово будет знать модные фреймворки и библиотеки. Понимать, как работать с потоками и реактивностью, зависимостями, хранением данных. Как происходит deploy и взаимодействие с БД. Например, у мобильного разработчика могут спросить, в каком случае имеет смысл внедрять Realm NewSQL — базу данных с возможностью кеширования в сеть, а не только на девайс. И вы должны иметь четкий ответ.

Архитектура приложения. Как задизайнить API и продемонстрировать работу той или иной фичи, обеспечить надежность, масштабируемость и тестируемость. Часто просят задизайнить какой-нибудь модуль чата, и обязательно спросят про общение с бэкендом. Или могут дать задачу смоделировать модуль аналитики: нарисовать блоки и показать навыки проектирования.

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

Как лучше готовиться

Проектирование систем

Рядовые разработчики часто с этим вообще не сталкиваются, а на собеседовании такая секция будет. Лучше всего пообщаться с вашим нынешним СТО, техлидом или главным архитектором и расспросить, как устроена ваша система и почему.

Вас попросят задизайнить систему от клиента до сервера, от БД до кнопочки на сайте. Вам нужно понимать, как это все в общем происходит. Если уже знаете — освежите технологии в памяти. Если не знаете — спросите с нуля.

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

Из интересного нужно знать:

Вот еще парочка полезных ссылок по этой секции интервью:

Как облегчить подготовку

Теперь еще несколько простых советов, которые кажутся очевидными, но могут помочь:

  • Найдите единомышленников и учитесь с ними вместе: решайте задачки, обменивайтесь ссылками, общайтесь по теме, делитесь результатами собеседований.
  • Сформируйте план изучения материалов и поставьте самому себе дедлайны — они очень мотивируют. Можно завести трекер прогресса, с ним вы будете наглядно видеть свои достижения.
  • Награждайте себя за старания. Не забывайте, что возможность устроиться на работу мечты — абстрактная мотивация, а мозг хочет чего-то более конкретного.
  • Непосредственно перед собеседованием не нагружайте себя — отдохните, перезагрузитесь и идите туда со свежей головой.
  • Выписывайте вопросы из прошлых интервью и используйте их во время подготовки.
  • Помните, что не все советы работают. Экспериментируйте, и если вам что-то не подходит — не делайте этого.

Полезные ссылки

1717
2 комментария

Комментарий недоступен

5

По Линухам тоже бывают секции, иногда и разработчикам ее дают.
Но там конечный список вопросов типа такого https://github.com/mxssl/sre-interview-prep-guide
плюс кодинг, заточенный на взаимодействии с системой типа какие там системные вызовы использовать и какие у них параметры.
Вообще лучше почитать Таненбаума или Understanding Linux kernel.

А, и сетка еще, тут цикл Сети для самых маленьких или книжки ccna помогут.

1