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

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

Учиться у нас: clc.to/5JWKxA

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое генераторы и оператор yield?

Генератор — функция с yield внутри; она возвращает объект Generator и вычисляет значения лениво, по одному, не держа весь набор в памяти. Это позволяет итерировать огромные или бесконечные последовательности почти без расхода памяти (например, построчное чтение большого файла).

yield может не только отдавать, но и принимать значение через send(), а yield from делегирует другому итератору.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2😁1
🤖 AI пишет код за вас? Это самое скучное, что он умеет

Основное время разработчик тратит на другое: разобраться в чужой кодовой базе, найти нужный участок проекта, проверить решение, собрать Pull Request. Вот где AI реально экономит часы — если знать, как им пользоваться.

23 июня Ольга Лукьянова покажет это на практике: как с помощью современных AI-инструментов быстро погружаться в незнакомый проект, находить нужный код, реализовывать задачи и проверять результат до ревью коллег.

В итоге вы увидите не отдельные приёмы и промпты, а целостный workflow, который можно встроить в свою работу уже на следующий день 🔥

Чтобы лучше погрузиться в тему:

📺 Выступление про SourceCraft
📖 Статья на Хабре

🗓️ Когда: 23 июня, 19:00 (МСК)

👉 Занять место на открытом уроке
🥱2
✔️ PHP-тест: лента, в которой посты двоятся и пропадают

Пользователь листает ленту и видит один и тот же пост дважды. А кто-то жалуется, что пропускает записи 👇

📦 Задание

