Опишите технически сложный или интересный проект, над которым вы работали в последнее время.

Ответ

Проект: Система динамического ценообразования и управления инвентарем в реальном времени для e-commerce платформы.

Стек: Java 17, Spring Boot, Apache Kafka, Redis, PostgreSQL, Kubernetes.

Ключевые задачи и решения:

  1. Обработка событий в реальном времени:

    • Использовал Apache Kafka как бэкбон событий (просмотры товаров, покупки, возвраты).
    • Разработал потоковые обработчики (Kafka Streams) для агрегации данных и расчета спроса.
    @Component
    public class DemandCalculator {
        @KafkaListener(topics = "user.view-events")
        public void processViewEvent(ProductViewEvent event) {
            // Агрегируем просмотры в окне за последний час
            String key = event.getProductId() + "_" + getCurrentHour();
            redisTemplate.opsZSet().incrementScore("demand:hourly", key, 1.0);
        }
    }
  2. Алгоритм ценообразования:

    • Реализовал адаптивный алгоритм на основе спроса, остатков и конкурентных данных.
    • Использовал Redis для хранения кэшированных цен и счетчиков с TTL для обеспечения высокой скорости отклика (<10 мс).
  3. Синхронизация данных:

    • Обеспечил консистентность между сервисом цен, каталогом и заказами через события (паттерн Event-Driven Architecture).

Результат: Система обрабатывает ~5000 событий/сек, увеличила маржинальность на 5.2% за счет динамического ценообразования и сократила случаи отсутствия товара на складе на 18%.

Ответ 18+ 🔞

А, слушай, смотри, какой у меня тут проект был — просто ёперный театр! Система, которая цены на лету меняет и за остатками следит для одной маркетплейс-помойки. Ну, знаешь, чтобы не получилось как в том анекдоте: «Товар есть, но его нет, а цена такая, что проще самому это сделать, блядь».

На чём горбатился: Java семнадцатая, Spring Boot, Apache Kafka, Redis, PostgreSQL и это всё в кубернетесе болталось, как манда с ушами.

И что я там такого наворотил, спросишь? А вот что:

  1. События в реальном времени, ага.

    • Взял Apache Kafka и сделал из него главную канализационную трубу для всех событий: что посмотрели, что купили, что вернули обратно с криком «Нахуй не надо!».
    • Нагородил сверху потоковых обработчиков (Kafka Streams), которые эти события жуют, переваривают и считают, какой товар сейчас в тренде. Просто сидят и агрегируют, блядь.
    @Component
    public class DemandCalculator {
        @KafkaListener(topics = "user.view-events")
        public void processViewEvent(ProductViewEvent event) {
            // Собираем статистику, сколько раз на товар за последний час пялились
            String key = event.getProductId() + "_" + getCurrentHour();
            redisTemplate.opsZSet().incrementScore("demand:hourly", key, 1.0);
        }
    }

    Типа, если все на один и тот же утюг смотрят — значит, пора ценник подкручивать, хитрая жопа!

  2. Алгоритм ценообразования — мозг системы.

    • Написал алгоритм, который как ушлый барыга на рынке: смотрит на спрос, заглядывает на склад, шерстит цены конкурентов и выдает итоговую цифру. Адаптируется, сука, на лету!
    • Чтобы не тупить и не лазить каждый раз в базу, Redis прикрутил. Все расчётные цены и счётчики туда пихаются с временем жизни. Скорость отклика — меньше 10 миллисекунд, ёбта! Кликнул — и цена уже другая, волнение ебать.
  3. Чтобы везде всё совпадало.

    • Сделал так, чтобы сервис цен, каталог и служба заказов не жили каждый в своей песочнице, а общались через события (Event-Driven Architecture, блядь). Цена изменилась — все сразу в курсе, пиздопроебищно. Не должно же быть такого, что в корзине одна цена, а на странице оплаты — овердохуища другая.

И что в сухом остатке, спросишь? Система жрёт около 5000 событий в секунду, не подавившись. Благодаря ей маржинальность подняли на 5.2% — просто потому, что вовремя цену поднимали, когда все хотели купить. И случаев, когда товар «в наличии», но его уже нет, стало меньше на 18%. То есть, не обсирали покупателей почём зря. Вроде мелочь, а приятно, блядь.