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

Список наших каналов: https://xn--r1a.website/proglibrary/9197

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
WANTED: JAVA-АРХИТЕКТОР

Разыскивается эксперт, способный усмирить JVM и построить энтерпрайз любого масштаба. Пора передать свои знания тем, кто только начинает путь в Java.

Приметы:

— в совершенстве владеет Java (знание Python или Go — огромный плюс);
— умеет объяснять Spring, Hibernate и многопоточность без боли;
— готов выступать перед большой аудиторией разработчиков;
— нацелен на развитие своего медийного имени.

Что мы предлагаем:

— гонорар за подготовку качественных материалов;
— PR вашего личного бренда;
— сотрудничество с Proglib Academy.

Признаться во всём

P.S. Твой техлид — Java-гуру? Сдай его следствию — перешли пост.
💵 У кого также?

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

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29🔥3💯2❤‍🔥1🎄1
💬 ТОП-8 фраз, которые испортят впечатление о вас на собеседовании

Представьте, вы попали на собеседование мечты. Всё идёт гладко, но пара неудачных фраз могут свести на нет все ваши старания. Например, если вы слишком скромны или, наоборот, перегибаете с самоуверенностью, это может вызвать недоверие. Или фраза, которая должна показать вашу гибкость, внезапно делает акцент на недостатке опыта. Знакомо?

Есть проверенные подходы, которые помогут избежать таких ситуаций, выстроить грамотное общение и оставить положительное впечатление. Готовы узнать больше? 🌟

🔗 Читать статью

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1
AI-агенты в Enterprise: архитектура, паттерны и масштабирование

Автономные агенты — это не игрушки, а новый уровень автоматизации бизнес-процессов. Мы научим вас строить такие системы, используя лучшие практики индустрии.

Что в программе:

— понимание паттерна ReAct: как научить ИИ рассуждать и действовать;
— создание экосистемы агентов в n8n и их оркестрация;
— изучение протокола MCP для обмена данными между агентами;
— построение надёжных RAG-систем для работы с корпоративными данными.

Вы научитесь проектировать автономные группы ботов, которые умеют брать на себя всё больше сложной аналитической работы.

Записаться на курс
☕️ Java && Coffee

Делитесь в комментариях новогодними фото 🎄

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

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄12🎉31🌚1
У вас есть два бина с одинаковым интерфейсом. При попытке внедрить зависимость через интерфейс в другой класс Spring выбрасывает исключение о неоднозначности бинов. Какой способ НЕ поможет решить эту проблему?
Anonymous Quiz
10%
Использовать аннотацию @Qualifier при внедрении зависимости
46%
Добавить аннотацию @Autowired(required = false) к полю
28%
Назвать параметр конструктора точно так же, как называется нужный бин
8%
Посмотреть ответ
👍8🔥2🎄2
👑 IntelliJ IDEA: Ctrl+Shift+A

Не помнишь сочетание клавиш? Не знаешь, где в меню нужная функция? Просто начни печатать её название.

🔹 Что это


Ctrl+Shift+A (Find Action) — поиск по всем командам, действиям и настройкам IDEA. Как Spotlight в macOS, но для IDE.

🔹 Что умеет

— Найти любое действие по названию.
— Показать хоткей для команды.
— Выполнить действие сразу из поиска.
— Открыть настройку напрямую.
— Включить/выключить плагин.

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

— Не нужно запоминать десятки хоткеев.
— Быстрее, чем искать в меню.
— Видишь хоткей и можешь его запомнить.
— Доступ к скрытым функциям.

🎯 Бонус

— Можно вызывать несколько раз подряд для уточнения.
— Toggle-действия (включить/выключить) работают сразу.
— Показывает, назначен ли уже хоткей.

Поиск работает по части слова на русском и английском. Один хоткей вместо сотни. Особенно полезно первые месяцы работы с IDEA.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4🎄1
🎄 Как быстро настроить распределённую трассировку в Spring Boot с OpenTelemetry

Дебажить без трейсинга — как ловить баги с завязанными глазами. Но Spring Boot и тут не подвёл: подключаем, настраиваем — и уже можно видеть, что происходит внутри сервиса (и между сервисами тоже).

1️⃣ Добавляем зависимости
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

ИЛИ

implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:2.1.0'


Плюс агент (нужно будет передать при запуске JAR-а):
-javaagent:opentelemetry-javaagent.jar


2️⃣ Настраиваем экспорт в Jaeger / Zipkin / OTEL Collector

Добавляем конфигурацию в application.yml:
otel:
exporter:
otlp:
endpoint: http://localhost:4317
resource:
attributes:
service.name: my-service
instrumentation:
spring-web:
enabled: true
jdbc:
enabled: true


Можно слать трейсинг напрямую в Jaeger или Zipkin, или в OTEL Collector для гибкости.

3️⃣ Автоматическая трассировка веб-запросов и JDBC

Ничего руками писать не нужно. Всё, что проходит через @RestController и JdbcTemplate — уже обвешано спанами. Нужно только запустить приложение с агентом:
java -javaagent:opentelemetry-javaagent.jar -jar myapp.jar


Сразу работают:

— Спаны на все входящие HTTP-запросы
— Спаны на SQL-запросы
— Привязку логов к трейсам (если логгер поддерживает traceId)

4️⃣ Кастомные спаны

Нужно залезть в середину метода и обернуть свою логику? Без проблем:
@Autowired
private Tracer tracer;

public void doSomething() {
Span span = tracer.spanBuilder("custom-operation").startSpan();
try (Scope scope = span.makeCurrent()) {
// какая-то магия
} finally {
span.end();
}
}


5️⃣ Визуализация трассировок

Установите Jaeger UI или Zipkin — и смотрите в реальном времени, что делает сервис и как долго.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3🎄21
Сохраняйте шпаргалку по OAuth

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3🎄2❤‍🔥1🎉1
🎄 С Наступающим Новым годом, Джависты!

Год подходит к концу, и это отличный повод оглянуться назад и вспомнить самые яркие моменты нашего канала.

🔥 Самый обсуждаемый пост (39 комментариев) → Lombok — да или нет?

❤️ Самый любимый (286 реакций) → Какой инструмент вы используете для управления зависимостями?

📢 Самый репостнутый (271 репост) → Алгоритмическая самоуспокоенность: как мы разучились думать своей головой

👀 Самый просматриваемый (25 651 просмотров) → IT-конференции: как сходить на мероприятие и извлечь из него максимум пользы

🎁 В новом году желаем вам:

→ Чистого кода и интересных проектов
→ Быстрых сборок
→ Успешных собеседований
→ Поменьше NPE в проде

Спасибо, что вы с нами! Впереди ещё больше полезного и интересного контента.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄10🔥32
😁 А у нас тут хлеб пост прошлогодний

Полезный инструмент для работы с JSON. JSON-файлы с высокой вложенностью часто сложно прочитать.

𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми. Кроме того, созданные диаграммы можно скачать в виде изображений.

Также поддерживает YAML и XML форматы.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83😁2🎄1
🔍 AI код-ревьювер, который понимает весь проект

Нашёл интересный свежий проект Greptile — AI-инструмент для автоматизированного code review.

В отличие от обычных линтеров, Greptile анализирует всю кодовую базу, понимая связи между классами, методами и зависимостями. Это позволяет находить скрытые баги, которые легко пропустить при обычном review.

🔹 Ключевые возможности:

→ Интеграция с GitHub и GitLab — комментарии прямо в PR
→ Контекстный анализ — понимает архитектуру проекта целиком
→ Работает со всеми языками, включая Java
→ Обучается на фидбеке команды — становится умнее со временем
→ Генерирует sequence диаграммы для сложных PR

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏2🥱1
📈 Big-O ≠ производительность

Часто выбор коллекции ограничивается только таблицей сложностей и на этом всё.

Но реальный кейс сложнее: средняя сложность ≠ реальная скорость в продакшне. JVM, кэш процессора, GC и паттерны доступа могут радикально поменять картину.

🔑 Главная мысль

Выбирайте коллекцию под сценарий использования, а не “по самой быстрой ячейке в таблице”.

1️⃣ ArrayList — быстр в чтение, но не во вставке

ArrayList хранит элементы в массиве → локальность памяти + CPU кэш → итерации летят.
Вставка в середину за O(n), но при небольших списках разница с LinkedList исчезающе мала.

🔧 Паттерн использования:

— 90% чтение, редкие вставки → идеально.
— Если заранее известно примерное кол-во элементов → задайте initialCapacity, иначе ArrayList будет несколько раз пересоздавать массив (copy O(n) на каждом росте).

📌 Факт:

В бенчмарках JMH даже при вставке в середину ArrayList часто быстрее LinkedList просто потому, что LinkedList платит за “pointer chasing” (скачки по памяти, cache-miss).

2️⃣ LinkedList — звучит круто, но редко нужен

Да, вставка/удаление в начало или конец за O(1).
Но get(i) = O(n), и каждый шаг = новый объект, новая ссылка → нагрузка на GC.

🔧 Паттерн использования:

— Когда нужна двусторонняя очередь с частыми удалениями/добавлениями в начало и конец.
— Во всех остальных случаях лучше ArrayDeque, он без лишних объектов и быстрее почти всегда.

📌 Факт:

LinkedList ест больше памяти: на каждый элемент два указателя + объект-узел.

3️⃣ HashMap / HashSet — быстрые, пока не наступил resize

HashMap даёт O(1) доступ при хорошем hashCode().

Но:
— Если хэши “плохие” → коллизии → O(log n)
— При достижении load factor 0.75 → resize → перераспределение всех бакетов (дорогая операция).

🔧 Паттерн использования:

— Когда нужен быстрый поиск по ключу без сохранения порядка или когда важно хранить уникальные элементы или строить словари/кэши по ключу.
— Если знаете примерное кол-во элементов → сразу задайте кол-во элементов в конструкторе new HashMap<>(N).

📌 Факт:

Начиная с Java 8 при коллизии, когда LinkedList становится длинным (по умолчанию ≥ 8 элементов) → список превращается в красно-чёрное дерево.

4️⃣ TreeMap / TreeSet — порядок стоит денег

Дают O(log n) доступ и всегда хранят ключи отсортированными.
Но если сортировка нужна редко, дешевле собрать HashMap и вызвать sorted() на стриме.

🔧 Паттерн использования:

— Когда важно поддерживать сортировку на каждой операции (напр. Top-N задач в приоритетной очереди).
— Не храните mutable-ключи, т.к. можно “потерять” элемент при изменении поля, участвующего в compareTo.

📌 Факт:

TreeMap хранит узлы с балансировкой (красно-чёрное дерево) → накладные расходы на память + сравнения ключей.

5️⃣ LinkedHashMap — скрытый герой для кэшей

LinkedHashMap поддерживает порядок вставки или порядок доступа (accessOrder=true).
Можно сделать LRU-кэш, переопределив removeEldestEntry.

🔧 Паттерн использования:

— Когда важен порядок, но сортировка не нужна.
— Когда нужно легко реализовать ограниченный кэш.

📌 Факт:

Каждый get() в режиме accessOrder вызывает перестановку в двусвязном списке → небольшие накладные расходы.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#CoreJava #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍163🔥2👏1
Java в мире AI-агентов: Enterprise-подход к автономности

Пока другие балуются с промптами, мы учимся строить надёжные мультиагентные системы. В 2026 году автономные агенты — это стандарт для автоматизации сложных бизнес-процессов.

На курсе от Proglib Academy ты освоишь:

— паттерн ReAct: как заставить агента рассуждать и действовать;
— интеграцию с n8n для управления рабочими процессами;
— протокол MCP от Anthropic для бесшовного обмена данными;
— продвинутый RAG для мгновенного поиска по корпоративным знаниям.

Результат — дипломный проект в виде автономной группы агентов для анализа данных или техподдержки.

❄️ До 12 января забирай курс по ИИ-агентам по акции «3 в 1» (получи ещё два курса бесплатно).

Прокачать скиллы
2
⚙️ Как работает Garbage Collector

Механизм сборки мусора в JVM — это не просто “магия, которая чистит память”, а сложная система, работающая по поколениям, фазам и стратегиям.

Понимание его внутренней архитектуры важно, если вы хотите управлять производительностью, избегать утечек и эффективно настраивать параметры JVM.

🔹 Архитектура: как устроена куча (Heap)

Куча памяти делится на поколения:
Heap
├── Young Generation
│ ├── Eden Space
│ └── Survivor Spaces (S0, S1)
└── Old Generation (Tenured)


Eden — вновь созданные объекты.
Survivor — те, кто “выжил” после первой сборки.
Old Gen — объекты, пережившие несколько сборок, считаются “долгоживущими”.

Дополнительно есть Metaspace (с Java 8), где хранятся данные о классах.

🔹 Алгоритм работы GC: по фазам

1. Mark

GC начинает с “корневых” ссылок (стек, глобальные переменные) и помечает все достижимые объекты.

2. Sweep
Удаляются все немаркированные объекты — они считаются “мертвыми”.

3. Compact (в некоторых GC)
Уплотнение памяти: “живые” объекты перемещаются ближе друг к другу, чтобы избежать фрагментации.

🔹 Типы сборок

1. Minor GC
Запускается при заполнении Eden. Очищаются только молодые поколения. Быстро, но может происходить часто.

2. Major GC / Full GC
Включает Old Gen и Metaspace. Дорогая операция, может “заморозить” все потоки (stop-the-world pause).

🔹 Типы сборщиков и их принципы

— Serial GC: однопоточная сборка. Просто и медленно.
— Parallel GC: многопоточная сборка всех поколений. Высокая пропускная способность.
— G1 GC: делит кучу на регионы, параллельно собирает “Region Set”. Поддерживает предсказуемые паузы.
— ZGC: целиком конкурентный сборщик. Работает с огромными кучами (до терабайта), паузы <10 мс.
— Shenandoah: минимальные паузы за счёт почти полной конкуренции с пользовательскими потоками.

🔹 Как GC определяет, что объект мёртв?

GC не использует reference count. Он строит граф достижимости:
1. Начинает с “корней” (GC roots)
2. Если оттуда нельзя добраться до объекта — он считается мусором
3. Это позволяет избежать утечек при циклических ссылках

🔹 Советы по оптимизации

— Избегайте долгоживущих ссылок (static, ThreadLocal) без необходимости
— Используйте WeakReference, если хотите избежать удержания объекта GC
— Кэшируйте объекты осознанно — утечка через Map может быть незаметной
— Задавайте лимиты памяти (-Xms512m -Xmx1024m)

💬 Ловили OutOfMemoryError в проде когда-нибудь?

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#CoreJava #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥42👏2
😮 Топ-вакансий для джавистов за неделю

Java Developer — офис (Москва)

Java Developer (Middle) — 100 000 – 200 000 ₽ — офис (Тольятти)

Java-разработчик — 300 000 —‍ 490 000 ₽ — офис/Гибрид (Москва)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1😁1
👑 Магия IntelliJ IDEA: Ctrl+E

Переключаешься между файлами через Project View? Теряешь время на поиск нужной вкладки среди десятка открытых? Есть способ быстрее.

🔹 Что это

Ctrl+E (Recent Files) — показывает список недавно открытых файлов. Быстрый доступ к тому, с чем ты работал последние 5-10 минут.

🔹 Что умеет

— Показать последние открытые файлы.
— Переключиться на файл по первым буквам названия.
— Видеть структуру директорий для контекста.
— Отметить часто используемые файлы звёздочкой.
— Фильтровать список прямо в окне поиска.

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


— Не нужно искать файл в дереве проекта.
— Быстрее, чем кликать по вкладкам.
— Видишь историю своей работы.
— Меньше отвлекаешься от кода.

🎯 Бонус


— Нажми Ctrl+E дважды — увидишь только недавно редактированные файлы.
— Начни печатать — список отфильтруется автоматически.
— Стрелками вверх/вниз быстро переключаешься между последними 2-3 файлами.

══════ Навигация ══════
ВакансииЗадачиСобесы

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥42👏1