Задача с собеса: Потокобезопасный LRU-кэш с TTL (middle)
Интересная задачка с реального собеседования:
🔘 Условия
1. put(k, v) кладёт значение с TTL (единый для экземпляра).
2. get(k) возвращает значение или null, если пары нет или истёк TTL.
3. При переполнении удаляется «наименее недавно использованный» элемент.
4. Решение должно быть неблокирующим по чтению или, как минимум, с короткими критическими секциями.
5. Допустимо ленивое удаление устаревших записей (на чтении/записи).
💡 Ключевые моменты:
— Выбор структуры: LinkedHashMap с accessOrder=true даёт LRU «из коробки».
— TTL: храните expireAt на элемент; чистите лениво и/или периодически.
— Потоки: короткие секции под ReentrantReadWriteLock (или один ReentrantLock) вокруг критичных операций.
— Амортизация O(1): не делайте полных проходов по карте на каждом вызове.
❓ Возможная реализация в комментариях. Пишите также ваши реализация и способы оптимизации.
✅ Java библиотека #java
Интересная задачка с реального собеседования:
Компания хочет снизить нагрузку на БД и внешние API. Реализуйте in-memory кэш, который:
— хранит не более N элементов (LRU-политика вытеснения)
— истекает срок действия записей по TTL
— потокобезопасен и работает за O(1) на get/put
1. put(k, v) кладёт значение с TTL (единый для экземпляра).
2. get(k) возвращает значение или null, если пары нет или истёк TTL.
3. При переполнении удаляется «наименее недавно использованный» элемент.
4. Решение должно быть неблокирующим по чтению или, как минимум, с короткими критическими секциями.
5. Допустимо ленивое удаление устаревших записей (на чтении/записи).
— Выбор структуры: LinkedHashMap с accessOrder=true даёт LRU «из коробки».
— TTL: храните expireAt на элемент; чистите лениво и/или периодически.
— Потоки: короткие секции под ReentrantReadWriteLock (или один ReentrantLock) вокруг критичных операций.
— Амортизация O(1): не делайте полных проходов по карте на каждом вызове.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5❤4😁1
🔥 25 сентября в 20:00 мск — открытый вебинар в OTUS!
О чём?
В мире высоконагруженных систем с сотнями сервисов управление конфигурацией, сервис-дискавери и координация компонентов — это настоящий вызов. Apache ZooKeeper — проверенное решение для создания надёжных и управляемых распределённых систем.
Что разберём:
- ZooKeeper: что это и зачем он нужен в распределённых системах.
- Архитектура: ZNode, лидер-выборы, механизмы согласованности.
- Применение: сервис-дискавери, управление конфигурацией, координация задач.
- Ограничения: сравнение ZooKeeper с Etcd и Consul.
- Практика: реальные кейсы использования в highload-системах.
🎓 После вебинара вы:
- Поймёте, как ZooKeeper решает задачи координации и конфигурации.
- Узнаете, когда использовать ZooKeeper, а когда выбрать Etcd или Consul.
🔧 Присоединяйтесь, чтобы освоить мощный инструмент для построения масштабируемых и отказоустойчивых систем!
👉 Зарегистрироваться https://vk.cc/cPItpe
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
О чём?
В мире высоконагруженных систем с сотнями сервисов управление конфигурацией, сервис-дискавери и координация компонентов — это настоящий вызов. Apache ZooKeeper — проверенное решение для создания надёжных и управляемых распределённых систем.
Что разберём:
- ZooKeeper: что это и зачем он нужен в распределённых системах.
- Архитектура: ZNode, лидер-выборы, механизмы согласованности.
- Применение: сервис-дискавери, управление конфигурацией, координация задач.
- Ограничения: сравнение ZooKeeper с Etcd и Consul.
- Практика: реальные кейсы использования в highload-системах.
🎓 После вебинара вы:
- Поймёте, как ZooKeeper решает задачи координации и конфигурации.
- Узнаете, когда использовать ZooKeeper, а когда выбрать Etcd или Consul.
🔧 Присоединяйтесь, чтобы освоить мощный инструмент для построения масштабируемых и отказоустойчивых систем!
👉 Зарегистрироваться https://vk.cc/cPItpe
Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤4👍3🔥2
Forwarded from Java Guru 🤓
Какой потенциальный риск присутствует?
Anonymous Quiz
23%
Код работает корректно, проблем нет
26%
future.get() может зависнуть навсегда
9%
Высокая нагрузка на потокобезопасные ресурсы, нужен synchronized
18%
CompletableFuture.supplyAsync() блокирует основной поток
24%
future.get() может выбросить NullPointerException
👍7🔥2😁2
В новой версии Spring Boot 4, которая выйдет в ноябре 2025 года, разработчики получат ряд значительных улучшений, включая поддержку Jakarta EE 11, интеграцию с GraalVM 24 и улучшенную совместимость с Kotlin 2.2.
Spring Boot 4 перейдёт на Jakarta EE 11, что обеспечит поддержку Servlet 6.1, JPA 3.2 с Hibernate ORM 7.0 и Bean Validation 3.1. Это улучшит работу с веб-API и базами данных, а также обеспечит лучшую поддержку Kotlin и Java records.
Поддержка GraalVM 24 позволит создавать нативные образы с улучшенной производительностью и меньшим временем запуска, что особенно важно для микросервисной архитектуры и облачных приложений.
Spring Boot 4 улучшит работу с Kotlin 2.2, включая поддержку новых возможностей языка и улучшенную интеграцию со сборкой Gradle, что упростит разработку на Kotlin.
Улучшенные Buildpacks и более эффективная сборка Docker-образов обеспечат лучшую поддержку облачных технологий и контейнеризации, что упростит развертывание приложений.
Spring Boot 4 будет основан на Spring Security 7, обеспечивая улучшенную интеграцию с OAuth 2.2 и OIDC, а также улучшенные криптографические настройки по умолчанию для повышения безопасности приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤8🔥3
🏗 Курс “Архитектура и шаблоны проектирования” от OTUS — набор заканчивается. Успейте занять место в группе обучения!
Почему стоит записаться сейчас:
• 50% практики: вебинары, задания, проекты
• Онлайн-занятия 2 раза в неделю + записи навсегда
• Поддержка опытных менторов
💡 Кому подойдёт:
• Fullstack/Backend разработчикам
• DevOps-инженерам
• Desktop-разработчикам
✅ После курса вы сможете:
• Применять архитектурные шаблоны и SOLID
• Рефакторить и писать чистый код
• Выбирать оптимальные решения
⏳ Места ограничены. Пройдите вступительный тест
👉 Пройти тест и записаться:
https://vk.cc/cPLfhg
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Почему стоит записаться сейчас:
• 50% практики: вебинары, задания, проекты
• Онлайн-занятия 2 раза в неделю + записи навсегда
• Поддержка опытных менторов
💡 Кому подойдёт:
• Fullstack/Backend разработчикам
• DevOps-инженерам
• Desktop-разработчикам
✅ После курса вы сможете:
• Применять архитектурные шаблоны и SOLID
• Рефакторить и писать чистый код
• Выбирать оптимальные решения
⏳ Места ограничены. Пройдите вступительный тест
👉 Пройти тест и записаться:
https://vk.cc/cPLfhg
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤2👍2🔥2🎅1
Архитектура микросервисного приложения, оптимизированная для продакшн-окружения
Основные компоненты:
1️⃣ API Gateway — точка входа, которая маршрутизирует запросы и балансирует нагрузку
2️⃣ Service Registry — централизованный реестр для обнаружения сервисов
3️⃣ Service Layer — набор независимых микросервисов с четким разделением задач
4️⃣ Authorization Server — безопасность через авторизацию
5️⃣ Database Layer — репликация для надежности
6️⃣ Distributed Cache — ускорение доступа к данным
7️⃣ Distributed Messaging — асинхронное взаимодействие
8️⃣ Queue Management Interface — мониторинг очередей
9️⃣ ELK Stack — сбор и анализ логов
Подписывайся на наш канал в Max🟪
Основные компоненты:
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9🔥7
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
70%
5
22%
10
6%
Ошибка компиляции
1%
null
2%
UnsupportedOperationException
👍9🔥6❤1
Forwarded from Книги для Java программиста
Modern Concurrency in Java: A Deep Dive into Virtual Threads, Structured Concurrency, and Scoped Values (2025) PDF
Welcome to the future of Java. With this book, you'll explore the transformative world of Java 21's key feature: virtual threads. Remember struggling with the cost of thread creation, encountering limitations on scalability, and facing difficulties in achieving high throughput? Those days are over. This practical guide takes you from Java 1.0 to the cutting-edge advancements of Project Loom.
You'll learn more than just theory. Author A N M Bazlur Rahman equips you with a toolkit for taking real-world action. Take a deep dive into the intricacies of virtual threads and complex topics such as ForkJoinPool, continuation, rate limiting, debugging, and monitoring. You'll not only learn how they work, but you'll also pick up expert tips and tricks to help you master these concepts. And you'll learn about structured concurrency and scoped values—critical skills for building Java applications that are scalable and efficient.
Welcome to the future of Java. With this book, you'll explore the transformative world of Java 21's key feature: virtual threads. Remember struggling with the cost of thread creation, encountering limitations on scalability, and facing difficulties in achieving high throughput? Those days are over. This practical guide takes you from Java 1.0 to the cutting-edge advancements of Project Loom.
You'll learn more than just theory. Author A N M Bazlur Rahman equips you with a toolkit for taking real-world action. Take a deep dive into the intricacies of virtual threads and complex topics such as ForkJoinPool, continuation, rate limiting, debugging, and monitoring. You'll not only learn how they work, but you'll also pick up expert tips and tricks to help you master these concepts. And you'll learn about structured concurrency and scoped values—critical skills for building Java applications that are scalable and efficient.
❤10
Хотите ускорить написание кода и избежать повторений? Используйте Live Templates для создания шаблонов кода, которые можно вставлять за пару кликов.
— Позволяет создавать шаблоны кода для часто используемых конструкций
— Поддерживает параметры и автозамену (например, поля и методы)
— Работает для Java, Kotlin, HTML, и других языков
— Сокращает время на написание повторяющихся конструкций
— Уменьшает количество ошибок за счёт предсказуемых шаблонов
— Улучшает производительность и помогает не забыть важные моменты
— Ctrl+J (или Cmd+J на macOS) — откроет список шаблонов
— Можно создать свой шаблон в Settings → Editor → Live Templates
— Настройте шаблон под ваши нужды, и используйте его с удобным сокращением
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤5🔥5
Podlodka Crew 29 сентября запускает новую конференцию — Podlodka AI Crew 🥳
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
👍3🔥3❤2
PostgreSQL 17 изнутри (2025) PDF
Рассматривается внутреннее устройство СУБД PostgreSQL: детали реализации многоверсионности и изоляции на основе снимков данных, включая процедуру очистки неактуальных версий строк; буферный кеш и журнал предзаписи; использование блокировок различных уровней; планирование и выполнение SQL-запросов; принципы расширяемости и особенности имеющихся индексных методов доступа. Большое внимание уделяется возможностям, предоставляемым для самостоятельного изучения механизмов функционирования PostgreSQL. В новом издании учтены замечания читателей и исправлены опечатки, а также внесены изменения, произошедшие в версии PostgreSQL 17.
Подписывайся на наш канал в Max🟪
Рассматривается внутреннее устройство СУБД PostgreSQL: детали реализации многоверсионности и изоляции на основе снимков данных, включая процедуру очистки неактуальных версий строк; буферный кеш и журнал предзаписи; использование блокировок различных уровней; планирование и выполнение SQL-запросов; принципы расширяемости и особенности имеющихся индексных методов доступа. Большое внимание уделяется возможностям, предоставляемым для самостоятельного изучения механизмов функционирования PostgreSQL. В новом издании учтены замечания читателей и исправлены опечатки, а также внесены изменения, произошедшие в версии PostgreSQL 17.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍12❤8🔥4
Когда выбрать EnumMap вместо HashMap
В стандартной библиотеке Java есть множество реализаций Map, но когда в качестве ключей используются значения перечислений (enum), оптимальным выбором будет именно EnumMap.
🟢 Логика выбора коллекции
🔘 HashMap — универсальный ключ-значение, хранит что угодно, но тратит память на hashCode.
🔘 TreeMap — ключи в отсортированном порядке, но медленнее.
🔘 LinkedHashMap — хранит порядок вставки.
🔘 EnumMap — заточен под enum-ключи, самый быстрый и компактный для этого случая.
🟢 Почему EnumMap крут
🔘 Использует массив под капотом, а не хеш-таблицу — значит, lookup работает за O(1) без вычисления хэшей.
🔘 Очень экономен по памяти (не хранит объекты Map.Entry).
🔘 Гарантированно хранит ключи в порядке объявления enum-констант.
🟢 Пример
✔️ Когда использовать
— Ключи всегда являются значениями одного enum.
— Важен быстрый доступ к элементам и сохранение порядка ключей.
— Необходимо минимизировать использование памяти.
❌ Когда не подходит
— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.
❓ Расскажите про боевой кейс использования в комментах.
Подписывайся на наш канал в Max🟪
В стандартной библиотеке Java есть множество реализаций Map, но когда в качестве ключей используются значения перечислений (enum), оптимальным выбором будет именно EnumMap.
enum Status { NEW, IN_PROGRESS, DONE }
EnumMap<Status, String> map = new EnumMap<>(Status.class);
map.put(Status.NEW, "Создан");
map.put(Status.IN_PROGRESS, "В работе");
map.put(Status.DONE, "Завершён");
for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
— Ключи всегда являются значениями одного enum.
— Важен быстрый доступ к элементам и сохранение порядка ключей.
— Необходимо минимизировать использование памяти.
— Ключи не являются enum.
— Требуется поддержка null в качестве ключа.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5❤4
Лучший способ вырасти — это персональный план развития от Senior-инженера из БигТеха.
Вот как все работает:
Мы в ШОРТКАТ провели уже почти 1000 таких мок-интервью и получили оценку 4.9/5, поэтому знаем о чем говорим.
Мы хотим, чтобы у каждого была возможность проверить в деле наш сервис, а потом уже доверить нам свое развитие.
Переходи в нашего бота и забирай свой мок за 900 рублей → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4👍3
Pro Spring 6 with Kotlin: An In-depth Guide to Using Kotlin APIs in Spring Framework 6 (2023) True PDF, ePUB
Master the fundamentals of Spring Framework 6 while learning from the real-world experiences of Spring experts. Over the course of this book, you'll learn how to leverage Spring 6 in tandem with the Kotlin programming language to build complex enterprise applications from top to bottom. From monoliths to cloud native apps for streaming microservices, you’ll gain insight into every aspect of the process, including transactions, data access, persistence, and web and presentation tiers.
As you progress through the book, the authors demonstrate how to run Kotlin with a single command, deploy new utility methods in String class, use Local-Variable Syntax for Lambda Parameters Nested Based Access Control, read/write strings to and from files, and using Flight Recorder.
Подписывайся на наш канал в Max🟪
Master the fundamentals of Spring Framework 6 while learning from the real-world experiences of Spring experts. Over the course of this book, you'll learn how to leverage Spring 6 in tandem with the Kotlin programming language to build complex enterprise applications from top to bottom. From monoliths to cloud native apps for streaming microservices, you’ll gain insight into every aspect of the process, including transactions, data access, persistence, and web and presentation tiers.
As you progress through the book, the authors demonstrate how to run Kotlin with a single command, deploy new utility methods in String class, use Local-Variable Syntax for Lambda Parameters Nested Based Access Control, read/write strings to and from files, and using Flight Recorder.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥4
charBuffer
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит java.nio.
Этот метод возвращает объект CharBuffer, который представляет последовательность символов строки.
CharBuffer позволяет эффективно читать и манипулировать символами строки без создания копий.
В этом примере создается строка «Hello». Затем из этой строки получаем буфер символов методом charBuffer().
В цикле посимвольно читаем из буфера символы и выводим их на экран.
Подписывайся на наш канал в Max🟪
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит java.nio.
Этот метод возвращает объект CharBuffer, который представляет последовательность символов строки.
CharBuffer позволяет эффективно читать и манипулировать символами строки без создания копий.
В этом примере создается строка «Hello». Затем из этой строки получаем буфер символов методом charBuffer().
В цикле посимвольно читаем из буфера символы и выводим их на экран.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6🔥6
<dependency>
<groupId>com.navercorp.fixturemonkey</groupId>
<artifactId>fixture-monkey-starter</artifactId>
<version>1.0.20</version>
<scope>test</scope>
</dependency>
Fixture Monkey позволяет упростить написание тестов, облегчая генерацию необходимых тестовых объектов.
При этом можно повторно использовать одни и те же конфигурации объектов в нескольких тестах.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥4