Как подготовиться к собеседованию, чтобы получить желаемую должность: советы от backend-разработчикa

Всемирная паутина уже давно оплела планету: почти у каждого предприятия есть свой сайт, поэтому спрос на веб-программистов очень высок. В проектах с высокими нагрузками на сервер (примерно от десяти тысяч запросов в секунду) для разработки backend’a — внутренней части ресурса, отвечающей за логику и функционирование сайта, скрытой от пользователя — применяются наиболее быстрые языки, например, С и С++, способные выдержать нагрузку. Денис Исаев — руководитель группы С/С++ backend-разработки в проекте «Почта» в Mail.Ru Group —  рассказал, чего он ждет от кандидатов, устраивающихся на работу.

Денис Исаев, руководитель группы С/С++ backend-разработки в проекте «Почта» в Mail.Ru Group

Базовое понимание алгоритмов и структур данных

Без понимания основ работать будет очень сложно. Чтобы начать, хватит того, что рассказывают в университете и в профильных классах школы: хеш-таблицы, деревья, рекурсия, сложность алгоритмов, концепции объектно-ориентированного программирования. Если кандидат не знает конкретную структуру или алгоритм, у него есть возможность вывести их самостоятельно с помощью подсказок, главное — понимать основные принципы. Наиболее известные алгоритмы и структуры данных хорошо разобраны в этой серии статей.

Базовые знания языка программирования

Не стоит приходить на собеседование без базового знания требуемого языка программирования. Если у вас нет опыта написания кода на нем, стоит сначала его получить, например, на различных open source проектах, как описано, например, здесь. Если опыт уже имеется, все равно стоит освежить свои знания перед собеседованием, прочитав учебник по языку. На собеседованиях нет времени на сложные тесты, поэтому задания на них обычно простые, например, переворот строки или поиск ошибок при работе с несколькими видами памяти. Если есть подозрения на нехватку знаний языка у кандидата, ему дается дополнительное более сложное задание на дом.

Умение искать информацию

Часто для работы приходится искать информацию в интернете, поэтому умение быстро ее находить и фильтровать оказывается полезным. Соискателю предлагается определить, почему неправильно работает кусок кода, содержащий малоизвестную функцию, и разрешается пользоваться интернетом. Если вы часто пытались разобраться со своей программой, обращаясь ко всемирной сети, с решением такой задачи не возникнет трудностей. Стоит отметить, что искать информацию лучше на английском языке, поиск на русском считается дурным тоном, и вероятность успеха на собеседовании резко снижается. Для работы обязательно нужно уметь свободно читать технические тексты на английском языке. Вообще, в целом на вопрос о важности английского языка в работе программиста дали интересные ответы несколько экспертов.

Понимание принципов работы веба

Часто складывается ситуация, когда кандидат произносит умные слова, совершенно не понимая, о чем идет речь. Такой подход совершенно не годится, ведь зазубривание лекций никак не поможет в реальной работе. Проверить, насколько вы ориентируетесь в веб-технологиях, достаточно просто: подумайте, что происходит после того, как вы нажимаете на ввод, чтобы перейти на новую страницу в браузере. Если вы вспоминаете про детали работы браузера, стек протоколов TCP/IP, доменные имена и DNS-сервера, тройное рукопожатие, HTTP, операционные системы, драйверы и прерывания, скорее всего, все в порядке. Но если вы можете сказать только, что открывается новый сайт, вам стоит изучить эту тему глубже.

Умение решать сложные технические задачи

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

Умение решать бизнес-задачи

Простые бизнес-задачи не столько необходимы для работы, сколько помогают понять ваш образ мышления. У таких задач нет однозначного ответа, но если вы можете предложить правдоподобную оценку и приблизить ее к реальности — это хорошо. Попробуйте прикинуть, сколько iPhone может влезть в одну «Газель» (или традиционное: сколько мячей для гольфа поместится в школьный автобус), сколько парикмахерских в вашем районе и каков приблизительный объем помещений московского метрополитена. А сможете вычислить без калькулятора, сколько будет 2 в 64 степени?

Проверка качества кода

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

Личные качества

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


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