ru
Feedback
Библиотека собеса по PHP | вопросы с собеседований

Библиотека собеса по PHP | вопросы с собеседований

Открыть в Telegram

Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/5JWKxA Для обратной связи: @proglibrary_feeedback_bot

Больше
3 114
Подписчики
-324 часа
-67 дней
-1930 день
Архив постов
Для чего нужен nullsafe-оператор ?-> ? Оператор ?-> (PHP 8): если значение слева равно null, вся цепочка коротко замыкается и возвращает null, а не падает с ошибкой обращения к свойству/методу. Это убирает каскад проверок if. Важно: он спасает только от null и не делает цепочку «безопасной» от других ошибок, и его нельзя использовать в левой части присваивания.

💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию Для следующего карьерного шага мало писать код. Рабо
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем. Одно направление закрывает только часть задачи. Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥 Собери стек навыков под свою цель: 🔹 подготовка к сильным компаниям (алгоритмы, архитектура); 🔹 переход в AI-направление (ИИ-агенты, AgentOps); 🔹 развитие в ML и Data Science (математика, основы ML); 🔹 новый оффер и рост дохода. Полученные знания применяешь в работе уже во время обучения. ⏳ Акция действует 48 часов — 13 и 14 июня. 👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.

Как работает автозагрузка по стандарту PSR-4? PSR-4 маппит пространство имён на путь в файловой системе: префикс неймспейса соответствует базовой директории, остальная часть — подпапкам, а имя класса равно имени .php-файла. Composer по секции autoload в composer.json генерирует автолоадер, регистрируя его через spl_autoload_register. Класс подгружается лениво при первом обращении к нему, а не заранее.

Что такое CSRF и как защититься? CSRF — атака, при которой браузер жертвы отправляет аутентифицированный запрос на ваш сайт по инициативе стороннего сайта, используя уже имеющиеся куки. Защита: CSRF-токен — случайное значение в форме, которое проверяется на сервере и неизвестно стороннему сайту. Плюс куки с атрибутом SameSite (Lax/Strict) и обязательная проверка токена на изменяющих запросах (POST/PUT/DELETE).

Разница между include и require и суффиксом _once? require при отсутствии файла бросает фатальную ошибку и останавливает скрипт. include выдаёт лишь Warning и продолжает выполнение. Суффикс _once гарантирует однократное подключение файла — защита от повторного объявления классов/функций. В современном коде с автолоадером ручные подключения почти не нужны, кроме точек входа и конфигов.

📊 Хотите войти в Data Science, но математика кажется самым сложным этапом? На практике большинство джунов спотыкаются не о P
📊 Хотите войти в Data Science, но математика кажется самым сложным этапом? На практике большинство джунов спотыкаются не о Python, а о математическую базу: ▪️ Теорию вероятностей и статистику ▪️ Линейную алгебру ▪️ Математический анализ ▪️ Комбинаторику Именно на этих темах строятся машинное обучение, аналитика данных и рекомендательные системы. Освойте ключевые разделы математики, которые используются в Data Science и Machine Learning на курсе «Математика для Data Science». Что вас ждет: 🔹 40+ видеолекций и 150+ практических заданий на Python 🔹 Проверка домашних работ и обратная связь от преподавателей 🔹 Подготовка к задачам с технических собеседований 🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии Курс подойдет разработчикам, аналитикам и всем, кто планирует развиваться в Data Science и Machine Learning. 👉 Записаться на бесплатный демо-урок

Что нового в системе типов PHP 8? Union types — параметр или возврат может быть нескольких типов: int|string. Nullable — это ?Type, то есть Type|null. Появились intersection types (8.1) A&B, тип never (8.1) для функций, которые не возвращают управление, и mixed для любого типа. Строгая типизация включается через declare(strict_types=1), иначе скаляры приводятся неявно. Типизация ловит ошибки раньше и документирует контракт без лишних комментариев.

✔️ PHP-тест: список, который иногда становится объектом Мобилка падает на парсинге ответа. Только у части пользователей. У остальных — всё ок. 📦 Задание Эндпоинт /api/products/available отдаёт товары в наличии. Бэкенд не трогали месяц. Внезапно прилетает баг от мобильной команды: «приложение крашится при разборе items, иногда это массив, иногда какой-то объект с числовыми ключами». На стейджинге не воспроизводится — там тестовые данные, все товары в наличии.
// src/Api/ProductController.php
class ProductController
{
    public function __construct(
        private readonly ProductRepository $repository,
    ) {}

    public function available(): JsonResponse
    {
        $products = $this->repository->findAll();

        $available = array_filter(
            $products,
            fn (Product $p): bool => $p->getStock() > 0,
        );

        return new JsonResponse([
            'items' => $available,
            'count' => count($available),
        ]);
    }
}
🔹 Задачи — Объяснить, почему форма ответа items зависит от данных: то массив, то объект — Объяснить, при каком наборе товаров json_encode отдаёт {"0":…, "2":…} вместо […] — Исправить так, чтобы items гарантированно сериализовался как JSON-массив Ставьте → 🔥 если нравится формат. Если нет → 🌚 💬 Решения пишите в комменты под спойлер — сравним подходы.

⚡️ Продолжаем знакомить вас с экспертами курса AgentOps! — Сергей Нотевский расскажет, как выстроить FinOps для AI-продуктов:
⚡️ Продолжаем знакомить вас с экспертами курса AgentOps!Сергей Нотевский расскажет, как выстроить FinOps для AI-продуктов: оптимизировать затраты на разработку и продакшен, внедрить model routing, semantic cache и систему алертов для контроля расходов — Эмиль Сатаев разберет Context Engineering: управление контекстом, защиту от prompt injection, работу с длинными контекстами и построение безопасного пайплайна входа для AI-систем — Михаил Бондаревский покажет, как подготовить инфраструктуру для AI-агентов: Docker, sandboxing, streaming, docker-compose и воспроизводимое окружение для разработки и продакшена — Мурат Хажгериев расскажет про Enterprise Integrations & MCP: когда MCP действительно нужен, как подключать внешние сервисы и реализовывать интеграции с OAuth2 delegation — Герман Сабиров разберет Governance & Compliance для AI-систем: data flow, audit logs, требования 152-ФЗ, локализацию данных и построение compliance-подхода на уровне архитектуры Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса. 👉 Изучить обновленную программу AgentOps и занять место.

Может ли абстрактный класс содержать частный(private) метод? Да, в абстрактном классе можно иметь частный метод. Этот частный метод будет отображаться ТОЛЬКО этому абстрактному классу. Это означает, что он должен будет использоваться каким-либо другим конкретным методом в абстрактном классе. Дочерние классы не смогут вызвать его напрямую.

💬 Обратная связь Текущий уровень сложности вопросов? 🔥 — Слишком просто, хочу сложнее 👍🏼 — В самый раз ❤️ — Иногда сложновато 😁 — Часто не понимаю

Расскажите о паттерне Interpreter Interpreter — это поведенческий паттерн, который определяет грамматику простого языка и интерпретатор для его предложений. Простыми словами: вы описываете правила «мини-языка» в виде классов, и каждый класс умеет вычислить свою часть выражения. Как калькулятор, который разбирает «3 + 5 * 2». ▪️ Когда использоватьЕсть простой язык или набор правил, которые нужно интерпретироватьГрамматика стабильна, но выражений — много ▪️ Минус Для сложных грамматик дерево классов разрастается и становится неуправляемым — лучше использовать парсер-генераторы (ANTLR).

До 31 мая можно забрать любой курс Proglib Academy со скидкой 40% Если давно хотели прокачаться в Python, ML, алгоритмах или
До 31 мая можно забрать любой курс Proglib Academy со скидкой 40% Если давно хотели прокачаться в Python, ML, алгоритмах или AI-агентах, сейчас самое время выбрать программу и начать обучение по сниженной цене. 🎁 Разработка AI-агентов от 49.000 ₽ (вместо 69.000 ₽) Практический курс по разработке AI-агентов для автоматизации задач, работы и собственных проектов 🎁 Курс AgentOps129.000 ₽ (вместо 149.000 ₽) Для разработчиков и LLM-инженеров, которые хотят внедрять AI-логику в бэкенд и сохранять стабильность сервиса. 🎁 Математика для разработки AI-моделей 23.990 ₽ (вместо 31.990 ₽) Практическая база по математике для анализа данных, ML и дальнейшего развития в AI. 🎁 Математика для Data Scienceот 29.990 ₽ (вместо 39.990 ₽) Курс для тех, кто хочет решать задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе. 🎁 ML для старта в Data Science28.990 ₽ (вместо 38.990 ₽) Разберётесь в машинном обучении: от базовых понятий и линейных моделей до ансамблей, бустинга и рекомендательных систем. 🎁 Основы IT для непрограммистов16.990 ₽ (вместо 28.990 ₽) Курс для IT-рекрутеров, маркетологов, проджектов, продактов и всех, кто работает с IT, но не пишет код. 🎁 Архитектуры и шаблоны проектирования27.990 ₽ (вместо 37.900 ₽) Освоите основные паттерны проектирования и прокачаете навыки архитектора программного обеспечения. 🎁 Специалист по ИИ89.000 ₽ (вместо 113.900 ₽) Курс для тех, кто хочет получить профессию в сфере ИИ, собрать портфолио из 5 проектов и научиться разрабатывать сложных AI-агентов. 🎁 Алгоритмы и структуры данных 33.990 ₽ (вместо 57.990 ₽) Подготовитесь к алгоритмическим собеседованиям, разберёте структуры данных и научитесь писать более эффективный код. 🎁 Программирование на языке Python27.990 ₽ (вместо 47.390 ₽) Освоите Python на практике: без сухой теории, с пошаговой прокачкой навыков и итоговым проектом в портфолио. 🙌 Выбирайте курс по ссылке, оставляйте заявку, и менеджер поможет подобрать программу под ваши цели — https://clc.to/SALE40

Расскажите о паттерне Visitor Visitor — это поведенческий паттерн, который позволяет добавлять новые операции к объектам, не изменяя их классы. Простыми словами: налоговый инспектор (visitor) приходит в разные компании и выполняет проверку — компании не меняются, а новые виды проверок добавляются легко. ▪️ Когда использоватьНужно выполнить операцию над группой разнородных объектовНовые операции добавляются часто, а новые типы элементов — редко ▪️ Минус Visitor нужно обновлять при добавлении нового типа элемента — нарушается Open/Closed Principle для элементов.

Расскажите о паттерне Memento Memento — это поведенческий паттерн, который позволяет сохранять и восстанавливать прежнее состояние объекта, не нарушая инкапсуляцию. Простыми словами: Ctrl+Z в любом редакторе — где-то хранится снимок предыдущего состояния, к которому можно откатиться. ▪️ Когда использоватьНужна функция отмены/отката (undo)Нужно сохранять контрольные точки состоянияПрямой доступ к полям объекта нарушил бы инкапсуляцию ▪️ Memento vs Command — Command: хранит действие и умеет его отменить — Memento: хранит полный снимок состояния ▪️ Минус Может потреблять много памяти, если состояние объекта большое и снимки создаются часто.

Расскажите о паттерне Mediator Mediator — это поведенческий паттерн, который убирает прямые связи между компонентами, заставляя их общаться через посредника. Простыми словами: диспетчер в аэропорту — самолёты не переговариваются друг с другом, а общаются через башню управления. ▪️ Когда использоватьКомпоненты слишком сильно связаны друг с другомХотите переиспользовать компоненты в других контекстах ▪️ Минус Медиатор может стать God Object, сконцентрировав слишком много логики.

Расскажите о паттерне Iterator Iterator — это поведенческий паттерн, который даёт возможность последовательно обходить элементы коллекции, не раскрывая её внутреннее устройство. Простыми словами: вы проходите по элементам через «окошко» (hasNext / next), не зная — это массив, дерево или база данных за ним. ▪️ Когда использоватьНужен единый способ обхода для разных структур данныхХотите скрыть сложность обхода (дерево, граф, пагинация)

Расскажите о паттерне Chain of Responsibility Chain of Responsibility — это поведенческий паттерн, который позволяет передавать запрос по цепочке обработчиков. Каждый обработчик решает: обработать запрос или передать дальше. Простыми словами: как эскалация тикета: L1 → L2 → L3 саппорт. Каждый уровень либо решает проблему, либо передаёт выше. ▪️ Когда использоватьНабор обработчиков и их порядок определяется динамическиЗапрос должен быть обработан одним из нескольких объектов, но каким — неизвестно заранее ▪️ Минус Запрос может пройти всю цепочку и не быть обработанным; сложно отладить длинную цепочку.

💬 Обратная связь Последние посты все по единой теме паттернов. Удобно ли, если посты будут иногда такими едиными блоками? 🔥 — Удобно 👍🏼 — Без разницы 😁 — Скука смертная, хочется разнообразия

Расскажите о паттерне State State — это поведенческий паттерн, который позволяет объекту менять своё поведение при изменении внутреннего состояния. Извне кажется, что объект сменил свой класс. Простыми словами: банкомат ведёт себя по-разному в зависимости от состояния: ожидание карты → ввод PIN → выбор операции. Одна и та же кнопка делает разные вещи. ▪️ Когда использоватьОбъект ведёт себя по-разному в зависимости от состоянияМного if/switch по статусу — признак, что нужен StateКоличество состояний может расти ▪️ State vs Strategy — Strategy: клиент выбирает алгоритм — State: объект сам переключает поведение при смене состояния ▪️ Минус Избыточен, если состояний всего 2–3 и переходы простые.