Java Гениев
87 subscribers
204 photos
77 videos
180 links
Download Telegram
Двойная инициализация с помощью фигурных скобок (Java SE 7+):

Кратко инициализируйте коллекции.


Map<String, Integer> fruits = Map.of("apple", 1, "banana", 2);
System.out.println(fruits); // Output: {apple=1, banana=2}


👉
Помеченные операторы (break и continue):

Улучшите читаемость управления потоком с помощью меток.


loop:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break loop; // Exit the loop labeled 'loop'
}
System.out.println(i);
}


👉
Spring Boot с SAML2 и Keycloak

Эта статья научит вас, как использовать аутентификацию SAML2 с Spring Boot и Keycloak. Security Assertion Markup Language (SAML) — это стандарт для обмена данными об аутентификации и авторизации между поставщиком удостоверений (IdP) и поставщиком услуг. Это протокол на основе XML, который использует токены безопасности с информацией о субъекте. В настоящее время SAML менее популярен, чем OICD (OpenID Connect), но еще не устарел. На самом деле, многие организации до сих пор используют SAML для единого входа (SSO).

https://piotrminkowski.com/2024/10/28/spring-boot-with-saml2-and-keycloak/

👉
Deprecated Event

В статье рассматривается новое событие в JDK 22 для JFR, позволяющее отслеживать вызовы устаревших методов. Это полезно для определения зависимостей в сторонних библиотеках, которые используют методы, планируемые к удалению, такие как методы Security Manager. Такое отслеживание позволяет заранее обновить библиотеки, что может сократить технический долг и упростить переход на актуальные версии библиотек и инструментов.


public class API {
public static void enableLogging(boolean enable) {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
System.setProperty("log", String.valueOf(enable));
return null;
}
});
}
public static void runTask(Runnable task) {
try {
task.run();
} catch (ThreadDeath td) {
System.out.println("Task stopped.");
}
}
}

public class Service {
public static void log(String message) {
String shouldLog = System.getProperty("log", "true");
if (new Boolean("log")) {
System.out.print(message);
}
}
}


https://egahlin.github.io/2024/05/31/deprecated-event.html

👉
🚀AutoCloseable HTTP Client в Java 21

👉
Совет💡

До Hibernate 6 для правильной настройки требовалось установить правильный dialect для используемой БД. Начиная с версии 6 это больше не требуется. Теперь Hibernate 6 определяет правильный Dialect на основе JDBC URL и JDBC Metadata.

https://docs.jboss.org/hibernate/orm/6.3/javadocs/org/hibernate/cfg/JdbcSettings.html#DIALECT

👉
Три быстрых способа отображения Java-объектов в пользовательском интерфейсе

В процессе разработки часто наступает момент, когда необходимо быстро отобразить на экране структуры данных в удобочитаемом формате. Во время разработки отладчики часто предоставляют красивое древовидное представление объектов данных, которое помогает визуализировать структуру. Создать нечто подобное для пользовательского интерфейса вручную, конечно, можно, но во многих случаях это слишком дорого - особенно в случае быстрой разработки приложений (RAD) или внутренних бизнес-приложений.
Сегодня генеративный ИИ может создавать достойные визуализации, но на ранних этапах разработки более идеальным было бы полностью динамическое решение.

https://vaadin.com/blog/three-quick-ways-to-display-your-java-objects-in-the-ui


👉
Media is too big
VIEW IN TELEGRAM
Spring – эволюция или революция!? | Spring АйО Подкаст №1

В первом выпуске подкаста Spring АйО в студии собрались 4 эксперта сообщества, чтобы попытаться раз и навсегда ответить на вопрос, чем же для нас стал Spring – эволюцией или революцией?

––––– Таймкоды –––––
00:00:00 – Всем привет!
00:00:28 – Какими были ваши первые ощущения от Spring?
00:01:14 – В чём секрет популярности Spring?
00:02:56 – Существует ли Spring без Boot?
00:05:30 – Победил ли Spring?
00:07:08 – А что с другими DI-фреймворками?
00:10:15 – Spring Native – таблетка от всех проблем?
00:14:30 – Что должно быть bean, а что нет?
00:22:10 – Как правильно внедрять зависимость?
00:26:20 – Что там со Spring Data, Михаил?
00:34:19 – AI заменит StackOverflow и Baeldung?
00:36:20 – Не становится ли Spring слишком сложным?
00:39:50 – Почему документация Spring так плоха?
00:41:23 – Есть ли рудименты в Spring?
00:43:28 – Зашел ли в тупик реактивный стек?
00:52:20 – Тупеют ли разработчики из-за Spring?
01:00:42 – В чём разница между сеньором сейчас...
В чем отличие между поверхностным и глубоким клонированием?

Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:

✔️ Если класс имеет только члены примитивных типов, то будет создана совершенно новая копия объекта и возвращена ссылка на этот объект.
✔️ Если класс помимо членов примитивных типов содержит члены ссылочных типов, то тогда копируются ссылки на объекты этих классов. Следовательно, оба объекта будут иметь одинаковые ссылки.

Глубокое копирование дублирует абсолютно всю информацию объекта:

✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода clone() должен вызываться super.clone();
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.

👉
Хотите упростить JPA-запросы в Spring Data?

Ознакомьтесь с демонстрацией Query By Example (QBE)! Создавайте динамические, безопасные для типов запросы без шаблонов.

Идеально подходит для гибких форм поиска

Java 23 + Spring Boot + Spring Data JPA

https://github.com/danvega/qbe

👉
Лучшие книги по Java


Основы Java:

1. "Head First Java" от Кэти Сьерра и Берт Бейтс
Эта книга предлагает уникальный подход к обучению с использованием визуальных элементов и интерактивных упражнений. Она идеально подходит для тех, кто только начинает изучать Java и хочет получить прочные основы. Книга написана в легком и доступном стиле, что делает процесс обучения увлекательным и эффективным.

2. "Java: A Beginner's Guide" от Герберта Шилдта
Герберт Шилдт — известный автор учебников по программированию, и его книга "Java: A Beginner's Guide" является отличным ресурсом для начинающих. В этой книге он подробно объясняет основные концепции Java, начиная с самых простых и заканчивая более сложными. Книга написана в доступном стиле и включает множество примеров кода.

3. "Effective Java" от Джошуа Блоха
Хотя эта книга не предназначена исключительно для новичков, она является незаменимым ресурсом для тех, кто хочет писать качественный и эффективный код на Java. Джошуа Блох делится своими рекомендациями и лучшими практиками, которые помогут вам избежать распространенных ошибок и улучшить качество вашего кода.

Продвинутый уровень:

1. "Java Concurrency in Practice" от Брайана Гетца и других авторов
Эта книга является обязательной для тех, кто хочет углубиться в тему многопоточности и конкурентного программирования на Java. Она охватывает все аспекты, начиная от базовых концепций и заканчивая сложными паттернами. Книга написана командой экспертов, что делает её особенно ценной.

2. "Clean Code: A Handbook of Agile Software Craftsmanship" от Роберта Мартина
Хотя эта книга не посвящена исключительно Java, она является важным ресурсом для любого программиста. Роберт Мартин делится своими принципами написания чистого и поддерживаемого кода. Книга написана в доступном стиле и включает множество примеров кода.

3. "Java Performance: The Definitive Guide" от Скотта Оукса
Эта книга поможет вам понять, как оптимизировать производительность ваших Java-приложений. Скотт Оукс объясняет, как измерять и улучшать производительность кода. Книга написана в доступном стиле и включает множество примеров кода.

👉
Примеры поведенческих шаблонов проектирования

🔴Цепочка обязанностей (Chain of responsibility) - Предназначен для организации в системе уровней ответственности.

🔴Команда (Command) - Представляет действие. Объект команды заключает в себе само действие и его параметры.

🔴Интерпретатор (Interpreter) - Решает часто встречающуюся, но подверженную изменениям, задачу.

🔴Итератор (Iterator) - Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого + __из объектов, входящих в состав агрегации.

🔴Посредник (Mediator) - Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.

🔴Хранитель (Memento) - Позволяет, не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях.

🔴Наблюдатель (Observer) - Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

🔴Состояние (State) - Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

🔴Стратегия (Strategy) - Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.

🔴Шаблонный метод (Template method) - Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

🔴Посетитель (Visitor) - Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.

👉
Mastering Java Streams: Полное руководство для разработчиков

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

https://dev.to/be11amer/mastering-java-streams-a-complete-guide-for-developers-495d

👉
Определение и отличие IP адресов LAN, PPP в Java

Чтобы определить IP-адрес локальной машины с использованием Java, примените следующий код:

import java.net.*;

public class GetIP {
public static void main(String[] args) throws UnknownHostException {
System.out.println(InetAddress.getLocalHost().getHostAddress());
}
}


Работа с несколькими сетевыми интерфейсами

Если ваш компьютер оснащён несколькими сетевыми интерфейсами, иногда бывает необходимо обойти весь список интерфейсов и отфильтровать адреса, не являющиеся обратными петлями и являющиеся локальными для сайта. Это особенно актуально при работе в средах с многочисленными сетями.

import java.net.*;
import java.util.*;

public class GetMultiIPs {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
if (
...
Определение и отличие IP адресов LAN, PPP в Java. Использование DatagramSocket для нестандартных ситуаций

В некоторых случаях, например, при работе с Linux-системами, InetAddress.getLocalHost() может давать неожиданный результат. В таких ситуациях может быть полезно использовать другой способ — через DatagramSocket, отправляя запрос в сеть:


import java.net.*;

public class GetPreferredIP {
public static void main(String[] args) throws SocketException {
try (final DatagramSocket socket = new DatagramSocket()) {
socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
System.out.println(socket.getLocalAddress().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}


Сервер не получает эти данные, однако этот метод поможет определить предпочтительный локальный IP-адрес.

👉
Java Language Futures - Fall 2024 Edition

0:00 - Intro
3:54 - Records
9:14 - Sealed classes
11:22 - Pattern matching
20:00 - Data Oriented Programming
29:00 - Implicitly declared classes & instance main methods
33:20 - with Expressions
38:20 - Flexible constructor bodies
48:10 - What's next
50:53 - Conclusion

https://www.youtube.com/watch?v=NNPN5tvjzqA

👉
Jextract — The Native Library Binding Extraction Tool

Проект Panama разработан для поддержки доступа к нативным библиотекам на Java. Foreign Function and Memory API (FFM API) упрощает взаимодействие между JVM и чужими API-интерфейсами. FFM API добавлена в JDK 22 для поддержки доступа к внешней памяти и вызова внешних функций. Инструмент Jextract анализирует заголовочные файлы нативных библиотек и генерирует Java-код для использования внешних функций и API памяти. О том, как использовать этот инструмент, подробно в гайде.

https://dev.java/learn/jvm/tools/complementary/jextract/

👉
Advancing AI by Accelerating Java on Parallel Architectures

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

https://inside.java/2024/10/23/java-and-ai/

👉
Five Ways to Speed up Your Maven Builds

Как ускорить ваши Maven-сборки? «Поставить Gradle», — скажет кто-то. Ребята из Gradle считают иначе и даже подготовили статью на эту тему. По их мнению, в случае проблем со скоростью ваших сборок стоит присмотреться к профилям: возможно, некоторые плагины сильно замедляют сборку. С помощью профилей можно отключить часть плагинов для локальной или CI-сборки в зависимости от того, что вам нужно ускорить.

https://gradle.com/blog/five-ways-to-speed-up-your-apache-maven-builds/

👉
Илья Спицын, X5 Tech — jOOQ. Лекарство от Hibernate?

Поговорили об SQL-driven работе с БД. Спикер кратко сравнил инструменты и рассказал о преимуществах jOOQ для построения сложных запросов. Показал несколько примеров, где jOOQ может пригодиться разработчику.

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

https://youtu.be/SCSLoi4iiXA?si=D3Ez3kFFKFLB4zmK

👉