Проект предоставляет Java-обёртки для популярных C/C++ библиотек вроде OpenCV, FFmpeg и libdc1394, позволяя использовать их возможности без необходимости писать нативный код.
Инструмент имеет встроенные утилиты для калибровки камер, обнаружения объектов и работы с GPU через OpenCL/OpenGL. Поддерживается интеграция с аппаратными SDK. Установка возможна через Maven/Gradle или вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5🔥3🎅1
Forwarded from Java Guru 🤓
👍7🔥5😁5❤3
Как подключить Apache Kafka к проекту
Apache Kafka — это распределённая система обработки потоковых данных, которая часто используется для обработки больших объёмов сообщений в реальном времени. В этом посте мы разберём пошаговое подключение Kafka к проекту.
1️⃣ Подготовка
Для начала вам нужно добавить зависимости.
Убедитесь, что у вас установлен Apache Kafka и Zookeeper, или используйте сервисы, такие как Confluent Cloud.
2️⃣ Настройка KafkaProducer
KafkaProducer используется для отправки сообщений в Kafka. Вот пример создания продюсера, который будет отправлять сообщения в топик Kafka.
Шаг 1. Создайте конфигурацию продюсера:
Шаг 2. Отправка сообщения:
3️⃣ Настройка KafkaConsumer
Шаг 1. Создайте конфигурацию консюмера:
Шаг 2. Чтение сообщений:
4️⃣ Запуск Kafka Producer и Consumer
Запустите сервер Kafka и Zookeeper (если используете локальную установку).
🔘 Включите продюсер:
🔘 Запустите консюмер для получения сообщений:
Как вы используете Kafka в своих проектах?
✅ Java библиотека #java
Apache Kafka — это распределённая система обработки потоковых данных, которая часто используется для обработки больших объёмов сообщений в реальном времени. В этом посте мы разберём пошаговое подключение Kafka к проекту.
Для начала вам нужно добавить зависимости.
<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.
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();
}
}
}Шаг 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();
}
}
}Запустите сервер 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 в своих проектах?
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡15❤6🔥2
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 — но разработка приостановлена из-за критики синтаксиса и архитектуры. Пока функция нестабильна и требует пересмотра.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍6🔥5
Forwarded from Java Guru 🤓
Что делает данный конфигурационный класс?
Anonymous Quiz
2%
Отключает аутентификацию для всех запросов
3%
Применяет форму входа для всех запросов
92%
Разрешает доступ без аутентификации к /public/** и требует аутентификацию для остальных запросов
2%
Разрешает доступ без аутентификации только к /
1%
Включает аутентификацию только для POST-запросов
👍8🔥4
JOL — это инструмент от тех же разработчиков, что и JMH, и он помогает понять, как Java хранит объекты в памяти. Особенно полезен при оптимизации производительности и снижении потребления памяти.
📌 Что умеет JOL:
— Показывает внутреннюю структуру объектов Java (поля, пэддинг, смещения)
— Помогает исследовать выравнивание, заполнение и особенности layout'а объектов в разных JVM
— Учитывает влияние флагов типа -XX:ObjectAlignmentInBytes
— Есть аннотации и API для анализа объектов прямо из кода
— Поддерживает анализ "на месте" без запуска внешнего инструмента
🧠 Особенно актуально, если вы работаете с большим количеством данных, кастомными структурами или high-load системами. Понимание того, что реально занимает память, помогает сократить её расход без магии.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2🔥2
Библиотека кроссплатформенная, поддерживает синтаксис ANSI, Unicode и даже интеграцию с SSH/Telnet. Минимальная требуемая версия Java — 11, а для проектов на JPMS есть готовые модули. Подключить инструмент просто: достаточно добавить зависимость в Maven или Gradle.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4🔥3
Когда проект обрастает модулями, библиотеками и зависимостями, легко потерять нить. Dependency Analyzer помогает навести порядок в зависимостях и избавить проект от хлама.
— Показывает все зависимости (включая транзитивные) в виде дерева
— Помогает обнаружить дублирующиеся зависимости, неиспользуемые библиотеки и конфликты версий
— Даёт рекомендации по удалению или замене
— Упрощает анализ pom.xml или build.gradle — не нужно гадать, откуда взялась та или иная версия
— Помогает оптимизировать сборку и ускорить CI
— Снижает риски уязвимостей за счёт удаления неиспользуемых библиотек
— Откройте окно Maven/Gradle
— Нажмите кнопку Analyze Dependencies.
— IDEA покажет дерево с путями, версиями и проблемами
— Можно быстро перейти к конфигурации и исправить
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤8🔥5😁1
Forwarded from Java Guru 🤓
Ревью. В чём проблема этого фрагмента кода?
Anonymous Quiz
62%
Конкатенация в sql-запросе
9%
Наличие аннотация @Repository
12%
Отсутствие аннотации @Autowired
11%
execute() вместо save()
6%
к private jdbcTemplate нет доступа
👍8❤6🔥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
Если вы когда-либо писали плагины, делали автоконфигурацию или искали классы с аннотациями — вам пригодится ClassGraph. Это быстрый и гибкий инструмент для сканирования classpath'а, аналог Reflections, но с куда лучшей производительностью и расширенной функциональностью.
📌 Что умеет ClassGraph:
— Находит классы по аннотациям, интерфейсам, суперклассам
— Позволяет искать ресурсы, inner-классы, модули, методы и поля
— Работает с JAR-файлами, модулями JPMS, Android, OSGi и даже нестандартной загрузкой классов
— Позволяет делать глубокий анализ зависимостей и иерархий
— Поддерживает черный/белый список пакетов (include/exclude)
⚡️ Почему лучше, чем Reflections:
— Существенно быстрее при сканировании большого classpath
— Умнее — может обрабатывать class-loader’ы, не теряя контекста
— Поддерживает более новые фичи JVM, включая модули (Java 9+)
— Активно поддерживается и обновляется
🧠 Полезно для:
— Фреймворков с динамической загрузкой
— Плагинных систем
— Анализа и визуализации зависимостей
— Разработки DI-контейнеров, автосканеров и DSL'ов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
Для 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 контейнера.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍10🔥5
Хотите быстро замерить время выполнения кода без тяжёлых библиотек?
Используйте
System.nanoTime() - он точнее, чем currentTimeMillis(), и подходит для измерения производительности:
long start = System.nanoTime();
// код, который нужно замерить
Thread.sleep(500);
long end = System.nanoTime();
System.out.println("Время выполнения: " + (end - start) / 1_000_000 + " ms");
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥3
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
42%
Ошибка: / by zero затем Завершение работы.
13%
Ошибка: ArithmeticException / by zero
6%
Ошибка компиляции
2%
0
37%
Ошибка: ArithmeticException затем Завершение работы.
👍9❤4🔥4❤🔥2
Работаете с классом на 500 строк? Теряетесь в методах и полях? Structure Tool Window помогает быстро сориентироваться в любом файле.
— Показывает структуру текущего файла: методы, поля, вложенные классы
— Подсвечивает override-методы, конструкторы, аннотации
— Поддерживает навигацию и поиск по элементам
— Работает для Java, Kotlin, XML, и даже .properties
— Быстро находите нужный метод без скроллинга
— Помогает понять, как устроен чужой код
— Ускоряет навигацию по большим классам и конфигурациям
— Alt+7 (или Cmd+7 на macOS) — откроет Structure
— Можно настроить сортировку, группировку и фильтры
— Клик — и вы уже в нужном месте кода
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥6❤4
🦙 Jlama — LLM-движок для Java-разработчиков. Проект поддерживает популярные модели вроде Llama 3, Mistral и Gemma 2, предлагая инструменты для их загрузки, квантования и запуска. Он работает с Java 20+ и поддерживает распределенные вычисления.
Разработчики могут использовать Jlama как через CLI-интерфейс для локального тестирования моделей, так и встраивать его в свои проекты через Maven-зависимости. Проект будет полезен для интеграции LLM в enterprise-решения без перехода на Python-стек.
🖥 GitHub
✅ Java библиотека #java
Разработчики могут использовать Jlama как через CLI-интерфейс для локального тестирования моделей, так и встраивать его в свои проекты через Maven-зависимости. Проект будет полезен для интеграции LLM в enterprise-решения без перехода на Python-стек.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9❤4