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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
⚙️ JFR + JMC — встроенный профилировщик для JVM-приложений

🔹 Что это

— Java Flight Recorder (JFR) — низкоуровневый инструмент для профилирования, встроенный в JVM начиная с Java 11.
— Java Mission Control (JMC) — утилита для визуального анализа и работы с результатами JFR-записей.

🔹 Возможности

— Сбор информации о производительности с минимальным overhead.
— Анализ CPU, памяти, событий GC, блокировок, Thread dumps и других внутренних событий JVM.
— Отслеживание аллокаций, задержек, пауз и узких мест в приложении.
— Подходит для использования как в разработке, так и в продакшене.

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

1. Запустите приложение с параметрами, активирующими запись:
java -XX:StartFlightRecording=duration=60s,filename=recording.jfr ...


2. После завершения записи, откройте файл .jfr в JMC.
3. Используйте интерфейс для анализа производительности и поиска узких мест.

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


— Нативная поддержка в JVM.
— Низкий overhead (подходит для продакшн-сценариев).
— Не требует внешних агентов или дополнительных библиотек.
— Удобный интерфейс для анализа.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Что посмотреть — Java Tutorial for Beginners

📅 Опубликовано: около 2 лет назад​
👀 Просмотров: более 3 миллионов​
🎓 Автор: Naveen Reddy (Telusko)​
🕒 Длительность: 12,5 часов

Чем интересно:

— Подходит для начинающих, объясняет все основы Java простым и понятным языком.
— Покрывает ключевые темы: переменные, циклы, массивы, ООП, исключения и многое другое.
— Преподаватель делится практическими примерами и советами из реального опыта.​
— Видео отлично подходит, чтобы освежить знания.

🔗 Смотреть

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Делитесь вопросами, которые не дают покоя

Если вы сталкивались с неочевидной утечкой памяти, странным поведением GC или приложением, которое «ест 8 ГБ, а делает ничего» — делитесь в комментариях.

Пора перестать страдать молча. Давайте объединим комьюнити и будем разбирать реальные кейсы:

— Что утекло?
— Где GC не справился?
— Почему слабая ссылка вдруг стала сильной?
— Чем Map хуже WeakHashMap (а может — наоборот)?

P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😩 Лучшие материалы по Java в одной подборке

Собрали топовые материалы, которые наши подписчики сохраняют чаще всего.

Эту подборку мы будем регулярно пополнять, поэтому сохраняйте тонну пользы, чтобы не потерять!

1. Quartz уже не тот? Современные альтернативы для планирования задач

2. Как JVM обрабатывает исключения

3. @Subselect в Hibernate: разберись с хитростями

4. JOOQ против Hibernate: что выбрать для вашего проекта?

5. Инструменты командной строки, которые стоит знать

6. «Распределенные системы: принципы и парадигмы»

7. Что такое @Transactional в Spring?
Please open Telegram to view this post
VIEW IN TELEGRAM
💃 Как Java выглядят в стиле Гибли

Мы не могли пройти мимо нашумевшего тренда и попросили ИИ перенести наш любимый язык программирования во вселенную Миядзаки.

Как вам образ? Расскажите в комментариях ↓

😜 Еще больше персонажей из мира айти в стиле Гибли — в нашем канале @proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
Как и где Spring ищет бины?

Spring ищет бины с помощью сканирования классов в указанных пакетах, используя аннотации (@Component, @Service, @Repository, @Controller и кастомные с @Component внутри).

Сканирование начинается с пакета, переданного в @ComponentScan или (по умолчанию) из того, где находится @SpringBootApplication (которая включает @ComponentScan).

Если бин не помечен аннотацией, его можно зарегистрировать вручную через @Bean в @Configuration-классе, BeanDefinitionRegistry или XML-конфиг.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Пора ли перейти на Quarkus или Micronaut вместо Spring Boot?

Java постоянно развивается: новые фичи появляются, сборки становятся умнее, а в продакшене до сих пор царит Spring Boot. Да, он мощный, универсальный, но медленный старт, гигантский оверхед, живёт по инерции.

Quarkus и Micronaut стартуют быстрее, кушают меньше памяти, заточены под облака и serverless. Всё вроде бы красиво — но если что-то сломается, вместо «гугли решение» услышишь «пиши ишью на GitHub, может через полгода поправят».

💬 Вопрос к вам:

— Стоит ли бросать Spring Boot в 2025 ради Quarkus или Micronaut?
— Или проверенная тяжеловесная классика всё ещё надёжнее молодой крови?

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

🔹 Как работает память в JVM

Глубокий анализ архитектуры памяти Java Virtual Machine и особенностей управления памятью. Уникальная информация для улучшения производительности ваших Java-приложений.

🔹 Ускорение Spring REST API на 200%

Spring удобен, но его абстракции могут замедлять работу API. Рассмотрите способы избавиться от ненужных накладных расходов и значительно увеличить производительность API.

🔹 Caffeine анализ кода

Статья описывает Caffeine с использованием алгоритма TinyLFU. Рассматриваются структуры данных, методы и старение данных для поддержания актуальности кэша.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
😮 Топ-вакансий для джавистов за неделю

Java-разработчик в Маркет — от 180 000 до 350 000 ₽, офис (Москва, Санкт-Петербург, Нижний Новгород)

Java-разработчик — от 100 000 ₽, гибрид (Москва)

Руководитель команды разработки / Team Lead (Java/Kotlin) — от 300 000 ₽, гибрид (Москва)

Java разработчик — до 500 000 ₽, гибрид (Москва, Санкт-Петербург)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🆕 Spring Framework v7.0.0-M3

🔹 Поддержка JDK 17-27 — новая версия требует более современных версий JDK.
🔹 Удаление устаревших API — больше не поддерживаются аннотации из javax.annotation и javax.inject.
🔹 Миграция на Jakarta EE 11 — обновления в работе с сервлетами и WebSocket.
🔹 Усовершенствования для Kotlin — поддержка Kotlin 2.x и отказ от старых решений.
🔹 Изменения в HttpHeaders API — улучшена обработка заголовков с учетом их нечувствительности к регистру.

🔗 Подробнее по ссылке

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Инструмент недели: JMH (Java Microbenchmarking Harness)

JMH — это фреймворк для точного микробенчмаркинга в Java. Он предназначен для создания тестов производительности, которые помогают анализировать, как различные изменения в коде влияют на его эффективность.

Фичи: измерение времени выполнения на уровне микроопераций, поддержка сложных случаев оптимизации JVM, вывод подробной статистики, возможность настройки параметров теста, точные результаты без влияния JVM-оптимизаций.

🔗 JMH на GitHub

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 IT Breaking Memes — 30 000 ₽ за самую смешную IT-новость

Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🏆 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

Пример:
Реальная новость: «Гугл создала модель для общения с дельфинами».

Смешная альтернатива: «Нейросеть от Гугл обрабатывает видеопоток с камеры в свинарнике. ИИ следит, сколько свинья находится возле кормушки, не отталкивают ли ее собратья. Недокормленных докармливают, а переевшие пропускают следующую кормешку».

📅 Сроки: с 29 апреля по 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Ждем ваших новостей!
⚙️ Прокачиваем рефакторинг с помощью AI

Запутались в легаси, где каждый метод — это мини-роман? Попробуйте этот промпт — он поможет расчистить завалы и вдохнуть в код новую жизнь:

📝 Промпт:

Refactor the following code to improve readability, maintainability, and adherence to clean code principles. Suggest design improvements and explain the rationale behind each change.

// Вставьте закостыленный код сюда


💡 Дополнительные возможности:

— Добавьте Identify code smells if you want to spot bad practices like long methods, god objects, or excessive dependencies
— Добавьте Recommend design patterns if the codebase cries for structure
— Добавьте Suggest breaking into smaller modules or services если ощущаете, что монолит трещит по швам

💬 А как вы подходите к рефакторингу — по вдохновению или по регламенту?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Как настроить CORS в Spring Boot

Когда фронт и бэк живут на разных доменах — CORS становится головной болью. Но Spring Boot даёт достаточно способов это настроить — от простых аннотаций до централизованной фильтрации.

1️⃣ Минимальная настройка — через @CrossOrigin

Если нужно открыть доступ только к одному контроллеру или методу:
@CrossOrigin(origins = "https://example.com")
@RestController
public class ApiController {
@GetMapping("/data")
public String getData() {
return "OK";
}
}


Удобно для быстрого прототипа, но неудобно для масштабируемого решения.

2️⃣ Глобальная настройка через WebMvcConfigurer

Если CORS нужен везде, лучше использовать конфигурационный класс:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}


Даёт полный контроль. Можно задать разные правила для разных путей.

3️⃣ Настройка CORS через application.yml (Spring Cloud Gateway)

Если вы используете Gateway, настройка может быть ещё проще:
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "https://example.com"
allowedMethods:
- GET
- POST
allowedHeaders: "*"


Подходит, если CORS должен работать до попадания запроса в конкретный микросервис.

4️⃣ CORS + безопасность

Если CORS работает «через раз», возможно, его блокирует Spring Security. Добавьте .cors() в конфигурацию:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.cors() // 👈 Без этого CORS не заработает
.and()
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
return http.build();
}
}


5️⃣ Тестирование CORS

Проверьте через curl:
curl -H "Origin: https://example.com" \
-H "Access-Control-Request-Method: GET" \
-X OPTIONS http://localhost:8080/data -v


Ответ должен содержать заголовки:
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET


📌 Не оставляйте allowedOrigins("*") в проде. Это дыра в безопасности. Нужно чётко указывать домены.

💬 Как вы обычно настраиваете CORS в своих микросервисах?

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