Java Portal | Программирование
11.9K subscribers
1.62K photos
119 videos
45 files
1.68K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
💡 @ConditionalOnClass: конфигурация включается, если нужный класс есть в classpath

✅ Используется в автоконфигурациях Spring Boot, например для Kafka и Redis.
✅ Если класса нет, условная конфигурация пропускается.
✅ В паре с @ConditionalOnMissingBean позволяет предоставить бин по умолчанию, который приложение может заменить собственным.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Утечка памяти, фрагментация и нагрузка на GC: в чём разница?

Приложение потребляет много памяти — это ещё не означает утечку. Причины могут быть разными.

Memory Leak — ненужные объекты остаются достижимыми. Программа больше не использует их, но продолжает хранить ссылки, поэтому сборщик мусора не может освободить память.

Типичные причины: кэш без ограничений, растущие статические коллекции, неудалённые слушатели и неправильная работа с ThreadLocal. Один из признаков — устойчивый рост занятой памяти даже после сборок мусора.

Memory Fragmentation — свободная память есть, но она разбита на неудобные участки. Например, суммарно места достаточно, но нет подходящего непрерывного блока для выделения.

В Java влияние фрагментации зависит от сборщика мусора и области памяти: heap, native или off-heap. Многие сборщики перемещают объекты и уплотняют память, но это не устраняет все возможные случаи.

GC Pressure — объекты создаются быстрее, чем системе удобно их убирать. Память освобождается, однако GC приходится работать часто или интенсивно, расходуя CPU и увеличивая задержки.

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

При диагностике смотрите на разные сигналы:

• Утечка: какие объекты остаются живыми и что удерживает ссылки на них.
• Фрагментация: в какой области памяти не удаётся выделить нужный блок.
• GC Pressure: скорость аллокаций, частоту сборок, паузы и затраты CPU.

Увеличение -Xmx иногда помогает, но при утечке лишь откладывает проблему. Сначала выясните, почему память растёт и на что тратится время GC.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
💡 Spring Boot + Kafka: отправка и получение событий с минимумом кода

✅ Внедрите KafkaTemplate, чтобы отправлять сообщения в топик.
✅ Добавьте @KafkaListener к методу, чтобы обрабатывать входящие сообщения.
✅ Автоконфигурация Spring Boot настроит компоненты Kafka по параметрам spring.kafka.*.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
👍

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5❤3💊1
Большинство разработчиков изучают Spring Boot, создавая CRUD API. Но для работы с backend в production этого далеко не достаточно.

В шпаргалке по Spring Boot, в которой собраны ключевые концепции, которые должен знать каждый backend-разработчик.

Что внутри:

• Архитектура Spring Boot
• Жизненный цикл HTTP-запроса
• Структура проекта
• Основные аннотации
• Подходы к построению REST API
• JPA и слой Repository
• Валидация данных
• Обработка исключений
• JWT и Spring Security
• HTTP-статусы
• Команды Docker
• Лучшие практики для production

Главная ошибка начинающих. Они сосредотачиваются только на связке: Controller → Service → Repository

Но упускают из виду:

• Валидацию данных
• Безопасность
• Логирование
• Транзакции
• Мониторинг
• Обработку ошибок
• Масштабируемость

Именно здесь начинается настоящая backend-разработка.

Важный момент о производительности в production. Большинство проблем с производительностью вызваны не самим Spring Boot. Чаще всего узкие места находятся в других компонентах системы:

• Медленные запросы к базе данных
• Отсутствие необходимых индексов
• Исчерпание пула соединений
• Сериализация больших объёмов данных
• Блокирующие внешние API
• Проблемы N+1 при выполнении запросов к базе данных

В каком порядке изучать Spring Boot.

Начальный уровень:

• REST API
• Контроллеры
• Внедрение зависимостей
• CRUD API
• Основы JPA

Средний уровень:
• Валидация
• Обработка исключений
• JWT и безопасность
• Транзакции
• Docker

Продвинутый уровень:
• Kafka
• Redis
• Микросервисы
• Распределённая трассировка (Distributed Tracing)
• Kubernetes
• Событийно-ориентированная архитектура (Event-Driven Architecture)

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

Клиент
↓
Tomcat
↓
DispatcherServlet
↓
Controller
↓
Service
↓
Repository
↓
База данных


Совет от опытных инженеров
. Не ограничивайся изучением синтаксиса. Разбирайся в том:

• Почему системы выходят из строя.
• Где возникают узкие места производительности.
• Как работает масштабирование.
• Как искать и устранять проблемы в production.

Именно это отличает разработчиков, которые просто повторяют примеры из обучающих материалов, от настоящих backend-инженеров.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Большинство воспринимает Spring Boot просто как фреймворк для создания REST API.

Но за ним скрывается гораздо более крупная экосистема 👇

• Spring Core и внедрение зависимостей
• Spring MVC и WebFlux
• JPA, Hibernate и базы данных
• Безопасность с JWT и OAuth 2.0
• Kafka и RabbitMQ
• Redis и распределённое кэширование
• Docker, Kubernetes и облачные платформы
• Мониторинг с Actuator, Prometheus и Grafana

Spring Boot упрощает настройку проекта, а понимание всех стоящих за ним уровней помогает стать сильнее как бэкенд-разработчик.

Фреймворк позволяет быстро начать работу.

Экосистема помогает создавать приложения для продакшена.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
💡 @NonNull и @Nullable помогают IDE находить ошибки.

✅ Указывают, какие значения могут быть null.
✅ Инструменты предупреждают о возможных NullPointerException (NPE) прямо во время написания кода.

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