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

Список наших каналов: https://t.me/proglibrary/9197

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
🔍 Elasticsearch + Spring Boot Integration

Вместо простого full-text search, вы получаете мощную аналитическую платформу с real-time индексацией.

Spring Data Elasticsearch даёт полный набор возможностей: собственные анализаторы текста, агрегаты для аналитики и сводных выборок, подсветку найденных терминов, поиск с учётом опечаток, геозапросы по координатам, декларативный конструктор запросов, управление жизненным циклом индекса, поиск между несколькими кластерами, создание снимков и восстановление данных для резервного копирования, а также наблюдение и метрики через панели мониторинга в Kibana.

📝 Промпт:

Implement advanced Elasticsearch integration for Spring Boot 3 application:
— Configure Spring Data Elasticsearch: connection settings (cluster nodes, port 9200), RestHighLevelClient configuration, authentication (username/password or API key), SSL/TLS for secure connection, connection pool tuning (max connections, timeout).
— Create document mappings: @Document with index name and settings, @Field with type (text, keyword, date, nested), custom analyzers (standard, whitespace, ngram for autocomplete), tokenizers and filters, multi-field mappings for text/keyword.
— Implement repository layer: extend ElasticsearchRepository, custom query methods with naming conventions (findByTitleContaining), @Query annotation with JSON DSL, native search queries with NativeSearchQuery, pagination with Pageable.
— Add full-text search: multi-match queries across fields, boosting for relevance tuning (title^3, description^1), phrase matching, fuzzy search for typos (fuzziness=AUTO), highlighting with <em> tags, minimum_should_match parameter.
— Configure aggregations: terms aggregation for faceting, date histogram for time-based analytics, metrics (avg, sum, min, max), nested aggregations, bucket sorting, pipeline aggregations for calculations.
— Implement geo-spatial search: geo_point field type, geo_distance queries for radius search, geo_bounding_box for area search, geo_shape for complex polygons, distance sorting.
— Set up index management: index templates for consistent settings, index aliases for zero-downtime reindexing, ILM policies (hot/warm/cold/delete phases), rollover based on size/age, shrink for optimization.
— Add bulk operations: bulk indexing with BulkRequest for performance, batch size tuning (1000-5000 docs), refresh strategy (wait_for or async), error handling for partial failures, bulk processor with backoff.
— Configure search optimization: query cache for repeated queries, field data cache for aggregations/sorting, request cache for size=0 aggregation queries, index refresh interval (1s default, increase for write-heavy), force merge for read-only indices.
— Implement monitoring: cluster health API (green/yellow/red), node stats (JVM heap, disk usage), index stats (doc count, size), slow log for query/indexing analysis, Kibana dashboards with visualizations, alerting with Watcher.
Deliverables: ElasticsearchConfig.java, document entity classes with @Document, repository interfaces, search service with query builders, index templates JSON, ILM policies, Kibana dashboard exports, integration tests with Testcontainers


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

— добавить learning to rank with LTR plugin;
— реализовать semantic search with dense vectors;
— настроить cross-cluster replication

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
👀 Внутреннее устройство Map.computeIfAbsent()

computeIfAbsent() — это не просто «get или put». Это атомарная операция с ленивым вычислением, которая решает классическую проблему check-then-act в многопоточном коде.

📦 Что такое computeIfAbsent()

Поведение

1. Если ключ существует и value != null → вернуть value
2. Если ключа нет или value == null → вызвать mappingFunction
3. Результат функции put в map
4. Вернуть computed value

Классический use case:

//  Старый способ — race condition!
if (!map.containsKey(key)) {
map.put(key, expensiveOperation());
}

// Новый способ — атомарно
map.computeIfAbsent(key, k -> expensiveOperation());


🔍 Упрощённый код из JDK:

public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
if (mappingFunction == null)
throw new NullPointerException();

int hash = hash(key);
Node<K,V>[] tab = table;
Node<K,V> first = tab[index];

// Поиск существующего entry
if (first != null) {
Node<K,V> e = first;
do {
if (e.hash == hash &&
Objects.equals(key, e.key)) {
V v = e.value;
if (v != null) {
return v; // Найден, не вызываем функцию!
}
}
} while ((e = e.next) != null);
}

// Ключа нет — вызов mappingFunction
V newValue = mappingFunction.apply(key);

if (newValue != null) {
putVal(hash, key, newValue, true, true);
}

return newValue;
}


📊 Performance

Benchmark: 1M операций
// Старый способ: containsKey + put
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// Time: ~45ms, 2 hash lookups

// computeIfAbsent
map.computeIfAbsent(key, k -> new ArrayList<>());
// Time: ~30ms, 1 hash lookup

computeIfAbsent() на 33% быстрее!


Делайте

— Используйте для lazy initialization
— Используйте ConcurrentHashMap для thread-safety
— Держите mappingFunction быстрым и простым

Не делайте

— Не вызывайте computeIfAbsent рекурсивно на том же ключе
— Не модифицируйте map внутри mappingFunction
— Не возвращайте null если хотите кэшировать отсутствие
— Не используйте для побочных эффектов (только для вычисления value)

🔗 Документация

Ставьте 🔥, если интересны другие Map методы!

Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

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

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍42👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие?

Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу.

📌 Почему без математики в AI никуда:

→ Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде.
→ Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit().

🎓 Что будет на курсе:

→ 3 практических задания на Python + финальный проект с разбором от специалистов;
→ программа обновлена в ноябре 2025;
→ за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями;
→ преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии.

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

— 40% скидка;
— получаешь курс «Школьная математика» в подарок;
— короткий тест и узнать свой уровень.

🔗 Подробнее о курсе