Библиотека джависта | Java, Spring, Maven, Hibernate
24.1K subscribers
2K photos
38 videos
42 files
2.82K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.iss.one/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
👑 Магия IntelliJ IDEA

Если вы часто просматриваете стек вызовов или трассируете поведение методов — попробуйте «Call Hierarchy» (Ctrl + Alt + H). Этот инструмент показывает, кто вызывает ваш метод — и кто вызывает вызывающего, до самого верхнего уровня.

🔹 Что делает


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

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


— Находит неочевидные связи между частями кода.
— Упрощает работу с легаси: видно, какие методы безопасно менять.
— Быстро определяет, как ошибка «долетела» до нужного места.

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

— Поставьте курсор на метод → нажмите Ctrl + Alt + H.
— IDEA откроет дерево вызовов (Call Hierarchy).
— Вы можете «разворачивать» цепочку вверх по стеку или вниз.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥64
🎮 Реализация асинхронной обработки сообщений с Apache Kafka

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

Решение: в книге «Java 17 Backend Development» автор предлагает интеграцию Apache Kafka для асинхронной обработки сообщений. Это позволяет разгрузить сервисы и обеспечить высокую производительность системы.

Пример кода:
public class KafkaMessageListener {
private final KafkaConsumer<String, String> consumer;

public KafkaMessageListener(String bootstrapServers, String groupId, String topic) {
Properties properties = new Properties();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
properties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());

this.consumer = new KafkaConsumer<>(properties);
this.consumer.subscribe(List.of(topic));
}

public void startListening() {
while (true) {
var records = consumer.poll(Duration.ofMillis(100));
records.forEach(record -> {
System.out.println("Received message: " + record.value());
// Обработка сообщения
});
}
}
}


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

— Лёгкая адаптация к увеличению объёмов данных.
— Гарантированная доставка сообщений.
— Возможность обработки сообщений в фоновом режиме.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71❤‍🔥1🔥1
⚙️ Генерация CI/CD пайплайна

Автоматизация сборки, тестирования и деплоя — must-have даже для pet-проекта. Но настраивать GitLab CI или GitHub Actions вручную? Спросите AI — и получите готовый пайплайн, адаптированный под ваш стек.

📝 Промпт:

Generate a CI/CD pipeline for a Java Spring Boot application using GitLab CI.
— Include stages: build, test, integration-test, package, deploy.
— Use Gradle (or Maven) as the build tool.
— Include support for Docker image build and push to container registry.
— Run integration tests using Testcontainers.
— Use caching to speed up pipeline runs.


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

— Добавьте environment-specific deployments: отдельные джобы для dev/stage/prod с переменными окружения, secrets и условиями по веткам (only/except или rules).
— Интегрируйте notifications в Telegram или Slack на стадии failed/success для быстрой обратной связи.
— Добавьте security scan stage: используйте Snyk или OWASP Dependency Check для анализа уязвимостей зависимостей.
— Автоматизируйте Docker image tagging: используйте Git tag или commit hash, чтобы образы были отслеживаемыми.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍41🥱1
🔍 Правильное понимание Single Responsibility Principle (SRP)

О принципе единственной ответственности слышали все. Конечно правильный ответ согласно книги Роберта Мартина "Чистая архитектура": SRP - это принцип единой ответственности.

Но при попытке разобраться в более дательном понимании принципа его часто трактуют слишком буквально:
Метод должен реализовывать одну задачу

Класс должен отвечать за один функционал


Да, это отчасти верно и такой принцип тоже есть, но он применяется на низшем уровне системы. SRP же применяется на более высоком уровне.

В итоге получаются сервисы, в которых вроде как всё «по SRP», но изменения в одном бизнес-сценарии ведут к каскадным правкам в десятках файлов. Это сигнал: принцип нарушен, несмотря на формальное соблюдение.

🔹 О чём на самом деле говорит SRP

В классическом изложении (по Роберту Мартину):
Модуль должен иметь только одну причину для изменения.


И под модулем понимается не метод и не даже один класс, а группа классов и интерфейсов, объединённая общим потребителем — актором.

🔹 Что это означает на практике

1. Определите акторов
Актор — это не всегда пользователь. Это может быть внешний сервис, внутренний инструмент, регламент. Важно: требования акторов не должны пересекаться. Если они меняются независимо — значит, им нужны отдельные модули.

2. Постройте модули вокруг акторов

Частая ошибка — «модуль пользователей», в котором и логика регистрации, и рассылка писем, и обработка GDPR-запросов.
Лучше разделить:
▪️ один модуль обслуживает end-user’а,
▪️ другой — юридические требования,
▪️ третий — внутреннюю админку.

3. Не дробите код ради SRP, если это нарушает целостность модуля

SRP — это не о размере, а о мотивации изменений. Метод в 100 строк, обслуживающий один сценарий, допустим. А вот класс, который реагирует на десяток независимых событий — нет.

🔹 Пример


Плохо:
public class OrderService {
public void placeOrder() { ... }
public void notifyCustomer() { ... }
public void saveAuditLog() { ... }
}


Этот класс изменится при любом изменении в бизнес-логике, в уведомлениях или в логировании. Три причины изменения — три актора.

✔️ Хорошо:

▪️ OrderProcessor — отвечает за бизнес-сценарий
▪️ NotificationService — отправка сообщений
▪️ AuditService — логирование

Каждый компонент обслуживает одного актора, имеет свою причину для изменений и независимую эволюцию.

🔹 Вывод

SRP стоит понимать как инструмент для проектирования архитектуры. Его задача — отделить контексты, которые меняются по разным причинам, и тем самым минимизировать связность и ограничить зону изменений. Не методы, не классы, а контексты и акторы.

🔼 Если пост был интересен/полезен → поддержите бустом канал

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍135🔥3🤔1
👑 Магия IntelliJ IDEA

Когда нужно что-то быстро протестировать, написать фрагмент кода, проверить регулярку или сериализацию — не создавайте новый класс. Вместо этого используйте Scratch File (Ctrl + Alt + Shift + Insert).

🔹 Что делает


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

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

— Быстрые пробы кода без засорения проекта
— Подходит для написания утилит, генерации данных, логов
— Удобно держать список SQL-запросов, curl-ов или шаблонов прямо в IDE

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


— Нажмите Ctrl + Alt + Shift + Insert → выберите язык (например, Java)
— Пишите как обычно: public static void main, System.out.println() — и запускайте
— Можно открыть менеджер Scratch-файлов через Project > Scratches and Consoles

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥53
🔼 От конкурентного программирования к промышленному производству

В разработке ПО ключевым фактором успеха является не только качество кода, но и способность команды эффективно решать сложные задачи. В статье рассматривается, как алгоритмическое мышление помогает разработчикам:

▪️ Оптимизировать производительность: использование алгоритмов для улучшения скорости и эффективности приложений.

▪️ Управлять сложностью: применение структур данных и алгоритмов для упрощения разработки и поддержки кода.

▪️ Повышать качество продукта: снижение количества ошибок и улучшение стабильности приложений.

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

🔗 Подробнее в статье

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
🎮 Реализация аутентификации с использованием Spring Security

Проблема: обеспечение безопасности приложения требует надёжной системы аутентификации и авторизации пользователей.

Решение: в книге «Java 17 Backend Development» автор предлагает процесс настройки Spring Security для реализации аутентификации с использованием JWT-токенов.

Пример кода:
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtTokenProvider tokenProvider;

public JwtAuthenticationFilter(JwtTokenProvider tokenProvider) {
this.tokenProvider = tokenProvider;
}

@Override
protected void doFilterInternal(HttpServletRequest request, FilterChain chain) throws ServletException, IOException {
String token = tokenProvider.resolveToken(request);
if (token != null && tokenProvider.validateToken(token)) {
String username = tokenProvider.getUsernameFromToken(token);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(username, null, null);
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
chain.doFilter(request, response);
}
}


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


— Защита приложения от несанкционированного доступа.
— Возможность настройки различных уровней доступа.
— Лёгкая адаптация к изменениям в требованиях безопасности.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍42👏1👾1
⚙️ Генерация Event-Driven архитектуры на Spring + Kafka

Классический REST не справляется с масштабом и скоростью реакции? Пора перейти к событийной архитектуре: Kafka + Spring Boot. Спросите AI — и получите продуманный шаблон микросервиса с продюсерами, консьюмерами, сериализацией, хэндлингом ошибок и даже dead-letter-топиками.

📝 Промпт:


Generate a production-grade Java Spring Boot microservice using Apache Kafka for event-driven architecture.
— Use Spring Boot 3 and Spring Kafka.
— Implement Kafka producers and consumers for a user.created event.
— Use Avro schema for message serialization and Schema Registry for compatibility.
— Include retry logic and Dead Letter Topic (DLT) support for failed messages.
— Handle message headers and custom error handling.
— Add integration tests using Embedded Kafka and Testcontainers.


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

— Добавьте Implement the outbox pattern using a transactional Kafka producer and Debezium CDC, чтобы гарантировать доставку событий и избежать дублирования при сбоях в БД.
— Добавьте Integrate observability using Micrometer for Prometheus and OpenTelemetry for distributed tracing, чтобы отслеживать метрики и трассировать поток сообщений сквозь микросервисы.
— Добавьте Generate Kafka topic and consumer group configuration using Terraform, чтобы автоматизировать инфраструктуру и обеспечить консистентную настройку топиков в Dev/Stage/Prod.
— Добавьте Support dynamic partitioning and load balancing among consumers, чтобы масштабировать консьюмеров при увеличении нагрузки.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1👏1🥱1
📊 Работа с многопоточностью

Многопоточность в Java — это не просто задача синхронизации потоков, а целая экосистема инструментов для эффективного и безопасного параллельного выполнения кода. Правильная настройка многопоточных процессов позволяет значительно улучшить производительность, но требует внимательного подхода.

🔹 Основы многопоточности


▪️ Thread — создание потоков вручную с использованием конструктора Thread позволяет получить максимальный контроль, но снижает гибкость. Рекомендуется использовать ExecutorService для более управляемого подхода.
▪️ ExecutorService — интерфейс для управления пулом потоков, позволяет эффективно управлять жизненным циклом потоков и управлять задачами с различными приоритетами.
▪️ Callable vs Runnable — используйте Runnable для простых задач без возврата значений и Callable для задач с возвращаемыми результатами.
▪️ ForkJoinPool — специализированный пул потоков для задач, которые могут быть разбиты на более мелкие параллельные подзадачи, например, при решении рекурсивных задач.

🔹 Синхронизация

▪️ synchronized — это простой способ синхронизации, который подходит для мелких блоков кода. Однако может привести к блокировкам и снижению производительности при интенсивной нагрузке.
▪️ ReentrantLock — предпочтительнее в сценариях с большим количеством потоков и блокировок. Она дает больше контроля, например, возможность прерывания или проверки блокировки.
▪️ ReadWriteLock — используется, когда большая часть потоков только читает данные. Это повышает производительность, так как чтение может происходить параллельно.
▪️ CountDownLatch и CyclicBarrier — удобные инструменты для координации потоков в ситуации, когда несколько потоков должны дождаться выполнения определенных задач.

🔹 Состояния потоков и их управление

▪️ Thread.join() — блокирует вызывающий поток до тех пор, пока не завершится указанный поток. Полезно для синхронизации выполнения различных частей программы.
▪️ Thread.sleep() — приостановка потока на заданный интервал. Не стоит использовать ее для ожидания условий, используйте wait() и notify() для работы с мониторами.
▪️ Thread.interrupt() — сигнализирует потоку о том, что ему нужно завершиться. Это полезно при долгих операциях или ожидающих потоках, которые могут быть отменены.

🔹 Безопасность данных

▪️ ThreadLocal — позволяет каждому потоку иметь собственную копию переменной, что минимизирует проблемы с синхронизацией.
▪️ Atomic classes — обеспечивают атомарные операции с переменными, что повышает производительность, избегая блокировок.
▪️ volatile — используется для переменных, значения которых могут быть изменены несколькими потоками. Гарантирует видимость изменений между потоками, но не синхронизирует доступ к данным.

🔹 Производительность и оптимизация

▪️ Immutable Objects — неизменяемые объекты позволяют избежать проблем синхронизации, так как они безопасны для многопоточного доступа.
▪️ ForkJoinPool — при параллельных задачах, например, при работе с большими объемами данных, используйте ForkJoinPool для более эффективного распределения нагрузки между потоками.
▪️ ExecutorService.submit() — для более высокоуровневого контроля и получения результата используйте submit() с объектом Future вместо execute().

🔹 Дополнительно

▪️ CompletableFuture — для асинхронных операций и управления результатами выполнения в будущем. Это удобный способ для работы с неблокирующими асинхронными операциями.
▪️ Parallel Streams (Java 8+) — используйте параллельные потоки для упрощения многопоточных операций. Например, при обработке коллекций используйте stream().parallel() для распараллеливания задач.

💬 Какие методы синхронизации вы предпочитаете в своем проекте?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥8👍6
👑 Магия IntelliJ IDEA

Забудьте про System.out.println() в логике — используйте Evaluate Expression прямо во время отладки, чтобы проверить любые значения на лету.

🔹 Что делает

— Позволяет выполнять произвольные выражения прямо во время паузы
— Работает с контекстом текущего стека: переменные, поля, this
— Поддерживает сложные конструкции: myList.stream().filter(...).collect(...)

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

— Позволяет быстро проверять гипотезы при отладке
— Избавляет от лишних логов или временных переменных
— Помогает исследовать поведение без изменения кода

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


— Поставьте breakpoint и запустите Debug
— Когда выполнение остановится, нажмите Alt + F8
— Введите выражение и нажмите Evaluate

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🔥1
Сохраняйте шпаргалку по кодам состояния HTTP

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥2
⚙️ JMeter (Apache JMeter)

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

Он идеально подходит для проверки стабильности приложения под нагрузкой, анализа времени отклика и поведения системы в условиях высоких нагрузок. JMeter можно использовать как для тестирования REST API, так и для сложных сценариев с использованием UI.

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

— Поддержка различных типов тестирования: HTTP, FTP, баз данных и WebSocket.
— Гибкость при настройке нагрузки (параметры виртуальных пользователей, сценарии).
— Интеграция с CI/CD (Jenkins, GitLab CI).
— Расширенные отчёты с графиками и статистикой.
— Плагинная система для расширения функционала.
— Возможность интеграции с другими инструментами для мониторинга и анализа (например, Grafana).

🔗 JMeter GitHub

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53👍2
😮 Виртуальные потоки: сравнение loom и vert.x

Виртуальные потоки вызывают много разногласий в кругах джавистов. Разобраться что к чему поможет Владимир Красильщик, pragmatic Java Developer, 01.tech. 30 августа он выступит на JVM Day в штаб-квартире Т-Банка. Расскажет про инженерный подход, основанный на измерениях и про реализации на платформенных и виртуальных потоках с ReentrantLock, через synchronized-секцию и на акторной модели, реализованной на vert.x

▪️На мероприятии также покажут демоверсии продуктов Т-Банка и других компаний, написанных на Java и Scala.

▪️Половина собранных средств Т-Банк планирует направить региональным вузам, которые готовят начинающих ИТ-специалистов. На сайте феста речь про КФУ (ИТИС) в Казани, УрФУ в Екатеринбурге и факультет вычислительной техники РГРТУ в Рязани. Так организаторы хотят поддержать развитие ИТ не только в столице, но и в других городах страны.

Для прохода на JVM Day необходимо заранее зарегистрироваться.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41
⚙️ Генерация аудита пользовательских действий в Spring Boot

Нужно отслеживать, кто что сделал в приложении: создал пользователя, обновил заказ или удалил файл? Реализуйте модуль аудита, который не просто логирует в консоль, а сохраняет структурированные события в базу или брокер. AI поможет с шаблоном, который можно встроить в любой микросервис.

📝 Промпт:


Generate a reusable audit logging module for a Spring Boot 3 application.

— Use Spring AOP to intercept service-layer methods annotated with @Auditable.
— Capture method name, parameters, execution time, and authenticated user details.
— Log audit events asynchronously to Kafka with a custom AuditEvent structure.
— Use JSON for message serialization and include correlation IDs in headers.
— Include fallback to local file logging in case of Kafka failure.
— Add integration with Spring Security to extract user identity from the context.
— Write unit and integration tests using JUnit 5 and Testcontainers.


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

— Добавьте Implement audit event persistence to PostgreSQL using Spring Data JPA, чтобы хранить критические события даже при сбоях брокера.
— Добавьте Include context metadata (request IP, user-agent) using ServletRequest attributes, чтобы повысить трассируемость действий пользователя.
— Добавьте Add audit dashboard using Spring Boot Admin and Grafana, чтобы визуализировать действия и аномалии в реальном времени.
— Добавьте Integrate OpenTelemetry spans around auditing logic, чтобы отслеживать поток аудита между микросервисами на уровне трассировки.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥21
🎧 Что послушать — #подкаст

🔹 Javaswag #77
Дата выпуска: 21 мая 2025
Ведущий: Дмитрий Волыхин
Гость: Андрей Бреслав, создатель Kotlin
Продолжительность: примерно 1 час 53 минуты

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

🔹 Ключевые темы выпуска

00:00 — История создания Kotlin
10:11 — Разработка языка
14:40 — Этапы развития языка
19:16 — Влияние Java
23:44 — Неоднозначность грамматики
30:35 — Дженерики
35:57 — Успех Kotlin
41:27 — Проблемы экосистемы
46:30 — Мультиплатформа
54:05 — Выгорание
01:01:03 — Работа с языками программирования
01:10:30 — AI и его влияние
01:18:53 — Язык программирования следующего поколения
01:20:26 — Kotlin и Java: сравнение
01:28:45 — Swing и мультиплатформа
01:31:55 — Swift и Objective‑C
01:34:41 — Непопулярное мнение
01:39:30 — Будущее AI
01:42:52 — Инновации
01:45:09 — Проблемы амбициозных идей
01:46:28 — Инновации в корпорациях и стартапах
01:50:21 — Продуктивность

🔗 Слушать выпуск

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21
🧠 Как выжать максимум из резюме на HeadHunter

Хорошее резюме — это только начало. Даже если вы профи, в поиске работы многое решает видимость анкеты в выдаче. А вот тут начинается борьба за внимание рекрутера.

🚧 Проблема: сотни схожих резюме. Ваше может просто затеряться.

🎯 Что помогает реально продвинуть резюме вверх:
— Автоподнятие и ручные апдейты
— Правильное имя файла резюме
— Ключевые слова, которых ищут HR
— Механика «откликов + запросы»
— И даже… использование разных браузеров (да-да)

🔗 Все 9 приёмов с примерами — в статье.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3👏1🤔1
🔍 Правильное понимание Liskov Substitution Principle (LSP)

Принципе подстановки Лискова нередко трактуют слишком формально или упрощенно. Простой ответ: LSP требует, чтобы объекты подклассов могли заменять объекты базового класса без изменения поведения программы.

Однако, давайте разберем это более подробно.

🔹 Что на самом деле означает LSP?


В классическом виде (по Барбаре Лисков):
Объекты программы должны быть заменяемы экземплярами их подтипов без изменения правильности работы программы.


Это значит, что любой класс-наследник должен вести себя так же, как и его родитель, не нарушая логики работы программы. Программа должна продолжать работать корректно, если один объект заменяется другим, даже если их реализации отличаются.

🔹 Часто встречаемые ошибки трактования LSP

1. Подмена функционала


Проблемы могут возникнуть, если подкласс значительно меняет поведение метода родительского класса. Например, если метод в подклассе требует дополнительных условий или приводит к ошибкам, это нарушает принцип.

Плохо:
class Bird {
void fly() { ... }
}

class Chicken extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Chicken can't fly");
}
}


Этот пример нарушает LSP, потому что подкласс не может выполнять все действия родителя.

2. Нарушение инвариантов

Если подкласс добавляет новые ограничения или меняет условия, которые предполагались в родительском классе, это может привести к неожиданным результатам. Например, если родительский класс предполагает, что его методы могут работать в определённых диапазонах значений, а в подклассе эти значения не допустимы, это также нарушает принцип.

Плохо:
class Rectangle {
int width, height;

void setWidth(int width) { this.width = width; }
void setHeight(int height) { this.height = height; }
}

class Square extends Rectangle {
@Override
void setWidth(int width) {
this.width = this.height = width;
}

@Override
void setHeight(int height) {
this.height = this.width = height;
}
}


В этом примере подкласс Square изменяет логику работы с размерами, нарушая ожидаемое поведение родительского класса.

🔹 Что на практике важно понимать о LSP

— Соблюдение контракта родительского класса

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

— Логика не должны быть нарушена, лишь расширена


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

— Наследование — это не просто копирование, а расширение возможностей

Правильное наследование позволяет создавать более специфичные классы без нарушения логики родительского класса.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥3
Сохраняйте шпаргалку по cron

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥3
👑 Магия IntelliJ IDEA: Local History

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

🔹 Что делает

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

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

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

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

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

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥3
⚙️ Генерация системы мониторинга микросервисов с 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 для обеспечения сквозной трассировки запросов в распределенной системе.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1😁1🥱1