Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Pessimistic Lock — блокируем строку в БД на время транзакции. Никто другой не может её изменить до снятия блокировки.
SELECT * FROM orders WHERE id = 1 FOR UPDATE;
Применять когда: высокая вероятность конфликта, критичные финансовые операции, короткие транзакции.
Минус: снижает throughput, риск дедлоков при блокировке нескольких строк в разном порядке.
Optimistic Lock — блокировки нет. У записи есть поле version. При обновлении проверяем, что версия не изменилась:
UPDATE orders SET status = 'paid', version = 6
WHERE id = 1 AND version = 5;
Если affected_rows = 0 — кто-то успел раньше, делаем retry или возвращаем ошибку.
Применять когда: конфликты редки, операции долгие (нельзя держать блокировку), высокий параллелизм.
Минус: нужен retry-механизм, сложнее реализовать корректно.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥1
Случайно сделал коммит с ошибкой. Как быстро исправить не создавая новый?
Anonymous Quiz
15%
git revert
20%
git revert HEAD
46%
git commit -- amend
19%
git commit -- revert
🔥5👍1
😱 Если ваш продукт не умеет отдавать данные в формате, понятном AI-агенту, то вас просто не существует
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
MCP и A2A-взаимодействие, чтобы агенты могли вас читать;— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Что означает буква "D" в принципах SOLID?
Anonymous Quiz
5%
Dependency Decoupling — разделение зависимостей на разные слои архитектуры
88%
Dependency Inversion — высоко- и низкоуровневые модули зависят от абстракций
4%
Dependency Determination — определение зависимостей для классов и методов
4%
Dependency Demarcation — разграничение зон ответственности для зависимостей
❤4👍1
Какой признак характерен для архитектуры CQRS?
Anonymous Quiz
12%
Разделение клиентской и серверной частей
82%
Разделение команд (изменений) и запросов (чтения)
3%
Использование одного сервиса для чтения и записи
2%
Отказ от реактивщины
❤5👍1🥱1
Используется Doctrine transport. Какая семантика доставки сообщений?
Anonymous Quiz
15%
At-most-once
15%
Exactly-once
67%
At-least-once с возможностью ретраев и “failed”-queue
3%
Гарантия завист от версии PHP
👍2❤1🔥1
Текущий уровень сложности задачек?
🔥 — Слишком просто, хочу сложнее
👍🏼 — В самый раз
❤️ — Иногда сложновато
😁 — Часто не понимаю
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5😁4❤2
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Event-driven architecture — это когда компоненты общаются через события, не зная друг о друге напрямую.
// Событие:
class UserRegistered {
public function __construct(public readonly User $user) {}
}
// Listener:
class SendWelcomeEmail {
public function handle(UserRegistered $event): void {
$this->mailer->send($event->user->email, 'Welcome!');
}
}
// Диспетчер:
$dispatcher->dispatch(new UserRegistered($user));
Зачем
В Laravel: Event / Listener, EventServiceProvider.
В Symfony: EventDispatcher, декларация через атрибуты.
Подводный камень: сложно трейсить цепочку — одно событие вызывает другое.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
Что обеспечивает идемпотентность?
Anonymous Quiz
34%
Уникальный индекс по payload
12%
Авто-дедупликация брокер
2%
sleep(1) между ретраями
52%
Транзакция БД и запись обработанного event_id
❤1👍1🔥1
Какие темы освещать чаще?
🔥 — PHP Core
👍🏼 — Laravel / Symfony
❤️ — Паттерны и дизайн
😁 — Предложу в комменты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25🔥25👍18😁2
🤔 Какая главная проблема этого кода и как её правильно решить?
Anonymous Quiz
2%
Нужно добавить try/catch — код упадёт, если база недоступна
80%
N+1: для каждого пользователя выполняется отдельный SQL-запрос. Нужно использовать withCount()
16%
Логику нужно вынести в UserService, контроллер не должен работать с моделями
2%
$result = [] неэффективен, нужно использовать Laravel Collection с map()
❤2👍1🔥1🥱1
Какова временная сложность сортировки слиянием (Merge Sort) в худшем случае?
Anonymous Quiz
15%
O(log n)
35%
O(n^2)
10%
O(n)
40%
O(n log n)
👍2🔥1
Какой основной компонент используется для хранения данных в Elasticsearch?
Anonymous Quiz
28%
Коллекции
32%
Документы
33%
Индексы
7%
Таблицы
👍1🔥1🥱1
Код рабочий, но что здесь не так?
Anonymous Quiz
8%
str_replace небезопасен для шаблонов, нужен Twig или Blade
11%
Метод делает слишком много вещей и его невозможно нормально протестировать
22%
file_get_contents на каждый вызов. Если отправить 1000 писем в цикле, будет 1000 обращений к диску
59%
Все три проблемы
❤1👍1
В первой части постов навалили жесткой базы, чтобы вправить мозги на место. Во второй дали конкретные инструменты, фреймворки и пошаговые инструкции, что нужно кодить прямо сейчас.
Часть 1. Введение, юзкейсы и реальность
Разбираемся с терминами, снимаем розовые очки и смотрим, где ИИ реально приносит бабки, а где только жжет нервы:
1. «Так что вообще считается AI-агентом?»
2. «Где тут бот, а где уже AI-агент?»
3. «Не надо пихать AI-агента в каждую задачу»
4. «Что уже можно спокойно делать через AI-агентов?»
5. «А что через AI-агентов пока лучше не трогать?»
Часть 2. Изнанка, ошибки и архитектура
Как всё это устроено под капотом, чтобы не слить бюджет и не наломать дров на старте:
6. «Можно ли просто сесть вечером и собрать себе AI-агента?»
7. «С чего вообще начать, если хочется попробовать AI-агентов»
8. «Почему AI-агент может внезапно начать творить дичь»
9. «Где AI-агенты реально экономят время, а где только добавляют возни»
10. «Почему они жрут столько денег?»
Часть 3. Хардкорная практика (Что делать руками)
Хватит теории. Открываем ноут, запускаем Cursor и делаем нормальные, отказоустойчивые системы:
11. «Почему одного промпта мало?»
12. «Почему AI-агенту мало просто “дать доступ к данным”»
13. «Если не следить за AI-агентом, он быстро начинает жить своей жизнью»
14. «Собрать демку легко. Но как же сделать нормально»
15. «Как сделать, чтобы это не развалилось через неделю?»
Please open Telegram to view this post
VIEW IN TELEGRAM
Что произойдёт, если два воркера вызовут deductBalance(1, 100) одновременно при балансе пользователя 150?
Anonymous Quiz
13%
Второй вызов вернёт false — база сама обработает конкурентность
54%
Оба спишут по 100
18%
Один вызов бросит исключение из-за deadlock
15%
Запросы выполнятся последовательно — MySQL сам блокирует строку на SELECT
👍3😁3😢1