Перейти к основному содержимому

Вопросы на собеседовании

Вопросы на собеседовании PHP-разработчика

25 вопросов на собеседовании PHP-разработчика: PHP 8 и типизация, Composer, Laravel и Symfony, SQL и ORM, OPcache, legacy-миграции, кейсы.

Мои ответы на эти вопросы — за 30 секунд

Без резюме: опыт и последнее место работы. 25 вопросов в ваших словах, первые три — бесплатно.

Типовые вопросы и подсказки к ответам

Откройте подсказку под вопросом — и тут же проговорите ответ: разбор ИИ придёт в мини-собеседовании.

HR-вопрос

Вопрос 1Для всех уровней

Почему вы выбрали разработку на PHP и чем вас привлекла именно наша компания?

Как отвечать ▾

Как отвечать: Свяжите ответ с реальным опытом, экосистемой языка и конкретикой о компании: продукт, стек, фреймворк, масштаб нагрузки.

Пример сильного ответа

Путь в разработку начался с простого сайта на заказ, и PHP оказался языком, на котором получилось быстро получить работающий результат — с тех пор интерес только растёт. Нравится, что язык живой: readonly-свойства, enum, атрибуты появляются регулярно, а Composer и фреймворки закрывают почти любую задачу. Последние полтора года в команде из пяти человек основной проект — сервис с посещаемостью около двухсот тысяч пользователей в месяц и откликом API порядка ста пятидесяти миллисекунд. Ваша компания привлекает тем, что в описании вакансии видно внимание к качеству кода, тестам и код-ревью: именно в такой среде работаю продуктивнее всего.

  • Живая мотивация вместо шаблонного «нравится программировать»
  • Есть конкретные метрики проекта и команды
  • Переход к компании связан с её ценностями, а не с зарплатой

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Бесплатно, без регистрации

Мини-собеседование: PHP-разработчик

Прочитать вопросы мало — на интервью придётся говорить. Ответьте на один вопрос своими словами, 2–3 предложений хватит, и ИИ разберёт ответ по четырём критериям: структура, конкретика, релевантность, убедительность.

123
HR-вопросДля всех уровней

Почему вы выбрали разработку на PHP и чем вас привлекла именно наша компания?

2–3 предложения достаточно · ещё 20 симв.

Технический вопрос

Вопрос 1Для всех уровней

Что такое readonly-свойства и readonly-классы в PHP 8 и когда их стоит использовать?

Как отвечать ▾

Как отвечать: Объясните неизменяемость после инициализации, применение для DTO и value-объектов, приведите пример из своего кода.

Пример сильного ответа

readonly-свойство можно присвоить только один раз — при объявлении или в конструкторе, дальше любая запись вызывает ошибку. Это удобно для value-объектов: DTO, денежные суммы, идентификаторы, конфиги, где важна неизменяемость и предсказуемость. readonly-класс помечает так все свойства сразу и убирает повторяющийся код. В проекте с интеграцией платежей перевод DTO на readonly-классы убрал целый класс ошибок с неявной мутацией: инцидентов, связанных с изменением объекта после валидации, стало примерно вдвое меньше. Ограничение ровно одно — после инициализации объект не меняется, поэтому там, где нужны постепенное наполнение и сеттеры, использую обычные классы.

  • Сначала суть механики, потом практика применения
  • Приведён измеримый результат из собственного опыта
  • Честно названо ограничение подхода

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Для всех уровней

Что даёт declare(strict_types=1) и как вы относитесь к строгой типизации в PHP?

Как отвечать ▾

Как отвечать: Расскажите про строгую проверку скалярных типов, union- и nullable-типы и почему включаете strict_types в новых файлах.

Пример сильного ответа

Директива включает строгий режим проверки типов для аргументов и возвращаемых значений в этом файле: вместо неявного приведения PHP выбрасывает TypeError. Это ловит ошибку в момент вызова, а не через несколько слоёв логики, и строка или число больше не превращаются молча во что-то неожиданное. В команде из пяти разработчиков строгий режим — стандарт с первого дня: файл без него просто не проходит код-ревью. После включения в основном сервисе доля багов, доходящих до тестировщиков, снизилась примерно на четверть, а отладка ускорилась, потому что стек указывает на конкретное место. Компромисс — иногда приходится приводить типы явно, но от этого код только понятнее.

  • Объяснена механика, а не только польза
  • Показан командный стандарт и его эффект в цифрах
  • Назван компромисс — ответ звучит взвешенно

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 3Middle

Чем enum в PHP 8.1 отличается от класса с константами?

Как отвечать ▾

Как отвечать: Упомяните типобезопасность, backed enum, методы перечислений и невозможность передать произвольное значение.

Пример сильного ответа

Класс с константами — это просто именованные значения: он не мешает подставить произвольную строку, не даёт перебрать все варианты и не несёт поведения. Enum задаёт закрытое множество значений, и тип в сигнатуре гарантирует, что придёт один из вариантов, а не что угодно. Экземпляры единственны в своём роде, их удобно сравнивать напрямую, использовать в match без ветки по умолчанию и в readonly-свойствах. Enum умеет методы и интерфейсы, а backed enum хранит значение для базы. В проекте перевод статусов заказа с констант на enum убрал ручные проверки валидности и сократил объём кода обработчиков примерно на треть.

  • Сравнение построено по конкретным критериям
  • Упомянуты match, интерфейсы и хранение в базе
  • Есть результат: меньше кода и проверок

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 4Для всех уровней

Как устроен Composer: что такое composer.lock, PSR-4-автозагрузка и почему vendor не коммитят?

Как отвечать ▾

Как отвечать: Объясните фиксацию версий в lock-файле, сопоставление неймспейсов каталогам и установку зависимостей через composer install.

Пример сильного ответа

Composer — менеджер зависимостей: он читает composer.json, подбирает версии с учётом требований всех пакетов и складывает код в vendor. composer.lock фиксирует точный набор версий, поэтому у всех участников и на сервере получается одинаковый результат: в CI и на деплое запускаю install по lock-файлу, а update — только осознанно и с проверкой тестами. Автозагрузка PSR-4 сопоставляет пространство имён с каталогом, и Composer генерирует карту классов, так что require вручную не нужен. Папку vendor не коммитят: это результат установки, она раздувает репозиторий и провоцирует конфликты. В текущем проекте около сорока зависимостей, и такой порядок экономит часы на каждом релизе.

  • Ответ идёт от общего механизма к деталям
  • Показано различие install и update на практике
  • Объяснено, почему lock-файл важнее папки vendor

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 5Junior

Какие нововведения PHP 8 вы используете чаще всего на практике?

Как отвечать ▾

Как отвечать: Назовите match, nullsafe-оператор, promotion свойств в конструкторе, атрибуты и покажите, где они упрощают код.

Пример сильного ответа

Чаще всего применяю constructor property promotion, readonly-свойства и enum — они убирают шаблонный код в DTO и доменных моделях. Named arguments помогают делать вызовы читаемыми, когда у метода много необязательных параметров. Nullsafe-оператор и match заметно сокращают проверки на null. В одном проекте после перехода на эти возможности объём служебного кода в слое DTO сократился примерно на треть, а число замечаний по типам на ревью заметно упало. Новые версии внедряю постепенно: сначала статические анализаторы и тесты, потом рефакторинг небольшими порциями, чтобы не ломать релизы и не смешивать обновление языка с изменением логики.

  • Показана практика, а не перечисление фич
  • Есть измеримый результат перехода
  • Видно осторожное отношение к внедрению

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 6Middle

Чем выражение match отличается от switch и когда вы предпочитаете match?

Как отвечать ▾

Как отвечать: Сравните строгое сравнение без приведения типов, возврат значения, отсутствие break и ошибку при необработанном случае.

Пример сильного ответа

match — это выражение, оно возвращает значение, сравнивает строго и не проваливается в следующую ветку. Если ни одна ветка не подошла, выбрасывается ошибка, поэтому забытый случай виден сразу, а не превращается в тихий баг. switch удобнее там, где нужны побочные эффекты и сложные условия с break. match предпочитаю для маппинга enum в текст, статусов, кодов ответа и любых преобразований «значение — результат». В одном сервисе перевод статусов на match убрал десяток лишних break, сделал функцию заметно короче, а тесты перебора сразу показали варианты, которые раньше просто не обрабатывались.

  • Точное сравнение по существу, а не по синтаксису
  • Назван рабочий кейс со статусами
  • Сказано, когда switch уместнее

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 7Для всех уровней

С каким фреймворком вы работали больше — Laravel или Symfony — и в чём ключевые различия их подхода?

Как отвечать ▾

Как отвечать: Опишите свой реальный опыт: скорость разработки и «магию» Laravel против строгости и компонентной архитектуры Symfony.

Пример сильного ответа

Больше опыта у меня с Laravel, но проекты на Symfony тоже были, поэтому сравниваю осознанно. Laravel — про скорость разработки: готовые решения из коробки, Eloquent, фасады, единый стиль, поэтому MVP собирается быстро. Symfony — про конфигурируемость и строгую архитектуру: явные сервисы, контейнер зависимостей, компонентность, легко подключить только нужное. Для небольшой команды и продукта с частыми релизами чаще выбираю Laravel. Там, где важны долгоживущая кодовая база, гибкость и много интеграций, сильнее выглядит Symfony. Опыт обоих фреймворков помогает переносить практики: строгие сервисы в Laravel, а скорость и удобство — в Symfony.

  • Честный ответ про оба фреймворка, без спора
  • Есть критерии выбора под задачу
  • Показана зрелость взгляда на стек

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 8Middle

Что такое проблема N+1 в ORM и как вы её находите и устраняете?

Как отвечать ▾

Как отвечать: Объясните ленивую загрузку связей, eager loading (with/preload), и как отслеживаете запросы через Debugbar или лог запросов.

Пример сильного ответа

N+1 — это когда на список из N сущностей ORM делает один запрос за списком и ещё N запросов за связанными данными. Нахожу через лог запросов и профайлер: смотрю число однотипных SQL на одну страницу и сверяю с количеством элементов в ответе. Дальше жадная загрузка связей, выборка только нужных колонок, иногда join или агрегат вместо обхода в цикле. На одном каталоге страница отдавала около девятисот запросов и отвечала примерно две секунды; после жадной загрузки осталось порядка двенадцати запросов и около двухсот миллисекунд. Такие места закрываю тестами на количество запросов.

  • Дано чёткое определение проблемы
  • Названы инструменты поиска и приёмы лечения
  • Есть цифры до и после оптимизации

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 9Middle

Как вы организуете миграции базы данных и меняете схему без простоя продакшена?

Как отвечать ▾

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

Пример сильного ответа

Миграции держу в репозитории: они версионируются вместе с кодом и прогоняются в том же пайплайне, что и деплой. Схему меняю по принципу «расширение — сжатие»: сначала добавляю новую колонку или таблицу как необязательную, потом постепенно, батчами заполняю данные, затем код начинает писать в оба места, читать из нового, и только после этого старые объекты удаляются. Тяжёлые изменения применяю через инструменты онлайн-миграции, чтобы не блокировать таблицу. На таблице в десятки миллионов строк такой подход позволил обновлять схему без остановки сервиса: пользователи не заметили ни одного перерыва в работе.

  • Описан безопасный паттерн расширение-сжатие
  • Учтены объём данных и блокировки
  • Результат — обновление без простоя

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 10Middle

Когда вы используете транзакции и какие уровни изоляции знаете?

Как отвечать ▾

Как отвечать: Приведите пример многошаговой операции, назовите READ COMMITTED и REPEATABLE READ, упомяните блокировки и дедлоки.

Пример сильного ответа

Транзакция для меня — инструмент там, где несколько записей должны измениться как единое целое: списание баланса, создание заказа с позициями, перенос данных. Мне приходилось вести проект, где на оплатах проскакивали двойные списания: после того как связка записей оказалась в одной транзакции и добавилась блокировка строки, число обращений в поддержку упало с нескольких десятков в месяц до нуля. Уровни знаю: read uncommitted, read committed, repeatable read, serializable — выбираю по задаче: для массовых отчётов достаточно мягкого, для денежных операций строже. Правила держу простыми: транзакция короткая, без внешних вызовов внутри, дедлоки ловлю и повторяю операцию.

  • Показан конкретный эффект: двойные списания ушли
  • Перечислены все четыре уровня изоляции
  • Правила коротких транзакций и обработки дедлоков

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 11Middle

Как вы ищете и ускоряете медленные SQL-запросы?

Как отвечать ▾

Как отвечать: Опишите slow query log, EXPLAIN, покрывающие и составные индексы и пример запроса, который вы реально ускорили.

Пример сильного ответа

Начинаю с фактов: включаю медленный лог базы, снимаю реальные планы через EXPLAIN, ищу полный перебор строк и временные таблицы. Чаще всего помогает составной индекс в правильном порядке, отказ от SELECT * и от вычислений над индексируемым полем; отдельно проверяю N+1 на стороне приложения. На одном проекте список заказов открывался около четырёх секунд: после составного индекса и ухода от N+1 уложились в двести миллисекунд. Большие выборки перевожу на постраничный вывод по ключу, тяжёлые агрегаты — в кэш. После каждого изменения сравниваю план и время до и после.

  • Виден системный порядок: лог, план, индекс, проверка
  • Есть измеримый результат до и после
  • Упомянуты N+1 и постраничный вывод

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 12Senior

Как вы строите обработку задач в очередях: повторные попытки, идемпотентность, задержки?

Как отвечать ▾

Как отвечать: Расскажите про Laravel Queue или RabbitMQ, уникальные ключи операций, retry с backoff и обработку poison-сообщений.

Пример сильного ответа

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

  • Идемпотентность, ретраи и задержки разобраны по отдельности — видно систему
  • Есть свои цифры: 40 тысяч задач в сутки и минус 70% ручных разборов
  • Речь практика: ключ, лимит попыток, отложенные сообщения, разбор ошибок

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 13Middle

Как работает OPcache и какие настройки важны для продакшена?

Как отвечать ▾

Как отвечать: Объясните кэширование байт-кода, memory_consumption и max_accelerated_files, preloading и сброс кэша при деплое.

Пример сильного ответа

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

  • Объяснён механизм кэша байт-кода простыми словами
  • Есть продакшен-акценты: сброс при деплое, память
  • Приведена метрика доли попаданий

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 14Middle

Чем вы профилируете PHP-приложение и какие метрики смотрите в первую очередь?

Как отвечать ▾

Как отвечать: Назовите Blackfire, Xdebug-профайлер или Tideways, смотрите время CPU, ожидание БД, потребление памяти и медленные вызовы.

Пример сильного ответа

Сначала цифры, потом оптимизация. Локально и на тестовой среде профилирую Xdebug или xhprof, в продакшене держу сбор метрик и лог медленных запросов. Первым делом смотрю p95 и p99 времени ответа, долю ошибок, пиковое потребление памяти, число запросов к базе на один запрос приложения и загрузку процессора. На одном проекте p95 держался около восьмисот миллисекунд: профиль показал тяжёлый сериализатор и лишние обращения к базе, после правок уложились в двести пятьдесят. Профилировщик включаю точечно и на выборке трафика, чтобы не ронять производительность на бою.

  • Сначала метрики, потом оптимизация — зрелый подход
  • Названы p95, p99 и число запросов к базе
  • Есть результат с измеримым улучшением

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 15Senior

Как вы подходите к миграции legacy-кода: что делаете в первую очередь?

Как отвечать ▾

Как отвечать: Упомяните покрытие критичных сценариев тестами как страховку, рефакторинг маленькими шагами и подход Strangler Fig.

Пример сильного ответа

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

  • Сразу видно приоритет: сначала анализ боли, потом рефакторинг
  • Тесты как страховка — сигнал инженерной зрелости
  • Конкретные цифры результата вместо общих слов

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 16Middle

Как вы используете Redis в проектах и решаете вопрос инвалидации кэша?

Как отвечать ▾

Как отвечать: Приведите примеры: кэш данных, сессии, блокировки, тегирование кэша, TTL и сброс по событиям изменения данных.

Пример сильного ответа

Redis использую для кэша горячих выборок, счётчиков, очередей и блокировок. Ключи строю по понятной схеме с префиксом и версией, чтобы их можно было группировать и находить. По инвалидации придерживаюсь правила: либо у ключа есть TTL и данные не критичны к задержке, либо запись идёт через явное удаление связанных ключей при изменении сущности. От «сбросить всё» стараюсь уходить — это скрывает ошибки. Плюс добавляю разброс по TTL, чтобы не было лавины. В одном проекте такой подход снизил нагрузку на базу примерно на 60 процентов и убрал жалобы на устаревшие данные.

  • Показано понимание схемы ключей и роли TTL
  • Есть trade-off между простотой и точечной инвалидацией
  • Число про нагрузку на базу делает ответ предметным

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 17Senior

