Случайно удалили строки, или вдруг не можете вспомнить, что только что меняли? Здесь на помощь приходит Local History.
— Хранит локальные изменения файлов даже без коммитов
— Сохраняет историю редактирования на уровне IDE
— Позволяет вернуться к любой версии файла за определенный период времени
— Спасает, если случайно удалил важные строки или сделал нежелательное изменение
— Не требует настроек или использования системы контроля версий
— Мгновенно восстанавливает состояние файла без лишних усилий
— Щелкните правой кнопкой на файле, выберите Local History -> Show History
— Выберите нужную версию и восстановите изменения
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9😁6👍4❤3
Media is too big
VIEW IN TELEGRAM
TCP Log-сервер на java (NIO)
В предыдущем видео Оптимизация неблокирующего TCP сервера на java (NIO) был оптимизирован TCP сервер.
Сейчас на его основе сделаем сервер для приема логов.
Для парсинга потока байт применим конечный автомат.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
✅ Java библиотека #java
В предыдущем видео Оптимизация неблокирующего TCP сервера на java (NIO) был оптимизирован TCP сервер.
Сейчас на его основе сделаем сервер для приема логов.
Для парсинга потока байт применим конечный автомат.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥2🍾2
Хотите создать мощный инструмент мониторинга для ваших микросервисов? Используйте 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 для обеспечения сквозной трассировки запросов в распределенной системе.Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥2
Проект предоставляет 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