New We are sorting MAX channels into categories and territories. Read the news
Public channel ID 68536775128494

Java библиотека

Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial

Channels in category
2 095
This channel's rank
№ 68
Open category →
Channels in category
20 109
This channel's rank
№ 262
Open category →
Open in MAX

Posts for the period

By reactions

Search and the whole feed — after free registration. Custom dates — with a subscription; the channel owner sees them for free. Sorting by reactions — with a subscription. Sign up

Loading…

Webhook: подписывайте исходные байты запроса

Для HMAC-SHA256 сервер вычисляет MAC по исходному телу и общему секрету, затем сравнивает результат с присланной подписью.

В Java используются Mac.getInstance("HmacSHA256") и SecretKeySpec. Для сравнения байтовых массивов подходит MessageDigest.isEqual(expected, provided).

Важны детали протокола: секрет может быть строкой или Base64-данными, а подпись — hex либо Base64. Декодируйте именно тот формат, который задаёт отправитель.

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

HMAC не предотвращает повторную доставку. Для этого отдельно нужны правила проверки времени или учёт идентификаторов событий.

#Java

Java Библиотека | Мы в Телеграм
Views: 17
Go to post Open in MAX Report an inaccuracy
unmodifiableList: представление, а не снимок

var source = new ArrayList<>(List.of("A"));
var view = Collections.unmodifiableList(source);
var snapshot = List.copyOf(source);
source.add("B");
System.out.println(view);     // [A, B]
System.out.println(snapshot); // [A]

Обёртка запрещает изменение списка через view, но показывает изменения исходного списка.

List.copyOf(), доступный с Java 10, создаёт независимый по составу неизменяемый список и не принимает null-элементы. Копия поверхностная: изменяемые объекты внутри неё остаются теми же объектами.

При возврате данных из сервиса решите, нужен читателю текущий вид коллекции или снимок на момент вызова.

#Java

Java Библиотека | Мы в Телеграм
Views: 134
Go to post Open in MAX Report an inaccuracy
Загрузчик классов — часть идентичности типа

Для JVM класс определяется не только именем, но и загрузчиком, который его определил. Два одноимённых класса из разных загрузчиков могут оказаться несовместимыми типами.

В типичной современной JVM есть bootstrap, platform и application class loader. Пользовательский загрузчик может добавлять свой способ поиска классов.

При стандартной делегации родителю дочерний загрузчик видит классы родителей; обратная видимость автоматически не появляется. Это важно для плагинов: общий интерфейс должен загружаться так, чтобы обе стороны действительно использовали один тип.

Конкретная схема может отличаться от стандартной, например в контейнерах и системах плагинов.

#Java

Java Библиотека | Мы в Телеграм
Views: 169
Go to post Open in MAX Report an inaccuracy
Безопасность Java: десять проверок перед релизом

1. Проверяйте входные данные и отдельно права на действие. Валидация не заменяет авторизацию.
2. Передавайте SQL-значения параметрами PreparedStatement. Имена таблиц и колонок выбирайте из разрешённого набора.
3. Не отдавайте клиенту stack trace и внутреннюю конфигурацию.
4. Храните секреты вне репозитория, определите способ их ротации.
5. Проверяйте доступ к конкретному объекту, а не только роль пользователя.
6. Ограничивайте десериализуемые типы. JSON сам по себе не гарантирует безопасность.
7. Следите за уязвимостями и обновлениями зависимостей.
8. Не записывайте пароли и токены в логи.
9. Настройте Secure, HttpOnly и подходящий SameSite для сессионных cookie.
10. Проверьте защитные заголовки и CSP под конкретный интерфейс.

Настройки нужно проверять вместе с поведением приложения, а не только наличием аннотаций.

#Java

Java Библиотека | Мы в Телеграм
Views: 204
Go to post Open in MAX Report an inaccuracy
Работаете с СУБД? Присоединяйтесь к сообществу Pangolin для разработчиков и администраторов баз данных!

Pangolin DB — это PostgreSQL с 100+ доработками, и команда СберТеха открыто рассказывает о его разработке.
 
В канале «СУБД Pangolin» найдете:
🔹 Глубокие разборы архитектуры и кода
🔹 Кейсы оптимизации и доработки PostgreSQL
🔹 Советы и опыт инженеров
🔹 Вебинары и встречи с экспертами
🔹 Вакансии и жизнь команды от первого лица
 
Присоединяйтесь к сообществу, где говорят на языке баз данных!
Views: 198
Go to post Open in MAX Report an inaccuracy
📚 10 ловушек Java: проверь себя

Почему add() выбрасывает исключение?
Почему remove(1) удаляет число 2?
Откуда NullPointerException в обычном сравнении?

Собрали 10 коротких разборов. В каждом — пример кода, результат, объяснение и исправление.

Сначала попробуй угадать ответ, затем проверь себя. PDF прикреплён к этому посту — сохраняй для работы и подготовки к собеседованиям.

«Java библиотека» на удобной тебе площадке:

🔹 ВКонтакте
🔹 Telegram
🔹 MAX

Подписывайся — продолжим разбирать Java на конкретных примерах.
Views: 210
Go to post Open in MAX Report an inaccuracy
Почему GC не устраняет все утечки памяти

GC освобождает память объектов, которые больше недостижимы. Если приложение продолжает хранить ненужную ссылку, сборщик не может угадать, что объект больше не нужен бизнес-логике.

Проверьте:
• статическую коллекцию, в которую только добавляют элементы;
• кеш без ограничений или удаления записей;
• ThreadLocal в долгоживущем потоке;
• слушателя, который остаётся зарегистрированным после закрытия экрана или сессии.

Для поиска причины полезны heap dump и пути удержания объектов от GC roots. Сам рост занятой памяти ещё не доказывает утечку: смотрите, что удерживается после сборок и почему.

#Java

Java Библиотека | Мы в Телеграм
Views: 257
Go to post Open in MAX Report an inaccuracy
Критическая уязвимость в Java: атака по сети без пароля и участия пользователя

Oracle опубликовала предупреждение CVE-2026-91403 с оценкой CVSS 9.1. Проблема находится в JSSE — компоненте Java, который обеспечивает защищённые соединения TLS.

По описанию Oracle, успешная атака может позволить читать, изменять и удалять данные, доступные уязвимому приложению. Для эксплуатации не нужны учётные данные, а сложность атаки оценена как низкая.

В списке затронутых версий:

- Java SE 8u511 / 8u511-perf, 11.0.33, 17.0.21, 21.0.13, 25.0.5 и 27.0.1.
- Oracle GraalVM for JDK 17.0.21 и 21.0.13.
- Oracle GraalVM Enterprise Edition 21.3.20.

Условия зависят от приложения: Oracle указывает на сценарии, где данные атакующего попадают в API уязвимого компонента, например через веб-сервис. Само наличие Java ещё не означает, что любой сервис можно атаковать.

Администраторам стоит проверить используемые сборки Java, включая runtime внутри контейнеров, и установить исправления по инструкции поставщика.

Предупреждение опубликовано 21 октября. Более ранние версии тоже могут быть затронуты — отсутствие в списке не подтверждает их безопасность.

https://www.oracle.com/security-alerts/alert-cve-2026-91403.html

Java Библиотека | Мы в Телеграм
Views: 237
Go to post Open in MAX Report an inaccuracy
InterruptedException: не теряйте запрос отмены

sleep(), wait(), join() и некоторые операции блокирующих очередей могут выбросить InterruptedException. При этом флаг прерывания обычно сбрасывается.

Если ваш метод не умеет обработать отмену, передайте исключение выше. Если сигнатура этого не позволяет, например в Runnable.run(), восстановите флаг и завершите задачу:
catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    return;
}

Важное отличие: LockSupport.park() не выбрасывает InterruptedException. После возврата нужно проверять состояние и условие ожидания.

Thread.interrupted() читает и сбрасывает флаг текущего потока, а isInterrupted() только читает. Выбор метода влияет на дальнейшую обработку отмены.

#Java

Java Библиотека | Мы в Телеграм
Views: 203
Go to post Open in MAX Report an inaccuracy
The full feed — after free sign-up
VKontakte Telegram Odnoklassniki
Favorites at datool.ru

Follow the channel in your account

Sign up at datool.ru to add the channel “Java библиотека” to favorites and track its metrics.

Sign up
For channel owners

Verify your channel

Sign in or sign up at datool.ru, then add our bot to the channel following the instructions in your account. Once ownership is verified, the lock disappears and channel management becomes available.

Sign in or sign up

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go