Библиотека собеса по PHP | вопросы с собеседований
前往频道在 Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/5JWKxA Для обратной связи: @proglibrary_feeedback_bot
显示更多3 114
订阅者
-324 小时
-47 天
-1530 天
帖子存档
💰 Почему одним Data Scientist платят больше, чем другим?
Дело не только в знании Python и ML-библиотек. Во многих компаниях уровень специалиста оценивают по математической подготовке: теории вероятностей, статистике, линейной алгебре и математическому анализу.
Именно эти знания помогают понимать модели, решать более сложные задачи и претендовать на позиции с более высокой оплатой.
На курсе «Математика для Data Science» вы изучите разделы, которые используются в работе Data Scientist и ML Engineer.
Что вас ждёт:
🔹 40+ видеолекций и 150+ практических заданий на Python
🔹 Проверка домашних работ и обратная связь от преподавателей
🔹 Подготовка к техническим собеседованиям
🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии
👉 Записаться на бесплатный демо-урок
❓ Что такое DTO и чем он отличается от Entity?
DTO (Data Transfer Object) — простой объект-контейнер для переноса данных между слоями или по сети, без бизнес-логики.
Он делает структуру данных явной и типизированной вместо ассоциативных массивов, удобен для входных и выходных контрактов API.
Отличие от Entity: у DTO нет идентичности и поведения, только данные.
❓ Что такое иммутабельность и Value Object?
Иммутабельный объект не меняет состояние после создания: «изменение» возвращает новый экземпляр.
Value Object — объект без идентичности, равный другому по значению (Money, Email), как правило иммутабельный.
Плюсы: предсказуемость, безопасность при шеринге, отсутствие неожиданных мутаций.
🔥 Открытое занятие по AgentOps — курс стартовал!
Сегодня в 19:00 по МСК пройдет первое занятие нового потока, на которое может прийти каждый. Оцените пользу нашего подхода на ретрансляции урока в VK!
👨💻 Спикер: Андрей Носов
Тема: Архитектура управления: state machine для AI-агентов
Будем разбираться, как использовать State machine в качестве главного оружия против стохастики (непредсказуемости) LLM.
Что в программе:
● State machine: инварианты и терминальные состояния;
● Паттерны маршрутизации: Supervisor, ReAct, Plan-and-Solve;
● Детекция циклов и настройка аварийных выходов;
● Абстракция от модели: как сделать каркас, который переживет смену LLM/провайдера;
● Адаптация графов под ограничения локальных моделей;
● Версионирование графов и миграции стейта.
Результат занятия: Вы поймете, как спроектировать надежный каркас агента с жестким контролем исполнения и переходов.
👉 Подписывайтесь на нашу группу ВКонтакте, чтобы не пропустить старт трансляции!
❓ Как устроены сессии и что такое session fixation?
Сессия — серверное хранилище состояния между запросами; клиенту отдаётся только идентификатор, обычно в куке PHPSESSID. По умолчанию данные лежат в файлах, но их можно вынести в Redis или БД через session handler.
Session fixation — процесс, когда атакующий навязывает жертве заранее известный session id.
Защита — session_regenerate_id(true) при смене уровня привилегий, в первую очередь сразу после логина.
✔️ PHP-тест: комментарий, который рассыпался на «кракозябры»
Превью комментария обрывается на половине эмодзи. А валидация то пропускает мусор, то режет нормальный текст 👇
📦 Задание
Сервис отзывов. Комментарий — VARCHAR(255) (255 символов в utf8mb4). Валидатор ограничивает длину, сервис делает короткое превью для карточки. Полгода всё работало, пока аудитория была русскоязычной с короткими текстами. После запуска в новых регионах посыпались жалобы: эмодзи и иероглифы в превью превращаются в ?, а форма то ругается на короткий текст, то молча режет данные при сохранении.
// src/Comment/CommentValidator.php
class CommentValidator
{
private const MAX_LENGTH = 255;
public function validate(string $text): void
{
if (strlen($text) > self::MAX_LENGTH) {
throw new ValidationException('Слишком длинный комментарий');
}
}
}
// src/Comment/CommentPreview.php
class CommentPreview
{
public function make(string $text): string
{
if (strlen($text) <= 100) {
return $text;
}
return substr($text, 0, 100) . '…';
}
}
🔹 Задачи
— Объяснить, почему эмодзи/иероглифы в превью бьются в «кракозябры»
— Объяснить, почему один и тот же текст то проходит валидацию, то нет, и как это расходится с лимитом колонки в БД
— Исправить и валидатор, и превью
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы🎬 Как ИИ ускоряет разработку и где ломаются архитектуры
Мы провели открытый вебинар, где разобрали реальные боли проектирования автономных систем. Ольга Лукьянова на практическом кейсе показала, как использовать ИИ-ассистентов для реальных задач. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— Как с помощью ИИ быстрее разбираться в незнакомом коде и готовить пулл-реквесты;
— Критерии выбора между одним агентом и мультиагентной системой;
— Разбор популярных архитектурных ошибок и ограничений современных ИИ;
— Практические рекомендации по проектированию и внедрению облачных агентов.
👉 Посмотреть полную запись можно тут:
● VK
● YouTube
🚀 Хотите пойти дальше открытого вебинара? Если вы готовы перейти от простых промптов к проектированию надежных, отказоустойчивых ИИ-систем, которые не сливают бюджет компании на API, приходите на курс AgentOps. Поток уже стартовал, но двери еще приоткрыты!
👉 Успеть на курс AgentOps
🎮 Планы на выходные: соберите ИИ-агента в нашей новой игре!
Запустили интерактивную аркаду, где вы на практике поймете, как устроены агентные системы.
Юзеры бомбят в чате, тикеты горят, вам нужно спасать прод 🤓. Выстраивайте граф агента, подключайте узлы (RAG, CRM, Guardrails) и принимайте решения на развилках, чтобы бот не сливал данные.Какие навыки проверите: - Архитектура: сборка графов на LangGraph; - Компоненты: интеграция LLM, RAG и памяти; - Безопасность: настройка Guardrails и отладка ошибок; - Стейт: логика на сложных развилках. Бонус: Больше баллов — выше скидка на обучение! Наш новый поток стартует 14 июля. При покупке курса вы забираете еще 2 любых курса Академии в подарок! Протестируйте свою инженерную логику и заберите максимальную скидку на обучение. 👉 Сыграть в аркаду и выбить скидку
❓ Что такое XSS и как с ним бороться?
XSS — внедрение чужого JavaScript в страницу, который исполнится в браузере жертвы (кража кук, действия от её имени). Виды: stored, reflected, DOM-based.
Защита: экранирование вывода по контексту (htmlspecialchars для HTML) — именно вывода, а не ввода; заголовок Content-Security-Policy; флаг HttpOnly на сессионной куке, чтобы JS не мог её прочитать.
ОПРОС: Ответьте на пару вопросов и получите промокод на все наши курсы! 🎁
Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.
Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!
👉 Пройти опрос в Яндекс Формах и забрать промокод
⚠️ Уже завтра стартует курс AgentOps!
Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.
🔥 Заберите 3 курса по цене 1:
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление). ● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽. ● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой. 👉 Забрать 3 курса по цене 1 и получить демо-урок
❓ Что такое SQL-инъекция и как от неё защититься?
SQL-инъекция — это подстановка вредоносного пользовательского ввода в запрос, меняющая его логику.
Защита — подготовленные выражения (prepared statements) с привязкой параметров через PDO или mysqli: данные передаются отдельно от текста запроса и не интерпретируются как SQL.
❓ Чем композиция отличается от наследования?
Наследование — это отношение «is-a», поведение родителя достаётся подклассу статически на этапе компиляции. Композиция — отношение «has-a», объект делегирует работу вложенным объектам.
Проблемы наследования: сильная связанность с деталями реализации родителя (fragile base class), нарушение инкапсуляции, негибкость (только один родитель), лёгкость нарушить принцип Лисков.
Композиция более гибкая: поведение можно менять в рантайме (паттерн «Стратегия»), зависимости легко подменять в тестах, нет хрупкой иерархии. Отсюда принцип «предпочитай композицию наследованию». Наследование оправдано при настоящем «is-a» и стабильной иерархии.
🚀 Не уверены, стоит ли переходить на зрелую ИИ-инженерию? Начните с демо-урока!
Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор — В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление. — Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
💬 Обратная связь
Текущий уровень сложности вопросов?
🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю
⭐️ Dream Team 5-го потока: научитесь строить ИИ-агентов у практиков из BigTech
14 июля стартует новый поток курса по разработке ИИ-агентов, и в этот раз мы собрали по-настоящему звездный состав менторов. Это эксперты, которые прямо сейчас определяют развитие AI в России: Yandex Cloud, Avito AI Lab, cloud․ru и НИУ ВШЭ.
Чтобы ваш вход в ИИ-инженерию был максимально мощным, мы подготовили специальное предложение: до 30 июня при покупке курса по ИИ-агентам вы получаете еще 2 любых курса Академии в подарок! 🔥
Как это работает: вы оставляете заявку на курс по разработке ИИ-агентов и указываете менеджеру ещё два курса, которые хотите забрать бесплатно.
👉Заберите 3 курса по цене 1 на звездном потоке по ИИ-агентам
❓ Что такое идемпотентность и почему она важна?
Идемпотентная операция при многократном выполнении даёт тот же результат, что и при однократном. В HTTP идемпотентны GET, PUT, DELETE, а POST — нет.
Почему это критично: в распределённых системах сетевые сбои и таймауты приводят к автоматическим повторам (retry). Если операция не идемпотентна — например, «снять 100 рублей» — повтор спишет деньги дважды.
Подходы к идемпотентности:
→ идемпотентные ключи (idempotency key) для дедупликации повторных запросов;
→ проектирование операций как «установить состояние X», а не «изменить на дельту»;
→ отслеживание уже обработанных id запросов.
Особенно важно для платежей и очередей сообщений с гарантией at-least-once.
✔️ PHP-тест: статус, которого нет в коде
Деплоя и релиза ещё не было, а 500-е посыпались сами собой 👇
📦 Задание
Интернет-магазин. Поддержка через админку добавила новый статус заказа refunded (возврат). Нужно было для отчётности, в БД просто появилось новое значение. Через час часть страниц «Мои заказы» начала отдавать 500. Падают только заказы, которым проставили новый статус.
// src/Order/OrderStatusLabel.php
class OrderStatusLabel
{
public function render(string $status): string
{
return match ($status) {
'new' => 'Новый',
'paid' => 'Оплачен',
'shipped' => 'Отправлен',
'delivered' => 'Доставлен',
'cancelled' => 'Отменён',
};
}
}
// src/Order/OrderCard.php
class OrderCard
{
public function __construct(private readonly OrderStatusLabel $label) {}
public function build(Order $order): array
{
return [
'id' => $order->getId(),
'status' => $this->label->render($order->getStatus()),
];
}
}
🔹 Задачи
— Объяснить, чем поведение match тут отличается от switch и почему это привело к 500
— Предложить способ сделать код устойчивым к новым значениям, но НЕ замаскировать реальные баги
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы.🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от Proglib.Academy и cloud․ru
Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
👉 Посмотреть запись можно тут:
● VK
● YouTube
✔️ PHP-тест: статус, которого нет в коде
Деплоя не было. Релиза не было. А 500-е посыпались сами собой 👇
📦 Задание
Интернет-магазин. Поддержка через админку добавила новый статус заказа
refunded (возврат) — нужно было для отчётности, в БД просто появилось новое значение. Через час часть страниц «Мои заказы» начала отдавать 500. Падают только заказы, которым проставили новый статус.
// src/Order/OrderStatusLabel.php
class OrderStatusLabel
{
public function render(string $status): string
{
return match ($status) {
'new' => 'Новый',
'paid' => 'Оплачен',
'shipped' => 'Отправлен',
'delivered' => 'Доставлен',
'cancelled' => 'Отменён',
};
}
}
// src/Order/OrderCard.php
class OrderCard
{
public function __construct(private readonly OrderStatusLabel $label) {}
public function build(Order $order): array
{
return [
'id' => $order->getId(),
'status' => $this->label->render($order->getStatus()),
];
}
}
🔹 Задачи
— Объяснить, чем поведение match тут отличается от switch и почему это привело к 500
— Предложить способ сделать код устойчивым к новым значениям, но НЕ замаскировать реальные баги
— Объяснить, когда тут уместен default, а когда правильнее завести enum с исчерпывающей проверкой
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы.