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

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

Обратная связь: @proglibrary_feedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🐧 Пингвин, покоривший мир: история взлета Linux – ОС, управляющей 96% серверов

В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.

➡️ Читать статью
➡️ Зеркало
Lombok — да или нет?

✔️ За Lombok

— Убирает тонны шаблонного кода (геттеры, сеттеры, toString(), equals(), hashCode()).
— Делает код компактнее и читабельнее.
— Ускоряет разработку, снижает когнитивную нагрузку.

Против Lombok

— Скрывает важную логику, что усложняет отладку и поддержку.
— Добавляет магию и делает код зависимым от нестандартных аннотаций.
— Может вызывать проблемы с сериализацией и совместимостью при обновлениях.

💬 За Lombok или против? Пишите в комменты

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

🔹 JEP-ы в фокусе:


— JEP 450: компактные заголовки объектов

JEP направлен на уменьшение размера заголовков объектов с 96–128 до 64 бит на 64-битных платформах, перешел в статус Proposed to Target. Это изменение обещает снизить объем используемой кучи и повысить эффективность работы приложений.​

— JEP 484: API для файлов классов


В JDK 24 планируется внедрение JEP 484, который предоставит стандартный API для обработки файлов классов.

🔹 Релизы:

— Выпуск IntelliJ IDEA 2024.3 EAP 5: gоддержка функций Kotlin 2.1, улучшенная подсветка выделенных слов во всем файле, новые иконки и другое.
— Kora 1.1.20: улучшения и исправления способов настройки компонентов gRPC, ошибок обработки Cassandra UDT типа для списков, работа дискриминаторов моделей в OpenAPI-генераторе
— Native Build Tools 0.10.5: поддержка единого reachability-metadata.json, ​исправление ошибки Gradle-плагина.

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

🔹
@Transactional — оборачивает метод в транзакцию

@Transactional
public void saveData(Entity entity) {
repository.save(entity);
}


Автооткат при исключениях, но не ловит checked-исключения без rollbackFor = Exception.class.

🔹 @Async — делает метод асинхронным

@Async
public CompletableFuture<String> fetchData() {
return CompletableFuture.completedFuture("Hello");
}


Использует TaskExecutor, но не забываем про конфиг @EnableAsync.

🔹 @RestControllerAdvice — глобальный хендлер ошибок

@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}


Вместо тонны try-catch обрабатываем ошибки централизованно.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Сохраняйте шпаргалку по командам docker compose

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩💊 Алгоритмическая самоуспокоенность: как мы разучились думать своей головой

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

Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.

Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.

🔗 Подробнее в статье

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Как маппить объекты

Часто приходится конвертировать Entity -> DTO или DTO -> Model. Вот основные способы, как это сделать.

1️⃣ Ручной маппинг

Простой, но не очень масштабируемый.
public class UserMapper {
public static UserDto toDto(User user) {
return new UserDto(user.getId(), user.getName());
}

public static User toEntity(UserDto dto) {
return new User(dto.getId(), dto.getName());
}
}


2️⃣ MapStruct

Генерирует код на этапе компиляции → быстрее, чем рефлексия.
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

UserDto toDto(User user);
User toEntity(UserDto dto);
}


3️⃣ ModelMapper

Просто, но медленнее из-за рефлексии.
ModelMapper modelMapper = new ModelMapper();
UserDto dto = modelMapper.map(user, UserDto.class);


4️⃣ Record + Java 17

Используем record вместо классов DTO для упрощения кода.
record UserDto(Long id, String name) {}

UserDto dto = new UserDto(user.getId(), user.getName());


5️⃣ Stream API для маппинга коллекций

Если нужно преобразовать список объектов.
List<UserDto> dtos = users.stream()
.map(UserMapper::toDto)
.collect(Collectors.toList());


💬 Какой способ используете в проектах?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Улучшаем производительность кода с AI

Обнаружили в профилировщике тормозящий код? Попробуйте этот промпт, чтобы AI помог вам оптимизировать его:

📝 Промпт:

Analyze the following Java code and suggest optimizations for better performance. Identify bottlenecks, improve memory usage, and recommend alternative approaches.

// Вставьте ваш код здесь


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

— Добавьте Refactor it using Streams and functional programming, если хотите более элегантный код.
— Добавьте Optimize it for multi-threading and concurrency, если ваш код нагружен задачами.
— Добавьте Suggest a profiling strategy to measure performance issues, если нужна диагностика.

💬 Какие инструменты вы используете для профилирования кода?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Как оставлять комментарии в чате нашего канала

В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.

⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.

Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.

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

— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат

После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.

❗️ Если вас все-таки забанили

— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу

Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.

👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
✏️ Универсальный инструмент рефакторинга в IntelliJ IDEA

Знакомы с отдельными сочетаниями клавиш для рефакторинга, такими как Shift + F6 или Ctrl + Alt + V?
Сочетание Ctrl + Alt + Shift + T открывает перед вами целый спектр возможностей рефакторинга в одном окне.

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

— Открывает меню, предоставляющее доступ к различным видам рефакторинга, таким как переименование, перемещение, изменение сигнатуры, извлечение метода, переменной, константы и другие. ​
— В зависимости от выделенного фрагмента, IntelliJ IDEA предложит только те варианты рефакторинга, которые применимы к текущему элементу кода.​

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

1. Выделите часть кода, которую хотите рефакторить (например, переменную, метод или класс).​
2. Нажмите Ctrl + Alt + Shift + T.​
3. Выберите необходимый тип рефакторинга из появившегося меню с помощью стрелок → Enter.​
4. Следуйте дальнейшим инструкциям IDE для завершения процесса рефакторинга.​

💬 Знали о таком?

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

Проверьте свою внимательность и знание IT терминов. Пишите в комментариях сколько слов вам удалось найти и под спойлером указывайте сами слова.

Слова зашифрованы только по горизонтали. Не все слова связаны с Java, но все вам знакомы.

💬 Посмотрим, кто сможет найти больше.

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

🔹 Актуальные технологии в 2025 году

Анализ предстоящих трендов в IT-индустрии на 2025 год, включая ожидания от релизов Java 25 и .NET, а также влияние искусственного интеллекта на инструменты разработки и продукты. ​

🔹 Переезд в США — личный опыт

Личный опыт Java-разработчика, переехавшего в США по грин-карте. Статья будет полезна тем, кто задумывается о переезде или готовится к эмиграции. Она охватывает этапы от получения визы до адаптации на новом месте. ​

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие существуют состояния потока?

Thread может находиться в одном из следующих состояний (Thread.State):

1️⃣ NEW — поток создан, но еще не запущен.
2️⃣ RUNNABLE — поток готов к выполнению, но может ожидать процессорное время.
3️⃣ BLOCKED — поток ждет освобождения монитора для входа в synchronized блок.
4️⃣ WAITING — поток ожидает сигнал без тайм-аута.
5️⃣ TIMED_WAITING — поток ожидает, но с ограничением по времени.
6️⃣ TERMINATED — поток завершил выполнение.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что будет результатом кода?

👍🏼 — One
🔥 — RuntimeException
👾 — Ошибка компиляции
⚡️ — null

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM