В прошлом материале нашей серии «Карьера в IT» мы рассказывали, как пройти собеседование на софт-скилы. В этом перейдем к более конкретным и техническим пунктам собеседования — алгоритмическим задачам, платформенной секции и проектированию систем. Расскажем об этих секциях в общем, не сосредотачиваясь на одной технологии, дадим полезные практические советы и ссылки, которые помогут в подготовке. Если вы всю жизнь ходили на олимпиады по программированию, этот пункт можно пропустить — вы и так все знаете. Для остальных эта секция часто становится самой сложной в подготовке. Вам нужно: Освоить основные структуры данных. Уметь быстро оценить асимптотическую сложность алгоритма. Быстро улавливать тип задачи и переходить от простого решения к сложному. Для подготовки с нуля можно действовать по следующей схеме: Посмотреть на ютубе видео HackerRank `Cracking the Coding Interview` Series или Tushar Roy. Решать задачи на LeetCode. Разбирать решенные задачи на GeeksforGeeks. Еще можно купить фундаментальную книгу по алгоритмам и ее прочитать. Но это вариант не для всех — по 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, качество, покрытие, тестируемая архитектура. Карандаш, как на собеседовании для тестировщика, вам тестировать не дадут, но будут ждать, что вы умеете писать юнит- и интеграционные тесты, и знаете, какие фреймворки применимы для вашего языка. Полезно будет разобраться с пирамидой тестирования, но тут есть нюансы — у каждой компании она своя, границы между разными видами тестов провести бывает сложно. Перечитывать официальную документацию по платформам, фреймворкам и прочему. Читать статьи и GitHub по вашей теме. Например, вот большая подборка материалов на GitHub с вопросами по Android. Подписаться на Medium, можно поглядывать на Habr. Посмотреть публичные собеседования в компании, чтобы узнать, как это вообще происходит и чего ждать. Рядовые разработчики часто с этим вообще не сталкиваются, а на собеседовании такая секция будет. Лучше всего пообщаться с вашим нынешним СТО, техлидом или главным архитектором и расспросить, как устроена ваша система и почему. Вас попросят задизайнить систему от клиента до сервера, от БД до кнопочки на сайте. Вам нужно понимать, как это все в общем происходит. Если уже знаете — освежите технологии в памяти. Если не знаете — спросите с нуля. Помните, что закапываться в детали здесь не нужно. Важно рассказать подробно про вашу область знаний и продемонстрировать общее понимание принципов вокруг. Из интересного нужно знать: Как построить масштабируемую архитектуру мобильного приложения. Как организовать взаимодействие между клиентом и сервером для высоконагруженных систем. Как работают модные трюки вроде Server-Driven UI, если мы говорим про клиент, как сделать так, чтобы все рендерилось на сервере и деплоилось в одно мгновение. Как, если вы мобильный разработчик, организовать Serverless-архитектуру. Как минимизировать бизнес-логику на клиенте и вынести ее в кроссплатформенное решение. Вот еще парочка полезных ссылок по этой секции интервью: Плейлист про собеседования по проектированию систем. Примеры на GitHub. Статья на Medium о системном дизайне на мобильные платформы. Теперь еще несколько простых советов, которые кажутся очевидными, но могут помочь: Найдите единомышленников и учитесь с ними вместе: решайте задачки, обменивайтесь ссылками, общайтесь по теме, делитесь результатами собеседований. Сформируйте план изучения материалов и поставьте самому себе дедлайны — они очень мотивируют. Можно завести трекер прогресса, с ним вы будете наглядно видеть свои достижения. Награждайте себя за старания. Не забывайте, что возможность устроиться на работу мечты — абстрактная мотивация, а мозг хочет чего-то более конкретного. Непосредственно перед собеседованием не нагружайте себя — отдохните, перезагрузитесь и идите туда со свежей головой. Выписывайте вопросы из прошлых интервью и используйте их во время подготовки. Помните, что не все советы работают. Экспериментируйте, и если вам что-то не подходит — не делайте этого. Бот getmatch с вакансиями для практики ваших навыков в прохождении интервью Большая подборка статей о разных этапах интервью Инструкция по подготовке к работе в Google Гугл-документ с заметками об интервью в FAANG Пост на Хабре о подготовке к собеседованию в IT-гиганты