Соцсеть, активная лента, новые посты прилетают каждую секунду. Постраничный вывод сделали классически, через LIMIT/OFFSET. На ревью прошло, тесты зелёные (в тестах данные статичные). В проде в часы пик начались жалобы: дубли на стыке страниц и «куда-то делся пост, я его точно видел».
// src/Feed/FeedRepository.php
class FeedRepository
{
public function __construct(private readonly PDO $pdo) {}

public function page(int $page, int $perPage): array
{
$offset = ($page - 1) * $perPage;

$stmt = $this->pdo->prepare(
'SELECT id, author_id, body, created_at
FROM posts
ORDER BY created_at DESC
LIMIT :limit OFFSET :offset'
);

$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();

return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}


🔹 Задачи

— Объяснить, почему на меняющихся данных OFFSET даёт дубли и пропуски между страницами
— Объяснить, почему сортировка только по created_at дополнительно усугубляет проблему
— Переписать на keyset-пагинацию (cursor) так, чтобы вставки/удаления не сдвигали выдачу

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

💬 Решения пишите в комменты под спойлер, сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤔4🌚21👍1
🤖 Какие задачи можно действительно доверить ИИ?

Уже завтра разберём это на открытом уроке «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».

Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft от Яндекса.

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

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

На практике разберём путь от получения задачи до готового Pull Request с использованием AI-инструментов и AI-ревью.

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

👉 Зарегистрироваться и получить рабочий AI-workflow для своих задач
Какие бывают уровни изоляции транзакций?

От слабого к строгому:

🔹 READ UNCOMMITTEDвидны незакоммиченные изменения других транзакций (грязное чтение).
🔹 READ COMMITTEDвидны только закоммиченные данные, но при повторном чтении строки значение может измениться (неповторяющееся чтение).
🔹 REPEATABLE READодна и та же строка читается стабильно в рамках транзакции, но возможны фантомы (новые строки, подходящие под условие).
🔹 SERIALIZABLEполная изоляция, транзакции выполняются как будто строго последовательно.

Чем выше уровень, тем меньше аномалий, но больше блокировок и ниже пропускная способность. Выбор — это компромисс между корректностью и производительностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥2🤔1
Чем WHERE отличается от HAVING?

Оба фильтруют, но на разных этапах выполнения запроса.

→ WHERE отсекает строки до группировки (GROUP BY) и не может работать с агрегатными функциями.

→ HAVING отсекает уже сгруппированные данные после агрегации и умеет работать с агрегатами (COUNT, SUM, AVG).

Логический порядок выполнения: WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1👏1
Уже сегодня в 19:00 (МСК) стартует наш открытый урок!

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

Тема:
«AI-инструменты в разработке: пишем код быстрее»


Мы покажем живой разбор реального проекта: как с помощью AI-ассистентов мгновенно разбираться в чужой кодовой базе, искать нужные участки и собирать Pull Request. Только рабочие промпты, которые сэкономят вам часы рутины.

🎙️ Спикер — Ольга Лукьянова, руководитель команды в SourceCraft (18+ лет развивала инструменты в JetBrains и Huawei).

👉 Узнать, как ускорить разработку с AI
Чем INNER JOIN отличается от LEFT JOIN?

INNER JOIN возвращает только те строки, для которых нашлось совпадение в обеих таблицах. Если связи нет — строка не попадёт в результат.

LEFT JOIN возвращает все строки из левой таблицы плюс совпадающие из правой. Там, где совпадения нет, в столбцах правой таблицы будут NULL.

RIGHT JOIN — то же самое, но «главная» правая таблица.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1
Что такое нормализация и когда оправдана денормализация?

Нормализация — устранение избыточности через декомпозицию таблиц и связи между ними (нормальные формы 1NF–3NF/BCNF). Цель — целостность: данные хранятся в одном месте, нет аномалий вставки, обновления и удаления. Минус — много JOIN'ов при чтении.

Денормализация — намеренное дублирование данных ради скорости чтения, чтобы избежать дорогих соединений и агрегаций. Типична в аналитике, отчётах и read-heavy системах.

Это компромисс: денормализация ускоряет чтение, но усложняет поддержание согласованности при записи (одни и те же данные надо обновлять в нескольких местах). Выбор зависит от профиля нагрузки — что преобладает, чтение или запись.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1🤔1
🚀 Освойте разработку AI-агентов и получите доступ ещё к двум курсам Академии бесплатно!

В 2026 году просто писать код мало. Компании ищут инженеров, умеющих проектировать автономные системы и закрывать задачи бизнеса в разы быстрее.

Чтобы вы вышли на рынок с максимальным преимуществом, мы подготовили специальное предложение: покупаете курс по AI-агентам и ещё 2 курса Академии получаете бесплатно!

Соберите свой стек под оффер:

🔹 AI-агенты + AgentOps + Архитектура — комбо для бэкендеров и техлидов, чтобы внедрять ИИ без боли для прода.
🔹 AI-агенты + Математика + ML — для тех, кто хочет войти в Data Science.
🔹 AI-агенты + Алгоритмы — чтобы уверенно проходить хардкорные технические собесы.

Как это работает: вы оставляете заявку на курс по разработке AI-агентов и указываете еще два курса, которые хотите открыть в подарок.

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

👉 Забрать предложение и освоить ИИ-агентов
В чём разница между связанностью (coupling) и сцепленностью (cohesion)?

Cohesion (сцепленность)насколько элементы внутри одного модуля подчинены общей цели. Высокая сцепленность — это хорошо: модуль делает одну вещь и делает её хорошо.

Coupling (связанность)насколько модули зависят друг от друга. Низкая связанность — это хорошо: изменение в одном модуле не вынуждает переписывать другие.

Цель проектирования — high cohesion, low coupling. Такой код легче читать, тестировать, переиспользовать, а изменения в нём локализованы. Инструменты достижения — разделение ответственности, программирование на интерфейсах, внедрение зависимостей и принципы SOLID.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥21
🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от 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
— Предложить способ сделать код устойчивым к новым значениям, но НЕ замаскировать реальные баги

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

💬 Решения пишите в комменты под спойлер — сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤔31👍1
Что такое идемпотентность и почему она важна?

Идемпотентная операция при многократном выполнении даёт тот же результат, что и при однократном. В HTTP идемпотентны GET, PUT, DELETE, а POST — нет.

Почему это критично: в распределённых системах сетевые сбои и таймауты приводят к автоматическим повторам (retry). Если операция не идемпотентна — например, «снять 100 рублей» — повтор спишет деньги дважды.

Подходы к идемпотентности:

идемпотентные ключи (idempotency key) для дедупликации повторных запросов;
проектирование операций как «установить состояние X», а не «изменить на дельту»;
отслеживание уже обработанных id запросов.

Особенно важно для платежей и очередей сообщений с гарантией at-least-once.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2🤔1
⭐️ Dream Team 5-го потока: научитесь строить ИИ-агентов у практиков из BigTech

14 июля стартует новый поток курса по разработке ИИ-агентов, и в этот раз мы собрали по-настоящему звездный состав менторов. Это эксперты, которые прямо сейчас определяют развитие AI в России: Yandex Cloud, Avito AI Lab, cloud․ru и НИУ ВШЭ.

Чтобы ваш вход в ИИ-инженерию был максимально мощным, мы подготовили специальное предложение: до 30 июня при покупке курса по ИИ-агентам вы получаете еще 2 любых курса Академии в подарок! 🔥

Как это работает: вы оставляете заявку на курс по разработке ИИ-агентов и указываете менеджеру ещё два курса, которые хотите забрать бесплатно.

👉Заберите 3 курса по цене 1 на звездном потоке по ИИ-агентам
💬 Обратная связь

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

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

Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».

Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор

— В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление.

— Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.


👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
Чем композиция отличается от наследования?

Наследование — это отношение «is-a», поведение родителя достаётся подклассу статически на этапе компиляции. Композиция — отношение «has-a», объект делегирует работу вложенным объектам.

Проблемы наследования: сильная связанность с деталями реализации родителя (fragile base class), нарушение инкапсуляции, негибкость (только один родитель), лёгкость нарушить принцип Лисков.

Композиция более гибкая: поведение можно менять в рантайме (паттерн «Стратегия»), зависимости легко подменять в тестах, нет хрупкой иерархии. Отсюда принцип «предпочитай композицию наследованию». Наследование оправдано при настоящем «is-a» и стабильной иерархии.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2👏2
Что такое SQL-инъекция и как от неё защититься?

SQL-инъекция — это подстановка вредоносного пользовательского ввода в запрос, меняющая его логику.

Защита — подготовленные выражения (prepared statements) с привязкой параметров через PDO или mysqli: данные передаются отдельно от текста запроса и не интерпретируются как SQL.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
⚠️ Уже завтра стартует курс AgentOps!

Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.

🔥 Заберите 3 курса по цене 1:
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление).

● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽.

● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.


Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой.

👉 Забрать 3 курса по цене 1 и получить демо-урок
ОПРОС: Ответьте на пару вопросов и получите промокод на все наши курсы! 🎁

Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.

Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!

👉 Пройти опрос в Яндекс Формах и забрать промокод