Java Portal | Программирование
12.1K subscribers
942 photos
69 videos
32 files
751 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Забыли про 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
👍65🔥4
Как работает перехватчик (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
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥41🤔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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134🔥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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125💊1
Паттерн Singleton — это такой паттерн, который заставляет класс иметь только один экземпляр и предоставляет доступ к нему для всего приложения.

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

Когда нужно, чтобы по всему приложению был один и тот же объект (например, конфиг или логгер).
Если создание объекта сильно грузит систему, и лишние экземпляры будут только мешать.

Как работает?

В классе с этим паттерном создается всего один экземпляр.
Экземпляр можно получить через специальный метод, который проверяет, существует ли уже объект. Если нет — создает его.

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

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

Когда тебе нужен один и тот же объект для всего приложения — это то, что надо

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍85🔥1
Зачем мы используем дженерики в Java? 🤔

Типовая безопасность: Предотвращает возникновение ошибки ClassCastException во время выполнения.

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

Проверка на этапе компиляции: Обнаруживает ошибки на этапе компиляции, а не во время выполнения.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🔥2
Параллелизм в Java

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

Как это работает? 🤔

🍩 Инициализируем потоки.
🍩 Проверяем, готовы ли они.
🍩 Запускаем задачи одновременно.
🍩 Дожидаемся завершения и закрываем потоки

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2💊2
Общие вопросы для собеседования на Java Spring Boot с ответами

🍩Какие типы внедрения зависимостей бывают?

Field Injection
Setter Injection
Constructor Injection

🍩Разница между BeanFactory и ApplicationContext

BeanFactory использует ленивую инициализацию (создает бины при вызове getBean()).

ApplicationContext использует раннюю инициализацию (бины создаются при старте приложения).

🍩Чем отличаются @Component, @Repository, @Service и @Controller?

@Component – общий стереотип для любого Spring-управляемого компонента.
@Repository – используется для DAO-слоя (работа с БД).
@Service – для сервисного слоя.
@Controller – для MVC-контроллеров.

🍩Что такое Spring Bean?

Spring Bean – это обычный Java-объект, созданный Spring-контейнером.

🍩Разница между Singleton и Prototype Bean

Singleton – создается один экземпляр на все приложение.
Prototype – новый экземпляр создается при каждом запросе.

🍩Разница между @Component и @Bean

@Component – аннотация на уровне класса.
@Bean – аннотация на уровне метода, название метода = имя бина.

🍩Зачем нужен application.properties?

Используется для конфигурации приложения: настройки БД, логирование и т. д.

Сохрани себе, чтобы не забыть!

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤣3🔥21😁1
GIT Workflow

Хотите разобраться, как работает Git? Тогда держите наглядный гайд!

🍩 Initial State – начальное состояние проекта
🍩 git clone – клонируем удаленный репозиторий
🍩 Создание нового файла – добавляем что-то новое в проект
🍩 git add . – отправляем изменения в staging area
🍩 git commit – фиксируем изменения локально
🍩 git push – отправляем изменения на удаленный сервер

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥1
Что такое CompletableFuture в Java?

Это мощная функция, представленная в Java 8 (в пакете java.util.concurrent), которая представляет собой будущий результат асинхронного вычисления.

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

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

поддерживает метод chaining через .thenApply(), .thenAccept() и другие.

объединяет несколько CompletableFuture с помощью .thenCompose(), .thenCombine().

встроенные механизмы обработки ошибок через .exceptionally() и .handle().

поддерживает выполнение нескольких задач параллельно с .allOf() и .anyOf().

👉 Java Portal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥31
Есть один отличный фреймворк — Javalin

Если нужно быстро запустить сервер или сделать небольшое приложение — самое то

Он позволяет настроить сервер легко и без лишних зависимостей. Все, что нужно для REST API или WebSocket — уже встроено.

ℹ️ Идеально для пет-проектов, микросервисов и прототипов

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥113👍3
Разница между агрегацией, ассоциацией и композицией в Java

Ассоциация
Общая связь между двумя классами, где объекты одного класса связаны с объектами другого, но нет владения или строгой зависимости.

Пример:
Студент и Курс.
Студент может записаться на курс, но оба могут существовать независимо друг от друга.

Агрегация
Частный случай ассоциации, представляющий отношение "имеет-а" с концепцией "целое-часть", но части могут существовать независимо от целого.

Пример:
Автомобиль и его Колесо.
Автомобиль имеет колеса, но если автомобиль уничтожен, колеса могут существовать отдельно или быть использованы где-то еще.

Композиция
Более сильная форма агрегации, где "часть" полностью принадлежит "целому" и не может существовать без него.

Пример:
Дом и его Комната.
Если дом будет снесен, комнаты перестанут существовать.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍212🔥1
Как работает Java? Понимание архитектуры языка

Когда мы пишем код на Java, он проходит несколько ключевых этапов перед тем, как стать работающей программой. Вот как это происходит:

🍩Написав программу, мы получаем исходный код в файле .java.

🍩Этот код компилируется с помощью компилятора javac, который преобразует его в байт-код (.class). Это промежуточный формат, который понимает только JVM.

🍩JVM берет этот байт-код и запускает его, выполняя программу.

Внутри JVM происходит:

- Загрузка классов с помощью ClassLoader.
- Управление памятью: разделение на Stack, Heap и Method Area.
- Оптимизация с помощью JIT-компилятора, который превращает байт-код в машинный код для ускорения работы программы.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍193🌭1💊1
ℹ️ Команды Docker для Java-разработчика

1. Проверка версии Docker
2. Работа с образами
3. Запуск Java-приложения в контейнере
4. Сборка и запуск контейнера с Java Spring Boot
5. Управление контейнерами
6. Сетевое взаимодействие в Docker
7. Docker Compose (Java + MySQL)
8. Docker Volumes (персистентные данные)
9. Очистка Docker

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172🔥1💊1
Что такое грациозное завершение работы Spring Boot-приложения?

🟡Приложение перестаёт принимать новые входящие запросы.

🟡Запросы, которые уже обрабатываются, получают возможность завершиться. Для других внутренних задач, таких как запланированные задания или обработка сообщений из очереди (MQ), приложение обеспечивает завершение текущих операций и предотвращает запуск новых.

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🔥3
Как инициализируется класс в Java?

Когда JVM загружает класс, его инициализация происходит в строгом порядке:

🍩 сначала инициализируются все static переменные.
🍩 затем выполняются статические блоки static { ... }.
🍩 после этого инициализируются обычные переменные объекта.
🍩 в конце выполняются конструкторы класса.

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍5🔥5