Какие типовые уязвимости в PHP-приложениях вы знаете и как от них защищаетесь?

Как отвечать ▾

Как отвечать: Назовите SQL-инъекции и подготовленные выражения, XSS и экранирование, CSRF-токены, password_hash для паролей.

Пример сильного ответа

Чаще всего в PHP-приложениях встречаю инъекции, XSS, CSRF, подмену идентификаторов объектов, небезопасную десериализацию и проблемы с загрузкой файлов. Защита у меня выстроена по слоям: доступ к базе только через подготовленные выражения, вывод экранируется в шаблоне, права проверяются на сервере для каждой сущности, а не в интерфейсе. Для форм — токены и проверка источника запроса, для загрузок — белый список расширений и хранение вне корня сайта. Дополнительно прогоняю зависимости через анализатор известных уязвимостей. В одном проекте такой разбор дал 14 проблемных мест, и все они закрыты до релиза.

  • Перечислены реальные классы уязвимостей, а не общие слова
  • Ответ про защиту по слоям, а не про один приём
  • Есть измеримый итог: найденные и закрытые места

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Эти вопросы задают всем. По вашему резюме спросят другое. Перерывы, переходы, цифры — покажем 5 вопросов, которые зададут именно вам.

Вопросы по моему резюме

Кейс

Вопрос 1Middle

Кейс: endpoint списка заказов отвечает 4 секунды. Как будете искать причину?

Как отвечать ▾

Как отвечать: Покажите последовательность: замеры, профилирование, анализ запросов и N+1, индексы, кэширование — и как проверите результат.

Пример сильного ответа

Начинаю с измерений, а не с догадок: смотрю время ответа на сервере и распределение, сколько запросов реально укладывается в норматив. Дальше профилировщик и лог медленных запросов: разбираю, что съедает время — база, внешние вызовы или самостоятельно PHP. Частая причина — N+1: в одном случае список из сотни заказов тянул больше тысячи запросов вместо трёх. После переписывания выборки и добавления индексов ответ уложился примерно в 200 миллисекунд. Результат закрепляю метрикой и тестом на нагрузку, чтобы регресс не вернулся.

  • Сначала диагностика, потом гипотезы — правильный порядок
  • Названа типовая причина и способ её проверки
  • Есть цифры до и после оптимизации

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Senior

Кейс: нужно перевести монолит с PHP 7.2 на PHP 8.3 без остановки разработки. Ваш план?

Как отвечать ▾

Как отвечать: Опишите инвентаризацию несовместимостей, прогон Rector и тестов, поэтапное обновление зависимостей и канареечный выкат.

Пример сильного ответа

План такой: сначала зафиксировать точку отсчёта — тесты, статический анализ и метрики ошибок, чтобы эффект был виден. Затем зависимости и расширения: без них переход бессмысленен. Дальше двигаюсь по промежуточным версиям, а не прыгаю сразу, включаю логирование устаревших вызовов и разбираю их по модулям. Ветка обновления живёт параллельно, CI собирает проект на двух версиях, поэтому разработка не встаёт. Релиз — канареечный, по частям трафика, с быстрым откатом. В похожей задаче переход занял около трёх недель, порядка 200 автотестов прошли зелёными, а доля ошибок в логах заметно снизилась.

  • Есть последовательность этапов, а не лозунг «надо обновиться»
  • Учтено, что разработка продолжается параллельно
  • Названы сроки, тесты и эффект по логам

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 3Middle

Кейс: до дедлайна два дня, а менеджер просит выкатить фичу без тестов «потом допишем». Как поступите?

Как отвечать ▾

Как отвечать: Покажите баланс: предложите минимальный набор тестов на критичные сценарии, feature flag и честно проговорите риски с менеджером.

Пример сильного ответа

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

  • Показывает готовность искать компромисс, а не спорить
  • Конкретный план снижения риска: тесты и фича-флаг
  • Есть результат: релиз в срок и закрытый долг

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Поведенческий вопрос

Вопрос 1Для всех уровней

Расскажите о самом сложном баге в продакшене, который вам доводилось чинить.

Как отвечать ▾

Как отвечать: Ответьте по STAR: симптомы, как локализовали причину, что исправили и какие метрики или тесты добавили после инцидента.

Пример сильного ответа

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

  • Чёткая структура: симптом, диагностика, причина, фикс
  • Конкретные цифры: один из пятисот, ноль после фикса
  • Виден системный подход вместо угадывания

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 2Для всех уровней

Как вы реагируете, если на код-ревью ваше решение критикует тимлид или коллега?

Как отвечать ▾

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

Пример сильного ответа

Спокойно, для меня это нормальная часть работы. Мне приходилось переписывать решение после ревью тимлида, и это пошло на пользу: код стал короче примерно на сто строк. Моя задача — понять аргумент, а не защищать свой вариант. Если замечание про стиль, просто правлю. Если спорное — задаю вопросы: какие риски видит коллега, есть ли похожие примеры в кодовой базе. Когда аргументы сильнее моих, принимаю; когда нет — спокойно объясняю свою логику и предлагаю обсудить голосом. В итоге договорились о правиле для команды, и похожие споры почти ушли.

  • Спокойная реакция на критику без обиды
  • Различает стилевые замечания и спор по существу
  • Заканчивает улучшением командных правил

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 3Middle

Как вы работаете с большим участком legacy-кода без документации и тестов?

Как отвечать ▾

Как отвечать: Расскажите про изучение через логи и поведение, characterization-тесты, рефакторинг по кусочкам без переписывания «с нуля».

Пример сильного ответа

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

  • Понятная последовательность работы с legacy
  • Ключевая идея — фиксировать текущее поведение тестами
  • Есть цифра: с трёх дней до одного

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Вопрос 4Для всех уровней

Как вы поддерживаете свои знания актуальными: следите за релизами PHP и RFC?

Как отвечать ▾

Как отвечать: Назовите источники: PHP-рассылки и RFC, changelog релизов, профильные конференции и каналы — и что последнее внедрили в работу.

Пример сильного ответа

Регулярно, но без фанатизма. У меня есть привычка раз в неделю просматривать changelog и список RFC по PHP — так понимаю, куда движется язык, а не узнаю о переменах на проде от других. Моя задача — отличать интересное от применимого: если нововведение упрощает код и есть поддержка в инфраструктуре, пробую его на небольшом проекте или в пет-проекте. Ещё читаю разборы и хожу на митапы, а полезное доношу до команды: например, внутренний доклад на сорок минут про типизацию, после которого коллеги стали активнее использовать строгие типы.

  • Конкретная привычка вместо общих слов про саморазвитие
  • Отличает применимое от модного
  • Делится знаниями, есть измеримый эффект в команде

Возьмите структуру и подставьте свой опыт — заученный чужой ответ интервьюер слышит сразу.

Что спросят именно вас?

Типовые задают всем. По резюме спросят другое — «В резюме перерыв с 2024 года, чем вы занимались?». Покажем 5 таких вопросов бесплатно, а готовые ответы на них — под вашу вакансию и резюме — за 99 ₽.

Поделиться подборкой:TGVKWA

📈 Готовитесь к собеседованию? Получайте свежие вакансии PHP-разработчик на почту или в Telegram — и откликайтесь, пока подготовка свежая.

бесплатно
PRO

Проверьте себя: первый разбор — бесплатно

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

  • ✓ Реальные вопросы по вашей роли
  • ✓ Разбор ответов с ИИ
  • ✓ Оценка и советы

Как пройти собеседование на позицию PHP-разработчика

1. HR-этап

Подготовьте рассказ о себе на 1–2 минуты: последнее место работы, главный результат и причина интереса именно к этой вакансии. Для роли «PHP-разработчик» HR чаще всего проверяет мотивацию и зарплатные ожидания — заранее сверьте их с медианой по рынку — 153 000 ₽ (блок «Зарплата» ниже на этой странице).

2. Профессиональный этап

Основная часть собеседования — вопросы по ключевым навыкам: PHP 8 и типизация, Composer, Laravel/Symfony. Разберите категории «Язык, типизация и экосистема» и «Фреймворки, базы данных и ORM» из подборки выше и подготовьте по одному примеру из своего опыта на каждую — с цифрами и результатом.

3. Финальный этап

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

План подготовки

  1. 1Повторите ключевые возможности PHP 8: readonly-классы, enum, match, union-типы, атрибуты и strict_types.
  2. 2Освежите работу с Composer: composer.lock, PSR-4-автозагрузку, dev-зависимости и обновление пакетов.
  3. 3Подготовьте 2–3 истории о проектах на Laravel или Symfony: архитектура, оптимизация запросов, решённые проблемы.
  4. 4Повторите оптимизацию БД: индексы, EXPLAIN, проблему N+1 в ORM, транзакции и уровни изоляции.
  5. 5Вспомните опыт с производительностью и legacy: OPcache, профилирование, миграции на новые версии PHP.
  6. 6Пройдите пробное интервью в тренажёре Rabota-Help и потренируйтесь отвечать на кейсы уверенно и по делу.

Частые ошибки

  • Называть только версии PHP и фреймворки, не объясняя, какие возможности реально используете в коде.
  • Не уметь объяснить проблему N+1 и базовые приёмы оптимизации SQL-запросов.
  • Признаваться, что пишете без strict_types и тестов «потому что так исторически сложилось».
  • Пропускать вопросы про Composer и composer.lock как «очевидные».
  • Хвастаться скоростью разработки вместо качества: типизация, тесты, поддерживаемость кода.
  • Не задать вопросов о стеке, версии PHP, нагрузке и состоянии кодовой базы проекта.

Вы готовитесь к собеседованию. А работодатели уже ищут PHP-разработчика.

Создайте анонимный публичный профиль — его найдут в Яндексе и Google, и предложения придут сами. Контакты скрыты, пока вы не решите иначе.

Работодатели уже ищут: PHP-разработчик · от 153 000 ₽

Создать анонимный профиль — бесплатно

Пройдите мини-собеседование, добавьте резюме на экране результата — профиль создадим за минуту, с вашего согласия.

Вы нанимаете PHP-разработчика? Профили кандидатов и подбор для работодателей →

Практика интервью

От вопросов — к тренировке интервью

Прочитайте вопросы, выберите 5–7 самых сложных и пройдите пробное интервью. ИИ-интервьюер поможет структурировать ответы, проверить аргументацию и подготовиться к реальному разговору.

Открыть тренажёр для роли PHP-разработчик
Зарплата

Зарплата PHP-разработчик в России

По данным 26 вакансий

Полная статистика →

P25 (ниже среднего)

84 000 ₽

Медиана

153 000 ₽

50% вакансий

P75 (выше среднего)

203 000 ₽

Медиана по уровню опыта

1–3 года

140 000 ₽

Вопрос с каждого собеседования

«Какие у вас зарплатные ожидания?» — что ответить на собеседовании PHP-разработчика

Называйте диапазон: от типичной зарплаты для вашего опыта до суммы на 10–15 % выше, но не выше уровня, который платит лишь четверть работодателей. Суммы на руки по России (данных пока немного — ориентир); в Москве и Санкт-Петербурге обычно выше.

Называйте 155 000 ₽ – 175 000 ₽ на руки.

Пример ответа рекрутеру — для типичной вакансии по России

«Рассматриваю предложения от 155 до 175 тысяч на руки — итоговая сумма зависит от задач и состава компенсации».

В поле «желаемая зарплата» — одна цифра, нижняя граница диапазона: 155 000 ₽. До вычета налога это ≈ 180 000 ₽.

Посчитать для вашего города и опыта

Покажем вашу сумму, готовые фразы на «сколько получаете сейчас» и «у нас бюджет до…», а если уже есть предложение — сравним его с рынком.

Навыки

Востребованные навыки PHP-разработчика

Частота упоминания в вакансиях работодателей

Все навыки →
1
PHP4%
2
Laravel4%
↑
3
PostgreSQL4%
↑
4
MySQL4%
↓
5
Git4%
↓
6
API4%
Вакансии

Свежие вакансии PHP-разработчика: 346

Откройте подходящие предложения и откликнитесь после подготовки к собеседованию.

Смотреть вакансии →

Откликаетесь на вакансии PHP-разработчика? Приложите сопроводительное письмо

Пример письма для этой профессии и генератор, который напишет письмо под текст вакансии. Первое письмо — бесплатно.