Получить доступ

Что такое reactive programming и backpressure?

SeniorReactive и WebFluxWebFlux
Ещё спрашивают так:
  • Что такое Reactive Streams?
Коротко

Реактивное программирование — работа с асинхронными потоками данных через неблокирующие операторы. Backpressure — потребитель сам запрашивает столько элементов, сколько готов обработать (request(n)), и быстрый источник его не захлёстывает.

  • Reactive Streams: Publisher, Subscriber, Subscription, Processor (в Java 9 — Flow)
  • Project Reactor: Mono (0–1), Flux (0–N)
  • Без подписки ничего не происходит — цепочка ленивая

А ещё Цена: сложнее код, отладка и стектрейсы

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Идея. Вместо «вызвать и ждать результат» — описать конвейер преобразований, который выполнится, когда придут данные. Поток не блокируется на ожидании сети или базы и обслуживает другие задачи.

Reactive Streams — стандарт из четырёх интерфейсов: Publisher, Subscriber, Subscription (request(n), cancel()), Processor. В Java 9 вошёл как java.util.concurrent.Flow. Реализации: Project Reactor (Spring), RxJava.

Backpressure: подписчик говорит, сколько элементов готов принять, и издатель не отправит больше. Это защищает от переполнения памяти. Если источник не может замедлиться (события пользователей), выбирают стратегию: ограниченный буфер, отбрасывание, только последнее значение (onBackpressureBuffer, onBackpressureDrop, onBackpressureLatest).

Reactor: Mono<T> — 0 или 1 элемент, Flux<T> — поток. Операторы map, flatMap (асинхронный шаг), filter, zip, timeout, retry. Без subscribe (или возврата наружу, где подпишется фреймворк) ничего не выполнится.

Когда оправдано: много одновременных соединений с ожиданием (шлюзы, стриминг, SSE, WebSocket), потоковая обработка. Для обычного CRUD цена в сложности кода часто выше выгоды, а виртуальные потоки Java 21 дают похожую масштабируемость с простым кодом.

Что хотят услышать

  • Суть реактивного подхода.
  • Интерфейсы Reactive Streams и request(n).
  • Backpressure и стратегии.
  • Mono, Flux, ленивость, когда применять.

Частые ошибки

  • Ожидать выполнения цепочки без подписки.
  • Считать реактивность автоматически «быстрее».

Что спросят дальше

  • Чем Mono отличается от Flux?
  • Что такое hot и cold publisher?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем