Библиотека джависта | Java, Spring, Maven, Hibernate
24.1K subscribers
2K photos
38 videos
42 files
2.82K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🆕 Java Digest: подборка материалов

🔹 Towards a JSON API for the JDK

Разработчики OpenJDK анонсировали JSON API для Java, пока только на уровне рассылки, но обещают скоро подготовить JEP или обновить JEP 198. Добавление JSON API видится крайне полезным, по крайней мере для простых проектов и скриптов.

🔹
Redis is now available under the AGPLv3 open source license

Начиная с версии Redis 8 система снова доступна под открытой лицензией AGPLv3, одобренной OSI. Вместе с этим в Redis 8 интегрированы технологии Redis Stack, включая поддержку JSON и Time Series, а еще представлен новый тип данных — vector sets.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥1
Какое регулярное выражение соответствует строке, которая состоит только из латинских строчных букв (a–z) и имеет длину ровно 8 символов?
Anonymous Quiz
47%
[a-z]{8}
38%
^[a-z]{8}$
5%
[a-z]+{8}
5%
^a-z{8}$
5%
^[a-z]{1,8}$
👍93🔥1
😮 Топ-вакансий для джавистов за неделю

Senior + / Lead Java Developer — 4 500 - 6 500$ — удалёнка

Руководитель команды разработки (Java) — от 300 000 ₽ — офис (Омск)

Team Lead Full Stack разработчик (Java + React) — от 300 000 до 400 000 ₽ — удалёнка

Разработчик Java — от 180 000 до 250 000 ₽ — гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1🤩1
🎮 Реализация аутентификации с использованием Spring Security

Проблема: обеспечение безопасности приложения требует надёжной системы аутентификации и авторизации пользователей.

Решение: в книге «Java 17 Backend Development» автор предлагает процесс настройки Spring Security для реализации аутентификации с использованием JWT-токенов.

Пример кода:
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtTokenProvider tokenProvider;

public JwtAuthenticationFilter(JwtTokenProvider tokenProvider) {
this.tokenProvider = tokenProvider;
}

@Override
protected void doFilterInternal(HttpServletRequest request, FilterChain chain) throws ServletException, IOException {
String token = tokenProvider.resolveToken(request);
if (token != null && tokenProvider.validateToken(token)) {
String username = tokenProvider.getUsernameFromToken(token);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, null, null);
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
}
}


Преимущества:


— Защита приложения от несанкционированного доступа.
— Возможность настройки различных уровней доступа.
— Лёгкая адаптация к изменениям в требованиях безопасности.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍42👏1👾1
⚙️ Генерация Event-Driven архитектуры на Spring + Kafka

Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.

📝 Промпт:


Generate a production-grade Java Spring Boot microservice using Apache Kafka for event-driven architecture.
— Use Spring Boot 3 and Spring Kafka.
— Implement Kafka producers and consumers for a user.created event.
— Use Avro schema for message serialization and Schema Registry for compatibility.
— Include retry logic and Dead Letter Topic (DLT) support for failed messages.
— Handle message headers and custom error handling.
— Add integration tests using Embedded Kafka and Testcontainers.


💡 Расширения:

— Добавьте Implement the outbox pattern using a transactional Kafka producer and Debezium CDC, чтобы гарантировать доставку событий и избежать дублирования при сбоях в БД.
— Добавьте Integrate observability using Micrometer for Prometheus and OpenTelemetry for distributed tracing, чтобы отслеживать метрики и трассировать поток сообщений сквозь микросервисы.
— Добавьте Generate Kafka topic and consumer group configuration using Terraform, чтобы автоматизировать инфраструктуру и обеспечить консистентную настройку топиков в Dev/Stage/Prod.
— Добавьте Support dynamic partitioning and load balancing among consumers, чтобы масштабировать консьюмеров при увеличении нагрузки.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1👏1🥱1
Первый вебинар нашего курса по AI-агентам уже прошёл!

Запись уже выложили на обучающей платформе — можно влетать и догонять с комфортом.

Первые слушатели уже оставили фидбэки — и, кажется, мы попали в точку:
— «теперь наконец понял, как выбирать модели под задачу — раньше брал первую попавшуюся»
— «без лишнего, по делу, в лайве — кайф»
— «огонь, ожидания 100% оправданы лично у меня»

Если хотели вписаться, но сомневались — ещё не поздно. Вебинары идут вживую, записи сохраняются, чат работает, материалы открыты.

Ещё можно догнать и пройти всё вместе с потоком.

👉 Залетай на курс
3🌚1
📊 Работа с многопоточностью

Многопоточность в Java — это не просто задача синхронизации потоков, а целая экосистема инструментов для эффективного и безопасного параллельного выполнения кода. Правильная настройка многопоточных процессов позволяет значительно улучшить производительность, но требует внимательного подхода.

🔹 Основы многопоточности


▪️ Thread — создание потоков вручную с использованием конструктора Thread позволяет получить максимальный контроль, но снижает гибкость. Рекомендуется использовать ExecutorService для более управляемого подхода.
▪️ ExecutorService — интерфейс для управления пулом потоков, позволяет эффективно управлять жизненным циклом потоков и управлять задачами с различными приоритетами.
▪️ Callable vs Runnable — используйте Runnable для простых задач без возврата значений и Callable для задач с возвращаемыми результатами.
▪️ ForkJoinPool — специализированный пул потоков для задач, которые могут быть разбиты на более мелкие параллельные подзадачи, например, при решении рекурсивных задач.

🔹 Синхронизация

▪️ synchronized — это простой способ синхронизации, который подходит для мелких блоков кода. Однако может привести к блокировкам и снижению производительности при интенсивной нагрузке.
▪️ ReentrantLock — предпочтительнее в сценариях с большим количеством потоков и блокировок. Она дает больше контроля, например, возможность прерывания или проверки блокировки.
▪️ ReadWriteLock — используется, когда большая часть потоков только читает данные. Это повышает производительность, так как чтение может происходить параллельно.
▪️ CountDownLatch и CyclicBarrier — удобные инструменты для координации потоков в ситуации, когда несколько потоков должны дождаться выполнения определенных задач.

🔹 Состояния потоков и их управление

▪️ Thread.join() — блокирует вызывающий поток до тех пор, пока не завершится указанный поток. Полезно для синхронизации выполнения различных частей программы.
▪️ Thread.sleep() — приостановка потока на заданный интервал. Не стоит использовать ее для ожидания условий, используйте wait() и notify() для работы с мониторами.
▪️ Thread.interrupt() — сигнализирует потоку о том, что ему нужно завершиться. Это полезно при долгих операциях или ожидающих потоках, которые могут быть отменены.

🔹 Безопасность данных

▪️ ThreadLocal — позволяет каждому потоку иметь собственную копию переменной, что минимизирует проблемы с синхронизацией.
▪️ Atomic classes — обеспечивают атомарные операции с переменными, что повышает производительность, избегая блокировок.
▪️ volatile — используется для переменных, значения которых могут быть изменены несколькими потоками. Гарантирует видимость изменений между потоками, но не синхронизирует доступ к данным.

🔹 Производительность и оптимизация

▪️ Immutable Objects — неизменяемые объекты позволяют избежать проблем синхронизации, так как они безопасны для многопоточного доступа.
▪️ ForkJoinPool — при параллельных задачах, например, при работе с большими объемами данных, используйте ForkJoinPool для более эффективного распределения нагрузки между потоками.
▪️ ExecutorService.submit() — для более высокоуровневого контроля и получения результата используйте submit() с объектом Future вместо execute().

🔹 Дополнительно

▪️ CompletableFuture — для асинхронных операций и управления результатами выполнения в будущем. Это удобный способ для работы с неблокирующими асинхронными операциями.
▪️ Parallel Streams (Java 8+) — используйте параллельные потоки для упрощения многопоточных операций. Например, при обработке коллекций используйте stream().parallel() для распараллеливания задач.

💬 Какие методы синхронизации вы предпочитаете в своем проекте?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥8👍6
👑 Магия IntelliJ IDEA

Забудьте про System.out.println() в логике — используйте Evaluate Expression прямо во время отладки, чтобы проверить любые значения на лету.

🔹 Что делает

— Позволяет выполнять произвольные выражения прямо во время паузы
— Работает с контекстом текущего стека: переменные, поля, this
— Поддерживает сложные конструкции: myList.stream().filter(...).collect(...)

🔹 Зачем это нужно

— Позволяет быстро проверять гипотезы при отладке
— Избавляет от лишних логов или временных переменных
— Помогает исследовать поведение без изменения кода

🔹 Как использовать


— Поставьте breakpoint и запустите Debug
— Когда выполнение остановится, нажмите Alt + F8
— Введите выражение и нажмите Evaluate

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🔥1
Повседневные инструменты

Наш подписчик спрашивает:

Какие инструменты вы используете ежедневно, чтобы сэкономить время и повысить продуктивность разработки?


🔹 Вопросы для обсуждения:

— Какие инструменты (IDE‑плагины, CLI‑утилиты, скрипты, расширения, шаблоны и пр.) вы используете каждый день, чтобы повысить продуктивность?
— Как они изменили ваш привычный рабочий процесс?
— Были ли ситуации, когда такие инструменты оказались ловушкой или привели к техническому долгу?

💬 Делитесь вашими инструментами и советами в комментариях

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥1
🆕 Java Digest: подборка материалов

🔹 Spring Cloud 2023.0.6

Исправление багов и важные обновления своих под-проектов: Spring Cloud Gateway 4.1.9, Spring Cloud Circuit Breaker 3.1.5 и Spring Cloud Contract 4.1.6.

🔹
@TestInstance(PER_CLASS) в JUnit 5

Разбор фичи JUnit 5, которая позволяет изменить жизненный цикл тестов. Обычно тестовый класс пересоздается для каждого метода, а с аннотацией @TestInstance(PER_CLASS) это будет происходить один раз для каждого класса.

🔹Java’s Structured Concurrency

Статья про Structured Concurrency, которое уйдет на 5-е превью в Java 25. Можно посмотреть, как будет выглядеть будущее многопоточного программирования на Java.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2👍1
Какой из следующих функциональных интерфейсов принимает один аргумент произвольного типа и возвращает значение произвольного типа?
Anonymous Quiz
5%
Runnable
13%
Consumer<T>
59%
Function<T, R>
10%
Predicate<T>
13%
Supplier<T>
👍8🔥31
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!

Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).

Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!

👉 Выбрать курс
😮 Топ-вакансий для джавистов за неделю

Middle Java Developer — до 270 000 ₽ — удалёнка

Java-разработчик (B2B-платформа) — 220 000 —‍ 490 000 ₽ — гибрид (Москва, Санкт-Петербург, Новосибирск)

Junior+ Java-разработчик — от 130 000 до 210 000 ₽ — удалёнка

Java разработчик (Platform V EDA) — до 180 000 ₽ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
Сохраняйте шпаргалку по кодам состояния HTTP

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥2
⚙️ JMeter (Apache JMeter)

JMeter — это инструмент для нагрузочного тестирования, который позволяет имитировать большое количество пользователей и запросов для оценки производительности веб-приложений и серверов.

Он идеально подходит для проверки стабильности приложения под нагрузкой, анализа времени отклика и поведения системы в условиях высоких нагрузок. JMeter можно использовать как для тестирования REST API, так и для сложных сценариев с использованием UI.

Преимущества JMeter:

— Поддержка различных типов тестирования: HTTP, FTP, баз данных и WebSocket.
— Гибкость при настройке нагрузки (параметры виртуальных пользователей, сценарии).
— Интеграция с CI/CD (Jenkins, GitLab CI).
— Расширенные отчёты с графиками и статистикой.
— Плагинная система для расширения функционала.
— Возможность интеграции с другими инструментами для мониторинга и анализа (например, Grafana).

🔗 JMeter GitHub

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍2
😮 Виртуальные потоки: сравнение loom и vert.x

Виртуальные потоки вызывают много разногласий в кругах джавистов. Разобраться что к чему поможет Владимир Красильщик, pragmatic Java Developer, 01.tech. 30 августа он выступит на JVM Day в штаб-квартире Т-Банка. Расскажет про инженерный подход, основанный на измерениях и про реализации на платформенных и виртуальных потоках с ReentrantLock, через synchronized-секцию и на акторной модели, реализованной на vert.x

▪️На мероприятии также покажут демоверсии продуктов Т-Банка и других компаний, написанных на Java и Scala.

▪️Половина собранных средств Т-Банк планирует направить региональным вузам, которые готовят начинающих ИТ-специалистов. На сайте феста речь про КФУ (ИТИС) в Казани, УрФУ в Екатеринбурге и факультет вычислительной техники РГРТУ в Рязани. Так организаторы хотят поддержать развитие ИТ не только в столице, но и в других городах страны.

Для прохода на JVM Day необходимо заранее зарегистрироваться.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
⚙️ Генерация аудита пользовательских действий в Spring Boot

Нужно отслеживать, кто что сделал в приложении: создал пользователя, обновил заказ или удалил файл? Реализуйте модуль аудита, который не просто логирует в консоль, а сохраняет структурированные события в базу или брокер. AI поможет с шаблоном, который можно встроить в любой микросервис.

📝 Промпт:


Generate a reusable audit logging module for a Spring Boot 3 application.

— Use Spring AOP to intercept service-layer methods annotated with @Auditable.
— Capture method name, parameters, execution time, and authenticated user details.
— Log audit events asynchronously to Kafka with a custom AuditEvent structure.
— Use JSON for message serialization and include correlation IDs in headers.
— Include fallback to local file logging in case of Kafka failure.
— Add integration with Spring Security to extract user identity from the context.
— Write unit and integration tests using JUnit 5 and Testcontainers.


💡 Расширения:

— Добавьте Implement audit event persistence to PostgreSQL using Spring Data JPA, чтобы хранить критические события даже при сбоях брокера.
— Добавьте Include context metadata (request IP, user-agent) using ServletRequest attributes, чтобы повысить трассируемость действий пользователя.
— Добавьте Add audit dashboard using Spring Boot Admin and Grafana, чтобы визуализировать действия и аномалии в реальном времени.
— Добавьте Integrate OpenTelemetry spans around auditing logic, чтобы отслеживать поток аудита между микросервисами на уровне трассировки.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥21