Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.38K photos
91 videos
10 files
2.19K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Паттерн Компоновщик (Composite)

Composite — это структурный паттерн, который позволяет организовать объекты в древовидные структуры для представления иерархий "часть-целое". Он позволяет клиентам единообразно работать как с отдельными объектами, так и с их группами.

Использование:

🟡Когда нужно представить иерархическую структуру объектов, например, дерево файловой системы или меню на сайте.
🟡Когда клиентский код должен одинаково работать как с отдельными объектами, так и с их контейнерами.
🟡Когда необходимо удобно добавлять новые виды компонентов в систему, поддерживая единый интерфейс.

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

1️⃣ Позволяет обрабатывать составные и простые элементы одинаково.
2️⃣ Новый тип компонента можно добавить, просто реализовав общий интерфейс.
3️⃣ Можно динамически изменять дерево объектов (добавлять, удалять узлы).

Недостатки:

1️⃣ Усложнение кода: Может сделать систему сложнее из-за необходимости реализации общего интерфейса.
2️⃣ Затраты на проверку типов: Клиентский код иногда должен дополнительно проверять тип узлов, если это необходимо.

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

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍6
🖥 jSDR — фреймворк для создания программно-определяемых радиосистем (Software Defined Radio, SDR) с использованием Java!

🌟 Библиотека позволяет обрабатывать и настраивать радиосигналы, обеспечивая простой и типобезопасный интерфейс для работы с SDR-устройствами, такими как RTL-SDR.

🔐 Лицензия: AGPL-3.0

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6🔥5😁1
Новый HTTP Client от Amplicode на Kotlin Script для Spring приложений и не только

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥2
👩‍💻 Spring Events: Реактивность без сложностей

Аннотация @EventListener позволяет подписываться на события в приложении. Это мощный инструмент для создания слабосвязанных компонентов: один класс публикует событие, а другой реагирует на него, ничего о нем не зная.

Как это работает?

1️⃣ Публикация событий

Spring предоставляет встроенный механизм событий. События — это просто Java-объекты, наследующие ApplicationEvent (начиная с Spring 4.2. наследование стало необязательным).

Публикуете событие через ApplicationEventPublisher:
@Component
public class EventPublisher {
private final ApplicationEventPublisher publisher;

public EventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}

public void publishEvent(String message) {
System.out.println("Publishing event: " + message);
publisher.publishEvent(new MyEvent(this, message));
}
}

public class MyEvent {
private final String message;

public MyEvent(Object source, String message) {
super();
this.message = message;
}

public String getMessage() {
return message;
}
}


2️⃣ Подписка на события

С помощью @EventListener можно подписаться на любое событие:
@Component
public class EventListenerExample {

@EventListener
public void handleEvent(MyEvent event) {
System.out.println("Event received: " + event.getMessage());
}
}


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

— Слабая связность: Публикатор не знает ничего о слушателях, и наоборот.
— Асинхронность: Можно легко сделать обработку событий асинхронной с помощью @Async.

🧐 Где это использовать?

— Аудит и логирование
Отправляйте события о ключевых действиях пользователя в отдельный аудит-лог.

— Обработка бизнес-логики
Делегируйте сложную обработку событий (например, отправку писем) в отдельные компоненты.

— Модульная архитектура
Сделайте ваши модули независимыми, обмениваясь событиями вместо вызовов методов.

А вы используете Spring Events в своих проектах?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍237🔥6
😁
😁6711💯4🍾1
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍42🔥1😁1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
7%
Ошибка компиляции
1%
null
45%
Hello
4%
World
43%
Hello World
😁21👍10🔥4💯4
🖥 filelize-java — легковесная Java-база данных для упрощения записи и чтения данных в человекочитаемые файлы, такие как JSON!

🌟 Она позволяет сохранять объекты в одном или нескольких файлах с помощью простого API, требующего всего одной строки кода. Это особенно полезно для настройки тестовых данных и сценариев, когда полноценная база данных не требуется. Библиотека поддерживает интеграцию с Spring Boot и может использоваться для быстрого создания и управления данными в тестах или простых приложениях.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥4
Что такое MVP?

MVP (Minimum Viable Product) — это минимально жизнеспособный продукт, представляющий собой начальную версию продукта, которая включает только ключевые функции, необходимые для проверки гипотезы или удовлетворения базовых потребностей пользователей.

Ключевые аспекты MVP:

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

— MVP создаётся для тестирования рыночного спроса или реакции пользователей на продукт с минимальными затратами времени и ресурсов.

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

Важно: MVP — это не просто "сырой" продукт, он должен решать основную задачу, при этом быть полезным и функциональным.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2712🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаешь Java - создай проект. Перезагрузка.

Выпуск 1. Запускаем проект. Список программ.

Вступительное слово и список ПО, которое будет использоваться.


🌐🗣СМОТРЕТЬ VKVIDEO

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥2
🖥 Keycloak — это решение с открытым исходным кодом для управления идентификацией и доступом, предназначенное для Java приложений и сервисов!

🌟 Оно обеспечивает функции единого входа (SSO), управления доступом и многое другое, упрощая разработчикам процесс аутентификации и авторизации пользователей.

🔐 Лицензия: Apache-2.0

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍158🔥4
Как работает ConcurrentSkipListSet под капотом?

ConcurrentSkipListSet — это потокобезопасная и отсортированная реализация интерфейса NavigableSet. Она построена на основе ConcurrentSkipListMap, что позволяет ей быть не только упорядоченной, но и эффективной для параллельного доступа. В основе её работы лежит структура данных skip list (список с пропусками).

Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков. На нижнем уровне содержатся все элементы в отсортированном порядке, а верхние уровни хранят лишь часть элементов для ускорения операций поиска. Благодаря этому достигается логарифмическая сложность операций add, remove и contains — O(log n).

Пример структуры:

lvl 3: A ------- H
lvl 2: A --- D -- H
lvl 1: A - B - D - F - H - J


💡 Основные механизмы:

🟢 Skip List: Многослойная структура, где верхние уровни позволяют быстро "перепрыгивать" через диапазоны элементов. Это минимизирует количество переходов по связным спискам.
🟢 Под капотом ConcurrentSkipListSet использует ConcurrentSkipListMap, где ключи — это элементы множества, а значения — фиктивные объекты.
🟢 Потокобезопасность достигается благодаря минимальному блокированию и использованию атомарных операций (CAS — Compare-And-Swap).
🟢 Элементы всегда упорядочены в соответствии с их натуральным порядком или компаратором, переданным в конструктор.

⚠️ Особенности:

🟡 Эффективен для операций чтения (contains, iterators), так как они выполняются без блокировок.
🟡 Операции модификации (add, remove) потокобезопасны, но слегка дороже из-за использования CAS.
🟡 Поддерживает сортировку элементов в натуральном порядке или порядке, определённом компаратором.
🟡 Высокая производительность для сценариев с преобладанием чтений и умеренным количеством обновлений.

🚀 Когда использовать ConcurrentSkipListSet?

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

🔗 Документация

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍42
Ускорение Spring REST API на 200%

Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.

Читать статью
👍22🔥42
Spring Boot + React Admin: CRUD FullStack приложение за 10 минут вместе с Amplicode

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥31🎉1
🖥 JMH: интересный инструмент для замеров скорости кода

JMH — это фреймворк от команды разработчиков JVM (Oracle), который помогает создавать и запускать микробенчмарки для измерения производительности Java-кода. Если вы хотите точно понять, насколько быстро работает ваш код (например, сравнить эффективность разных алгоритмов или подходов), JMH — ваш незаменимый помощник.

⚙️ Основные возможности JMH:

— Точные измерения:
JMH учитывает влияние JIT-компиляции, прогрева JVM и других факторов, которые могут искажать результаты.

— Простота использования:
Написание бенчмарков интуитивно, и вы сразу видите, что влияет на производительность.

— Гибкость настройки:
Вы можете задавать параметры для тестов, такие как число итераций, потоков, warm-up период и другие.

💡 Как начать?

— Добавьте зависимость JMH в ваш проект:
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.38</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.38</version>
</dependency>

или
implementation 'org.openjdk.jmh:jmh-core:1.38'
annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.38'


— Создайте бенчмарк-класс:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Thread)
public class MyBenchmark {

@Benchmark
public int testMethod() {
return calculate(1000);
}

private int calculate(int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += i;
}
return sum;
}
}


— Запустите тесты:
Используйте mvn package или gradle build, чтобы собрать проект, и запустите JMH-тесты.

Использовали JMH раньше? Делитесь своим опытом и результатами.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥71
🖥 Methanol — легковесное расширение для работы с HTTP в Java и Kotlin!

🌟 Оно заполняет пробелы стандартного HTTP-клиента java.net.http, добавляя функциональности, такие как поддержка многокомпонентных загрузок, кэширование и декомпрессия ответов. Библиотека интегрируется с популярными библиотеками для работы с объектами, такими как Jackson и Gson, и включает Kotlin DSL.

🔐 Лицензия: MIT

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥2
😂
😁40👍8❤‍🔥41😍1
🔥 Awesome — это широко известный и популярный репозиторий, представляющий собой коллекцию списков с тщательно отобранными ресурсами, инструментами, библиотеками и материалами на самые разные темы!

💡 Это своего рода "каталог каталогов", включающий подборки по программированию, дизайну, машинному обучению, разработке игр, кибербезопасности и многому другому.

🔐 Лицензия: СС0-1.0

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍8🔥5
⚙️ В чем разница между Load Balancer и API Gateway?

— NLB (Network Load Balancer) – распределяет трафик на уровне IP. Он работает на более низком уровне и не анализирует HTTP-запросы.

— ALB (Application Load Balancer) – маршрутизирует запросы на основе HTTP-заголовков или URL. ALB предлагает более сложные правила маршрутизации. Выбор между NLB и ALB зависит от ваших потребностей. Для простых сервисов в небольших масштабах одного балансировщика нагрузки может быть достаточно.

— API Gateway – работает на уровне приложений и берет на себя задачи, такие как аутентификация, ограничение скорости запросов, кэширование и другие. Его функции отличаются от Load Balancer.

Схема иллюстрирует детали работы этих компонентов. Чаще всего Load Balancer и API Gateway используются вместе, чтобы создать масштабируемую и безопасную архитектуру для современных веб-приложений.

🟡 Два подхода к архитектуре:

— Опция A: ALB + сервисы
ALB распределяет запросы между различными сервисами. Ограничение запросов, аутентификация и другие функции реализуются на уровне сервисов. Это более гибкий подход, но требует больше работы при разработке.

— Опция B: API Gateway + сервисы
API Gateway берет на себя функции аутентификации, ограничения запросов, кэширования и других задач. Это упрощает разработку сервисов, но уменьшает гибкость по сравнению с первым вариантом.

Что предпочитаете — Load Balancer или API Gateway?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍159🔥4
Spring Boot + React Admin: CRUD — это только начало! Улучшаем админку вместе с Amplicode

🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

📝🗣СМОТРЕТЬ DZEN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥3
🖥 OpenGrok — это инструмент для индексирования и поиска исходного кода!

🌟 Он помогает разработчикам быстро находить и анализировать код в больших репозиториях, поддерживает множество языков программирования (Java, C/C++, Python, и другие). OpenGrok предоставляет функциональность для поиска по меткам, комментариям, коду и даже документации. Инструмент ориентирован на улучшение работы с кодом в больших проектах и используется для облегчения навигации по огромным кодовым базам.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥5