Забыли про 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
Общие вопросы для собеседования на Java Spring Boot с ответами
🍩 Какие типы внедрения зависимостей бывают?
⏩ Field Injection
⏩ Setter Injection
⏩ Constructor Injection
🍩 Разница между
🍩 Чем отличаются
🍩 Что такое Spring Bean?
Spring Bean – это обычный Java-объект, созданный Spring-контейнером.
🍩 Разница между
🍩 Разница между
🍩 Зачем нужен
Используется для конфигурации приложения: настройки БД, логирование и т. д.
Сохрани себе, чтобы не забыть!
👉 Java Portal
BeanFactory
и ApplicationContext
BeanFactory
использует ленивую инициализацию (создает бины при вызове getBean()).ApplicationContext
использует раннюю инициализацию (бины создаются при старте приложения).@Component, @Repository, @Service
и @Controller
?@Component
– общий стереотип для любого Spring-управляемого компонента.@Repository
– используется для DAO-слоя (работа с БД).@Service
– для сервисного слоя.@Controller
– для MVC-контроллеров.Spring Bean – это обычный Java-объект, созданный Spring-контейнером.
Singleton
и Prototype Bean
Singleton
– создается один экземпляр на все приложение.Prototype
– новый экземпляр создается при каждом запросе. @Component
и @Bean
@Component
– аннотация на уровне класса.@Bean
– аннотация на уровне метода, название метода = имя бина.application.properties
?Используется для конфигурации приложения: настройки БД, логирование и т. д.
Сохрани себе, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤣3🔥2❤1😁1
GIT Workflow
Хотите разобраться, как работает Git? Тогда держите наглядный гайд!
🍩
🍩
🍩 Создание нового файла – добавляем что-то новое в проект
🍩
🍩
🍩
👉 Java Portal
Хотите разобраться, как работает Git? Тогда держите наглядный гайд!
Initial State
– начальное состояние проектаgit clone
– клонируем удаленный репозиторийgit add
. – отправляем изменения в staging areagit commit
– фиксируем изменения локальноgit push
– отправляем изменения на удаленный серверPlease open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥1
Что такое
Это мощная функция, представленная в Java 8 (в пакете
Она предоставляет гибкий способ написания неблокирующего, асинхронного кода с использованием функциональных конструкций.
⏩ задачи выполняются независимо, не блокируя основной поток.
⏩ поддерживает метод chaining через
⏩ объединяет несколько CompletableFuture с помощью .thenCompose(), .thenCombine().
⏩ встроенные механизмы обработки ошибок через .exceptionally() и .handle().
⏩ поддерживает выполнение нескольких задач параллельно с
👉 Java Portal
CompletableFuture
в Java?Это мощная функция, представленная в Java 8 (в пакете
java.util.concurrent
), которая представляет собой будущий результат асинхронного вычисления.Она предоставляет гибкий способ написания неблокирующего, асинхронного кода с использованием функциональных конструкций.
.thenApply(), .thenAccept()
и другие. .allOf()
и .anyOf().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Большая актуальная базу бесплатных API, которая обновляется ежедневно
Тут собрано аж 363 бесплатных API на все случаи жизни: от игр и погоды до финансов и здоровья.
Алгоритмы присваивают рейтинг каждому API на основе надежности, частоты ошибок и времени отклика
Если API перестает работать или становится платным, он теряет рейтинг и удаляется с сайта
Переходите и смотрите сами: https://www.freepublicapis.com/
👉 Java Portal
Тут собрано аж 363 бесплатных API на все случаи жизни: от игр и погоды до финансов и здоровья.
Алгоритмы присваивают рейтинг каждому API на основе надежности, частоты ошибок и времени отклика
Если API перестает работать или становится платным, он теряет рейтинг и удаляется с сайта
Переходите и смотрите сами: https://www.freepublicapis.com/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤1
Есть один отличный фреймворк — Javalin
Если нужно быстро запустить сервер или сделать небольшое приложение — самое то
Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.
ℹ️ Идеально для пет-проектов, микросервисов и прототипов
👉 Java Portal
Если нужно быстро запустить сервер или сделать небольшое приложение — самое то
Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤3👍3
Разница между агрегацией, ассоциацией и композицией в Java
Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.
Пример:
⏩ Студент и Курс.
⏩ Студент может записаться на курс, но оба могут существовать независимо друг от друга.
Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.
Пример:
⏩ Автомобиль и его Колесо.
⏩ Автомобиль имеет колеса, но если автомобиль уничтожен, колеса могут существовать отдельно или быть использованы где-то еще.
Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.
Пример:
⏩ Дом и его Комната.
⏩ Если дом будет снесен, комнаты перестанут существовать.
👉 Java Portal
Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.
Пример:
Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.
Пример:
Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.
Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤2🔥1
Как работает Java? Понимание архитектуры языка
Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:
🍩 Написав программу, мы получаем исходный код в файле
🍩 Этот код компилируется с помощью компилятора javac, который преобразует его в байт-код (.class). Это промежуточный формат, который понимает только JVM.
🍩 JVM берет этот байт-код и запускает его, выполняя программу.
Внутри JVM происходит:
- Загрузка классов с помощью
- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.
👉 Java Portal
Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:
.java
.Внутри JVM происходит:
- Загрузка классов с помощью
ClassLoader
.- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤3🌭1💊1
1. Проверка версии Docker
2. Работа с образами
3. Запуск Java-приложения в контейнере
4. Сборка и запуск контейнера с Java Spring Boot
5. Управление контейнерами
6. Сетевое взаимодействие в Docker
7. Docker Compose (Java + MySQL)
8. Docker Volumes (персистентные данные)
9. Очистка Docker
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2🔥1💊1
Что такое грациозное завершение работы Spring Boot-приложения?
🟡 Приложение перестаёт принимать новые входящие запросы.
🟡 Запросы, которые уже обрабатываются, получают возможность завершиться. Для других внутренних задач, таких как запланированные задания или обработка сообщений из очереди (MQ), приложение обеспечивает завершение текущих операций и предотвращает запуск новых.
🟡 Перед завершением работы приложение сигнализирует другим сервисам о предстоящем отключении, обеспечивая бесперебойность работы всей системы.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥3
Как инициализируется класс в Java?
Когда JVM загружает класс, его инициализация происходит в строгом порядке:
🍩 сначала инициализируются все
🍩 затем выполняются статические блоки
🍩 после этого инициализируются обычные переменные объекта.
🍩 в конце выполняются конструкторы класса.
Этот порядок важен, так как попытка использовать переменную до её инициализации может привести к ошибке.
👉 Java Portal
Когда JVM загружает класс, его инициализация происходит в строгом порядке:
static
переменные. static { ... }
.Этот порядок важен, так как попытка использовать переменную до её инициализации может привести к ошибке.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍5🔥5