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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Чем полезны неизменяемые объекты?

Неизменяемость (immutability) помогает облегчить написание многопоточного кода. Неизменяемый объект может быть использован без какой-либо синхронизации. К сожалению, в Java нет аннотации @Immutable, которая делает объект неизменяемым, для этого разработчикам нужно самим создавать класс с необходимыми характеристиками. Для этого необходимо следовать некоторым общим принципам: инициализация всех полей только в конструкторе, отсутствие методов setX() вносящих изменения в поля класса, отсутствие утечек ссылки, организация отдельного хранилища копий изменяемых объектов и т.д.
🤔🤔 Как сделать пароль менеджер

Для хранения паролей будет использоваться файл формата xml, который будет шифроваться методом AES-256 и храниться в облаке. В качестве облака был выбран сервис «Яндекс диск».

Основной процесс — это загрузка файла с паролями из облака, затем загрузка файла в оперативную память, его расшифровка и вывод паролей в интерфейс пользователю. По завершению работы с паролями, в оперативной памяти формируется XML-структура с паролями, которая шифруется и сохраняется в файл. Затем этот файл загружается в облако.

Продолжение тут

#гайд
💥💥 Как шаблонный метод может сломать ваш Java код

ООП — это замечательно. За несоблюдение этой парадигмы принято ругать, а знание паттернов зачастую является обязательным. Но даже правильный подход не страхует полностью от ошибок. О том, как сломать программу при помощи обычного шаблонного метода, узнаете в статье.

Читать

#гайд
Очередной #дайджест по Java

1️⃣ Новый пакет scala-repl в MELPA для разработчиков Scala — расширение Emacs для интерактивной работы с sbt/mill/scala-cli-проектами

2️⃣ JEP 482: Flexible Constructor Bodies направлен в JDK 23 в статусе second preview — при переходе в статус second preview его переименовали и теперь поля класса можно инициализировать до того, как будет вызван super()

3️⃣ sbt Android plugin — плагин с функциональностью sbt для разработки приложений под платформу Android

4️⃣ Опыт разработки сервиса отправки сообщений в Apache Kafka с использованием SASL/Kerberos и Avro Schema Registry — опыт создания сервиса для отправки сообщений в Apache Kafka с использованием Spring Boot, аутентификацией SASL/Kerberos и применением Avro Schema Registry для продюсера

5️⃣ SBOM support in Spring Boot 3.3 — SBOM описывает компоненты, которые использует ваша система, это может быть полезным, например, для автоматизированного составления списков уязвимостей вашей программы
В каких состояниях может пребывать поток?

Поток в Java может находиться в следующих состояниях:

— New (Новый): поток создан, но еще не запущен.

— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.

— Running (Выполняется): поток выполняется в настоящий момент.

— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.

— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.

— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.

— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🚧🚧 От логов к аудиту

В статье коротко рассмотрены различия между обычными логами и аудит-логами. Основное внимание уделено реализации аудит-логирования в Java, включая использование аннотаций и АОП, приведен пример настройки роутинга логов через rsyslog.

Читать статью

#гайд
Если вы используете DTO в Spring Data/JPA, вы можете автоматизировать отображение между сущностями и DTO с помощью библиотеки Blaze Persistence. Тогда вы сможете воспользоваться преимуществами, например, паттерна Spring repository.
В каких состояниях может пребывать поток?

Поток в Java может находиться в следующих состояниях:

— New (Новый): поток создан, но еще не запущен.

— Runnable (Готов к выполнению): поток запущен, но в данный момент не выполняется, а ожидает выделения процессорного времени.

— Running (Выполняется): поток выполняется в настоящий момент.

— Blocked (Заблокирован): поток заблокирован, ожидая завершения какого-либо события, например завершения операции ввода-вывода.

— Waiting (Ожидание): поток ожидает другого потока, например, ожидая сигнала notify от другого потока.

— Timed Waiting (Ожидание с таймаутом): то же, что Waiting, но с указанием таймаута.

— Terminated (Завершен): выполнение потока завершено, например, после завершения метода run().
#дайджест перед выходными

🔽 Spring AI 1.0.0 M1 release — из значимых нововведений: API для создания промптов, похожий на RestClient и JdbcClient, поддержка новых моделей и векторных хранилищ, TestContainers

🔽 Module Imports in Java 23 — автор рассказывает о книге, в которой описывается предварительный просмотр функции, основанной на модулях, которая может быть использована, даже если код не находится в модулях

🔽 Делаем ZIO-Kafka безопаснее и быстрее — пофиксили дублирование сообщений при ребалансе, добавив механизм отложенного выполнения, который дожидается, пока все сообщения в очереди не будут обработаны

🔽 Hibernate ORM 6.6 — небольшая заметка, которая рассказывает об аннотация, которая указывает на то, что в случае наследования сущностей Hibernate должен создавать прокси не на суперкласс, а на конкретного наследника

🔽 Spec-first and code-first, hand in hand — теперь вам не надо разрываться между подходами spec-first или code-first, а использовать оба одновременно
🎓 Продвинутый SQL: секреты профессионалов

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

Читать статью

#туториал
💪💪 Пишем кастомный Plugin SonarQube

Автор расскажет, как создать собственный плагин для проверки кода на соответствие своим правилам разработки. В статье он поделится опытом и покажет, как можно создать такой плагин своими руками.

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

#гайд
#memes

Найден самый полезный совет на свете. Записываем и не забываем.
👶 Новичок в компании: 18 советов, как быстро адаптироваться и освоить новые навыки

Начало работы в новой компании может быть волнующим и сложным, особенно если вы новичок в отрасли. Как быстро освоиться, произвести хорошее впечатление и стать ценным сотрудником?


Читать статью

#туториал
❤️🙏 Помните историю автора «Библиотеки программиста» Станислав Герасимов? Станислав — инвалид с детства. В статье он рассказывал, как получил диплом и строит карьеру в IT.

❗️ В обновленной статье читайте продолжение его истории. И самое главное: очень скоро он отправляется на операцию и ему нужна ваша помощь.
🧔🧔 Строим свой SSO

Серия статей про постройку собственного SSO Server-а.
Единый вход в систему (Single sign-on, SSO) — это решение для аутентификации,
которое дает пользователям возможность входить в несколько приложений и на
несколько веб-сайтов с использованием единовременной аутентификации пользователя.

Продолжение здесь

#туториал