Б
Библиотека джависта | 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
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта