Такие разборы задач отлично помогают потренироваться в подходах к решению рабочих задач + увеличить насмотренность.
Задача
Сценарий:
У нас есть e-commerce платформа, состоящая из:
веб-приложения,
брокера сообщений,
бэкенда.
Клиенты могут заказывать товары, а складская система проверяет наличие товаров на складе.
Каждый раз, когда клиент делает заказ, система отправляет запрос через брокер для проверки доступности товара на складе и блокирует его на время обработки заказа.
Проблема:
Клиенты могут:
добавлять несколько товаров в корзину одновременно,
отправлять несколько заказов.
Это приводит к тому, что резервируется больше товара, чем есть на складе.
Из-за этого возможны ситуации, когда товар отображается как доступный, но при попытке завершить заказ оказывается, что он уже заблокирован другим клиентом.
Необходимо:
Выявить процессы, которые происходят,
На основе этих процессов отобразить схему (sequence diagram) взаимодействия,
Предложить 2 способа оптимизации, чтобы избавиться от текущих проблем.
Решение
Выделим процессы, которые есть из описания задачи и разделим их на:
бизнес-процессы,
системные взаимодействия.
Начнём с бизнес-процессов
1. Добавление товара в корзину
проверка наличия товара на складе.
2. Оформление заказа
отправка полного списка товаров, которые выбрал клиент,
резервирование товаров для дальнейшего списания после оплаты.
Выделять больше процессов не вижу смысла - пока достаточно.
Теперь «как это выглядит под капотом»
Выделим компоненты системы:
Веб-приложение,
Бэкенд,
Брокер сообщений,
Сервис склада.
Добавление товара:
Клиент добавляет товар в корзину,
Веб-приложение отправляет запрос на добавление товара в корзину на бэкенд,
Бэкенд отправляет запрос на проверку наличия товара на складе через брокер,
Сервис склада вычитывает сообщение и сообщает, есть товар или нет,
Бэкенд возвращает ответ веб-приложению - можно добавить товар или нет.
Оформление заказа:
У клиента собрана корзина,
Он нажимает «Оформить»,
Веб-приложение отправляет запрос на бэкенд со списком товаров и количеством,
Бэкенд отправляет сообщение на резервирование товара через брокер,
Сервис склада вычитывает сообщение и резервирует товар или отклоняет запрос,
Бэкенд возвращает результат в веб-приложение,
При успешном резервировании - переходим к оплате, при неуспехе - отклоняем заказ.

Получилась ситуация AS IS
Теперь на основе этой диаграммы можем предложить изменения, которые помогут решить исходную проблему.
Напомню условия задачи:
> Клиенты могут добавлять несколько товаров в корзину одновременно и отправлять несколько заказов → резервируется больше товара, чем есть на складе → товар отображается как доступный, но при оформлении оказывается уже зарезервирован.
Первая неэффективность
Несколько клиентов добавили товар в корзину, но никто не зарезервировал его за собой.
Пример:
У нас 1 кг бананов на складе,
Три клиента добавили этот килограмм в корзину,
Для каждого товар отображается как доступный,
Но при оформлении заказа - только один сможет его купить.
Как можно обойти?
Переносим резервирование товара на этап добавления в корзину.
Когда клиент добавляет товар - мы сразу его резервируем.
Возможный кейс:
Клиент добавил товар, но не оформил заказ — например, ушёл от компьютера.
Товар остаётся заблокированным.
Решение:
Устанавливаем временное ограничение на резервирование (например, 15 минут).
Если клиент не оформляет заказ - товар возвращается на склад.

На этапе оформления заказа
Поскольку товар уже зарезервирован, на этом этапе мы просто подтверждаем заказ.
Можно пойти двумя путями:
Сразу списать товар при отправке заказа, чтобы он не разблокировался,
Обнулить резерв и списать товар после оплаты.
Личный выбор:
Я склоняюсь к первому варианту. Если заказ не оплатят - просто вернём значения на склад.

На этом все
И помните, что эта задача из реального собеседования.
Когда вы её решаете, то на это есть всего 15-20 минут времени и интервьюер хочет понять:
какую теоретическую базу вы знаете,
как вы мыслите,
как умеете применять знания на практике.