Загрузка…
Загрузка…
backend / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
100 мин
01
Поведенческий
Расскажи немного о себе: бэкграунд, опыт, стек, чем занимался на последнем месте работы.
Кандидат рассказал про C++, C#, Python (Flask/Django), 4.5 года PHP (Laravel + Symfony), логистический проект (биржа грузоперевозок), интеграции с DaData, банками, платёжками.
02
Поведенческий
Вспомни какой-нибудь факап, который успешно или не очень успешно разрешился.
Запрошено в рамках рассказа о себе.
03
Поведенческий
Почему на проекте не было юнит-тестов, а только функциональные и интеграционные? Писали ли юниты внутри?
Уточняющий вопрос по опыту тестирования; кандидат писал юниты под свою задачу с геометрией/математикой.
04
Теория
О чём говорит аббревиатура PSR? Какие PSR знаешь (PSR-1, PSR-12, PSR-4 и т.д.)?
Заметки
Техсобес на мидл PHP-разработчика (вилка до 250 000 ₽, кандидат торговался до 270 000) в неназванную компанию — дочернее предприятие Альфа-банка (партнёры: Билайн, Мегафон, X5, Сравни.ру); 500+ сотрудников, 100+ в ИТ, 7 команд разработки. Стек компании: монолит на PHP 8.4 + Laravel 12, PostgreSQL, Docker (без Kubernetes), Kafka, Swoole на проде, GitLab CI, канбан, полная удалёнка. Воронка: HR → этот смешанный техсобес (теория ~1.5ч + софт-скиллы + алгоритмы в Яндекс.Контест, 3 интервьюера: тимлид Александр, техлид Рома, сеньор Сергей) → третий этап с тимлидом (~1.5ч, system design + менеджер), после которого HR пропала и не ответила. В видео также вставка про собеседование другой кандидатки во «локальную компанию» на фронт-разработчика (5 этапов: HR 30 мин, теоретический техсобес, алгоритмическое интервью — две задачи решила, на третьей срезали, плюс поведенческое); автор упоминает свой прошлый техсобес на 200к с дожимом до 280к (выложен на Бусти) и собес в компанию с легаси на Symfony/PHP 7.4.
Подготовка
По опыту автора (~35 собесов) алгоритмы спрашивали только на 6–7; для PHP не стоит месяцами ботать LeetCode (200 easy + 50 medium за 3 месяца — потеря времени), но полезно решать задачи параллельно с книгой «Грокаем алгоритмы». Автор ведёт сборник из 339+ вопросов с реальных собесов (на Бусти) — советует отвечать на вопросы самостоятельно, а не читать готовые ответы. Совет: берите контакты технических интервьюеров, чтобы потом спросить фидбек напрямую, т.к. HR может пропасть. Также: на текущем рынке мидлов собеседуют как сеньоров — готовьтесь «по максималке».
Стиль интервьюера
Формат диалога, а не экзамена: обязательный набор вопросов, но интервьюеры активно помогали наводящими вопросами и подсказками, доводили до ответа итерациями. На нетривиальных задачах (миграция с миллионами записей) официально разрешали гуглить. Дружелюбная и неформальная атмосфера (мемы, коты, шутки), вопросы перетекали в обсуждения-«холивары». Собес длинный (перелимитили время), в конце вставили алгоритмы, когда кандидат уже устал. Дали домашнее задание «на подумать» (СМС-подтверждение на 5 нодах). Софт-скилловые ситуационные вопросы без правильного ответа — смотрели на рассуждение.
Follow-up: часто ли приходится заглядывать в стандарты.
05
Теория
Что ты знаешь про трейты в PHP? Плюсы и минусы использования трейтов.
06
Теория
Что такое final-класс и в чём его плохие стороны?
Ожидали подводный камень: final-класс нельзя нормально мокать, т.к. мокирование работает через наследование.
07
Теория
Какие магические методы PHP можешь вспомнить и какими чаще всего пользуешься?
Кандидат назвал __construct, __destruct, __sleep/__wakeup, __clone, __toString, __invoke.
08
Теория
Что делает магический метод __invoke? Как можно вызвать класс как функцию?
Follow-up к вопросу о магических методах; обсуждали invokable-контроллеры в Laravel.
09
Теория
Как работает __clone: как он клонирует объект? Что будет, если внутри клонируемого объекта есть другой объект (поверхностное vs глубокое копирование)?
Обсуждали поверхностное копирование, переопределение __clone, кейс с ресурсами.
10
Теория
Расскажи жизненный цикл запроса в Laravel: от nginx/прокси через php-fpm, index.php, автолоадер, инициализацию ядра, сервис-провайдеры, middleware, роутинг до контроллера.
Кандидата поправляли по очередности middleware и роутинга.
11
Теория
В какие моменты может вызваться middleware? Может ли middleware выполниться после ответа?
Follow-up к жизненному циклу: «открывающийся и закрывающийся» (terminable) middleware.
12
Теория
Что такое фасады в Laravel? Назови сильные и негативные стороны фасадов. Твоё личное мнение об их использовании?
Обсуждали статику, тестируемость, кэширование через фасад vs DI/композицию.
13
Теория
Что такое анемичная модель и чем она отличается от богатой модели?
Кандидат сначала не знал термин, интервьюер подсказывал; обсудили Eloquent/Active Record vs Data Mapper (Doctrine).
14
Теория
Что такое сервис-контейнер в Laravel, как он устроен под капотом? Как работает рефлексия?
Обсуждали DI vs app()->make(), проблемы сервис-локатора, кэширование, сравнение инициализации Laravel и Symfony.
15
Теория
Какие решения ты знаешь для проблемы долгой инициализации ядра Laravel (асинхронные раннеры)?
Ожидали RoadRunner / FrankenPHP / Swoole; в компании используют Swoole на проде вместо php-fpm.
16
Теория
Назови место в Laravel, где собираются и аккумулируются все исключения. Можно ли писать кастомные обработчики/исключения?
Кандидат рассказал про кастомные исключения под бизнес-логику.
17
Теория
Расскажи про опыт работы с очередями: как настраивать очереди, запускать воркеры/обработчики, чем пользовались? Джобы vs события и слушатели.
Очереди были на Redis, процессы держал supervisor.
18
Теория
Почему для воркеров выбран supervisor и какие ещё средства могут выполнять аналогичную функцию (держать процессы живыми)?
Обсуждали docker restart-политики, kubernetes как варианты.
19
Теория
Какие сервисы/механизмы авторизации в Laravel знаешь (Sanctum, Passport, JWT) и с какими был опыт?
Кандидат: Sanctum, bearer, OAuth 2.0, кастомные access/refresh на JWT.
20
Теория
Какие проблемы возникают с парсингом JWT-токена на хайлоаде и почему стоит выносить проверку токена в отдельный сервис (например, API gateway или nginx + lua)?
Follow-up: парсить JWT пыхой на каждый запрос на хайлоаде — проблема.
21
Теория
Какими инструментами пользуешься для дебага при разработке?
Кандидат: tinker, консольные команды, postman, xdebug, debugbar, dd().
22
Теория
Был ли опыт работы с приватными composer-пакетами? Писали ли свои пакеты, есть ли понимание, как они публикуются?
Опыта не было.
23
Теория
Что такое composer.lock, зачем он нужен и чем принципиально отличается от composer.json?
Обсуждали версии/констрейнты в composer.json, фиксацию зависимостей в lock, коммит lock-файла в репозиторий.
24
Теория
В какой момент формируется composer.lock и что будет, если его удалить?
Follow-up к вопросу про composer.
25
Теория
Есть ли composer.lock внутри подключаемых пакетов (например, в carbon)?
Углубляющий follow-up; у пакета есть composer.json с зависимостями, lock в пакетах не таскают.
26
Теория
Чем отличается HAVING от WHERE в SQL-запросе?
27
Теория
Что такое индекс в базе данных и какие типы индексов знаешь?
Кандидат: primary, уникальный, составной, B-tree, GIN (array, full-text, jsonb), GiST/гео.
28
Теория
Что такое репликация базы данных, зачем её использовать и какие практические задачи она решает?
Обсуждали разделение чтения/записи, синхронную/асинхронную репликацию, CQRS.
29
Теория
Могут ли мастер и реплика поменяться местами? В каком случае и зачем (что происходит при падении сервера БД)?
Кандидат не дошёл до failover самостоятельно, интервьюеры наводили подсказками; тему оставили «на подумать».
30
Кейс
В merge request есть тяжёлая миграция (смена типа колонки в таблице с миллионами записей, выполняется ~20 минут). С какими трудностями столкнёшься на релизе и как выполнить миграцию с нулевым ущербом для пользователей?
Разрешили гуглить. Правильный ответ: создать новую nullable-колонку (мгновенно в Postgres), писать в обе, в фоне батчами переносить данные, затем удалить старую.
31
Теория
Какие виды блокировок в базе данных знаешь?
Follow-up в рамках задачи про миграцию: блокировки на уровне таблицы/строк, FOR UPDATE, FOR SHARE.
32
Теория
Coupling и cohesion (связанность и связность) — как ты понимаешь, что это такое?
Обсудили god-классы/богоподобные сервисы.
33
Теория
Слоистая архитектура: какие слои можешь выделить и как они должны взаимодействовать между собой?
Обсуждали domain, application, infrastructure, presentation; луковую и гексагональную архитектуры.
34
System design
Практическая задача: приложение должно отправить запрос («привет»/документы) в федеральную налоговую службу. Как организуешь эту работу по слоям — что и куда положишь?
Разбирали: доменная единица «сообщение», application-слой (use case / message sender service), infrastructure (HTTP-запрос наружу), presentation.
35
Теория
Какие инструменты в PHP позволяют разделить код на слои и держать архитектуру «в узде»?
Ожидаемый ответ: интерфейсы (+ DI).
36
Теория
Зачем нужны интерфейсы? Что такое полиморфизм?
Пример с пультом и кнопкой включения для разных телевизоров.
37
Теория
Какой из принципов SOLID решается интерфейсами в данном контексте (разные реализации одной абстракции)?
Обсуждали принцип подстановки Барбары Лисков и инверсию зависимостей.
38
Теория
Знакома ли тебе микросервисная архитектура, была ли практика? Зачем уходить из монолита в микросервисы, какие проблемы это решает?
Кандидат не работал с сагой и оркестрацией.
39
Теория
Что такое Kubernetes / оркестрация контейнеров и какую проблему она решает? В чём преимущества?
Наводили на ноды, балансировку, самовосстановление подов, вывод нод на обслуживание при деплое.
40
Теория
Зачем вообще нужен Docker и что придётся делать, если его не использовать?
Ключевое слово, которое ждали: одинаковое окружение, быстрое разворачивание.
41
System design
Домашнее задание: есть сервера в нескольких зонах по всей России (5 машин), функция подтверждения телефона через СМС (код хранится в кэше и сверяется). Как ты как разработчик должен учитывать серверную инфраструктуру и репликацию, чтобы держать всё в здоровом состоянии?
Дано как домашнее задание «на подумать», решать на собесе не требовали.
42
System design
В монолите есть функция отправки сообщений в госуслуги/налоговую, решено вынести её в отдельный микросервис. На какие грабли наступит разработчик и как их решать?
Обсуждали: связанность кода, синхронное vs асинхронное общение, брокеры (Redis/Kafka), отдельное окружение и БД, согласованность данных, нагрузка на девопса, зоопарк стеков.
43
Код
Лайвкодинг (Яндекс.Контест): дана функция reverse, разворачивающая массив. Отработай интерпретатором — пройди по итерациям и скажи, что вернёт функция на массиве [1,2,3,4,5,6], делает ли она то, что от неё ожидается.
Подвох: цикл идёт по всей длине массива, поэтому массив разворачивается дважды и возвращается в исходном порядке. Кандидат ошибался по ходу трассировки, интервьюеры поправляли.
44
Код
Как бы ты реализовал разворот массива в боевом коде на практике?
Ожидаемый ответ: встроенная функция array_reverse, не изобретать велосипед.
45
Поведенческий
У тебя есть свой роадмап развития — какая у него финальная точка, куда ты метишь?
Кандидат: рост в хард-скиллах, кубер, в идеале до тимлида.
46
Поведенческий
Было ли у вас код-ревью? Расскажи про свой опыт ревью.
Кандидат был «бади» для новичков, вёл их ревью первые три месяца.
47
Кейс
Ты выложил свой merge request, и тебе прилетает ревью в духе «всё плохо, переписать». Твои действия?
48
Кейс
По ревью тебе сказали переписать архитектурное решение, ты согласен, что нужен рефакторинг, но дедлайн релиза — завтра. Что будешь делать?
Ожидаемый ответ: фича работает — релизим, рефакторинг забираем в тех-долг и не откладываем в долгий ящик.
49
Кейс
Бизнес-задача проходит цепочку: бизнес → аналитик → разработчик → QA → релиз, и в проде выясняется, что фича работает не так. Кто в этой цепочке, на твой взгляд, главный и несёт ответственность за фичу?
Интервьюер сразу сказал, что правильного ответа нет; смотрели на рассуждение.
50
Поведенческий
Почему вы уходите с текущего места работы?
Из вставки в видео: рассказ другой кандидатки про HR-скрининг (30 мин) в локальную компанию на роль фронт-разработчика с 5 этапами собеседований.