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

Список наших каналов: https://news.1rj.ru/str/proglibrary/9197

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
👑 Магия IntelliJ IDEA: Live Templates с контекстом

Пишешь sout → Tab → System.out.println(). Знакомо? Но IDEA умеет гораздо больше.

Live Templates анализируют контекст кода и подставляют нужные переменные автоматически.

🔹 Что умеет

— soutv → выведет переменную под курсором с её именем
— soutm → выведет имя текущего метода и класса
— soutp → выведет все параметры метода
— psvm → создаст main method
— iter → foreach по коллекции под курсором
— ifn / inn → null-check или not-null check переменной

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

— Отладка в 2 нажатия без написания println вручную
— Быстрая генерация шаблонного кода (циклы, проверки)
— Автоматическое использование переменных из контекста

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

— Поставь курсор на переменную → пиши soutv → Tab
— Внутри метода → soutp → Tab (выведет все параметры)
— Создай свой template: Settings → Editor → Live Templates
— Можно задать контекст (Java, Kotlin, внутри метода/класса)

🎯 Бонус: psfs → создаст public static final String, lazy → ленивую инициализацию.

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

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4😁2👏1
👀 Внутреннее устройство PriorityQueue

PriorityQueue — это реализация интерфейса Queue на основе двоичной кучи. Элементы всегда упорядочены по приоритету, минимальный элемент всегда в голове.

📦 Базовая структура

PriorityQueue использует min-heap реализацию:

public class PriorityQueue<E> {
transient Object[] queue; // массив-куча
private int size = 0;
private final Comparator<? super E> comparator;

private static final int DEFAULT_INITIAL_CAPACITY = 11;
}


Главные особенности:

→ O(log n) для add и poll (вставка/удаление с перестройкой).
→ O(1) для peek (доступ к минимуму).
→ O(n) для remove(Object) и contains.
→ Не гарантирует полную сортировку, только min в голове.
→ Не потокобезопасна (для concurrent используйте PriorityBlockingQueue).

🔍 Как устроено хранение

Binary Heap — complete binary tree в массиве

PriorityQueue с элементами: [2, 5, 8, 9, 12, 10, 15]

Куча (min-heap):
2
/ \
5 8
/ \ / \
9 12 10 15

Массив queue[]:
[2, 5, 8, 9, 12, 10, 15]
0 1 2 3 4 5 6

Индексация:
- Родитель узла i: (i - 1) / 2
- Левый ребёнок узла i: 2 * i + 1
- Правый ребёнок узла i: 2 * i + 2


Свойство min-heap:

Каждый родитель ≤ своих детей. Это НЕ полная сортировка — только гарантия минимума в корне.

⚡️ Операции добавления и удаления

add(E element) / offer(E element) — добавление

1. Элемент добавляется в конец массива: queue[size++] = element.
2. Вызывается siftUp(size-1) для восстановления heap property:
— Элемент "всплывает" вверх, пока не станет больше родителя.
— Сравнения через Comparator или Comparable.

Алгоритм siftUp:

void siftUp(int k) {
E x = queue[k];
while (k > 0) {
int parent = (k - 1) >>> 1; // деление на 2
E e = queue[parent];
if (compare(x, e) >= 0) break;
queue[k] = e; // родитель опускается
k = parent; // поднимаемся выше
}
queue[k] = x; // вставляем элемент
}


Сложность: O(log n) — высота дерева.

poll() — удаление минимального элемента

1. Сохраняется минимум: E result = queue[0].
2. Последний элемент перемещается в корень: queue[0] = queue[--size].
3. Вызывается siftDown(0) для восстановления heap:
— Элемент "тонет" вниз, меняясь с меньшим ребёнком.

Алгоритм siftDown:

void siftDown(int k) {
E x = queue[k];
int half = size >>> 1; // size / 2
while (k < half) {
int child = (k << 1) + 1; // левый ребёнок
E c = queue[child];
int right = child + 1;
if (right < size && compare(c, queue[right]) > 0) {
child = right; // правый меньше
c = queue[child];
}
if (compare(x, c) <= 0) break;
queue[k] = c; // ребёнок поднимается
k = child; // опускаемся ниже
}
queue[k] = x;
}


Сложность: O(log n).

🔎 peek() — доступ к минимуму

E peek() {
return (size == 0) ? null : (E) queue[0];
}


Сложность: O(1) — прямой доступ к корню.

🔍 contains(Object o) — проверка наличия


1. Линейный поиск по массиву queue[].
2. Сравнение через equals().

Сложность: O(n) — требуется обход массива.

