50 бесплатных вопросов для подготовки к сертификации Spring Professional Certification
⏩ Читать подробнее
👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Семантика доставки в Kafka
⏩ At-Least-Once («Как минимум один раз») – гарантирует доставку, но возможны дубликаты.
⏩ At-Most-Once («Не более одного раза») – сообщения не дублируются, но возможны потери.
⏩ Exactly-Once («Ровно один раз») – гарантирует, что каждое сообщение будет обработано ровно один раз, без потерь и дубликатов.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
Создание простого HTTP-сервера в Java
🟡 Настройка и обзор проекта.
🟡 Управление конфигурацией.
🟡 Использование серверных сокетов.
🟡 Обработка нескольких подключений с помощью потоков.
🟡 Разбор HTTP-запросов.
и тд.
Это пошаговое руководство, которое поможет разобраться в основах создания веб-сервера с нуля на Java.
📲 Cмотреть источник: тут
👉 Java Portal | #видео
и тд.
Это пошаговое руководство, которое поможет разобраться в основах создания веб-сервера с нуля на Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥1
Что такое Внедрение Зависимостей (Dependency Injection)?
Внедрение зависимостей — это шаблон проектирования, при котором объекты получают свои зависимости из внешнего источника, а не создают их внутри себя.
Преимущества внедрения зависимостей👇
- Слабая связность: Компоненты взаимодействуют через определённые интерфейсы, что повышает гибкость.
- Упрощённое тестирование: Легче проводить модульное тестирование с использованием мок-объектов.
- Повторное использование кода: Способствует модульному дизайну, улучшая переиспользование кода.
- Простая конфигурация: Автоконфигурация Spring Boot минимизирует необходимость ручного связывания зависимостей.
- Лучшая поддерживаемость: Изменения в одном компоненте не оказывают прямого влияния на другие.
👉 Java Portal
Внедрение зависимостей — это шаблон проектирования, при котором объекты получают свои зависимости из внешнего источника, а не создают их внутри себя.
Преимущества внедрения зависимостей
- Слабая связность: Компоненты взаимодействуют через определённые интерфейсы, что повышает гибкость.
- Упрощённое тестирование: Легче проводить модульное тестирование с использованием мок-объектов.
- Повторное использование кода: Способствует модульному дизайну, улучшая переиспользование кода.
- Простая конфигурация: Автоконфигурация Spring Boot минимизирует необходимость ручного связывания зависимостей.
- Лучшая поддерживаемость: Изменения в одном компоненте не оказывают прямого влияния на другие.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🌭1
Разница между Interceptor и Filter в Spring Boot
Что такое Filter? Filter — это часть Servlet API, работающая на низком уровне, обрабатывающая все входящие запросы до того, как они достигнут диспетчера Spring.
Когда использовать Filter?
🟡 Логирование
🟡 Сжатие GZIP
🟡 Проверки безопасности: реализация брандмауэров, ограничение скорости, контроль доступа
🟡 Модификация запросов/ответов: изменение HTTP-данных (например, упаковка, очистка, кэширование)
Что такое Interceptor? Interceptor — это часть Spring MVC, работающая внутри фреймворка Spring. Он позволяет модифицировать запросы и ответы, особенно для контроллеров.
Когда использовать Interceptor?
🟡 Проверка учетных данных и прав доступа для контроллеров
🟡 Логирование времени выполнения
🟡 Изменение модели или представления перед отправкой ответа клиенту
👉 Java Portal
Что такое Filter? Filter — это часть Servlet API, работающая на низком уровне, обрабатывающая все входящие запросы до того, как они достигнут диспетчера Spring.
Когда использовать Filter?
Что такое Interceptor? Interceptor — это часть Spring MVC, работающая внутри фреймворка Spring. Он позволяет модифицировать запросы и ответы, особенно для контроллеров.
Когда использовать Interceptor?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Media is too big
VIEW IN TELEGRAM
Интеграция потоков данных для микросервисов с Kafka и Kafka Connect
Автор делится опытом выбора Kafka для реального времени получения информации о стоках товаров через API, а также описывает процесс интеграции реляционных баз данных, выбор и настройку коннекторов Kafka, использование базы данных Tarantool для хранения данных и выбор инструментов для мониторинга, таких как Dynatrace, Prometheus и Burrow. В результате была создана система, обрабатывающая данные за 5-10 секунд.
📲 Cмотреть источник: тут
👉 Java Portal | #видео
Автор делится опытом выбора Kafka для реального времени получения информации о стоках товаров через API, а также описывает процесс интеграции реляционных баз данных, выбор и настройку коннекторов Kafka, использование базы данных Tarantool для хранения данных и выбор инструментов для мониторинга, таких как Dynatrace, Prometheus и Burrow. В результате была создана система, обрабатывающая данные за 5-10 секунд.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Если ты когда-нибудь работал с Java Streams, то знаешь, как полезно отслеживать промежуточные данные.
Но что, если ты не хочешь изменять элементы, а просто вывести их для отладки?🤔
Вот тут в игру вступает👇
Зачем это нужно?
☑ Отладка: подглядывай за данными без изменения потока.
☑ Чистота кода: нет побочных эффектов, как с forEach().
👉 Java Portal
Но что, если ты не хочешь изменять элементы, а просто вывести их для отладки?
Вот тут в игру вступает
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());
Зачем это нужно?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥3
Забыли про ExecutorService и вечные потоки?
Дайте шанс
Пример:👇
Преимущества:
🟡 Параллельные операции без блокировок.
🟡 Чистый и понятный код.
🟡 Гибкость при работе с результатами.
👉 Java Portal
Дайте шанс
CompletableFuture
! Это идеальный способ выполнять несколько операций параллельно, при этом сохраняя чистый код.Пример:
CompletableFuture.supplyAsync(() -> {
// Долгая операция
return "Hello, ";
}).thenCombine(
CompletableFuture.supplyAsync(() -> {
// Ещё одна операция
return "World!";
}),
(greeting, name) -> greeting + name
).thenAccept(System.out::println); // Выведет "Hello, World!"
Преимущества:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥4
Как работает перехватчик (Interceptor) в Spring Boot?
Когда клиент делает запрос:
⏩
⏩ Затем
⏩ Перед тем как запрос достигнет Controller, он проходит через все настроенные перехватчики (Interceptors) и выполняет их метод preHandle().
⏩ Если все методы
⏩ Controller выполняет запрос. После этого запрос проходит через метод postHandle() всех перехватчиков.
⏩ Наконец, если все прошло успешно и методы
👉 Java Portal
Когда клиент делает запрос:
DispatcherServlet
первым получает запрос.DispatcherServlet
использует HandlerMappings, чтобы найти соответствующий Controller.
preHandle()
возвращают true, запрос передается в Controller.
postHandle()
вернули true
, вызывается метод afterCompletion()
у всех перехватчиков.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍6🌭2
Гонки потоков любят конкуренцию — но Kafka не дает им выиграть.
Single Writer Pattern, но для распределенных систем.
Все, кто работал с потоковыми данными, знают, насколько болезненно получать события не в том порядке. Одна ошибка — и состояние системы рушится.
Что такое Single Writer Pattern?🤔
Этот паттерн гарантирует, что только один процесс записывает или обрабатывает данные в любой момент времени, избегая конфликтов и сохраняя консистентность.
⏩ Kafka использует этот принцип на уровне партиций:
⏩ Каждую партицию в момент времени обрабатывает только один потребитель.
⏩ Никаких гонок, путаницы или несогласованных данных — только чистая и упорядоченная обработка.
Как Kafka реализует это?
🟡 Топики разделены на партиции.
🟡 Каждая партиция закреплена только за одним потребителем.
🟡 Один consumer читает сообщения в правильном порядке, предотвращая гонки потоков.
Реальный пример: события заказов в e-commerce
Представьте, что маркетплейс получает такие события:
☑ OrderPlaced
☑ OrderConfirmed
☑ OrderShipped
Все события по одному заказу направляются в одну и ту же партицию, гарантируя их последовательную обработку. Это значит, что заказ не отправится раньше, чем будет подтвержден.
🔄 Отказоустойчивость без потери порядка
Если потребитель выходит из строя, Kafka перераспределяет его партиции.
🔄 Новый consumer продолжает обработку с того же места, сохраняя порядок событий.
Основные выводы:
☑ Kafka применяет Single Writer Pattern на уровне партиций.
☑ Это гарантирует упорядоченную и безопасную обработку без гонок потоков.
☑ Отказоустойчивость реализована без дублирования данных.
Перестаньте бороться с конкуренцией — проектируйте с учетом ее особенностей.
Последовательность событий — не просто удобство, а основа корректности в распределенных системах.
💬 Как вы решаете эту задачу в продакшене?
👉 Java Portal
Single Writer Pattern, но для распределенных систем.
Все, кто работал с потоковыми данными, знают, насколько болезненно получать события не в том порядке. Одна ошибка — и состояние системы рушится.
Что такое Single Writer Pattern?
Этот паттерн гарантирует, что только один процесс записывает или обрабатывает данные в любой момент времени, избегая конфликтов и сохраняя консистентность.
Как Kafka реализует это?
Реальный пример: события заказов в e-commerce
Представьте, что маркетплейс получает такие события:
Все события по одному заказу направляются в одну и ту же партицию, гарантируя их последовательную обработку. Это значит, что заказ не отправится раньше, чем будет подтвержден.
Если потребитель выходит из строя, Kafka перераспределяет его партиции.
Основные выводы:
Перестаньте бороться с конкуренцией — проектируйте с учетом ее особенностей.
Последовательность событий — не просто удобство, а основа корректности в распределенных системах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤1🤔1🌭1
Как 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
При разработке Java-приложений часто требуется работать с базой данных. Для этого используется JDBC (Java Database Connectivity) — технология, которая позволяет Java-программе отправлять SQL-запросы и получать данные
Давайте разберемся, как это работает шаг за шагом:
Программа пишет SQL-запрос, который нужно выполнить (например, SELECT * FROM users).
Этот запрос передается через JDBC API, который является стандартным интерфейсом взаимодействия с базами данных в Java.
JDBC API отправляет запрос в Driver Manager. Этот компонент выбирает правильный драйвер для нужной базы данных.
Найденный драйвер переводит запрос в понятный для базы данных формат и отправляет его в СУБД.
База данных выполняет запрос и возвращает результат обратно через все уровни:
Database → Database Driver → Driver Manager → JDBC API → Java-приложение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🔥2🤔1
Что такое 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
Spring Boot — это упрощённый и удобный фреймворк, построенный на основе Spring Framework. Он значительно облегчает разработку самодостаточных и готовых к продакшену Spring-приложений благодаря следующим особенностям:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2🤯1
Архитектура JVM
У Java Virtual Machine (JVM) есть 3 основных компонента:
⏩ Загрузчик классов (Classloader)
⏩ Область данных (Data Area)
⏩ Исполняющий механизм (Execution Engine)
Процесс загрузки классов включает 3 этапа:
🍩 Загрузка (Loading)
🍩 Связывание (Linking)
🍩 Инициализация (Initialization)
В области данных, создаваемой JVM, есть 5 компонентов:
🟡 Область методов (Method Area)
🟡 Куча (Heap Area)
🟡 Стек (Stack Area)
🟡 Регистр счётчика команд (PC Register)
🟡 Стек нативных методов (Native Method Stack)
👉 Java Portal
У Java Virtual Machine (JVM) есть 3 основных компонента:
Процесс загрузки классов включает 3 этапа:
В области данных, создаваемой JVM, есть 5 компонентов:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5💊1
Паттерн Singleton — это такой паттерн, который заставляет класс иметь только один экземпляр и предоставляет доступ к нему для всего приложения.
Когда его использовать?
⏩ Когда нужно, чтобы по всему приложению был один и тот же объект (например, конфиг или логгер).
⏩ Если создание объекта сильно грузит систему, и лишние экземпляры будут только мешать.
Как работает?
⏩ В классе с этим паттерном создается всего один экземпляр.
⏩ Экземпляр можно получить через специальный метод, который проверяет, существует ли уже объект. Если нет — создает его.
Плюсы:
☑ Экономит память, создавая только один объект.
☑ Легко внедряется, если нужно иметь один объект для всех.
Минусы:
❌ Сложнее тестировать, потому что жесткая зависимость от единственного объекта.
❌ Могут быть проблемы при многозадачности, если не учесть блокировки.
Когда тебе нужен один и тот же объект для всего приложения — это то, что надо
👉 Java Portal
Когда его использовать?
Как работает?
Плюсы:
Минусы:
Когда тебе нужен один и тот же объект для всего приложения — это то, что надо
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥1
Зачем мы используем дженерики в Java? 🤔
⏩ Типовая безопасность: Предотвращает возникновение ошибки ClassCastException во время выполнения.
⏩ Повторное использование кода: Позволяет писать универсальные алгоритмы, которые работают с различными типами.
⏩ Проверка на этапе компиляции: Обнаруживает ошибки на этапе компиляции, а не во время выполнения.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥2
Параллелизм в Java
Параллельность (Concurrency) включает в себя управление несколькими потоками для одновременного выполнения задач, что критически важно для высокопроизводительных приложений
Как это работает?🤔
🍩 Инициализируем потоки.
🍩 Проверяем, готовы ли они.
🍩 Запускаем задачи одновременно.
🍩 Дожидаемся завершения и закрываем потоки
👉 Java Portal
Параллельность (Concurrency) включает в себя управление несколькими потоками для одновременного выполнения задач, что критически важно для высокопроизводительных приложений
Как это работает?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2💊2