Библиотека собеса по PHP | вопросы с собеседований
3.14K subscribers
199 photos
6 videos
142 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Расскажите о паттерне Mediator

Mediator — это поведенческий паттерн, который убирает прямые связи между компонентами, заставляя их общаться через посредника.

Простыми словами: диспетчер в аэропорту — самолёты не переговариваются друг с другом, а общаются через башню управления.

▪️ Когда использовать

Компоненты слишком сильно связаны друг с другом
Хотите переиспользовать компоненты в других контекстах

▪️ Минус

Медиатор может стать God Object, сконцентрировав слишком много логики.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
Расскажите о паттерне Memento

Memento — это поведенческий паттерн, который позволяет сохранять и восстанавливать прежнее состояние объекта, не нарушая инкапсуляцию.

Простыми словами: Ctrl+Z в любом редакторе — где-то хранится снимок предыдущего состояния, к которому можно откатиться.

▪️ Когда использовать

Нужна функция отмены/отката (undo)
Нужно сохранять контрольные точки состояния
Прямой доступ к полям объекта нарушил бы инкапсуляцию

▪️ Memento vs Command

— Command: хранит действие и умеет его отменить
— Memento: хранит полный снимок состояния

▪️ Минус

Может потреблять много памяти, если состояние объекта большое и снимки создаются часто.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1👏1
Расскажите о паттерне Visitor

Visitor — это поведенческий паттерн, который позволяет добавлять новые операции к объектам, не изменяя их классы.

Простыми словами: налоговый инспектор (visitor) приходит в разные компании и выполняет проверку — компании не меняются, а новые виды проверок добавляются легко.

▪️ Когда использовать

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

▪️ Минус

Visitor нужно обновлять при добавлении нового типа элемента — нарушается Open/Closed Principle для элементов.
Please open Telegram to view this post
VIEW IN TELEGRAM
До 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
Расскажите о паттерне Interpreter

Interpreter — это поведенческий паттерн, который определяет грамматику простого языка и интерпретатор для его предложений.

Простыми словами: вы описываете правила «мини-языка» в виде классов, и каждый класс умеет вычислить свою часть выражения. Как калькулятор, который разбирает «3 + 5 * 2».

▪️ Когда использовать

Есть простой язык или набор правил, которые нужно интерпретировать
Грамматика стабильна, но выражений — много

▪️ Минус

Для сложных грамматик дерево классов разрастается и становится неуправляемым — лучше использовать парсер-генераторы (ANTLR).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1🥱1
💬 Обратная связь

Текущий уровень сложности вопросов?

🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76🔥5😁4
Может ли абстрактный класс содержать частный(private) метод?

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

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

Дочерние классы не смогут вызвать его напрямую.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
⚡️ Продолжаем знакомить вас с экспертами курса 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 и занять место.
😁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-массив

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер — сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍21
Что нового в системе типов PHP 8?

Union types — параметр или возврат может быть нескольких типов: int|string. Nullable — это ?Type, то есть Type|null. Появились intersection types (8.1) A&B, тип never (8.1) для функций, которые не возвращают управление, и mixed для любого типа.
Строгая типизация включается через declare(strict_types=1), иначе скаляры приводятся неявно.
Типизация ловит ошибки раньше и документирует контракт без лишних комментариев.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
📊 Хотите войти в Data Science, но математика кажется самым сложным этапом?

На практике большинство джунов спотыкаются не о Python, а о математическую базу:

▪️ Теорию вероятностей и статистику
▪️ Линейную алгебру
▪️ Математический анализ
▪️ Комбинаторику

Именно на этих темах строятся машинное обучение, аналитика данных и рекомендательные системы.

Освойте ключевые разделы математики, которые используются в Data Science и Machine Learning на курсе «Математика для Data Science».

Что вас ждет:

🔹 40+ видеолекций и 150+ практических заданий на Python
🔹 Проверка домашних работ и обратная связь от преподавателей
🔹 Подготовка к задачам с технических собеседований
🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии

Курс подойдет разработчикам, аналитикам и всем, кто планирует развиваться в Data Science и Machine Learning.

👉 Записаться на бесплатный демо-урок
😁2
Разница между include и require и суффиксом _once?

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

