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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Объекты передаются в функцию по ссылке или по значению?

Объекты передаются по «хэндлу» (идентификатору), а не копируются: менять состояние объекта внутри функции можно без &.
Массивы и скаляры передаются по значению, но копируются лениво — 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 ₽
Зачем нужны магические методы __get / __set / __call?

__get и __set срабатывают при обращении к недоступному или несуществующему свойству, __call — при вызове недоступного метода экземпляра, __callStatic — статического.

Они дают «перехват» обращений и применяются в прокси, ORM, фасадах.

Минусы: они медленнее прямого доступа, скрывают реальный API от IDE и статического анализа, поэтому злоупотреблять не стоит.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
Уже сегодня в 19:00 (МСК) стартует открытый урок!

Тема:

«Мультиагентные системы: почему большинство архитектур переусложнены»


🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа.

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

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

🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».

👉 Успей присоединиться к уроку
Разница между == и === ?

== сравнивает значения с приведением типов (loose), === сравнивает значение и тип (strict).

В PHP 8 нестрогое сравнение стало адекватнее: "abc" == 0 теперь false (раньше было true).

Для объектов: == равны, если тот же класс и равные свойства; === только если это одна и та же ссылка на объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥21🥱1
Что такое трейты и как решаются конфликты имён?

Трейты — механизм горизонтального переиспользования кода, обходящий ограничение единичного наследования. Набор методов и свойств подмешивается в класс через use.

Если два трейта дают метод с одинаковым именем, будет фатальная ошибка. Решается через insteadof (явно выбрать, чей метод оставить) и as (создать алиас второму).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1😢1
Что такое генераторы и оператор 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
🔥8🤔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
3🔥2👍1🤔1