P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch
🐘

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

Middle · 2–4 года опыта

Собеседование PHP охватывает семантику языка, ООП, Laravel или Symfony, MySQL и основы веб-безопасности. Ниже — самые частые вопросы с эталонными ответами. Middle: более глубокое понимание, оптимизацию и реальные рабочие ситуации.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

ООП и SOLID в PHP
Laravel / Symfony
MySQL и оптимизация запросов
Composer и автозагрузка
Сессии, куки, безопасность
Стандарты PSR

7 вопросов уровня Middle с ответами

1

Чем `hasManyThrough` отличается от `belongsToMany`?

Ответ

В терминах Laravel belongsToMany использует сводную таблицу, существующую только чтобы соединить две модели. Отношение через промежуточную достаёт дальнюю модель через ту, что сама является полноценной сущностью. Если связующая таблица несёт собственные данные — отметку времени, статус, — это модель, и обращение с ней как со сводной делает эти данные неудобными.

2

Что такое N+1 и как его найти?

Ответ

Один запрос на список и ещё по одному на каждый элемент, потому что связь загружается лениво внутри цикла. Находится по журналу запросов или пакетом, считающим запросы на запрос. with() подтягивает связь вторым запросом. Ловушка — вылечить это кешированием страницы вместо самого запроса.

3

Что делает контейнер сервисов?

Ответ

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

4

Чем middleware отличается от контроллера?

Ответ

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

5

Как работают очереди и что должно быть верно для задачи?

Ответ

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

6

Чем миграция отличается от сидера?

Ответ

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

7

Как защищаться от SQL-инъекций и XSS?

Ответ

От инъекций защищает привязка параметров, которую построитель запросов и Eloquent делают за вас, — опасность в DB::raw с подставленным вводом. От XSS защищает экранирование на выводе: {{ }} в Blade это делает, а {!! !!} намеренно нет. И то и другое про то, чтобы не смешивать данные с языком в неподходящий момент.

🦎

Прочитать ответы недостаточно

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

Пройти интервью Middle PHP Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — PHP Backend

Junior PHP BackendSenior PHP BackendВсе вопросы PHP Backend

Другие специализации

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🟣Middle .NET Backend Developer🔷Middle C++🟨Middle JavaScript