Библиотека джависта | Java, Spring, Maven, Hibernate
Все самое полезное для Java-разработчика в одном канале. Учиться у нас: clc.to/AATM8w Для обратной связи: @proglibrary_feeedback_bot По рекламе: @proglib_adv РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Show more📈 Analytical overview of Telegram channel Библиотека джависта | Java, Spring, Maven, Hibernate
Channel Библиотека джависта | Java, Spring, Maven, Hibernate (@javaproglib) in the Russian language segment is an active participant. Currently, the community unites 22 245 subscribers, ranking 5 931 in the Technologies & Applications category and 29 807 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 22 245 subscribers.
According to the latest data from 27 July, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -118 over the last 30 days and by 1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.21%. Within the first 24 hours after publication, content typically collects 4.69% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 826 views. Within the first day, a publication typically gains 1 044 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 11.
- Thematic interests: Content is focused on key topics such as джависта, навигация, jooq, corejava, hibernate.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для Java-разработчика в одном канале.
Учиться у нас: clc.to/AATM8w
Для обратной связи: @proglibrary_feeedback_bot
По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4”
Thanks to the high frequency of updates (latest data received on 28 July, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Data loading in progress...
| Date | Subscriber Growth | Mentions | Channels | |
| 28 July | +1 | |||
| 27 July | +4 | |||
| 26 July | 0 | |||
| 25 July | +1 | |||
| 24 July | +1 | |||
| 23 July | +1 | |||
| 22 July | +1 | |||
| 21 July | +1 | |||
| 20 July | +1 | |||
| 19 July | +1 | |||
| 18 July | +1 | |||
| 17 July | +1 | |||
| 16 July | +2 | |||
| 15 July | +2 | |||
| 14 July | +1 | |||
| 13 July | 0 | |||
| 12 July | 0 | |||
| 11 July | +1 | |||
| 10 July | +2 | |||
| 09 July | +3 | |||
| 08 July | 0 | |||
| 07 July | +1 | |||
| 06 July | +2 | |||
| 05 July | +1 | |||
| 04 July | +1 | |||
| 03 July | +2 | |||
| 02 July | +2 | |||
| 01 July | 0 |
| 2 | ❌ ThreadLocal + Virtual Threads = утечка памяти
Если вы перешли на virtual threads, но продолжаете использовать ThreadLocal, то у вас проблема, которая пока просто не выстрелила.
ThreadLocal хранит данные в ThreadLocalMap — по одной map на каждый тред. Когда тредов было 200 в пуле, это было терпимо. Когда виртуальных тредов сотни тысяч, каждый несёт свою map, и heap начинает гореть. Плюс мутабельность: ThreadLocal.set() в глубоком call stack — это неявное состояние, которое легко забыть почистить через .remove(). В try-finally это работает до первого необработанного исключения.
Java 21 предлагает замену — ScopedValue.
🔹 Ключевые отличия
ScopedValue.where(TENANT_ID, tenant).run(() -> { ... }) — значение привязано к scope, а не к треду. Вышли из блока и значение автоматически недоступно. Никакого .remove(), никакого «забыл почистить».
Иммутабельность по дизайну. Нельзя сделать .set(). Если нужно другое значение, создаёте вложенный scope. Это убирает целый класс багов с «протеканием» контекста между запросами.
Легковесность. Внутри массив вместо HashMap. При масштабе в 100k+ тредов разница в потреблении памяти ощутимая.
Работает в связке со StructuredTaskScope: дочерние виртуальные треды автоматически наследуют scoped values родителя. Не нужно вручную пробрасывать контекст.
Практический вывод: если вы мигрируете на virtual threads, аудит ThreadLocal — обязательный шаг. ScopedValue пока preview, но API стабилизируется, и направление очевидно. Как минимум стоит уже сейчас заменить ThreadLocal на ReentrantLock-protected shared state или ScopedValue там, где передаёте tenant ID, request context, trace ID и подобные per-request данные.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava | 1 456 |
| 3 | 😳 Documentation Driven Development звучит как ещё один модный термин. Пока не попробуешь объяснить свой проект AI.
Агент работает только с тем контекстом, который ему дали. Если документация неполная или устарела, он начинает додумывать — отсюда появляется неверный код.
🔘 На курсе «ИИ для разработчиков» эту тему разбирает Арсений Харланов. Он покажет, как подготовить документацию и контекст, чтобы агент понимал архитектуру проекта, ограничения и связи между компонентами.
Также разберём, как выбирать модель под задачу: Claude, DeepSeek, Qwen и другие ✏️
Впереди 7 недель работы со своим репозиторием. Вебинары проходят вживую и остаются в записи.
Стартуем 31 августа. До конца июля можно присоединиться по ранней цене, а доступ к материалам останется бессрочным 😀
🔗 Посмотреть, что будет на курсе
🏃♀️ Proglib Academy | 1 029 |
| 4 | 😮💨 Документация давно перестала быть формальностью. Особенно когда проект нужно объяснить кому-то ещё 👇 | 1 294 |
| 5 | 🐸 Библиотека джависта
#DevLife | 1 582 |
| 6 | ❓ Как правильно определять границы сервисов в микросервисах?
Один из недооценённых скиллов в разработке — это умение провести правильную границу между сервисами. Большинство «распределённых монолитов», которые мы встречаем в продакшене, рождаются именно здесь.
Разобрали тему — держи шпаргалку 👇
🔹 Что такое Service Boundary
Это контракт на три вещи:
— за что сервис отвечает;
— какими данными он владеет;
— как он общается с соседями.
Представь компанию: HR не лезет в финансы, а склад не занимается зарплатами. Так же должны работать твои сервисы.
🔹 4 принципа, которые работают
1. Business Capability First
Режь по бизнес-функциям, а не по техническим слоям. OrderService, PaymentService, UserService, потому что именно так бизнес думает о системе.
2. Single Responsibility
Один сервис — одна ответственность. Если в описании сервиса есть союз и, это уже тревожный звоночек 🚨
3. Data Ownership
У каждого сервиса своя БД. Без исключений. Shared database = shared pain.
4. Loose Coupling
Только API, никакого прямого доступа к чужим таблицам.
🔹 Классический антипаттерн
// ❌ Бизнес-логика смешана в одном сервисе
@Service
public class BadOrderService {
public String processOrderAndPayment(int id) {
String order = orderRepository.findById(id)
.orElse("Order not found");
String paymentStatus = "Payment Successful"; // 🚨 чужая ответственность
return order + " | " + paymentStatus;
}
}
Выглядит безобидно, пока не нужно масштабировать платежи отдельно, сменить платёжного провайдера или добавить retry-логику только для оплаты. Тут и начнутся реальные проблемы.
🔹 Советы из практики
→ Начни с монолита. Не дроби систему заранее. Сначала пойми домен, потом режь по швам.
→ Следи за chatty communication. Если сервис делает 10 вызовов к соседям на каждый запрос, граница явно проведена не там.
→ Изучи DDD. Bounded Context из Domain-Driven Design это лучший инструмент для поиска правильных границ. Инвестиция окупается быстро
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava | 1 577 |
| 7 | 🤢 Чем больше разработчиков в команде начинают пользоваться Claude Code, тем заметнее одна проблема: кодовая база перестаёт выглядеть как работа одной команды.
Где-то есть тесты, где-то их забыли. Где-то агент следует архитектуре проекта, где-то предлагает решение, которое с ней не сочетается.
⚠️ И это не проблема Claude Code. Он просто следует тому контексту, который получает от каждого разработчика.
Завтра покажем, как передать AI инженерный контекст команды и не превратить его внедрение в ещё один источник хаоса.
🗓 23 июля, 19:00 МСК
Бесплатно. 60 минут доклада + 30 минут вопросов.
🔗 Занять место на вебинаре и разобраться, почему так происходит
🏃♀️ Proglib Academy | 1 438 |
| 8 | 🏃♀️ Скорость разработки растёт, но вместе с ней появляется новая проблема — кодовая база быстро теряет единый стиль.
Ниже — бесплатный вебинар о том, как этого избежать ⚠️ | 1 571 |
| 9 | 🐸 Библиотека джависта
#DevLife | 1 914 |
| 10 | ⚙️ JaCoCo
Если стандартных возможностей IDE для контроля покрытия тестами уже недостаточно, стоит обратить внимание на JaCoCo. Этот инструмент выходит за рамки базового функционала.
В отличие от встроенных средств IntelliJ IDEA, которые отлично справляются с локальной разработкой, JaCoCo предлагает комплексный подход к анализу покрытия:
✔️ Многоформатные отчёты — HTML для визуализации, XML и CSV для автоматической обработки
✔️ Бесшовная интеграция с системами сборки (Maven/Gradle)
✔️ Готовность к CI/CD — работает с Jenkins, GitLab CI и другими платформами
✔️ Возможность исключать из анализа ненужные классы и пакеты
✔️ Совместимость с SonarQube и аналогичными системами контроля качества
JaCoCo идеален для проектов, где важна прозрачность метрик тестирования и автоматизация проверок качества кода на всех этапах разработки.
🔗 JaCoCo GitHub
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека джависта
#Enterprise | 1 845 |
| 11 | Т-Банк собирает бэкенд-комьюнити на JVM Day
Бэкендеры, 29 августа в Москве пройдет хардкорная конференция. Ждут своих: Java-, Scala- и Kotlin-разработчиков, архитекторов и тимлидов.
Здесь выступят и расскажут:
— Андрей Кулешов — что нового в мире JVM за год.
— Сергей Петрелевич — разработка по Mechanical Sympathy.
— Александр Ланцов — Java после Loom: другие модели concurrency.
— Антон Курако — как бенчмарки вводят в заблуждение.
А вечером во дворе штаб-квартиры Т-Банка — посиделки, интерактивы и открытый микрофон с историями ошибок.
Мест мало, а цена билета будет расти.
Успевай зарегистрироваться | 2 001 |
| 12 | 🐧 Магия Linux CLI
Процесс жрёт CPU на 100%, а top показывает только PID? Используйте strace -cp <PID>, и вы получите статистику системных вызовов — сразу видно, процесс висит на диске, сети или чём-то ещё.
🔹 Зачем это нужно
— Показывает, на какие системные вызовы тратится время: read, write, futex, epoll_wait.
— Если 90% времени в futex, то дедлок или контеншн на мьютексе.
— Если read/write, то проблема с I/O, проверяйте диск или NFS.
— Если connect/sendto, то приложение ждёт ответа от другого сервиса.
🔹 Как использовать
— Статистика вызовов процесса: strace -cp <PID>
— Трассировка в реальном времени: strace -p <PID> -e trace=network
— Только файловые операции: strace -p <PID> -e trace=file
— С таймстемпами: strace -p <PID> -T -e trace=write
— Трейсить с дочерними процессами: strace -fp <PID>
💡 strace замедляет процесс, поэтому на проде используйте strace -c (только статистика) вместо полной трассировки — оверхед минимальный.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise | 1 786 |
| 13 | No text... | 1 941 |
| 14 | 🧑💻 Учиться агентной разработке — у тех, кто уже внедряет её в бигтехе
Курс «ИИ для разработчиков» ведут практики из ведущих российских IT-компаний 🔥
🔵 Они прошли путь от первых экспериментов с AI до рабочих процессов, в которых агенты помогают команде писать код, готовить PR и быстрее доводить задачи до продакшена.
В ближайшее время познакомим вас с каждым преподавателем. Программа курса — по ссылке 🎹
🏃♀️ Proglib Academy | 1 317 |
| 15 | 📍 Курс — это не только темы и домашние задания
Во многом его ценность определяет опыт тех, кто его разрабатывает и ведёт.
Об этом как раз новый пост Proglib Academy 🔥 | 1 475 |
| 16 | 🔥 Optional.orElseThrow()
Как обычно обрабатываете отсутствие значения? Проверяете на null, кидаете исключение вручную, пишите if-else?
Optional умеет делать это элегантно.
🔹 Что делает orElseThrow()
Возвращает значение из Optional, если оно есть. Если пусто — кидает исключение. Можно передать свой Supplier для кастомного исключения.
🔹 Пример
Optional<User> userOpt = findUserById(123);
// Вместо:
if (!userOpt.isPresent()) {
throw new UserNotFoundException("User not found");
}
User user = userOpt.get();
// Пишем:
User user = userOpt.orElseThrow(
() -> new UserNotFoundException("User not found")
);
Без параметра кидает NoSuchElementException:
User user = userOpt.orElseThrow(); // Java 10+
🔹 Зачем это нужно
— Компактный код без if-блоков.
— Явная обработка отсутствия значения.
— Чистый, декларативный стиль без boilerplate.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#Enterprise | 1 815 |
| 17 | 🌐 Зачем нужен CDN и как он работает
Когда пользователь из Сиднея открывает ваш сайт, его запрос летит на сервер в Германии и обратно. Это ~300 мс только на «дорогу» — и это для каждого изображения, шрифта, JS-файла.
CDN (Content Delivery Network / Сеть доставки контента) решает эту проблему в лоб: вместо одного сервера — тысячи точек по всему миру. Пользователь получает файлы с ближайшей к нему ноды, а не с вашего origin-сервера.
🔹 Origin и Edge
В архитектуре с CDN появляются два новых понятия:
— Origin Server (Главный сервер): это ваш настоящий сервер, где крутится Spring Boot, лежит база данных и хранятся оригиналы всех файлов (например, в Amazon S3).
— Edge Servers (Граничные серверы / Точки присутствия - PoP): это тысячи серверов CDN-провайдера (например, Cloudflare или Akamai), раскиданные по всему земному шару: в Сиднее, Токио, Нью-Йорке, Лондоне, Москве.
🔹 Как работает кэш
Первый запрос к конкретному файлу всё равно идёт до origin. CDN его скачивает, кэширует у себя и отдаёт пользователю. Все последующие запросы на тот же файл edge-сервер обрабатывает сам, не трогая ваш бэкенд. Это называется cache hit.
🔹 Что кладем в CDN
CDN идеально подходит для статического контента:
— Картинки, видео, аудио.
— Скомпилированные файлы JavaScript и CSS.
— Шрифты.
CDN не подходит для динамического контента:
— Корзина товаров.
— Приватные данные пользователя.
— (Запросы к API /api/v1/users/me должны идти напрямую на ваш сервер, минуя кэш CDN).
🔹 Защита от DDoS
Современные CDN (тот же Cloudflare) - это не просто кэш. Это гигантский щит.
Если хакеры решат «положить» ваш сайт и отправят миллион запросов в секунду, этот удар примут на себя серверы CDN. Их пропускная способность измеряется терабитами. Они отфильтруют «мусорный» трафик, и ваш маленький Origin-сервер даже не заметит атаки.
🔹 Побочные эффекты
— Ускорение: пользователи получают тяжелый контент мгновенно, потому что скачивают его из своего же города.
— Экономия: ваш главный сервер больше не тратит процессорное время и трафик на отдачу терабайтов картинок. Вы платите за сервера меньше.
— Безопасность: CDN скрывает реальный IP-адрес вашего сервера и защищает от DDoS-атак.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava | 1 697 |
| 18 | 🐸Библиотека джависта
#DevLife | 1 794 |
| 19 | 🫡 Один и тот же запрос к AI можно выполнить двумя способами — и получить совершенно разный результат.
1️⃣ способ — просто попросить написать код. Модель может сгенерировать рабочее решение, но именно на этапе проверки часто всплывают пропущенные edge case’ы, ошибки обработки или проблемы с тестами.
2️⃣ способ — дать агенту цикл Think → Act → Observe. Он не останавливается после первой попытки: планирует действия, проверяет результат и, если находит ошибку, исправляет её и пробует снова.
Самое интересное, что разница здесь не столько в модели ❕ Claude, GPT или другая LLM могут быть одинаковыми. Разницу создаёт инженерная система вокруг них.
📅 Именно это разберём 23 июля в 19:00 (МСК) на бесплатном вебинаре с Алексеем Жиряковым (Executive Director в Сбере, GenAI Data Platform, ex-CTO Stream и KION).
На живом демо покажем, как один и тот же запрос работает без агентной системы и с ней 🔥
🔗 Регистрация
🏃♀️ Proglib Academy | 1 045 |
| 20 | 😮 Топ-вакансий для джавистов за неделю
Разработчик Java — удалёнка/гибрид (Санкт-Петербург) — 585, Холдинг
Java-разработчик Middle — удалёнка — CRT
Java / Flutter разработчик — удалёнка/гибрид (Москва) — GEOMAX
➡️ Еще больше топовых вакансий — в нашем канале Java jobs | 1 872 |
