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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
💡 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
👍3
Gemini Pro Argon на 1.5 года по цене кофе?

Gemini Pro на 18 месяцев можно купить за 6$ (480₽ вместо 30.000₽) - последние 2 дня акции от Jio!

> 4.0 Argon топ для вайбкодеров
> Nano Banana 2 PRO (картинки)
> Видео генерация (видео, нарезки, мувики)
> 5 ТБ облака в Google One

🔓Вот бесплатный VPN для работы Gemini и AI

Работает акция еще 2 дня по такой цене, дальше будет официальная цена $360 за 18 месяцев


Приобрести можно в Магазине с 20.000+ покупок и 2000+ отзывов (есть возвраты и замены).
Please open Telegram to view this post
VIEW IN TELEGRAM
Большая коллекция из практических рекомендаций по защите приложений. Внутри: SQL Injection, XSS, JWT, OAuth2, Kubernetes, Docker, API Security, а теперь ещё и безопасность агентов MCP и RAG.

https://cheatsheetseries.owasp.org

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
💡 Не создавай новый Thread() для каждой задачи — используй пул потоков.

✅ Создание потоков требует ресурсов, а пул позволяет повторно использовать уже созданные потоки.
✅ Executor ограничивает количество задач, выполняемых одновременно.
✅ Когда работа завершена, не забудь вызвать shutdown(), чтобы корректно завершить работу пула.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Инструмент недели: Kubetail

Разбирать логи в Kubernetes бывает непросто: приходится переключаться между подами, запускать kubectl logs и искать причину ошибки среди множества реплик приложения.

Kubetail open-source инструмент для просмотра логов Kubernetes в реальном времени. Он собирает логи из нескольких подов в одном интерфейсе, упрощая отладку приложений.

Что умеет:

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

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

GitHub: https://github.com/kubetail-org/kubetail

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
💡 Размещай бизнес-логику в сервисе с @Transactional, а не в контроллере.

✅ Один метод сервиса может безопасно вызывать несколько репозиториев в рамках одной транзакции.
✅ Все операции с БД фиксируются вместе при успехе или вместе отменяются при ошибке.
✅ Контроллеры остаются простыми: проверяют входные данные и вызывают нужный сервис.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Приглашаем на Java Jam — бесплатный митап ЮMoney для бэкенд-разработчиков 🔥

✅ 29 октября, четверг, 19:00 (мск) — приходите на митап в Санкт-Петербурге или смотрите трансляцию. 

Спикеры из ЮMoney и Сбера выступят с докладами:

🟣 Один апгрейд — больше сотни сервисов: как мы обновляем Java-стек в компании
Обсудим, как обновить Gradle, Spring Boot и Java в 120+ компонентах, не останавливая разработку. Расскажем, как выстраивали процессы на протяжении этого времени: от порядка действий и массовых патчей до взаимодействия с командами и решения трудностей, с которыми столкнулись во время последнего обновления.

🟣 Как я автоматизировал свой проект — и всё сломал
Разберём, как выстроить автоматизацию в проекте с помощью ИИ и какие шишки можно набить на пути. Поговорим, как работает длинный контекст в моделях и как организовать работу с учётом этих особенностей.

🟣 Откатить нельзя оставить: мониторинг выкладки релиза на основе Sentry
Ошибки случаются. Узнаем, какие из них появляются или возникают чаще после последнего релиза — и достаточно ли этого, чтобы принять решение об откате.

Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam👈
Please open Telegram to view this post
VIEW IN TELEGRAM
В Java Generics не работают с примитивными типами

Обобщения (Generics) в Java работают с ссылочными типами, но не с примитивами.

List<Integer> nums = new ArrayList<>(); // ✅
List<int> nums = new ArrayList<>(); // ❌


Дело в том, что Java реализует Generics через type erasure (стирание типов), а int, double и boolean — примитивные типы, а не ссылочные.

Поэтому Java использует классы-обёртки:

int → Integer
double → Double
boolean → Boolean

Автоупаковка (autoboxing) позволяет работать с ними почти так же, как с примитивами:

List<Integer> nums = List.of(1, 2, 3);


Java автоматически преобразует значения int в объекты Integer.

Главное: Generics работают с объектами, а примитивы в Java объектами не являются.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Java Tip: используйте Optional, чтобы избежать лишних проверок на null

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(System.out::println);


Optional
позволяет явно обозначить, что значение может отсутствовать, и безопасно обработать этот случай.

✅ Безопаснее работа с null
✅ Код понятнее и намерения разработчика очевиднее
✅ Меньше риска получить NullPointerException

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
💡 Spring Boot Tip: генерируйте Swagger-документацию автоматически с помощью springdoc-openapi

Добавьте springdoc-openapi в проект, и библиотека автоматически создаст документацию API на основе ваших контроллеров.

✅ Подключите starter-зависимость — библиотека сама просканирует эндпоинты.
✅ Откройте /swagger-ui.html, чтобы получить интерактивный интерфейс для тестирования API.
✅ Экспортируйте спецификацию OpenAPI в JSON или YAML для клиентов и API-шлюзов.

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