Java библиотека
31.6K subscribers
2.33K photos
86 videos
9 files
2.13K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
👩‍💻 Магия IntelliJ IDEA: Local History

Случайно удалили строки, или вдруг не можете вспомнить, что только что меняли? Здесь на помощь приходит Local History.

🟢Что делает

— Хранит локальные изменения файлов даже без коммитов
— Сохраняет историю редактирования на уровне IDE
— Позволяет вернуться к любой версии файла за определенный период времени

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

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

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

— Щелкните правой кнопкой на файле, выберите Local History -> Show History
— Выберите нужную версию и восстановите изменения

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥9👍4
⚡️ Это Имба.

ArnoldC — это императивный язык программирования, где основные конструкции заменяются известными фразами из фильмов Арнольда Шварценеггера.


- if → BECAUSE I'M GOING TO SAY PLEASE
- while → STICK AROUND
- return → I'LL BE BACK
- LISTEN TO ME VERY CAREFULLY name — объявление метода
- I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE — аргументы
- GIVE THESE PEOPLE AIR — non-void метод


Код компилируется в Java, работает на JVM — это не просто шутка. Язык стабилен, есть примеры и документация.

HASTA LA VISTA, BABY

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9😁6👍43
Media is too big
VIEW IN TELEGRAM
TCP Log-сервер на java (NIO)

В предыдущем видео Оптимизация неблокирующего TCP сервера на java (NIO) был оптимизирован TCP сервер.
Сейчас на его основе сделаем сервер для приема логов.
Для парсинга потока байт применим конечный автомат.


🌐🗣СМОТРЕТЬ VKVIDEO

📺🗣СМОТРЕТЬ RUTUBE

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2🔥2🍾2
👩‍💻 Генерация системы мониторинга микросервисов с Spring Boot

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

📝 Промпт:

Generate a monitoring system for microservices in a Spring Boot 3 application.

— Integrate Spring Actuator to expose application health metrics and endpoints.
— Use Micrometer for collecting metrics such as response time, request count, and error rates.
— Implement distributed tracing with OpenTelemetry and Zipkin for tracking requests across multiple services.
— Enable log aggregation with ELK Stack (Elasticsearch, Logstash, and Kibana) for centralized log management.
— Set up Prometheus and Grafana for visualizing real-time performance metrics on custom dashboards.
— Configure automatic health checks and alerting using Spring Boot Admin and Prometheus Alerts.
— Create custom metrics to track domain-specific application performance, such as user sign-ups or payment processing times.


💡 Расширения:

— Добавьте Integrate application performance profiling using JProfiler для захвата и анализа подробных данных о производительности.
— Добавьте Set up integration with Datadog or New Relic для получения дополнительных аналитических данных и обнаружения аномалий в приложении.
— Добавьте Implement circuit breaker patterns with Resilience4j для повышения стабильности системы при высоком трафике или сбоях сервисов.
— Добавьте Enable traceability for all API calls with correlation IDs для обеспечения сквозной трассировки запросов в распределенной системе.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥2
👩‍💻 JavaCV — мост между Java и нативными библиотеками компьютерного зрения

Проект предоставляет Java-обёртки для популярных C/C++ библиотек вроде OpenCV, FFmpeg и libdc1394, позволяя использовать их возможности без необходимости писать нативный код.

Инструмент имеет встроенные утилиты для калибровки камер, обнаружения объектов и работы с GPU через OpenCL/OpenGL. Поддерживается интеграция с аппаратными SDK. Установка возможна через Maven/Gradle или вручную.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥3🎅1
Forwarded from Java Guru 🤓
Что будет результатом кода?
4👍4🔥4
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
31%
Ошибка компиляции
9%
null
1%
0
58%
5
1%
10
👍7🔥5😁53
Как подключить Apache Kafka к проекту

Apache Kafka — это распределённая система обработки потоковых данных, которая часто используется для обработки больших объёмов сообщений в реальном времени. В этом посте мы разберём пошаговое подключение Kafka к проекту.

1️⃣ Подготовка

Для начала вам нужно добавить зависимости.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.0.0</version>
</dependency>
ИЛИ
implementation 'org.apache.kafka:kafka-clients:3.0.0'


Убедитесь, что у вас установлен Apache Kafka и Zookeeper, или используйте сервисы, такие как Confluent Cloud.

2️⃣ Настройка KafkaProducer

KafkaProducer используется для отправки сообщений в Kafka. Вот пример создания продюсера, который будет отправлять сообщения в топик Kafka.

Шаг 1. Создайте конфигурацию продюсера:
public class KafkaProducerConfig {

public KafkaProducer<String, String> createProducer() {
Properties properties = new Properties();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

return new KafkaProducer<>(properties);
}
}


