JMH — это фреймворк для точного микробенчмаркинга в Java
Он предназначен для создания тестов производительности, которые помогают анализировать, как различные изменения в коде влияют на его эффективность.
▪️ измерение времени выполнения на уровне микроопераций;
▪️ поддержка сложных случаев оптимизации JVM;
▪️ вывод подробной статистики;
▪️ возможность настройки параметров теста;
▪️ точные результаты без влияния JVM-оптимизаций.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4❤1👏1
Вместо того чтобы копировать чужие манифесты с 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
Пишешь 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🔥2❤1
🔥 Как настроить 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.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека джависта
#Enterprise
Swagger (OpenAPI) — стандарт описания REST API. Автогенерация документации, интерактивное тестирование через UI, генерация клиентов для различных языков.
Синхронизируется с кодом автоматически, поддерживает аннотации для детального описания и используется как контракт между фронтендом и бекендом.
Для Spring Boot 3.x используйте springdoc-openapi-starter-webmvc-ui. Это современная библиотека, заменившая устаревший springfox.
Одна зависимость подтягивает всё необходимое: генерацию спецификации, Swagger UI и валидацию. Автоматически интегрируется со Spring MVC и Spring Security.
Создайте класс OpenApiConfig аннотированный @Configuration. Определите bean OpenAPI с общей информацией: название API, версия, описание, контакты, лицензия.
Используйте Info, Contact, License для метаданных. Настройте servers() для указания базовых URL разных окружений (dev, staging, prod). Это позволит тестировать через UI на любом окружении.
Используйте @Tag на классе контроллера для группировки эндпоинтов. На методах применяйте @Operation(summary, description) для описания операции.
Аннотируйте параметры через @Parameter(description, required, example). Для тела запроса используйте @io.swagger.v3.oas.annotations.parameters.RequestBody с описанием и примерами. Добавляйте @Schema на DTO для описания полей модели.
Используйте @ApiResponses с набором @ApiResponse для каждого возможного HTTP статуса. Укажите responseCode, description и content с примерами.
Создайте стандартные ErrorResponse классы и документируйте их через @Schema(description). Это даст консистентную обработку ошибок и понятную документацию для клиентов API.
Для JWT добавьте SecurityScheme через @SecurityScheme аннотацию на конфигурации. Укажите type = BEARERAUTH, scheme = "bearer", bearerFormat = "JWT".
На защищённых эндпоинтах используйте @SecurityRequirement(name = "bearerAuth"). Swagger UI автоматически добавит поле для ввода токена и будет подставлять его в заголовок Authorization.
Настройте springdoc.swagger-ui.path для изменения URL (по умолчанию /swagger-ui.html). Включите tryItOutEnabled и supportedSubmitMethods для удобного тестирования.
Используйте springdoc.api-docs.path для изменения пути к JSON спецификации (по умолчанию /v3/api-docs). Для группировки API используйте @RouterOperations и группировку по packages или paths.
▪️ Используйте @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.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥1
Выбор структуры данных — это не только про знание API, но и про понимание:
— нужен ли random access;
— важна ли уникальность;
— критичен ли порядок элементов;
— как часто insert/delete в середине.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1🔥1🤔1
Проблема: Вы знаете, что код работал неделю назад, но сейчас есть баг. За это время было 50+ коммитов. Как найти тот, который всё сломал?
Эта команда работает как детектив — использует бинарный поиск по истории коммитов, чтобы за несколько шагов найти проблемный коммит. Вместо проверки всех 50 коммитов вручную, вы проверите всего 5-6!
git bisect start
git bisect bad # текущий коммит с багом
git bisect good abc123 # старый рабочий коммит
Git переключит вас на средний коммит. Проверьте код и скажите:
git bisect good # если баг отсутствует
git bisect bad # если баг есть
git bisect reset # вернётесь в исходное состояние
В итоге 50 коммитов проверите за 6 шагов вместо 50! 🚀
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5❤2