🎯 Как быстро настроить кеширование в Spring Boot
Писать кеш руками через HashMap или страдать с вручную настроенными TTL — скучно, долго и ненадёжно. В Spring Boot всё уже готово: включаем, настраиваем, и поехали!
1️⃣ Добавляем зависимость
2️⃣ Включаем кеширование
Добавляем простую аннотацию над главным классом приложения (или конфиг классом):
3️⃣ Кешируем методы сервисов
Используем аннотацию @Cacheable на тех методах, которые часто выполняются и редко меняются:
Теперь при повторном вызове метода с тем же параметром ответ прилетит мгновенно.
4️⃣ Настройка TTL и конфигурация кеша
В Spring Boot по умолчанию используется простой ConcurrentMap (без TTL). Если хочешь TTL и прочие плюшки, подключайте Caffeine:
Кеш будет жить максимум 10 минут и не разрастаться до бесконечности.
5️⃣ Очистка кеша
Если нужно принудительно почистить кеш после обновления данных, используем @CacheEvict:
💬 Хранили когда-нибудь кеш в мапе?
🐸 Библиотека джависта #буст
Писать кеш руками через HashMap или страдать с вручную настроенными TTL — скучно, долго и ненадёжно. В Spring Boot всё уже готово: включаем, настраиваем, и поехали!
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
ИЛИ
implementation 'org.springframework.boot:spring-boot-starter-cache'
Добавляем простую аннотацию над главным классом приложения (или конфиг классом):
@SpringBootApplication
@EnableCaching
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Используем аннотацию @Cacheable на тех методах, которые часто выполняются и редко меняются:
@Service
public class UserService {
@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
simulateSlowService();
return userRepository.findById(id).orElseThrow();
}
private void simulateSlowService() {
Thread.sleep(3000);
}
}
Теперь при повторном вызове метода с тем же параметром ответ прилетит мгновенно.
В Spring Boot по умолчанию используется простой ConcurrentMap (без TTL). Если хочешь TTL и прочие плюшки, подключайте Caffeine:
spring:
cache:
type: caffeine
caffeine:
spec: maximumSize=500,expireAfterAccess=10m
Кеш будет жить максимум 10 минут и не разрастаться до бесконечности.
Если нужно принудительно почистить кеш после обновления данных, используем @CacheEvict:
@CacheEvict(value = "users", key = "#id")
public void updateUser(Long id, User updatedUser) {
userRepository.save(updatedUser);
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Джависты!
Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый джавист.
➡️ Поддержать канал: https://yangx.top/boost/javaproglib
Проголосуйте за наш канал, и в сторис мы опубликуем топ материалов, которые должен прочитать каждый джавист.
Please open Telegram to view this post
VIEW IN TELEGRAM
💼⌛️ ТОП-5 причин, почему программист не может долго найти работу
Почему некоторые разработчики остаются "между работами" месяцы?
Не всегда дело в нехватке вакансий или «рынок просел». Часто дело в подходе к поиску проекта. Вроде бы есть опыт, стек, даже pet-проекты, но офферов всё нет.
Часто корень проблемы — неумение продать себя правильно. Отказ выполнять тестовые задания, считая их ненужными или обидными. Кроме того, нежелание рассматривать стажировки как стартовую площадку для получения опыта и расширения профессиональных связей также может замедлить процесс трудоустройства. И это далеко не все возможные причины.
🔗 Подробнее в статье
🐸 Библиотека джависта
Почему некоторые разработчики остаются "между работами" месяцы?
Не всегда дело в нехватке вакансий или «рынок просел». Часто дело в подходе к поиску проекта. Вроде бы есть опыт, стек, даже pet-проекты, но офферов всё нет.
Часто корень проблемы — неумение продать себя правильно. Отказ выполнять тестовые задания, считая их ненужными или обидными. Кроме того, нежелание рассматривать стажировки как стартовую площадку для получения опыта и расширения профессиональных связей также может замедлить процесс трудоустройства. И это далеко не все возможные причины.
Please open Telegram to view this post
VIEW IN TELEGRAM
Потеряли коммит или неудачно выполнили git reset. Или может быть, ваша ветка с важной фичей вдруг исчезла.
git bisect
🔹 Что делает
Используется для поиска конкретного коммита, который привел к багу или проблеме. Это словно бинарный поиск среди всех ваших коммитов, который помогает быстро и точно найти тот, который сломал ваш код.
🔹 Пример
1. Запустите команду
git bisect start
2. Укажите, какой коммит был рабочим (good), а какой с ошибкой (bad):
git bisect good <хэш коммита с рабочим кодом>
git bisect bad <хэш коммита с багом>
3. Git автоматически переключит вас на средний коммит. Протестируйте его и ответьте, был ли он хорошим или с багом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 Главные проблемы распределенных систем (и способы их решения)
Распределенные системы являются основой высоконагруженных веб-приложений, обеспечивая их масштабируемость, отказоустойчивость и высокую производительность. Однако их разработка сопряжена с рядом сложностей, включая сетевые сбои, трудности координации, угрозы безопасности и проблемы масштабирования.
➡️ В этой статье мы рассмотрим четыре ключевых вызова в разработке таких систем и эффективные методы их преодоления.
🐸 Библиотека программиста
Распределенные системы являются основой высоконагруженных веб-приложений, обеспечивая их масштабируемость, отказоустойчивость и высокую производительность. Однако их разработка сопряжена с рядом сложностей, включая сетевые сбои, трудности координации, угрозы безопасности и проблемы масштабирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎧 Что послушать — #подкаст
🔹 Javaswag #76
Дата выпуска: 24 февраля 2025
Ведущий: Дмитрий Волыхин
Гость: Сергей Куксенко
Продолжительность: 2 часа 3 минуты
Выпуск для тех, кто хочет понимать Java «до винтиков». Сергей Куксенко — инженер из Oracle и ветеран в области производительности Java — рассказывает, как устроены компиляторы, зачем Java нужно тестировать бенчмарками, и почему проект Loom может перевернуть представление об асинхронности.
🔹 Ключевые темы выпуска
00:04:39 — Опыт Сергея в Excelsior и старте с Java
00:10:47 — Работа с компиляторами в Intel
00:15:13 — Производительность Java в Oracle
00:26:01 — Почему случаются регрессии
00:39:50 — Как собрать бенчмарки, которые действительно работают
00:52:12 — Асинхронщина и проект Loom
01:03:08 — Теория очередей и производительность
01:09:42 — Loom: плюсы и минусы
01:24:43 — Полугодовые релизы и их влияние
01:50:10 — Kotlin vs Java
02:00:00 — Острые мнения про Agile
🔗 Слушать выпуск
🐸 Библиотека джависта #буст
🔹 Javaswag #76
Дата выпуска: 24 февраля 2025
Ведущий: Дмитрий Волыхин
Гость: Сергей Куксенко
Продолжительность: 2 часа 3 минуты
Выпуск для тех, кто хочет понимать Java «до винтиков». Сергей Куксенко — инженер из Oracle и ветеран в области производительности Java — рассказывает, как устроены компиляторы, зачем Java нужно тестировать бенчмарками, и почему проект Loom может перевернуть представление об асинхронности.
🔹 Ключевые темы выпуска
00:04:39 — Опыт Сергея в Excelsior и старте с Java
00:10:47 — Работа с компиляторами в Intel
00:15:13 — Производительность Java в Oracle
00:26:01 — Почему случаются регрессии
00:39:50 — Как собрать бенчмарки, которые действительно работают
00:52:12 — Асинхронщина и проект Loom
01:03:08 — Теория очередей и производительность
01:09:42 — Loom: плюсы и минусы
01:24:43 — Полугодовые релизы и их влияние
01:50:10 — Kotlin vs Java
02:00:00 — Острые мнения про Agile
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from IT Job Hub | Работа и вакансии в IT
Как найти страну, где работа в IT приносит не только достойный доход, но и удовольствие от жизни? В этой статье Ксения Кравченко собрала семь лучших направлений для релокации айтишников в 2025 году — от стабильных хабов до быстрорастущих техноцентров.
Что в статье:
Если вы задумываетесь о переезде или просто хотите знать, где IT-навыки особенно ценны — самое время заглянуть в подборку
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Java, которому более 25 лет, продолжает развиваться — добавлены records, sealed classes, улучшен switch, появилась структурная деструкция… Но встроенных tuples (кортежей) по-прежнему нет.
Если вы хотите вернуть из метода два значения — создавайте Pair, Map.Entry, или пишите собственный класс. Три значения? Добро пожаловать в ад. А в других языках это давно решено.
— Почему, по-вашему, в Java до сих пор нет встроенной поддержки кортежей?
— Нужны ли они вообще в Java?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 JavaOne 2025
С 18 по 20 марта в Redwood Shores, Калифорния, прошла конференция JavaOne. Среди ключевых тем — релиз Java 24, упрощение синтаксиса и минимизация шаблонного кода. Mala Gupta, Java Champion и представитель JetBrains, поделилась своими впечатлениями и подчеркнула важность сертификации для карьерного роста.
🔹 JPoint 2025
3–4 апреля в Москве состоялась конференция JPoint 2025. Среди докладов: оптимизация компилятора javac, микробенчмарки с JMH, расширения Quarkus и CQRS, многопоточная вставка данных в БД с использованием Spring и PostgreSQL. Конференция собрала более 1200 участников и стала площадкой для обсуждения актуальных трендов в Java-разработке.
🔹 Рейтинг языков программирования
По данным TIOBE за апрель 2025 года, Java занимает 4-е место в рейтинге языков программирования. Несмотря на конкуренцию со стороны Python, C++ и C, Java сохраняет свою популярность благодаря стабильности и широкому применению в корпоративной разработке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом кода?
👍🏼 — Parent
🔥 — Child
👾 — ParentChild
⚡️ — RuntimeException
🐸 Библиотека задач по Java
👍🏼 — Parent
🔥 — Child
👾 — ParentChild
⚡️ — RuntimeException
Please open Telegram to view this post
VIEW IN TELEGRAM
Java-разработчик — от 220 000 ₽, удалёнка (Москва)
Java Tech Lead — от 400 000 ₽, удаленно (Москва)
Java разработчик (middle) — от 270 000 до 300 000 ₽, удалёнка (Москва)
Java разработчик (команда Supermarket) — от 350 000 ₽, гибрид (Москва)
Java Developer with AWS Cloud Expertise — от $2000, удалёнка (Сербия)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Уверены, что знаете Java на отлично? Проверьте себя на этих 10 каверзных вопросах, которые могут встретиться на собеседовании или просто сломать код.
Пройдите тест и узнайте, насколько знаете тонкости языка.
🔗 Пройти тест
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Как быстро настроить распределённую трассировку в Spring Boot с OpenTelemetry
Дебажить без трейсинга — как ловить баги с завязанными глазами. Но Spring Boot и тут не подвёл: подключаем, настраиваем — и уже можно видеть, что происходит внутри сервиса (и между сервисами тоже).
1️⃣ Добавляем зависимости
Плюс агент (нужно будет передать при запуске JAR-а):
2️⃣ Настраиваем экспорт в Jaeger / Zipkin / OTEL Collector
Добавляем конфигурацию в application.yml:
Можно слать трейсинг напрямую в Jaeger или Zipkin, или в OTEL Collector для гибкости.
3️⃣ Автоматическая трассировка веб-запросов и JDBC
Ничего руками писать не нужно. Всё, что проходит через @RestController и JdbcTemplate — уже обвешано спанами. Нужно только запустить приложение с агентом:
Сразу работают:
— Спаны на все входящие HTTP-запросы
— Спаны на SQL-запросы
— Привязку логов к трейсам (если логгер поддерживает traceId)
4️⃣ Кастомные спаны
Нужно залезть в середину метода и обернуть свою логику? Без проблем:
5️⃣ Визуализация трассировок
Установите Jaeger UI или Zipkin — и смотрите в реальном времени, что делает сервис и как долго.
💬 Что вы используете для трейсинга?
🐸 Библиотека джависта #буст
Дебажить без трейсинга — как ловить баги с завязанными глазами. Но Spring Boot и тут не подвёл: подключаем, настраиваем — и уже можно видеть, что происходит внутри сервиса (и между сервисами тоже).
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
ИЛИ
implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:2.1.0'
Плюс агент (нужно будет передать при запуске JAR-а):
-javaagent:opentelemetry-javaagent.jar
Добавляем конфигурацию в application.yml:
otel:
exporter:
otlp:
endpoint: http://localhost:4317
resource:
attributes:
service.name: my-service
instrumentation:
spring-web:
enabled: true
jdbc:
enabled: true
Можно слать трейсинг напрямую в Jaeger или Zipkin, или в OTEL Collector для гибкости.
Ничего руками писать не нужно. Всё, что проходит через @RestController и JdbcTemplate — уже обвешано спанами. Нужно только запустить приложение с агентом:
java -javaagent:opentelemetry-javaagent.jar -jar myapp.jar
Сразу работают:
— Спаны на все входящие HTTP-запросы
— Спаны на SQL-запросы
— Привязку логов к трейсам (если логгер поддерживает traceId)
Нужно залезть в середину метода и обернуть свою логику? Без проблем:
@Autowired
private Tracer tracer;
public void doSomething() {
Span span = tracer.spanBuilder("custom-operation").startSpan();
try (Scope scope = span.makeCurrent()) {
// какая-то магия
} finally {
span.end();
}
}
Установите Jaeger UI или Zipkin — и смотрите в реальном времени, что делает сервис и как долго.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Устали копаться в логах или ловить баги методом “на авось”? Попробуйте вот этот промпт — он сэкономит вам часы мучений:
📝 Промпт:
Debug the following code and identify potential issues or anti-patterns. Suggest fixes, explain the root cause of errors, and recommend tools or techniques to prevent such bugs in the future.
// Вставьте глючный код сюда
— Добавьте
Simulate expected vs actual output behavior
если не понимаете, почему оно работает не так, как вы думаете— Добавьте
Point out hidden performance issues or memory leaks
если подозреваете, что код ест больше, чем должен— Добавьте
Suggest logging or monitoring strategies
чтобы ловить баги ещё до того, как они вас поймаютPlease open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека питониста | Python, Django, Flask
На собеседовании важно уметь выделить главное — свои сильные стороны, мышление и ценности. Это помогает справляться со стрессом, неожиданными вопросами и субъективной оценкой.
• Как работает PCA
• Зачем он нужен
• Как применять его на практике — например, для анализа доходностей акций S&P 500
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
Надоело тратить время на создание шаблонных тестов вручную? IntelliJ IDEA поможет и с этим. С помощью Ctrl + Shift + T можно сгенерировать структуру тестов для классов и методов.
🔹 Зачем это нужно
— Вместо того, чтобы вручную писать шаблон тестов, IDEA сгенерирует базовую структуру тестов для классов или методов.
— Особенно полезно, когда проект растет, а тестов слишком много, чтобы каждый раз выдумывать тестовую структуру с нуля.
🔹 Как использовать
— Поместите курсор на класс или метод, для которого нужен тест.
— Нажмите
Ctrl + Shift + T
(на Windows/Linux) или Cmd + Shift + T
(на macOS).— Выберите, какой тестовый фреймворк использовать (JUnit, TestNG и т.д.), и IDEA предложит создать тестовый класс с нужной структурой.
IDE автоматически создаст тестовый класс с методами для проверки каждого (или выбранного) публичного метода.
Please open Telegram to view this post
VIEW IN TELEGRAM