Please open Telegram to view this post
VIEW IN TELEGRAM
😁34👍4🔥3😢1🌚1
Забудьте про application.properties с хардкодом пароля. Подключение PostgreSQL к Spring Boot — это не только JDBC URL, но и пулы соединений, миграции схемы, мониторинг и graceful shutdown в production.
🧩 Вместо того чтобы копировать конфиг из StackOverflow, вы настраиваете полноценный слой персистентности: HikariCP для connection pooling, Flyway/Liquibase для версионирования схемы, Spring Data JPA для репозиториев, и health checks для Kubernetes.
📝 Промпт:
Generate a production-ready Spring Boot 3 + PostgreSQL integration with enterprise-grade configuration:
— Configure PostgreSQL datasource with HikariCP connection pool: pool size optimization, connection timeout, leak detection, and connection validation query.
— Set up Spring Data JPA with Hibernate: dialect configuration, DDL auto strategy, batch processing, second-level cache (EhCache/Redis).
— Implement database migration strategy using Flyway: versioned migrations, repeatable scripts, baseline configuration, and rollback procedures.
— Configure multiple datasources (primary + read replicas) with @Primary and @Qualifier annotations for load distribution.
— Add connection pool monitoring with Micrometer metrics: active connections, idle connections, pending threads, connection acquisition time.
— Implement database health checks for Spring Boot Actuator: connection validation, query timeout, custom health indicators.
— Configure transaction management: isolation levels, propagation strategies, read-only optimization, and timeout configuration.
— Set up connection pool resilience: retry logic with exponential backoff, circuit breaker pattern (Resilience4j), and fallback strategies.
— Add database credentials management: Spring Cloud Config integration, HashiCorp Vault support, or AWS Secrets Manager.
— Configure SSL/TLS connection with certificate validation for secure database communication.
— Implement audit logging: track query execution time, slow query detection, connection pool exhaustion alerts.
— Add database-specific optimizations: fetch size tuning, batch insert/update configuration, native query hints.
— Provide Docker Compose setup with PostgreSQL 16, pgAdmin, and application container with proper networking.
— Include integration tests with Testcontainers: schema validation, repository testing, transaction rollback verification.
— Add example entities with proper JPA annotations: @Entity, @Table, indexes, constraints, relationships (OneToMany, ManyToMany).
— Configure application profiles: dev (H2 in-memory), staging (PostgreSQL), prod (PostgreSQL with replication).
Deliverables:
— application.yml with environment-specific profiles
— build.gradle/pom.xml with all dependencies
— DbConfig.java with datasource and JPA configuration
— V1__init_schema.sql Flyway migration
— Sample entity, repository, and service layer
— Integration test with Testcontainers
— docker-compose.yml for local development
— README with connection troubleshooting guide
— добавьте pgvector для векторного поиска;
— настройте connection pool dashboard в Grafana: throughput, latency percentiles (p50/p95/p99), error rate;
— реализуйте database sharding для горизонтального масштабирования;
— интегрируйте pg_stat_statements для анализа медленных запросов в runtime.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3❤1💯1
Топ-3 статьи о Java и смежных технологиях за неделю по версии нашего канала.
Разбор главной проблемы AI-помощников в коде — узкого контекста при RAG-подходе. Автор предлагает радикальное решение: скармливать Gemini 2.5 Pro весь проект целиком через code2prompt.
Интересный подход для стратегических задач вроде проектирования крупных фич, но важно помнить про NDA и безопасность. Метод только для pet-проектов и open source.
Глубокое сравнение трёх подходов к построению API с практическими кейсами. Разбор гибридной архитектуры: GraphQL для фронтенда (гибкость + over/under-fetching), gRPC для микросервисов (скорость + бинарный protobuf).
Production-опыт о том, как правильно проводить ревью: смотреть не только на diff, ограничиваться 5-6 комментариями вместо сотни, различать личные предпочтения и реальные проблемы.
Ключевой месседж: большинство PR должны получать Approve, а не Request Changes. В конце — практичный чеклист из 14 пунктов для систематизации процесса.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1🥱1💯1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10🔥5👍4
🎁 И мозг прокачать, и макбук утащить!
Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Условия:
1️⃣ Покупаешь любой курс Proglib до 15 ноября.
2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера).
3️⃣ Пишешь куратору в чат своего курса: #розыгрыш.
Что за курсы?
— Математика для Data Science (6 месяцев боли и просветления).
— Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит.
👉 Участвовать в розыгрыше
Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Условия:
1️⃣ Покупаешь любой курс Proglib до 15 ноября.
2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера).
3️⃣ Пишешь куратору в чат своего курса: #розыгрыш.
Что за курсы?
— Математика для Data Science (6 месяцев боли и просветления).
— Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит.
👉 Участвовать в розыгрыше
❤1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите метод для production-кода 👇
📦 Задание
Реализуйте метод для безопасного получения значения из вложенной Map с default-значением:
public class MapUtils {
public static <T> T getNestedValue(Map<String, Object> map,
String path,
T defaultValue) {
// Ваша реализация
}
}Требования
— Путь задается через точку: "user.address.city"
— Если любой уровень вложенности null или отсутствует → вернуть defaultValue
— Обработать пустой путь → вернуть defaultValue
— Обработать null в параметрах → вернуть defaultValue
Примеры использования
Map<String, Object> data = Map.of(
"user", Map.of(
"name", "John",
"age", 30,
"address", Map.of(
"city", "Moscow"
)
)
);
String city = getNestedValue(data, "user.address.city", "Unknown");
// → "Moscow"
Integer age = getNestedValue(data, "user.age", 0);
// → 30
String country = getNestedValue(data, "user.address.country", "Russia");
// → "Russia" (не найдено)
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤔5❤1👍1
☕ Java && Coffee
Делитесь фотографиями выходных. Я сегодня в горах ⛰️
Отправляйте фото в комментарии👇🏻
🐸 Библиотека джависта
#DevLife
Делитесь фотографиями выходных. Я сегодня в горах ⛰️
Отправляйте фото в комментарии👇🏻
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3😍3
💻 ВАЖНО: макбук ещё не забрали!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня ).
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Нужно выделить метод целиком? Или весь блок try-catch? Или параметры метода? Обычно хватаешься за мышку и начинаешь аккуратно тащить курсор, рискуя промазать. А потом выделяешь заново, потому что захватил лишнюю скобку. Но можно лучше.
🔹 Что делает
— Умно расширяет выделение от курсора по синтаксическим границам кода
— Понимает структуру Java: слово → выражение → statement → блок → метод → класс
— Работает в обратную сторону: сужает выделение обратно по тем же границам
— Учитывает контекст: для строк расширяет от слова до всей строки, для вызовов — от аргумента до всего вызова
🔹 Зачем это нужно
— Выделяете нужный фрагмент за 2-3 нажатия вместо возни с мышкой
— Безошибочно выделяете сложные конструкции: цепочки вызовов, лямбды, generic-типы
— Идеально для последующего Extract Method, Copy-Paste, или Delete
— Особенно мощно для вложенных структур: легко выделить внутренний if в try внутри цикла
— Ускоряет рефакторинг: выделил логичный кусок → Extract → готово
🔹 Как использовать
— Поставьте курсор внутри нужного фрагмента (на переменную, в середину выражения, в метод)
— Нажмите Ctrl+W (Windows/Linux) или ⌥+Up (macOS) — выделение расширится на уровень выше
— Нажимайте повторно, чтобы расширять дальше: переменная → выражение → строка → if-блок → метод → класс
— Для сужения обратно: Ctrl+Shift+W (Windows/Linux) или ⌥+Down (macOS)
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22👍4🔥4
💻 Хочешь MacBook Pro? Просто начни учиться!
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
❤1👾1
JEP 431 добавил в Java то, чего не хватало с самого начала, а именно единый интерфейс для упорядоченных коллекций. Разберем, что изменилось под капотом.
🔹 Проблема, которую игнорировали
До Java 21 List и Deque имеют порядок обхода, но их общий суперинтерфейс Collection - нет. Set не гарантирует порядок, но LinkedHashSet и SortedSet — гарантируют. Единого API для "дай первый/последний элемент" или "обход в обратном порядке" не существовало.
Результат? Костыли:
// До Java 21
list.get(0) // List
deque.getFirst() // Deque
sortedSet.first() // SortedSet
linkedHashSet.iterator().next() // LinkedHashSet
🔹 Три новых интерфейса
JEP 431 внедрил в иерархию коллекций три интерфейса:
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
interface SequencedSet<E> extends SequencedCollection<E>, Set<E> {
SequencedSet<E> reversed();
}
interface SequencedMap<K,V> extends Map<K,V> {
SequencedMap<K,V> reversed();
Map.Entry<K,V> firstEntry();
Map.Entry<K,V> lastEntry();
Map.Entry<K,V> pollFirstEntry();
Map.Entry<K,V> pollLastEntry();
// ... и другие методы
}
Все методы (кроме reversed()) - это default методы, промоутнутые из Deque. Это обеспечило обратную совместимость.
▪️ Важнейший нюанс: reversed() возвращает view, а не копию.
Изменения в оригинале видны в reversed view. Под капотом это lightweight wrapper, который инвертирует индексы при обращении.
🔹 Интеграция в иерархию
Collection<E>
└─ SequencedCollection<E>
├─ List<E>
├─ Deque<E>
└─ Set<E>
└─ SequencedSet<E>
└─ SortedSet<E>
└─ NavigableSet<E>
Map<K,V>
└─ SequencedMap<K,V>
└─ SortedMap<K,V>
└─ NavigableMap<K,V>
🔹 SortedSet и SortedMap
SortedSet и SortedMap теперь имплементируют sequenced интерфейсы, но есть нюанс: методы addFirst()/addLast()/putFirst()/putLast() существуют лишь для того, чтобы бросить UnsupportedOperationException.
Liskov Substitution Principle: "Am I a joke to you?"
Но справедливости ради — Java Collections делает так уже давно:
— map.keySet().add() → UnsupportedOperationException
— Arrays.asList().add() → UnsupportedOperationException
— Collections.unmodifiableList().set() → UnsupportedOperationException
Это называется optional operations — когда методы есть, но работать не обязаны. Документация прямо говорит:
Many methods will throw UnsupportedOperationException if the operation cannot be performed.
Альтернативы были хуже: либо создавать зоопарк из ReadOnlySequencedSet, MutableSequencedSet, PartiallyMutableSequencedSet, либо оставить SortedSet за бортом единообразного API.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4❤2
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом кода?
Anonymous Quiz
6%
true, true, true, true
67%
true, false, true, false
8%
true, true, true, false
10%
false, false, false, false
8%
Посмотреть ответ
👍4🔥3❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍4🔥1🎉1