«Diamond problem» возникает при
В Java классы
#tests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3🔥1
👀 Задача с собеса: «Single-flight» объединение запросов к внешнему API (middle+)
Компания ловит шторма трафика: десятки потоков одновременно дергают один и тот же медленный эндпоинт (например, профили клиентов). Хотят убрать дубликаты запросов и снизить нагрузку на апстрим. Задача:
▪️ Условия
— 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
Компания ловит шторма трафика: десятки потоков одновременно дергают один и тот же медленный эндпоинт (например, профили клиентов). Хотят убрать дубликаты запросов и снизить нагрузку на апстрим. Задача:
Реализуйте 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: проверка сроков строго точечная; протухшее удаляем перед использованием.
— Ошибки: один промах/ошибка должны одинаково прилететь всем конкурентным ожидающим.
— Производительность: никакой синхронизации на весь объект; один ключ — одна «тонкая» операция.
#practice
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2
Как вы и просили: добавили тестово теги по темам. Что скажете?
🔥 — Супер, удобно
😁 — Неудобно, верните как было
Если есть какие-то комментарии/мысли на этот счёт → велком в комменты.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17😁5❤2🤔1
Lazy loading — данные загружаются
Eager loading — связанные данные загружаются
Выбор стратегии зависит от сценария и баланса между производительностью и простотой.
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1👏1
Effective final — это
Компилятор Java рассматривает такие переменные как final и
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏1🤔1
ThreadLocal — это механизм, который
Применения:
—
—
—
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
Микросервисы — это
Они взаимодействуют между собой через
Главные плюсы —
Такой подход противопоставляется
#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1🔥1👏1
this — это
—
—
—
—
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥1
ConcurrentHashMap использует
В отличие от Collections.synchronizedMap(...), который
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2👏1
Попробуем новый формат, сами задачки будут разные. Представим задачу 👇
Есть список строк:
List<String> names = List.of("Alice", "Bob", "Anna", "Brian", "Alex");
📋 Задание:
Сгруппируйте имена по первой букве и выведите результат в формате:
A -> [Alice, Anna, Alex]
B -> [Bob, Brian]
Ставьте →🔥, если зашёл формат. Если нет, то → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27🤔3👍2
Escape analysis — это
—
—
—
Таким образом
#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2👏1
happens-before — это гарантированный порядок между операциями, который определяет, что э
Примеры гарантий happens-before:
Без гарантии happens-before два потока могут видеть
#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥1👏1
Это разные виды ссылок на объекты из java.lang.ref:
🔹 SoftReference —
🔹 WeakReference —
🔹 PhantomReference —
#jvm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3👏1
Spring AOP обычно работает через
Ограничения:
—
—
—
—
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2🎉1
⏳ Время прокачать алгоритмы с 40-процентной скидкой до конца октября
На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.
🔹 В курсе ты научишься:
— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.
🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!
🔗 Подробнее о курсе
На собеседовании не просят бездумно написать шаблонное решение. Важно понимать, как работают алгоритмы под капотом.
🔹 В курсе ты научишься:
— искать ошибки с помощью редакционного расстояния;
— работать с балансированными деревьями и графами;
— решать задачи с динамическим программированием;
— и многое другое, что пригодится на собеседованиях.
🤔 Решаешь задачи только в тг каналах? Пройди курс и отправляйся на реальные собеседования!
🔗 Подробнее о курсе
Идемпотентность означает, что
Способы реализации:
—
—
—
—
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👏1🌚1
Продолжаем тестить новый формат. Представим задачу 👇
У вас есть Spring Boot-приложение. Нужно собрать Docker-образ, который:
1. Основан на официальном JDK 21
2. Поддерживает порт 8080
3. Настраивает часовой пояс контейнера на Москву (Europe/Moscow)
📦 Задание:
Составьте Dockerfile, который корректно запускает приложение в контейнере по условиям выше.
Ставьте →🔥, если зашёл формат. Если нет, то → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍3👏1🤔1
Propagation (передача транзакции) — политика того, как метод с аннотацией @Transactional будет взаимодействовать с существующей транзакцией.
Виды:
▪️
▪️ REQUIRES_NEW:
▪️
▪️ MANDATORY:
▪️
▪️ NESTED:
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥1👏1
DispatcherServlet — это
Он принимает все входящие
🔹 При получении запроса он:
— Определяет нужный
— Передаёт выполнение
— Обрабатывает результат с помощью
#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1
💡 Задача с собесеседования
Недавно в одном известном всем банке кандидату была предложена задача:
Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.
🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.
🔍 На курсе вас ждет:
— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.
📅 Старт: 6 ноября
⏰ Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)
🔗 Узнать больше и записаться
Недавно в одном известном всем банке кандидату была предложена задача:
Есть клиент, который за месяц делает 1000 транзакций.
Нужно посчитать вероятность того, что среди них окажется хотя бы одна дублирующаяся сумма, если каждая сумма округляется до 2 знаков после запятой.
Вероятности, распределения, матожидание, градиенты — всё это может всплыть на интервью, и даже в продовых задачах.
🎓 Proglib запускает экспресс-курс «Математика для Data Science» — для тех, кто хочет закрыть эти пробелы и понять математику быстро, качественно и без боли.
🔍 На курсе вас ждет:
— линейная алгебра, анализ, теория вероятности и статистика;
— градиенты, матрицы и экстремумы функций;
— математики и алгоритмы машинного обучения;
— много практики.
📅 Старт: 6 ноября
⏰ Формат: 10 вебинаров и 3 практических проекта
💬 Поддержка: менторы + Telegram-чат
💰 Стоимость: 37 000 ₽ (есть рассрочка)
🔗 Узнать больше и записаться
😁4❤2🔥1