Шаг 2. Отправка сообщения:
public class KafkaMessageSender {

public void sendMessage(String topic, String message) {
KafkaProducer<String, String> producer = new KafkaProducerConfig().createProducer();

ProducerRecord<String, String> record = new ProducerRecord<>(topic, message);

try {
producer.send(record, (metadata, exception) -> {
if (exception != null) {
exception.printStackTrace();
} else {
System.out.println("Сообщение отправлено в " + metadata.topic());
}
});
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.close();
}
}
}


3️⃣ Настройка KafkaConsumer

Шаг 1. Создайте конфигурацию консюмера:
public class KafkaConsumerConfig {

public KafkaConsumer<String, String> createConsumer() {
Properties properties = new Properties();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ConsumerConfig.GROUP_ID_CONFIG, "consumer-group");
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

return new KafkaConsumer<>(properties);
}
}


Шаг 2. Чтение сообщений:

public class KafkaMessageReceiver {

public void receiveMessages(String topic) {
KafkaConsumer<String, String> consumer = new KafkaConsumerConfig().createConsumer();
consumer.subscribe(Arrays.asList(topic));

try {
while (true) {
var records = consumer.poll(1000);

for (ConsumerRecord<String, String> record : records) {
System.out.println("Получено сообщение: " + record.value());
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
consumer.close();
}
}
}


4️⃣ Запуск Kafka Producer и Consumer

Запустите сервер Kafka и Zookeeper (если используете локальную установку).

🔘Включите продюсер:
public class Main {
public static void main(String[] args) {
KafkaMessageSender sender = new KafkaMessageSender();
sender.sendMessage("my_topic", "Привет, Kafka!");
}
}


🔘Запустите консюмер для получения сообщений:
public class Main {
public static void main(String[] args) {
KafkaMessageReceiver receiver = new KafkaMessageReceiver();
receiver.receiveMessages("my_topic");
}
}


Как вы используете Kafka в своих проектах?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
156🔥2
👩‍💻 Java 21: String Templates (JEP 430) — Интерполяция строк как в JavaScript, но со своим подходом

Java 21 представила новый способ работы со строками — *string templates*. Это функция-превью (preview), которую нужно включать явно (--enable-preview) и использовать с JDK 21 или 22. В Java 23 от неё отказались, чтобы переработать дизайн.

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

- Используется шаблонный процессор, например STR.
- Сразу после него идёт точка . и строка-шаблон с выражениями внутри \{...}:

  String name = "Duke";
String greeting = STR."My name is \{name}";
// -> "My name is Duke"

Встроенные выражения могут быть любыми Java-выражениями: арифметика, методы, поля:


int x = 10, y = 20;
String result = STR."\{x} + \{y} = \{x + y}";

- Поддержка многострочных шаблонов
Можно использовать текстовые блоки для JSON, SQL и других структур:


String json = STR."""
{
"user": "\{name}",
"temp": \{tempC}
}
""";

Технические детали
Шаблоны создают объект StringTemplate (runtime представление), содержащий массив литералов и значений выражений.

- Есть разные шаблонные процессоры:
- STR — стандартная интерполяция
- FMT — поддерживает форматирование и локаль
- RAW — необработанный шаблон, для кастомной обработки

Текущее состояние
- Java 21: функция доступна как preview (JEP 430)
- Java 22: вторая preview-итерация
- Java 23: удалена (даже как preview), дизайн требует доработки

Почему удалили?
- Жалобы на синтаксис — \{} вместо привычного ${}, processor.template вместо простого подхода

- Смешение capture (формирование шаблона) и processing нарушает удобство расширения

- Производительность можно обеспечить и без специального синтаксиса

- Дискуссия среди разработчиков: часть считает interpolation небезопасной/бесполезной, часть — нужной функцией качества жизни

Итог

Java 21 попыталась упростить работу со строками и структурными текстами с помощью string templates — но разработка приостановлена из-за критики синтаксиса и архитектуры. Пока функция нестабильна и требует пересмотра.

📌 Подробнее

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍6🔥5
Forwarded from Java Guru 🤓
Что делает данный конфигурационный класс?
👍7🔥2
👩‍💻 Java Object Layout (JOL)

JOL — это инструмент от тех же разработчиков, что и JMH, и он помогает понять, как Java хранит объекты в памяти. Особенно полезен при оптимизации производительности и снижении потребления памяти.

📌 Что умеет JOL:

— Показывает внутреннюю структуру объектов Java (поля, пэддинг, смещения)
— Помогает исследовать выравнивание, заполнение и особенности layout'а объектов в разных JVM
— Учитывает влияние флагов типа -XX:ObjectAlignmentInBytes
— Есть аннотации и API для анализа объектов прямо из кода
— Поддерживает анализ "на месте" без запуска внешнего инструмента

🧠 Особенно актуально, если вы работаете с большим количеством данных, кастомными структурами или high-load системами. Понимание того, что реально занимает память, помогает сократить её расход без магии.

🖥 JOL на GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥2
👩‍💻 JLine — мощная Java-библиотека для работы с консольным вводом, которая делает интерактивные CLI-приложения удобнее и функциональнее. Она предлагает продвинутые возможности вроде редактирования строк, истории команд, автодополнения и даже интерактивных элементов интерфейса — меню, чекбоксов и подсказок.

Библиотека кроссплатформенная, поддерживает синтаксис ANSI, Unicode и даже интеграцию с SSH/Telnet. Минимальная требуемая версия Java — 11, а для проектов на JPMS есть готовые модули. Подключить инструмент просто: достаточно добавить зависимость в Maven или Gradle.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥3
👩‍💻 Магия IntelliJ IDEA: Dependency Analyzer

Когда проект обрастает модулями, библиотеками и зависимостями, легко потерять нить. Dependency Analyzer помогает навести порядок в зависимостях и избавить проект от хлама.

🟢Что делает

— Показывает все зависимости (включая транзитивные) в виде дерева
— Помогает обнаружить дублирующиеся зависимости, неиспользуемые библиотеки и конфликты версий
— Даёт рекомендации по удалению или замене

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

— Упрощает анализ pom.xml или build.gradle — не нужно гадать, откуда взялась та или иная версия
— Помогает оптимизировать сборку и ускорить CI
— Снижает риски уязвимостей за счёт удаления неиспользуемых библиотек

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

— Откройте окно Maven/Gradle
— Нажмите кнопку Analyze Dependencies.
— IDEA покажет дерево с путями, версиями и проблемами
— Можно быстро перейти к конфигурации и исправить

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍168🔥5😁1
Forwarded from Java Guru 🤓
Ревью. В чём проблема этого фрагмента кода?
👍8🔥5
Forwarded from Java Guru 🤓
Ревью. В чём проблема этого фрагмента кода?
Anonymous Quiz
62%
Конкатенация в sql-запросе
12%
Отсутствие аннотации @Autowired
11%
execute() вместо save()
6%
к private jdbcTemplate нет доступа
👍86🔥4😁2
ClassGraph

Если вы когда-либо писали плагины, делали автоконфигурацию или искали классы с аннотациями — вам пригодится ClassGraph. Это быстрый и гибкий инструмент для сканирования classpath'а, аналог Reflections, но с куда лучшей производительностью и расширенной функциональностью.

📌 Что умеет ClassGraph:

— Находит классы по аннотациям, интерфейсам, суперклассам
— Позволяет искать ресурсы, inner-классы, модули, методы и поля
— Работает с JAR-файлами, модулями JPMS, Android, OSGi и даже нестандартной загрузкой классов
— Позволяет делать глубокий анализ зависимостей и иерархий
— Поддерживает черный/белый список пакетов (include/exclude)

⚡️ Почему лучше, чем Reflections:

— Существенно быстрее при сканировании большого classpath
— Умнее — может обрабатывать class-loader’ы, не теряя контекста
— Поддерживает более новые фичи JVM, включая модули (Java 9+)
— Активно поддерживается и обновляется

🧠 Полезно для:

— Фреймворков с динамической загрузкой
— Плагинных систем
— Анализа и визуализации зависимостей
— Разработки DI-контейнеров, автосканеров и DSL'ов

🔗 classgraph на GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
👩‍💻 Docker + Java совет

Для Java-приложений в Docker лучше всего использовать многоступенчатую сборку с jlink или jpackage, чтобы собрать кастомный JRE только с нужными модулями.


# Этап сборки jar
FROM maven:3.9.8-eclipse-temurin-21 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests

# Этап с оптимизированным JRE
FROM eclipse-temurin:21-jre-jammy
WORKDIR /app
COPY --from=builder /app/target/myapp.jar myapp.jar

# Оптимизация: ограничим потребление памяти JVM в контейнере
ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75", "-jar", "myapp.jar"]


💡 Такой подход:

- уменьшает размер образа,
- использует только нужные зависимости,
- и корректно учитывает ограничения памяти/CPU контейнера.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍10🔥5
👩‍💻 Быстрый совет Java 💡

Хотите быстро замерить время выполнения кода без тяжёлых библиотек?

Используйте System.nanoTime() - он точнее, чем currentTimeMillis(), и подходит для измерения производительности:


long start = System.nanoTime();

// код, который нужно замерить
Thread.sleep(500);

long end = System.nanoTime();
System.out.println("Время выполнения: " + (end - start) / 1_000_000 + " ms");


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🔥3
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍5🔥4