Java guru
4.37K subscribers
1 photo
1 video
1 file
266 links
Новости из мира Java, обзоры интересных библиотек и фреймворков, обучающие статьи. Онлайн обсуждения актуальных тем и обмен опытом. Для связи @RodmanDV
Download Telegram
Всегда ли нужен Hibernate?

Часто перед командами встает вопрос чем пользоваться для работы с базой и ответ не всегда очевиден. Про Hibernate написано много "рекламных" статей в которых не освящаются "подводные камни". Прочитав такие статьи и смотря на простые примеры у начинающих разработчиков может создаться ощущение что он просто прекрасен.

Рекомендую к прочтению эту замечательную статью в которой собраны наиболее интересные "подводные камни".

https://habr.com/ru/company/otus/blog/576966/
Актуален ли еще Solid?

Как это ни странно у Solid есть не только поклонники, но и противники. Роберт Мартин написал статью в ответ на критику Solid.
Я большой фанат Solid и полностью с ним согласен.

Habr опубликовал перевод его статьи.

https://habr.com/ru/post/581912/
Уроки абстракции: чему FP может научить ООП

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

Мне также понравилась сама идея "доведение абстракции до предела" и постановка вопроса "является ли преждевременная абстракция злом, как и преждевременная оптимизация?".

Суть в том, что с точки зрения оптимизации для решения с числами "оптимизированный вариант" был бы сведен к (n * (n + 1) / 2), но с точки зрения абстракции и как следствия универсальности, такое решение не подходило бы как минимум для всех типов данных.

Статья длинная, но прочитать однозначно стоит ))

https://habr.com/ru/post/587440/
The Java Version Almanac

Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann).

Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки из мира Java (ссылка на API, спецификацию языка, спецификацию виртуальной машины и ссылки для скачивания всех версий).

Главной кил фичей я считаю их инструмент сравнения изменений между версиями Java!!!
Это просто сказка!!!

Сохраняйте ссылку в надежном месте и пользуйтесь!!! Приятного погружения!!! )))

https://javaalmanac.io
Java guru pinned «The Java Version Almanac Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann). Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки…»
Java Troubleshooting Guide

Как оказалось не все Java разработчики знают о существовании такого замечательного руководства как Java Troubleshooting Guide от Oracle.

Я считаю, что каждый Java разработчик должен его прочитать. Особенно разделы "Troubleshoot Memory Leaks" и "Troubleshoot Performance Issues Using JFR".

По Java 17
https://docs.oracle.com/en/java/javase/17/troubleshoot/

По Java 11
https://docs.oracle.com/en/java/javase/11/troubleshoot/

По Java 8
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/toc.html
К сожалению пришлось срочно отключить комментарии. Нахлынули боты и начали спамить в комментариях. После автоматизации очистки включу обратно.
Java guru pinned «The Java Version Almanac Недавно наткнулся на замечательный ресурс созданный легендарными Java чемпионами Марком Хоффманом и Кей С. Хорстманном (Marc R. Hoffmann and Cay S. Horstmann). Этот ресурс примечателен тем, что там собраны все ключевые полезные ссылки…»
Java guru pinned «Java Troubleshooting Guide Как оказалось не все Java разработчики знают о существовании такого замечательного руководства как Java Troubleshooting Guide от Oracle. Я считаю, что каждый Java разработчик должен его прочитать. Особенно разделы "Troubleshoot…»
Illustrated TLS Connection

Думаю каждый Java разработчик сталкивался с вопросами криптографии. Как минимум времена "голого" HTTP давно прошли. Сегодня хочу с вами поделиться замечательным ресурсом на котором в очень наглядной форме описывается суть TLS 1.3.

Для перехвата пакетов и анализа трафика можно использовать Wireshark и\или tcpdump.

В Spring Boot можно добавить в конфигурацию

server.port=443
server.ssl.enabled=true
server.ssl.protocol=TLS
server.ssl.enabled-protocols=TLSv1.3

и добавить детали keystore (хранилища)

server.ssl.key-store-type=PKCS12
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=password

В реальных приложениях лучше добавлять криптографию на уровне gateway\balancer, а не Spring Boot приложения. Например ставить nginx перед приложениями.

https://tls13.ulfheim.net
NullAway: Fast Annotation-Based Null Checking for Java

Многим разработчикам в Kotlin нравятся такие фичи как null-safety и sealed-классы.

В 15 версии Java появились sealed классы и в 14 версии NPE стали более информативными, но по факту мы как и раньше ловим NPE в рантайме.

Достаточно интересное решение предлагает Uber. Это плагин NullAway для статического анализа кода для Error Prone.

Надо пробовать плагин и надеяться, что в следующих версиях Java предложат решение борьбы с NPE не хуже чем в Kotlin.
Migrating From JDK 8 to Later JDK Releases

На данный момент еще много проектов используют JDK 8 и многим только предстоит миграция на новую версию. В Java стараются по возможности сохранять обратную совместимость, но скорость изменений все нарастает и не для всех изменений это можно обеспечить.

Если вы уже столкнулись с задачей миграции или вам это только предстоит, то я рекомендую ознакомиться с документом подготовленным специалистами Oracle:

https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-7744EF96-5899-4FB2-B34E-86D49B2E89B6
👍1
Выпущен Quarkus 2.7.1. Почему именно Quarkus?

Quarkus, платформа Java для микросервисов, первоначально выпущенная RedHat в марте 2019 года, достигла версии 2.7.1

Довольно интересный анализ проведен в статье

https://shly.link/LvM7C
Вышел Hibernate 6.0 Final.

Новая версия фреймворка не является полностью совместимой с предыдущей версией 5.x. Для тех, кто использует Hibernate исключительно через Jakarta Persistence API, переход должен быть полностью совместимым. Для остальных был написан подробный гид по миграции.

1. Базовая версия Java для него теперь 11.
2. Java Persistence больше не поддерживается. Hibernate 6.0 можно использовать только с пространством имён
jakarta.persistence
.
3. Теперь используется Read-by-position вместо Read-by-name при чтении из JDBC
ResultSet
. Это приводит к улучшению производительности, а также к более компактным и читаемым сгенерированным SQL-запросам.
Кент Бек

Кент Бек, создатель методологии "Разработка через тестирование" (TDD), как-то написал:

"Мне платят за работающий код, а не за тесты, поэтому моя философия заключается в том, чтобы тестировать настолько мало, насколько это возможно, чтобы достичь заданного уровня уверенности".
(источник)

Люди в комментариях к этому высказыванию Бека были в шоке, они думали, что он всегда пропагандировал 100% покрытие кода:

Невероятно, что Кент Бек мог такое сказать! Легионы разработчиков добросовестно добиваются 100% покрытия, потому что они думают, что именно так поступил бы Кент Бек! Я говорил многим, что вы сказали в своей книге по XP, что не всегда религиозно придерживаетесь Test First. Но я тоже удивлен!
https://habr.com/ru/company/karuna/blog/663906/
👍1
Sampler. Visualization for any shell command.

Я недавно наткнулся на довольно интересный инструмент визуализации в терминале. Он написан на Go и прямого отношения к Java не имеет, но при помощи него можно очень красиво в терминале отображать результаты работы разных приложений.

Для Java приложений можно организовать например опрос через JMX и отображение результатов в консоле.

Да, я знаю про различные промышленные системы мониторинга "монструозного" размера, но я всегда с особой любовью относился к "миру в консоле". Sampler просто порадовал своим функционалом и визуальными эффектами. На проме такое наврятли будете использовать, но иметь в своем арсенале такой инструмент полезно. Можно будет найти и ему применение. Любителям консоли однозначно стоит попробовать ))

https://github.com/sqshq/sampler
Из Oracle в Java

Сейчас наблюдается тенденция перехода Oracle разработчиков в Java-висты. Недавно я натолкнулся на довольно интересную статью в которой автор делится своими ощущениями от перехода на Java.

Статья будет интересна и преподавателям Java и тем кто планирует только перейти на Java.

https://habr.com/ru/company/custis/blog/568032/
Шпаргалка по коллекциям в Java

Отличная шпаргалка по Java коллекциям. Там сравнивают коллекции Java по следующим параметрам:
1. На чем основана — какая структура данных или коллекция используется под капотом.
2. Дубли — разрешены или нет в коллекции повторяющиеся значения.
3. Null — позволяет ли коллекция вставлять null.
4. Синхронизированность — все ли методы коллекции синхронизированы.
5. Потокобезопасность — безопасно ли использовать коллекцию в многопоточной среде.
6. Тип итератора — поведение итератора в многопоточной среде.

https://habr.com/ru/company/otus/blog/660959/
Связь логов через correlation id в многопоточных\многопользовательских системах.

В многопоточных\многопользовательских системах часто возникает задача ввести атрибут по которому можно будет находить логически связанные между собой записи логов. Например: записи относящиеся к сессии конкретного пользователя.

В Log4j для этой задачи есть класс MDC https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html

На старте обработки можно сохранить уникальный идентификатор. В качестве уникального идентификатора можно взять значение либо прикладного поля либо сгенерировать суррогатное UUID.randomUUID().toString()

MDC.put(CORRELATION_ID_LOG_VAR_NAME, correlationId);

CORRELATION_ID_LOG_VAR_NAME можно определить как
private static final String CORRELATION_ID_LOG_VAR_NAME = "correlationId";

Если по мере исполнения потребуется его извлечь, то можно вызвать Object correlationId = MDC.get(CORRELATION_ID_LOG_VAR_NAME);

В конце нужно обязательно почистить за собой

MDC.remove(CORRELATION_ID_LOG_VAR_NAME);

Для вывода в лог нужно добавить в log4j.xml значение %X{correlationId}

<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c] %X{correlationId} - &lt;%m&gt;%n"/>
</layout>
</appender>
Какой алгоритм хеширования паролей лучше?

Согласно фонду OWASP, для современного хеширования паролей следует рассматривать лишь несколько алгоритмов.

1. Лучший алгоритм для использования на данный момент (в 2022 году) — Argon2id.
2. Если вы по какой-либо причине не можете использовать Argon2id, scrypt — хороший второй вариант.
3. Если Argon2id и scrypt недоступны, другим хорошим выбором является BCrypt.

В статье приводится краткое описание этих алгоритмов и способов их использования.

https://foojay.io/today/how-to-do-password-hashing-in-java-applications-the-right-way/