Расскажу немного о себе
Я являюсь действующим PHP middle разработчиком в одной средней компании. Занимаемся разработкой highload микросервисов в B2B сфере. Клиентами являются крупные интернет-магазины, в 5 странах (РФ в их числе), которые на слуху у каждого. Суммарно обрабатываем около 50к запросов в секунду, храним миллиарды записей и отвечаем за качество и жизнеспособность около тысячи интернет-магазинов. В команде я являюсь единственным PHP разработчиком. При том, что все ключевые сервисы написаны на PHP, с итальянскими нотками (наш любимый аля‑спагетти код).
Имею опыт в техническом собеседовании, в том числе и других middle php разработчиков. За свою карьеру провёл пару десятков таких собеседований, по результатам которых было нанято около 5 разработчиков и 2 аутсорс компании. (это происходило на предыдущей работе)
Почему ВК?
Текущая работа меня по большей части устраивает. Но на HH и хабр карьере держу резюме в статусе «рассмотрю предложения». В основном, чтобы мониторить актуальное положение на рынке.
HR из вконтакте меня нашли самостоятельно и сами со мной связались. На выбор было предложено 3 вакансии с рассмотрением middle php программиста. Однако, выбор на текущем этапе делать было не обязательно, так как технические интервью проводятся общими для всех.
Также, мне сразу же сообщили, что первичный этап «собеседование с HR» мы можем пропустить, так как они связались со мной сами. Далее, предполагается техническое интервью, с обзором теоретических знаний и лайвкодингом. (Сколько в последствии может быть таких этапов, не уточнялось)
Организация
К организации процесса найма у меня вопросов практически нет. Здесь всё правда было хорошо. В течении суток была согласована дата и время проведения технического интервью, были отправлены соответствующие ссылки. Интервьюеры подключились во время. Со стороны HR было напутствие по формату собеседования и укрупнённым темам, к которым можно подготовиться.
Несмотря на обещанный фидбек в течении 2-3 дней, пришлось напоминать HR об этом самостоятельно через неделю. Но с моей точки зрения - это вполне себе простительно.
Моя подготовка
Особо много времени уделено подготовке не было. Освежил в памяти самые известные паттерны разработки, быстро пробежался по основным угрозам безопасности. На практике, отражение атак достигается обычным здравым смыслом.
Как это вижу я
-
SQL инъекции - просто не нужно класть сырой ввод пользователя в SQL запрос. Валидацию никто не отменял. Добавить туда prepared statements и инъекции не страшны
-
DDoS атаки - проводить нагрузочное тестирование продукта. Рассчитывать 5x-10x увеличение запросов от текущих средний показателей RPM. НЕ ДЕЛАТЬ ЗАПРОСЫ К БД В ЦИКЛЕ!
-
XSS атаки - снова валидация пользовательского ввода, html escape
Ну и совсем очевидное - хеширование паролей, надёжное хранение секретных ключей, разграничение прав и доступа к БД.
Больше всего подготовки уделил изучению особенностей KPHP - PHP диалекта, на котором ведётся основная разработка в ВК. Изучал принципы его работы, компиляцию в C++, и связанные с этим особенности.
Техническое интервью
Здесь меня сбили с толку буквально с самого начала. Интервью началось с вопроса о том, на основе какого ЯП мне удобнее всего будет проводить интервью (мы же вроде на PHP разработчика подавались, нет?).
Подтвердив, что я действительно хочу проводить интервью на основе PHP, я слышу первый вопрос: что такое указатели? Немая сцена, занавес.
Здесь я судорожно пытаюсь вспомнить свои эксперименты с C++ в университете, и то как указатели связаны с памятью. Указываю интервьюеру, что указателей в PHP не завезли, рассказываю про ссылки и принципы работы с ними. Этот ответ интервьюера судя по всему не удовлетворил.
Следующим этапом стала игра "угадай значение термина". Вопрос: что такое "О-нотация". Я отвечаю, что не знаю, прошу подсказать о чём вообще идёт речь. В итоге оказывается, что это про сложность алгоритмов, на что я полно и развёрнуто отвечаю, вспоминая даже сколько байт весит каждый тип переменной и про сложность лучших и худших случаев пузырька.
Сильно выбесил такой формат. Я мог десятки раз работать или реализовывать тот, или иной подход, но я просто не знаю тот вариант терминологии, который задаёт интервьюер. Собеседование начинает скатываться в викторину, причём подсказки даются не всегда.
Следующую часть я назову "вопросы стажёру". Можете закидать меня тапками, но нет, я не помню, чем бинарный поиск отличается от линейного, не помню по какому принципу там эти деревья строятся, я не помню как работает хеш-таблица, и что такое очередь с приоритетом. Нет, мне ни разу не пригодились эти знания за суммарные 4 года решения задач для бизнеса и 2 года работы мидлом.
На этапе вопросов с БД, всё было очевидно и хорошо. В этой теме у меня нет никаких препятствий, могу рассказать и про типы индексов с их use-case, и про уровни изоляции транзакций с разницей между ними, и про оптимизацию производительности, с партицированием, шардированием, репликацией, и про прикладное использование подхода CQRS. Рассказал также про аналитические СУБД, особенности работы с Clickhouse, работу с движком поиска Elasticsearch, кеши редиса. Все эти темы были выстраданы практическим опытом и прикладными решениями, помогающими бизнесу работать и быть эффективным.
В заключение теоретической части были вопросы про работы сетей и безопасность. Снова срезался на терминологии. Я - тот кто настраивал на сервере ssl шифрование через certbot-а, устанавливал локальную сеть на основе DHCP сервера с распределением IP, писал bash скрипты и линуксовых демонов, не знал что ответить на вопрос: что такое DNS?
Завершилось техническое интервью 10 минутной сессией лайвкодинга, в виде скопированной алгоритмической задачи из leetcode, и оптимизацией решения. К этому у меня особо претензий пожалуй нет, если смотреть на лайвкодинг со стороны проверки софтскиллов, на взаимодействие с интервьюером и показом принципом
Чего на интервью не было?
Совершенно не было вопросов про их диалект KPHP. Здесь были вопросы интервьюеру с моей стороны, про то, как он взаимодействует с последними версиями PHP и режимом use-strict, а также пару вопросов про подкапотное преобразование в C++.
Что больше всего удивило - полное отсутствие вопросов про паттерны разработки, про архитектурные подходы и методологии проектирования. Не было вопросов про оптимизацию и решения около-бизнесовых кейсов. Не было вопросов про системы контроля версий. Не было упоминания методологий процесса разработки и стратегического планирования развития продукта. Даже unix системы не упомянули.
Как собеседовал я?
Как уже упоминал в начале текущей статьи, мне также доводилось проводить собеседования на позицию middle php разработчиков.
Мне искренне непонятен смысл «прогона» по теории и формат викторины. Моё собеседование выглядело как разбор около‑бизнесового кейса. Давалась проблема, разработчику предлагалось предоставить пути для её решения. В процессе интервью между нами шёл диалог, в результате которого можно было как уходить «вбок», углубляясь в прикладные знания того, или иного обсуждаемого аспекта, так и узнавать напрямую потенциальные решения, а главное пути, по которым разработчик планирует их достигать. В процессе такого диалога, мне хватало получаса, чтобы узнать:
-
Какие у человека софт‑скиллы? Может ли он обсуждать решение задачи, способен ли на кооперацию, готов ли отстаивать собственное мнение?
-
Сработаемся ли мы с человеком по характеру, как он себя ведёт в ситуациях, когда ему необходимо найти решение?
-
Понимает ли человек что‑то в обсуждаемом вопросе? Или его готовили к «викторинам» на курсе «войти в айти».
-
Был ли у разработчика реальный опыт работы, и понимает ли он как решать прикладные задачи, которые (сюрприз!) ему предстоит решать у нас, в случае успешного трудоустройства.
За полчаса, не тратя ни своё время, ни время кандидата, я с уверенностью мог дать ответ: Да, или Нет. И по моему скромному мнению — это должно быть единственной целью хорошего интервью. Единственного технического интервью.
Что в итоге?
В итоге, через неделю, по запросу фидбека, мне пришёл ответ, что со мной было приятно общаться, но ищут кандидата с более углублёнными знаниями (знаниями чего?).
Резюмируя: на собеседовании на позицию middle php разработчика, в VK ищут не middle, не PHP, и даже не уверен, что разработчика.
Вопрос к VK — а вам точно оно надо?
Автор: Davidaa_WoW