Перейти к содержимому
Технологии IT обновлён 31.10.2024

Java Portal | Программирование

Java Portal: ваш путь в мир Java-разработки

Присоединяйтесь к нашему Telegram-каналу Java Portal и станьте частью сообщества Java-разработчиков. Здесь вы найдёте полезные материалы, новости и советы от экспертов. Развивайтесь вместе с нами!

Публикации канала

💡 Spring Boot Tip: генерируйте Swagger-документацию автоматически с помощью springdoc-openapi Добавьте springdoc-openapi в проект, и библиотека автоматически создаст документацию API на основе ваших контроллеров. ✅ Подключите starter-зависимость — библиотека сама просканирует эндпоинты. ✅ Откройте /swagger-ui.html, чтобы получить интерактивный интерфейс для тестирования API. ✅ Экспортируйте спецификацию OpenAPI в JSON или YAML для клиентов и API-шлюзов. 👉 Java Portal

Открыть в Telegram

Java Tip: используйте Optional, чтобы избежать лишних проверок на null Optional<String> name = Optional.ofNullable(getName()); name.ifPresent(System.out::println); Optional позволяет явно обозначить, что значение может отсутствовать, и безопасно обработать этот случай. ✅ Безопаснее работа с null ✅ Код понятнее и намерения разработчика очевиднее ✅ Меньше риска получить NullPointerException 👉 Java Portal Telegram Java Portal | Программирование Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Открыть в 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

Открыть в Telegram

Приглашаем на Java Jam — бесплатный митап ЮMoney для бэкенд-разработчиков 🔥 ✅ 29 октября, четверг, 19:00 (мск) — приходите на митап в Санкт-Петербурге или смотрите трансляцию.  Спикеры из ЮMoney и Сбера выступят с докладами: 🟣 Один апгрейд — больше сотни сервисов: как мы обновляем Java-стек в компании Обсудим, как обновить Gradle, Spring Boot и Java в 120+ компонентах, не останавливая разработку. Расскажем, как выстраивали процессы на протяжении этого времени: от порядка действий и массовых патчей до взаимодействия с командами и решения трудностей, с которыми столкнулись во время последнего обновления. 🟣 Как я автоматизировал свой проект — и всё сломал Разберём, как выстроить автоматизацию в проекте с помощью ИИ и какие шишки можно набить на пути. Поговорим, как работает длинный контекст в моделях и как организовать работу с учётом этих особенностей. 🟣 Откатить нельзя оставить: мониторинг выкладки релиза на основе Sentry Ошибки случаются. Узнаем, какие из них появляются или возникают чаще после последнего релиза — и достаточно ли этого, чтобы принять решение об откате. Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam👈

Открыть в Telegram

💡 Размещай бизнес-логику в сервисе с @Transactional, а не в контроллере. ✅ Один метод сервиса может безопасно вызывать несколько репозиториев в рамках одной транзакции. ✅ Все операции с БД фиксируются вместе при успехе или вместе отменяются при ошибке. ✅ Контроллеры остаются простыми: проверяют входные данные и вызывают нужный сервис. 👉 Java Portal

Открыть в Telegram

Инструмент недели: Kubetail Разбирать логи в Kubernetes бывает непросто: приходится переключаться между подами, запускать kubectl logs и искать причину ошибки среди множества реплик приложения. Kubetail open-source инструмент для просмотра логов Kubernetes в реальном времени. Он собирает логи из нескольких подов в одном интерфейсе, упрощая отладку приложений. Что умеет: • Показывать логи нескольких подов и контейнеров одновременно. • Обновлять временную шкалу при появлении, остановке и замене подов. • Фильтровать логи по временному диапазону, зоне доступности, архитектуре CPU и узлу. • Переключаться между несколькими кластерами через десктопное приложение. Полезный инструмент для тех, кто работает с Kubernetes и хочет тратить меньше времени на поиск ошибок в логах. GitHub: https://github.com/kubetail-org/kubetail 👉 Java Portal

Открыть в Telegram

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

Открыть в Telegram

Большая коллекция из практических рекомендаций по защите приложений. Внутри: SQL Injection, XSS, JWT, OAuth2, Kubernetes, Docker, API Security, а теперь ещё и безопасность агентов MCP и RAG. https://cheatsheetseries.owasp.org 👉 Java Portal

Открыть в Telegram

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+ отзывов (есть возвраты и замены).

Открыть в Telegram

💡 @NonNull и @Nullable помогают IDE находить ошибки. ✅ Указывают, какие значения могут быть null. ✅ Инструменты предупреждают о возможных NullPointerException (NPE) прямо во время написания кода. 👉 Java Portal

Открыть в Telegram

Большинство воспринимает 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

Открыть в Telegram

Большинство разработчиков изучают 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

Открыть в Telegram

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

Открыть в Telegram

Утечка памяти, фрагментация и нагрузка на GC: в чём разница? Приложение потребляет много памяти — это ещё не означает утечку. Причины могут быть разными. Memory Leak — ненужные объекты остаются достижимыми. Программа больше не использует их, но продолжает хранить ссылки, поэтому сборщик мусора не может освободить память. Типичные причины: кэш без ограничений, растущие статические коллекции, неудалённые слушатели и неправильная работа с ThreadLocal. Один из признаков — устойчивый рост занятой памяти даже после сборок мусора. Memory Fragmentation — свободная память есть, но она разбита на неудобные участки. Например, суммарно места достаточно, но нет подходящего непрерывного блока для выделения. В Java влияние фрагментации зависит от сборщика мусора и области памяти: heap, native или off-heap. Многие сборщики перемещают объекты и уплотняют память, но это не устраняет все возможные случаи. GC Pressure — объекты создаются быстрее, чем системе удобно их убирать. Память освобождается, однако GC приходится работать часто или интенсивно, расходуя CPU и увеличивая задержки. Причины: высокая скорость выделения памяти, множество временных объектов, большие промежуточные структуры и частая сериализация. При диагностике смотрите на разные сигналы: • Утечка: какие объекты остаются живыми и что удерживает ссылки на них. • Фрагментация: в какой области памяти не удаётся выделить нужный блок. • GC Pressure: скорость аллокаций, частоту сборок, паузы и затраты CPU. Увеличение -Xmx иногда помогает, но при утечке лишь откладывает проблему. Сначала выясните, почему память растёт и на что тратится время GC. 👉 Java Portal

Открыть в Telegram

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

Открыть в Telegram

Что происходит между GET /users/123 и ответом API? Несколько сотен миллисекунд могут включать установку соединения, балансировку нагрузки, проверку авторизации, обращение к кэшу и базе данных. Код контроллера занимает лишь часть этого времени. В статье разобран путь запроса в приложении на Spring Boot: • DNS и TLS. • Балансировка нагрузки. • Spring Security и JWT. • Попадание и промах кэша Redis. • Ожидание соединения из пула. • Запросы к PostgreSQL. • Взаимодействие с Kafka. • Источники задержек на каждом этапе. Не каждый запрос проходит все эти шаги: соединение может переиспользоваться, кэш — исключить обращение к БД, а Kafka участвует только там, где это предусмотрено логикой приложения. Читать на Medium 👉 Java Portal

Открыть в Telegram

💡 Ленивая инициализация в Spring Boot Настройка spring.main.lazy-initialization=true откладывает создание большинства бинов до момента, когда они понадобятся. ✅ Вместе с созданием бина откладывается и вызов @PostConstruct. ✅ Приложение запускается быстрее, но прогрев кэша или проверки схемы БД могут не выполниться, если соответствующий бин никто не запросит. ✅ Ошибки инициализации могут проявиться уже при первом запросе. 👉 Java Portal

Открыть в Telegram

💡 Java: используйте Path и Files для работы с файлами ✅ Path.of(...) создаёт путь с учётом файловой системы текущей ОС. ✅ Files.readString(), writeString() и readAllLines() позволяют читать и записывать текст одной строкой. ✅ Для простых операций нужно меньше шаблонного кода, чем с FileReader и BufferedReader. 👉 Java Portal

Открыть в Telegram

Java Records — больше, чем сокращённая запись класса record User(String name, String email) {} Вы получаете: → Поля компонентов с модификатором final. → Автоматические equals(), hashCode() и toString(). → Явный сигнал: «этот тип хранит данные». Используйте records для DTO — меньше шаблонного кода, проще ревью. 👉 Java Portal

Открыть в Telegram

Комментарии

0

Комментарии пишут вошедшие — так видно, кто автор.

Войти

Комментариев пока нет

Будьте первым, кто расскажет о канале другим.

Пожаловаться на канал

Расскажите, что не так: модератор проверит канал и примет решение. Подпись не нужна, но почту можно оставить — тогда ответим.

Причина Что не так (необязательно) Почта для ответа (необязательно)
Открыть в Telegram