В современном коде с автолоадером ручные подключения почти не нужны, кроме точек входа и конфигов.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🔥1
Что такое CSRF и как защититься?

CSRF — атака, при которой браузер жертвы отправляет аутентифицированный запрос на ваш сайт по инициативе стороннего сайта, используя уже имеющиеся куки.

Защита: CSRF-токен — случайное значение в форме, которое проверяется на сервере и неизвестно стороннему сайту.
Плюс куки с атрибутом SameSite (Lax/Strict) и обязательная проверка токена на изменяющих запросах (POST/PUT/DELETE).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
Как работает автозагрузка по стандарту PSR-4?

PSR-4 маппит пространство имён на путь в файловой системе: префикс неймспейса соответствует базовой директории, остальная часть — подпапкам, а имя класса равно имени .php-файла.

Composer по секции autoload в composer.json генерирует автолоадер, регистрируя его через spl_autoload_register.
Класс подгружается лениво при первом обращении к нему, а не заранее.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1😁1
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию

Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.

Одно направление закрывает только часть задачи.

Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥

Собери стек навыков под свою цель:

🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.

Полученные знания применяешь в работе уже во время обучения.

Акция действует 48 часов — 13 и 14 июня.

👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
Для чего нужен nullsafe-оператор ?-> ?

Оператор ?-> (PHP 8): если значение слева равно null, вся цепочка коротко замыкается и возвращает null, а не падает с ошибкой обращения к свойству/методу. Это убирает каскад проверок if.

Важно: он спасает только от null и не делает цепочку «безопасной» от других ошибок, и его нельзя использовать в левой части присваивания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🤔1
Как работают замыкания и захват переменных?

Замыкание — это анонимная функция (instanceof Closure). Внешние переменные захватываются явно через use: по значению или по ссылке use (&$x).

$this захватывается автоматически, если замыкание создано внутри метода.

bindTo() / Closure::bind() позволяют переопределить $this и область видимости, тогда замыкание получит доступ к private/protected.

Стрелочные функции fn() => ... захватывают внешние переменные автоматически по значению.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥2
🤖 Большинство материалов по ИИ-агентам устаревают быстрее, чем многие курсы успевают обновить программу

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

🚀 30 июня стартует курс «Разработка ИИ-агентов».

До 20 июня действует сниженная цена.

За 8 недель под руководством практиков из бигтеха вы соберёте собственного AI-агента, который работает с API, использует память, подключается к внешним сервисам и решает реальную задачу.

Что разберём:

🔹 архитектуру AI-агентов и надёжный вывод;
🔹 LangGraph и оркестрацию workflow;
🔹 MCP и работу с внешними инструментами;
🔹 RAG-системы;
🔹 AgentOps, observability и evals;
🔹 безопасность и защиту от prompt injection;
🔹 мультиагентные системы и A2A.

На курсе отдельно разбираем вопросы надёжности, безопасности и контроля агентных систем.

👉 Узнать программу и забронировать место со скидкой
🥱1
💬 Обратная связь

Проверяем выросло ли число помидоров синьоров :)
Ваш текущий грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥2311😁3👾1
Объекты передаются в функцию по ссылке или по значению?

Объекты передаются по «хэндлу» (идентификатору), а не копируются: менять состояние объекта внутри функции можно без &.
Массивы и скаляры передаются по значению, но копируются лениво — copy-on-write: реальная копия создаётся только при первой записи.
Знак & создаёт настоящую ссылку на ту же переменную.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1
🔥 Чем больше агентов — тем лучше? Не всегда. Уже завтра поговорим о реальных ограничениях на открытом уроке «Мультиагентные системы: почему большинство архитектур переусложнены».

Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru.

После урока вы:

🔹 будете лучше ориентироваться в выборе между одним агентом и мультиагентной системой;
🔹 поймёте, какие архитектурные ошибки встречаются чаще всего;
🔹 получите практические ориентиры для проектирования и внедрения агентных систем;
🔹 будете лучше понимать возможности и ограничения современных ИИ-агентов.

🗓️ 18 июня, 19:00 (МСК)
⏱️ 90 минут

👉 Зарегистрироваться и получить промокод на 10 000 ₽