Forwarded from Библиотека задач по Java | тесты, код, задания
Из-за чего возможна ошибка в рантайме?
Anonymous Quiz
16%
Метод equals вызывается от null
48%
Нет проверки, является ли obj экземпляром BadEquals
21%
Проблема с доступом к полю id
5%
Поле id неинициализировано
10%
Посмотреть ответ
👍5🔥4👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38💯4🔥3😢1
Spring Boot из коробки интегрируется с Micrometer, позволяя собирать метрики и отправлять их в Prometheus, Grafana или другие системы мониторинга. Чтобы быстро поднять стек наблюдаемости — подключаем AI.
📝 Промпт:
Generate an observability integration for a Spring Boot 3 application using Micrometer and Prometheus.
— Enable Micrometer metrics in a Spring Boot application.
— Configure PrometheusMeterRegistry for collecting application metrics.
— Expose /actuator/prometheus endpoint for Prometheus scraping.
— Add custom application metrics using MeterRegistry (timers, counters, gauges).
— Configure histograms for REST API response times.
— Integrate Micrometer with Logback for unified metrics and logging.
— Enable health checks with Spring Boot Actuator (disk space, DB, cache).
— Set up Grafana dashboards for visualizing metrics and alerts.
— Добавьте
Enable Distributed Tracing with OpenTelemetry
для отслеживания запросов в распределённых системах.— Добавьте
Configure Grafana Alertmanager integration
для настройки алертов и уведомлений.— Добавьте
Implement custom business metrics (e.g. orders per minute)
для отслеживания доменных метрик приложения.#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2❤1
Топ-3 статьи о Java и сопутствующих технологиях за неделю по мнению нашего канала.
Рекомендую хорошее читабельное введение в Spring Security.
Это не просто обзор API, а систематизированный конспект, где наглядно разобраны ключевые механизмы: фильтры, аутентификация, авторизация, отличие stateful/stateless сценариев, CSRF-защита и работа с JWT.
Реализация системы сообщений между экземплярами сервисов через общую базу данных: секционированная таблица, блокировки, планирование партиций, минимальное использование внешних систем типа Kafka/JMS.
Реальный кейс построения observability / tracing-системы при росте нагрузки. Здесь и сравнение стека (Zipkin, Jaeger, ClickHouse и др.), и как решать проблемы с семплированием без потери критичных данных.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1🔥1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
👍2
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Аннотация используется для обозначения класса как
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3🔥2
На выходных можно подумать о высоком и попрактиковать дизайн систем. Полезно для будущих собесов, а кому-то просто для тренировки. В реальной задаче функциональные и нефункциональные требования ещё нужно было бы уточнить, но в формате поста сразу добавили их.
🔹 Условие
Перед днём рождения коллеги выбирается ответственный, ему скидывают деньги, он что-то покупает, а потом надо решать, что делать со сдачей. Сервис должен:
— Позволять зарегистрированным пользователям скидываться в общую «копилку»
— Хранить средства до момента покупки
— Дать возможность выбрать товары из каталога маркетплейса
— После закрытия копилки — потратить средства на выбранное и вернуть остаток кэшбеком
🔹 Функциональные требования
— Создание и управление «копилкой»
— Пополнение копилки разными пользователями
— Привязка к каталогу и корзине маркетплейса
— Сценарий покупки и списания денег
— Возврат сдачи кэшбеком
— Уведомления участников о статусе
🔹 Нефункциональные требования
— До 200k DAU, всего ~1 млн пользователей
— Запуск MVP в течение квартала
— Масштабируемость под рост аудитории
— Интеграция с существующими сервисами: биллинг, пользователи, каталог, кэшбек, логистика
— SLA: быстрый отклик API (≤200 мс), отказоустойчивость, логирование
— Если нужно уточнить какие-то вопросы: можете писать в комментарии, расширим вводные
— Подумайте о жизненном цикле копилки:
— Разбейте на сущности:
— Продумайте API:
— Учтите рост нагрузки:
— Не забудьте про безопасность:
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁25💯7🔥3😢2
Позади ещё одна рабочая неделя, а значит время отдохнуть. Сегодня прогуливаюсь по улочкам старого города. Очень красивые католические храмы.
Как проходят ваши выходные? Отправляйте фото в комментарии👇🏻
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😍7👍4🔥2❤1🤔1
🎯 IntelliJ IDEA: Bookmarks и Context Bookmarks
Большие проекты → десятки файлов → сотни классов. Иногда нужно быстро вернуться к «тем самым» местам в коде. В ход идут Bookmarks — и особенно Context Bookmarks.
🔹 Что делает
— Позволяет отмечать строки или файлы как закладки
— Поддерживает нумерацию (быстрый переход по цифре)
— Context Bookmarks автоматически привязывают закладки к рабочему контексту (ветке, задаче)
🔹 Зачем это нужно
— Удобно при отладке: отмечаете подозрительные места и прыгаете между ними
— Можно держать список TODO прямо в коде, без комментариев
— Context Bookmarks запоминают, что именно важно для текущей задачи, и не мешают в будущем
🔹 Как использовать
— Обычная закладка: F11 (Windows/Linux) или F3 (macOS)
— Закладка с номером: Ctrl+Shift+<цифра> (Windows/Linux) или ⌘⇧<цифра> (macOS)
— Быстрый переход: Ctrl+<цифра>
— Context Bookmarks: активируются в View → Tool Windows → Bookmarks
🐸 Библиотека джависта
#Enterprise
Большие проекты → десятки файлов → сотни классов. Иногда нужно быстро вернуться к «тем самым» местам в коде. В ход идут Bookmarks — и особенно Context Bookmarks.
🔹 Что делает
— Позволяет отмечать строки или файлы как закладки
— Поддерживает нумерацию (быстрый переход по цифре)
— Context Bookmarks автоматически привязывают закладки к рабочему контексту (ветке, задаче)
🔹 Зачем это нужно
— Удобно при отладке: отмечаете подозрительные места и прыгаете между ними
— Можно держать список TODO прямо в коде, без комментариев
— Context Bookmarks запоминают, что именно важно для текущей задачи, и не мешают в будущем
🔹 Как использовать
— Обычная закладка: F11 (Windows/Linux) или F3 (macOS)
— Закладка с номером: Ctrl+Shift+<цифра> (Windows/Linux) или ⌘⇧<цифра> (macOS)
— Быстрый переход: Ctrl+<цифра>
— Context Bookmarks: активируются в View → Tool Windows → Bookmarks
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏1
Используете ORM, но путаетесь в терминах: JPA, Hibernate, Spring Data JPA? Давайте разложим по полочкам.
🔹 JPA (Java Persistence API)
— Это спецификация, а не инструмент.
— Определяет, как описывать сущности (@Entity, @Id, @OneToMany и т.д.).
— Определяет стандартные операции: EntityManager.persist(), find(), remove().
— Не содержит «железа» — только контракт.
👉 JPA = «договор о том, как работать с ORM в Java».
🔹 Hibernate
— Это реализация JPA, самый популярный ORM-фреймворк.
— Реально выполняет работу: маппинг объектов ↔️ таблиц, генерация SQL.
— Добавляет много фич «поверх» JPA (например, кэширование второго уровня, собственные аннотации).
— Можно использовать напрямую, но чаще его подключают как провайдер JPA.
👉 Hibernate = «двигатель», который выполняет то, что описано в JPA.
🔹 Spring Data JPA
— Это надстройка над JPA (и Hibernate под капотом).
— Упрощает жизнь: вместо EntityManager вы пишете интерфейсы UserRepository, а Spring сам генерирует реализацию.
— Позволяет писать запросы прямо в именах методов (findByEmailAndStatus).
— Поддерживает @Query для кастомных запросов.
— Даёт дополнительные удобства: пэйджинг, сортировки, спецификации.
👉 Spring Data JPA = «фасад», который избавляет от рутины и скрывает низкоуровневые детали.
🔹 Когда что использовать
— Если нужен чистый стандарт → JPA + реализация (например, Hibernate).
— Если хотите гибкость и полный контроль → можно работать напрямую с Hibernate.
— Если важна скорость разработки и минимум кода → Spring Data JPA.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥1
🔥 Не пропустите событие осени для AI-комьюнити
24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»
😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%
⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.
⏰ Мест мало, регистрация закроется, как только забьём комнату
24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»
😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%
⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.
⏰ Мест мало, регистрация закроется, как только забьём комнату
🎯 Spring Boot + Docker Compose: пошаговая интеграция
В проде редко гоняют приложения напрямую — почти всегда через Docker. А с появлением spring-boot-docker-compose интеграция стала проще: можно поднимать всю инфраструктуру (Postgres, Redis, Kafka и т.д.) одной командой вместе с приложением.
1️⃣ Подготовка зависимостей
В Spring Boot 3.1 добавили официальный стартер:
2️⃣ docker-compose.yml
Определим инфраструктуру (например, Postgres + pgAdmin):
3️⃣ Автоматическая интеграция
Spring Boot сам подтянет конфигурацию из docker-compose.yml. Просто укажите профиль:
или
При старте Boot поднимет контейнеры и подставит spring.datasource.url, username, password.
4️⃣ Кастомизация application-compose.yml
Если нужны дополнительные параметры — кладём их в src/main/resources/application-compose.yml:
5️⃣ Полезные приёмы
— Фиксируйте версии образов, а не latest (для воспроизводимости).
— Healthcheck в docker-compose.yml помогает Boot ждать готовности контейнера.
— Можно запускать docker compose up -d руками, если не хотите, чтобы Boot сам управлял контейнерами.
— Для CI/CD обычно используют отдельные docker-compose.override.yml или Helm чарты, но для дев-окружения spring-boot-docker-compose очень экономит время.
Ставьте 👍🏼, если нужен более подробный пост про настройку docker-compose.yml
🐸 Библиотека джависта
#Enterprise
В проде редко гоняют приложения напрямую — почти всегда через Docker. А с появлением spring-boot-docker-compose интеграция стала проще: можно поднимать всю инфраструктуру (Postgres, Redis, Kafka и т.д.) одной командой вместе с приложением.
В Spring Boot 3.1 добавили официальный стартер:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<scope>runtime</scope>
</dependency>
ИЛИ
dependencies {
runtimeOnly("org.springframework.boot:spring-boot-docker-compose")
}
Определим инфраструктуру (например, Postgres + pgAdmin):
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: app-postgres
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: secret
ports:
- "8081:80"
depends_on:
- postgres
volumes:
postgres_data:
Spring Boot сам подтянет конфигурацию из docker-compose.yml. Просто укажите профиль:
./mvnw spring-boot:run -Dspring.profiles.active=compose
или
./gradlew bootRun --args='--spring.profiles.active=compose'
При старте Boot поднимет контейнеры и подставит spring.datasource.url, username, password.
Если нужны дополнительные параметры — кладём их в src/main/resources/application-compose.yml:
spring:
datasource:
hikari:
maximum-pool-size: 5
— Фиксируйте версии образов, а не latest (для воспроизводимости).
— Healthcheck в docker-compose.yml помогает Boot ждать готовности контейнера.
— Можно запускать docker compose up -d руками, если не хотите, чтобы Boot сам управлял контейнерами.
— Для CI/CD обычно используют отдельные docker-compose.override.yml или Helm чарты, но для дев-окружения spring-boot-docker-compose очень экономит время.
Ставьте 👍🏼, если нужен более подробный пост про настройку docker-compose.yml
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥1👏1
HashMap — один из базовых и в то же время самых хитро устроенных контейнеров в JDK. На поверхности простая структура «ключ–значение», но под капотом она сочетает массивы, списки и даже деревья, чтобы оставаться быстрой в разных сценариях нагрузки.
📦 Базовая структура
HashMap хранит данные в массиве бакетов
(Node<K,V>[] table)
. Каждый бакет — это «корзина» для элементов, чей hashCode после хеширования и применения & (n-1)
(где n — длина массива) указывает на конкретный индекс.🔑 Хэш и распределение
1. Вызов hashCode() у ключа.
2. Дополнительное хеширование (spread), чтобы снизить коллизии из-за плохой реализации hashCode.
3. Индекс бакета =
hash & (table.length - 1)
.🌊 Коллизии
Если несколько ключей попали в один бакет:
— до Java 8 это всегда был связанный список (linked list),
— начиная с Java 8: при росте числа элементов в бакете больше 8 и достаточном размере таблицы он превращается в сбалансированное красно-чёрное дерево. Это резко ускоряет поиск в «плохих» случаях (с O(n) до O(log n)).
⚡️ Ресайзинг
Когда количество элементов превышает
capacity * loadFactor
(по умолчанию 0.75), создаётся новый массив в 2 раза больше, все элементы перехешируются и раскладываются по новым бакетам. Это дорогостоящая операция, но благодаря амортизации остаётся приемлемой.📊 Производительность
— Поиск/вставка/удаление в среднем: O(1).
— В худшем случае (плохой hashCode + коллизии): O(log n) благодаря деревьям.
⚖️ Важные нюансы
— Ключи неупорядочены. Для упорядоченности есть LinkedHashMap.
— HashMap не потокобезопасен. Для многопоточной среды нужен ConcurrentHashMap или синхронизация.
— Хорошо реализованный hashCode и equals критичны, иначе получите «забитые» бакеты и деградацию.
🧮 loadFactor и capacity
— Capacity — размер массива бакетов. По умолчанию 16.
— LoadFactor — коэффициент заполнения. По умолчанию 0.75.
Почему именно 0.75? Это компромисс: выше → меньше памяти, но больше коллизий; ниже → быстрее доступ, но больше памяти уходит впустую. Capacity всегда степень двойки, чтобы можно было вычислять индекс через
hash & (n-1)
вместо затратного %.🔄 Итераторы и fail-fast
Если во время обхода карта меняется (кроме
iterator.remove()
), бросается ConcurrentModificationException. Под капотом это работает через счётчик модификаций (modCount), который проверяется в каждом next().🌳 Деревья в деталях
Коллизии превращаются в красно-чёрное дерево, если размер списка в бакете > 8 и общее количество бакетов ≥ 64. Обратно в список (untreeify) при падении количества элементов < 6. Это сделано, чтобы не тратить память и CPU на лишнюю балансировку при малых размерах.
Ставьте 🔥, если хотите такой же пост по другим коллекциям.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍6👏1
Forwarded from Библиотека задач по Java | тесты, код, задания
Из-за чего возможна ошибка в рантайме?
Anonymous Quiz
16%
Метод equals вызывается от null
48%
Нет проверки, является ли obj экземпляром BadEquals
21%
Проблема с доступом к полю id
5%
Поле id неинициализировано
10%
Посмотреть ответ
👍3❤1🔥1🥱1