Приветствую вас, коллеги-разработчики!
За свою карьеру я провел более 100 собеседований с разработчиками всех уровней, от младших разработчиков до опытных ветеранов. И знаешь, что? За это время я составил набор из 10 каверзных вопросов, которые задаю каждому новому кандидату.
Почему? Ну, все просто: эти вопросы позволяют мне выйти за рамки простой оценки чьих-то технических навыков. Они углубляются в свой мыслительный процесс, подход к решению проблем, способности работать в команде и другие важные качества.
Готовы ли вы к этой интеллектуальной битве? Тогда приготовьтесь, ведь эти вопросы не для слабонервных!
Предположим, вы реализуете систему редактирования журнала, где редакторы могут редактировать статьи в панели администратора. Как бы вы не позволили двум редакторам одновременно редактировать одну и ту же статью и перезаписывать изменения друг друга?
Каковы принципы развертывания с нулевым временем простоя — подхода, при котором приложение развертывается без простоя службы? Как это достигается?
Назовите аспекты предпочитаемой вами структуры, которые вам не нравятся или которые не работают так, как вам хотелось бы. Объясните, как и где возникают эти проблемы и как их можно улучшить.
4. Обработка длительных заданий Cron
Что может случиться, если ваше задание cron, которое выполняется каждую минуту, начнет выполняться более одной минуты? Как это можно предотвратить?
5. Денормализация данных в базах данных
Сталкивались ли вы когда-нибудь с необходимостью денормализовать данные в базе данных? Если да, то какую проблему вы пытались решить, с какими трудностями столкнулись и как можно было бы сделать это лучше?
6. Имитация внешних вызовов в тестах
Если вы пишете тесты, как обойти проблему внешних вызовов, выполняемых тестируемым кодом? Рассмотрим сценарий, в котором внешние вызовы запрещены в CI (непрерывной интеграции). Почему это хорошая практика?
7. Синхронизация изменений электронной почты с внешними системами
Предположим, ваша система реализует функцию изменения электронной почты. Однако электронная почта также хранится во внешней системе, например в платежной системе, которая отправляет электронные письма пользователям (но пользователи не взаимодействуют с ней напрямую). Как бы вы реализовали синхронизацию электронной почты с внешней системой?
Как узнать об ошибках, возникающих на производстве? Полагаетесь ли вы на отчеты пользователей или используете автоматизированные механизмы?
Как бы вы разработали простое приложение для чата? Вы можете спросить бэкэнд-инженера о бэкенд-части, а у фронтенд-инженера — о фронтенд-части. В этом разговоре может быть много ответвлений.
10. Изолирующие тесты в многопользовательской среде
Как обеспечивается изоляция тестов, когда несколько тестов выполняются одновременно и обращаются к базе данных, потенциально изменяя ее? Если ваша платформа не обеспечивает изоляцию, как бы вы ее реализовали или улучшили?
Дополнительные советы:
Поощряйте кандидата подробно изложить свой мыслительный процесс и аргументацию своих ответов.
Оцените их навыки решения проблем, способность критически мыслить и знание соответствующих технологий.
Оцените их навыки общения и сотрудничества на протяжении всего собеседования.