Библиотека джависта | Java, Spring, Maven, Hibernate (@javaproglib) — Telegram-канал | Telegram Dialogs
Telegram Dialogs — логотип
Все каналы
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib

22K подписчиков технологии 💬 Комментарии открыты

Все самое полезное для Java-разработчика в одном канале. Учиться у нас: clc.to/AATM8w Для обратной связи: @proglibrary_feeedback_bot По рекламе: @tproger_sales_bot РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4

Последние публикации

Библиотека джависта | Java, Spring, Maven, Hibernate
20.09.2026 12:04 · 👁 2.5K
🧠 Почему a.age() - b.age() может сломать сортировку Часто встречается такой Comparator: list.sort((a, b) -> a.age() - b.age()); Проблема — переполнение int. 🔴 Например: Integer.MIN_VALUE - 1 // Integer.MAX_VALUE Из-за этого компаратор может вернуть неправильный знак, и сортировка нарушит порядок. 🔴 Надёжнее: list.sort(Comparator.comparingInt(User::age)); 🔴 А если нужна дополнительная сортировка: list.sort( Comparator.comparingInt(User::age) .thenComparing(User::name) ); 📌 Для сравнения чисел используйте comparingInt, comparingLong или comparingDouble, а не ручное вычитание. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
19.09.2026 11:03 · 👁 2.3K
🤯 Collectors.teeing — две агрегации в одном collect Нужно получить средний возраст и количество пользователей? 🟡 Вместо ручной логики можно объединить два коллектора: record Stats(double avg, long count) {} Stats stats = users.stream().collect( Collectors.teeing( Collectors.averagingInt(User::age), Collectors.counting(), Stats::new ) ); 🟡 teeing передаёт элементы двум коллекторам, а затем объединяет их результаты вашей функцией. Полезно, когда нужно собрать сразу несколько независимых метрик. Доступен с Java 12. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
18.09.2026 08:05 · 👁 2.3K
══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
17.09.2026 12:49 · 👁 1.8K
⚡️⚡️Joker 2026: что происходит с профессией разработчика Индустрия разработки проходит через серьезный переломный момент. Меняются не только инструменты и фреймворки, но и привычный подход к работе. Поэтому в этом сезоне меняется и Joker: первый день традиционно посвящен Java — Core Java, рантайму и работе на уровне железа. А во второй день будем обсуждать, как прямо сейчас меняется сама инженерная практика. В программе — Context Engineering, команды из людей и ИИ-агентов, Self-Evolving Agents, новые подходы к архитектуре и работе с моделями, а также вопросы ответственности и роли эксперта. Собрали главные темы второго дня в карточках. 🌟С промокодом: javaproglib персональные билеты дешевле Полное расписание и билеты — на сайте.
Библиотека джависта | Java, Spring, Maven, Hibernate
17.09.2026 08:32 · 👁 2K
🧠 Что выведет код? ❤️ [1, 2, 3, 4] 🔥 [2, 4] 👍 [1, 3] 👾 ConcurrentModificationException 👇 Правильный ответ (нажми, чтобы прочитать): [1, 3] — `removeIf` удаляет элементы, которые подходят под условие: чётные `2` и `4` исчезают, остаются `1` и `3`. Метод предназначен для удаления элементов по условию без ручного изменения списка внутри `for-each`. ⚠️ Ловушка: Если написать так: var list = List.of(1, 2, 3, 4); list.removeIf(x -> x % 2 == 0); получим `UnsupportedOperationException`. `List.of()` создаёт неизменяемый список, а `removeIf` меняет коллекцию. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
16.09.2026 09:04 · 👁 2K
🛠 computeIfAbsent — кэш и группировка без if Нужно положить значение в список по ключу. Обычно пишут так: if (!map.containsKey(key)) { map.put(key, new ArrayList<>()); } map.get(key).add(value); С `computeIfAbsent` короче: map.computeIfAbsent(key, k -> new ArrayList<>()).add(value); Если ключ отсутствует или связан с null, будет создан список. Затем в него добавится значение. Удобно для: — группировки данных; — создания коллекций по ключу; — простых кэшей. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
15.09.2026 09:36 · 👁 1.9K
❓ Как правильно определять границы сервисов в микросервисной архитектуре? Один из недооценённых скиллов в разработке — это умение провести правильную границу между сервисами. Большинство «распределённых монолитов», которые мы встречаем в продакшене, рождаются именно здесь. 🟡 Что такое 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 это лучший инструмент для поиска правильных границ. Инвестиция окупается быстро ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
14.09.2026 19:40 · 👁 1.9K
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 17 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠
Библиотека джависта | Java, Spring, Maven, Hibernate
14.09.2026 11:31 · 👁 2K
🤔 Вопрос с собеседования Что выведет код? ❤️ — 1 🔥 — 2 👍 — ошибка компиляции 👇 Правильный ответ (нажми, чтобы прочитать): 2 return в try вычисляет значение, но перед фактическим выходом из метода выполняется finally. return 2 из finally заменяет результат из try. ⚠️ На практике так делать не стоит: return в finally может скрыть исключение или изменить ожидаемый результат метода. ══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Библиотека джависта | Java, Spring, Maven, Hibernate
13.09.2026 12:04 · 👁 2K
══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.