Java Portal | Программирование
11.5K subscribers
806 photos
60 videos
21 files
602 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Основные концепции в Kafka которые нужно знать:

🟡Топики (Topics): Kafka организует сообщения в топики, которые выступают в роли категорий сообщений.
🟡Разделы (Partitions): Каждый топик разделяется на несколько разделов, что позволяет обрабатывать данные параллельно.
🟡Продюсеры (Producers): Отправляют сообщения в топики Kafka.
🟡Потребители (Consumers): Читают сообщения из топиков, обычно в составе групп потребителей для параллельной обработки.
🟡Брокеры (Brokers): Сервера Kafka, которые хранят и передают сообщения.
🟡Zookeeper: Управляет метаданными и выбором лидера для разделов.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Свободный и мощный PDF-движок

Если вам нужен Java-инструмент для работы с PDF без привязки к проприетарным библиотекам, OpenPDF – отличный выбор.

Это форк iText 4, который предлагает все ключевые функции для создания, редактирования и подписи PDF-документов. Полностью open-source и распространяется под LGPL/MPL лицензиями.

Генерация и модификация PDF
Шифрование и цифровые подписи
Поддержка форм и аннотаций
Совместимость с Java-приложениями

Используете OpenPDF? 🤔

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java: Почему индустрия возвращается к JDBC вместо JPA?

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

Для ресурсоемких приложений вручную написанные SQL-запросы часто работают быстрее, чем сгенерированные JPA, обеспечивая лучшую эффективность и удобство сопровождения.

Означает ли это, что JPA мертв? 🩸

Не обязательно. JPA по-прежнему полезен для приложений, где:

🟡Быстрое развитие важнее, чем точная оптимизация производительности.
🟡Доменная модель тесно соответствует реляционной структуре данных.
🟡Взаимодействие с базой данных сосредоточено на CRUD-операциях с минимальным количеством сложных запросов.

Однако в приложениях, требующих высокой пропускной способности, сложного SQL и оптимального использования ресурсов, JDBC становится предпочтительным выбором.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java Optional - orElse(), orElseGet() и orElseThrow()

Если вы используете Optional.isPresent(), а затем Optional.get(), то вы используете его неправильно. 😕

Вместо этого рекомендуется использовать цепочку Optional (Optional Chaining) с методами:

orElse(value) – если значение присутствует, оно возвращается, иначе возвращается указанное значение.
orElseGet(Supplier) – если значение присутствует, оно возвращается, иначе вызывается переданный метод (лямбда-функция).
orElseThrow(Supplier<Exception>) – если значение отсутствует, выбрасывается исключение.

Использование Optional в функциональном стиле делает код более читаемым, лаконичным и менее подверженным ошибкам.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
50 бесплатных вопросов для подготовки к сертификации Spring Professional Certification

Читать подробнее

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
Семантика доставки в Kafka

At-Least-Once («Как минимум один раз») – гарантирует доставку, но возможны дубликаты.
At-Most-Once («Не более одного раза») – сообщения не дублируются, но возможны потери.
Exactly-Once («Ровно один раз») – гарантирует, что каждое сообщение будет обработано ровно один раз, без потерь и дубликатов.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание простого HTTP-сервера в Java

🟡Настройка и обзор проекта.
🟡Управление конфигурацией.
🟡Использование серверных сокетов.
🟡Обработка нескольких подключений с помощью потоков.
🟡Разбор HTTP-запросов.
и тд.

Это пошаговое руководство, которое поможет разобраться в основах создания веб-сервера с нуля на Java.

📲 Cмотреть источник: тут

👉 Java Portal | #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Внедрение Зависимостей (Dependency Injection)?

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

Преимущества внедрения зависимостей 👇

- Слабая связность: Компоненты взаимодействуют через определённые интерфейсы, что повышает гибкость.
- Упрощённое тестирование: Легче проводить модульное тестирование с использованием мок-объектов.
- Повторное использование кода: Способствует модульному дизайну, улучшая переиспользование кода.
- Простая конфигурация: Автоконфигурация Spring Boot минимизирует необходимость ручного связывания зависимостей.
- Лучшая поддерживаемость: Изменения в одном компоненте не оказывают прямого влияния на другие.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Создаём HTTP-сервер на Java NIO

Читать подробнее

👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
Разница между Interceptor и Filter в Spring Boot

Что такое Filter? Filter — это часть Servlet API, работающая на низком уровне, обрабатывающая все входящие запросы до того, как они достигнут диспетчера Spring.

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

🟡Логирование
🟡Сжатие GZIP
🟡Проверки безопасности: реализация брандмауэров, ограничение скорости, контроль доступа
🟡Модификация запросов/ответов: изменение HTTP-данных (например, упаковка, очистка, кэширование)

Что такое Interceptor? Interceptor — это часть Spring MVC, работающая внутри фреймворка Spring. Он позволяет модифицировать запросы и ответы, особенно для контроллеров.

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

🟡Проверка учетных данных и прав доступа для контроллеров
🟡Логирование времени выполнения
🟡Изменение модели или представления перед отправкой ответа клиенту

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Интеграция потоков данных для микросервисов с Kafka и Kafka Connect

Автор делится опытом выбора Kafka для реального времени получения информации о стоках товаров через API, а также описывает процесс интеграции реляционных баз данных, выбор и настройку коннекторов Kafka, использование базы данных Tarantool для хранения данных и выбор инструментов для мониторинга, таких как Dynatrace, Prometheus и Burrow. В результате была создана система, обрабатывающая данные за 5-10 секунд.

📲 Cмотреть источник: тут

👉 Java Portal | #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
Если ты когда-нибудь работал с Java Streams, то знаешь, как полезно отслеживать промежуточные данные.

Но что, если ты не хочешь изменять элементы, а просто вывести их для отладки? 🤔

Вот тут в игру вступает peek() — метод, который позволяет подсматривать элементы потока, не изменяя их. Это удобно для логирования или проверки данных на лету. 👇

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> result = numbers.stream()
.filter(n -> n % 2 == 0)
.peek(n -> System.out.println("Filtered value: " + n))
.map(n -> n * 2)
.collect(Collectors.toList());


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

Отладка: подглядывай за данными без изменения потока.
Чистота кода: нет побочных эффектов, как с forEach().

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Забыли про ExecutorService и вечные потоки?

Дайте шанс CompletableFuture! Это идеальный способ выполнять несколько операций параллельно, при этом сохраняя чистый код.

Пример: 👇

CompletableFuture.supplyAsync(() -> {
// Долгая операция
return "Hello, ";
}).thenCombine(
CompletableFuture.supplyAsync(() -> {
// Ещё одна операция
return "World!";
}),
(greeting, name) -> greeting + name
).thenAccept(System.out::println); // Выведет "Hello, World!"


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

🟡Параллельные операции без блокировок.
🟡Чистый и понятный код.
🟡Гибкость при работе с результатами.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает перехватчик (Interceptor) в Spring Boot?

Когда клиент делает запрос:

DispatcherServlet первым получает запрос.
Затем DispatcherServlet использует HandlerMappings, чтобы найти соответствующий Controller.
Перед тем как запрос достигнет Controller, он проходит через все настроенные перехватчики (Interceptors) и выполняет их метод preHandle().
Если все методы preHandle() возвращают true, запрос передается в Controller.
Controller выполняет запрос. После этого запрос проходит через метод postHandle() всех перехватчиков.
Наконец, если все прошло успешно и методы postHandle() вернули true, вызывается метод afterCompletion() у всех перехватчиков.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Гонки потоков любят конкуренцию — но Kafka не дает им выиграть.

Single Writer Pattern, но для распределенных систем.

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

Что такое Single Writer Pattern? 🤔

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

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

Как Kafka реализует это?

🟡Топики разделены на партиции.
🟡Каждая партиция закреплена только за одним потребителем.
🟡Один consumer читает сообщения в правильном порядке, предотвращая гонки потоков.

Реальный пример: события заказов в e-commerce

Представьте, что маркетплейс получает такие события:
OrderPlaced
OrderConfirmed
OrderShipped

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

🔄 Отказоустойчивость без потери порядка

Если потребитель выходит из строя, Kafka перераспределяет его партиции.

🔄 Новый consumer продолжает обработку с того же места, сохраняя порядок событий.

Основные выводы:

Kafka применяет Single Writer Pattern на уровне партиций.
Это гарантирует упорядоченную и безопасную обработку без гонок потоков.
Отказоустойчивость реализована без дублирования данных.

Перестаньте бороться с конкуренцией — проектируйте с учетом ее особенностей.

Последовательность событий — не просто удобство, а основа корректности в распределенных системах.

💬 Как вы решаете эту задачу в продакшене?

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Как Java-приложение подключается к базе данных через JDBC?

При разработке Java-приложений часто требуется работать с базой данных. Для этого используется JDBC (Java Database Connectivity) — технология, которая позволяет Java-программе отправлять SQL-запросы и получать данные

Давайте разберемся, как это работает шаг за шагом:

🍩 Java-приложение
Программа пишет SQL-запрос, который нужно выполнить (например, SELECT * FROM users).

🍩 JDBC API
Этот запрос передается через JDBC API, который является стандартным интерфейсом взаимодействия с базами данных в Java.

🍩 Driver Manager (Менеджер драйверов)
JDBC API отправляет запрос в Driver Manager. Этот компонент выбирает правильный драйвер для нужной базы данных.

🍩 Database Driver (Драйвер базы данных)
Найденный драйвер переводит запрос в понятный для базы данных формат и отправляет его в СУБД.

🍩 Database (База данных)
База данных выполняет запрос и возвращает результат обратно через все уровни:
Database → Database Driver → Driver Manager → JDBC API → Java-приложение.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Spring Boot и чем он отличается от традиционного Spring Framework? 🤔

Spring Boot — это упрощённый и удобный фреймворк, построенный на основе Spring Framework. Он значительно облегчает разработку самодостаточных и готовых к продакшену Spring-приложений благодаря следующим особенностям:

Автоконфигурация – автоматически настраивает Spring и сторонние библиотеки в зависимости от присутствующих зависимостей в classpath.

Starter POMs – предоставляет готовые зависимости (starter'ы), упрощая конфигурацию сборки.

Встроенные серверы – включает встроенные сервера, такие как Tomcat и Jetty, устраняя необходимость в сторонних серверных контейнерах.

Без XML-конфигурации – активно использует аннотации, уменьшая количество шаблонного (boilerplate) кода.

📌 Основное отличие от традиционного Spring Framework в том, что Spring Boot автоматизирует настройку, тогда как обычный Spring требует много ручной конфигурации.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM