Библиотека собеса по Java | вопросы с собеседований
6.29K subscribers
387 photos
8 videos
400 links
Вопросы с собеседований по Java и ответы на них.

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

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
👀 Задача с собеса: «Single-flight» объединение запросов к внешнему API (middle+)

Компания ловит шторма трафика: десятки потоков одновременно дергают один и тот же медленный эндпоинт (например, профили клиентов). Хотят убрать дубликаты запросов и снизить нагрузку на апстрим. Задача:

Реализуйте in-memory «single-flight» слой, который:

— Для одного и того же ключа выполняет ровно ОДНУ загрузку, остальные ожидают тот же результат.
— Имеет короткоживущий кэш (TTL) для защиты от штамповки (cache stampede).
— Потокобезопасен и работает за O(1) на обращение (без полных проходов).
— Прозрачно пробрасывает исключение всем конкурентным ожидателям, если загрузчик упал.


▪️ Условия


— API: CompletableFuture<V> getOrLoad(K key, Supplier<V> loader) (или Supplier<CompletableFuture<V>>, если загрузка уже async).

— Если в кэше есть не сгоревший ключ, вернуть немедленно. Если нет — запустить единственную загрузку на ключ и раздать один и тот же Future всем конкурентным вызовам.

— По завершении загрузки положить результат в кэш с expireAt.

— Удаление сгоревших записей ленивое (на чтении/записи), без фоновых сканеров.

— Критические секции минимальные; без глобальных блокировок.

💡 Ключевые моменты

— Объединение запросов: ConcurrentHashMap<K, CompletableFuture<V>> inFlight + computeIfAbsent исключит дубликаты.

— Кэш: ConcurrentHashMap<K, Entry<V>> cache, где Entry хранит value и expireAt.

— TTL: проверка сроков строго точечная; протухшее удаляем перед использованием.

— Ошибки: один промах/ошибка должны одинаково прилететь всем конкурентным ожидающим.

— Производительность: никакой синхронизации на весь объект; один ключ — одна «тонкая» операция.

💬 Возможная реализация в комментариях. Пишите также ваши реализация и способы оптимизации.

🐸 Библиотека собеса по Java

#practice
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2