remove(Object o) — удаление элемента

1. Линейный поиск элемента: O(n).
2. Удаление найденного:
— Перемещение последнего элемента на место удаляемого.
— siftDown() или siftUp() для восстановления heap.

Сложность: O(n) поиск + O(log n) восстановление = O(n).

⚖️ Важные нюансы

1️⃣ Comparator vs Comparable

Элементы должны быть сравниваемыми. Без Comparator/Comparable → ClassCastException.

2️⃣ НЕ полностью отсортирована

Heap гарантирует только минимум в корне.

3️⃣ Iterator не гарантирует порядок

Для sorted iteration используйте poll() в цикле:

4️⃣ Null элементы НЕ допускаются

Подходит


— Нужен доступ к минимуму/максимуму
— Динамическая сортировка
— Алгоритмы с приоритетами
— Top K проблема

🔗 Документация: JavaDoc (Java 17)

Ставьте 🔥, если хотите ещё разбор.

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

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

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍31
This media is not supported in your browser
VIEW IN TELEGRAM
Enterprise AI: строим системы с предсказуемой логикой

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

В программе курса:

детерминированная логика в LangGraph для управления состояниями агента;
архитектура `RAG` на базе Pinecone / Chroma для точной работы с внешними данными;
промышленная интеграция через n8n для встраивания агентов в сложные воркфлоу;
безопасность в рантайме с использованием LangSmith и Guardrails для защиты системы.

Результат — надёжная AI-система, соответствующая вашим инженерным стандартам.

Узнать больше
🔥 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥32👏1
😮 Топ-вакансий для джавистов за неделю

Fullstack Developer — 250 000 - 350 000₽ — гибрид (Москва)

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

Senior Java Developer (Kotlin) — от 400 000 ₽ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
Сохраняйте шпаргалку по циклам в Bash

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

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥41👏1
🎅 Секретный Санта для айтишников от Proglib.academy

Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик.

🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе:

1️⃣ Упомяните курс Академии у себя в блоге.
2️⃣ Пришлите скрин сюда.
3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса.

Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более.

🎄 Акция действует до Нового года.

Win-win, всё как мы любим!
🔥 VisualVM

VisualVM предлагает широкий функционал для анализа Java-приложений:

→ Отслеживание работы JVM в режиме реального времени: контроль потребления памяти (heap/non-heap областей), активности потоков, нагрузки на CPU и работы garbage collector.

→ Поиск узких мест в производительности: выявление ресурсоемких методов и участков кода с возможностью сравнительного анализа временных затрат.

→ Исследование снимков памяти: загрузка heap-дампов для обнаружения проблем с утечками памяти и чрезмерным созданием объектов.

→ Контроль состояния потоков: визуализация активности, ожидания и блокировок в многопоточных приложениях.

→ Модульная архитектура: возможность установки дополнительных плагинов, включая интеграцию с JConsole и мониторинг серверов (Tomcat и других).

🔹 Первые шаги


1. Получение инструмента: в JDK до версии 9 VisualVM уже включен. Для более свежих релизов загрузите его с официального ресурса: VisualVM.

2. Запуск мониторинга: откройте VisualVM и найдите нужный процесс JVM в списке локальных приложений.

3. Начало работы: подключитесь к приложению и проанализируйте критичные участки — операции с БД, ресурсоемкие вычисления или управление потоками.

🔹 Сценарии применения

VisualVM особенно полезен при:

→ Выявлении причин замедления работы и повышенного расхода ресурсов
→ Поиске возможностей для оптимизации производительности
→ Отладке проблем с многопоточностью
→ Обнаружении и устранении memory leaks

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

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍2
#буст (2).gif
37.7 MB
🎄 Полезные Git-команды на каждый день

Работа с Git — это не только commit и push. Вот команды, которые упрощают жизнь:

❄️ git stash / git stash pop

Нужно срочно переключиться на другую задачу? Прячем незакоммиченные изменения и возвращаем их потом.

❄️ git commit --amend

Забыли добавить файл или опечатались в сообщении? Исправляем последний коммит без создания нового.

❄️ git cherry-pick <hash>

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

❄️ git reflog

Случайно удалили ветку или сделали reset? Reflog показывает историю всех действий — можно откатиться к любому состоянию.

❄️ git bisect

Ищем коммит, где появился баг. Git автоматически делит историю пополам — отмечаем good/bad, пока не найдём виновника.

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

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

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🎄32❤‍🔥1
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) к полю
29%
Назвать параметр конструктора точно так же, как называется нужный бин
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