Java: безопасное сравнение без NullPointerException
Objects.equals(a, b) — простой способ сравнивать значения без риска словить NPE.
Как это работает:
• Если оба значения null → вернёт true
• Если только одно null → вернёт false
• Если оба не null → вызовет a.equals(b)
Вместо:
a.equals(b) → может упасть с NullPointerException
Используй:
Objects.equals(a, b) → всегда безопасно
Мелочь, кот…
🎥 Вебинар: AI-ассистент на ваших документах: почему он врёт и что с этим делать
Внедрили AI-ассистента по документам, а он уверенно выдаёт неправду? Без кода и формул разберём, почему так происходит, какие есть рычаги качества и как грамотно ставить задачу команде.
🧠 Что будет разобрано:
• Почему AI уверенно выдумывает ответы (простыми словами)
• Из чего складывается качество ответа по документа…
Знаете, что в Java можно обновлять счётчики в Map без лишних if?
Обычно для таких задач пишут проверку: есть ли ключ, потом отдельно увеличивают значение:
if (stats.containsKey("java")) {
stats.put("java", stats.get("java") + 1);
} else {
stats.put("java", 1);
}
Метод merge делает это короче и безопаснее:
stats.merge("java", 1, Integer::sum);
Если ключа ещё нет Java положит значение 1…
TimSort в Java
Arrays.sort(Object[]) и Collections.sort() используют TimSort — алгоритм, разработанный Тимом Петерсом для Python в 2002 году и портированный в Java 7. Для примитивов используется dual-pivot quicksort, но для объектов — только TimSort, и причина этого выбора нетривиальна.
🔹 Почему не quicksort для объектов
Quicksort не стабилен — одинаковые элементы могут поменяться местами. Для …
Spring Boot: почему нельзя делать длинные транзакции
Длинные транзакции - одна из самых частых причин деградации системы, хотя код при этом может выглядеть «нормально».
Что происходит на самом деле:
- транзакция держит lock в базе
- другие запросы начинают ждать
- растёт latency
- падает throughput
- система перестаёт масштабироваться
📉 Итог - узкое место появляется не в коде, а в БД…
Основные команды Maven для Java-разработчиков
Maven — это мощный инструмент автоматизации сборки, который используется в основном для Java-проектов. Он помогает управлять зависимостями, сборкой и жизненным циклом проекта
$ mvn archetype:generate
Создание нового Maven-проекта
$ mvn clean
Очистка директории target
$ mvn compile
Компиляция исходного кода
$ mvn test
Запуск unit-тестов
$ mvn pack…
Также подписывайтесь на наши другие каналы в Максе:
https://max.ru/bookofgeek
https://max.ru/javatasks
Java News
Число прописью на Java 25: алгоритм для количественных числительных
Пишем алгоритм, который превращает количество в виде числа типа long в корректное числительное на русском языке: от нуля и простых значений до Long.MAX_VALUE. Отрицательные числа отклоняем через IllegalArgumentException.
Разберём триады, числа от 10 до 19, род числительных и формы «тысяча — тысячи — тысяч». Реализация выполнена …
Spring Boot: не делай эту ошибку с filters / interceptors
Многие используют фильтры и интерцепторы неправильно 👇
👉 Они должны быть только для cross-cutting задач
(то, что применяется ко ВСЕМ запросам)
Примеры нормального использования:
🟢 Filters:
- CORS
- Encoding
🟢 Interceptors:
- аутентификация / авторизация
- метрики / логирование
- locale
- общие headers
❌ Главная ошибка:
…
Магия JVM Flags
Запустите своё приложение с -XX:+HeapDumpOnOutOfMemoryError, и когда (не «если») приложение упадёт с OOM, у вас будет дамп памяти.
🟢 Зачем это нужно
— При падении с OutOfMemoryError JVM автоматически сохраняет снапшот всей кучи в .hprof-файл.
— Без него вы знаете лишь факт смерти процесса. С ним — кто именно убил.
— Особенно ценно в контейнерах и CI/CD: процесс умер, лог ротиров…