Перейти к содержимому
Технологии IT обновлён 27.02.2024

Java библиотека

Привет! Добро пожаловать на Telegram канал "Java библиотека"! Здесь вы найдете множество полезных ресурсов для Java программистов. Мы предлагаем книги, статьи, мемы и многое другое, чтобы помочь вам углубиться в мир Java программирования.

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

Публикации канала

Webhook: подписывайте исходные байты запроса Для HMAC-SHA256 сервер вычисляет MAC по исходному телу и общему секрету, затем сравнивает результат с присланной подписью. В Java используются Mac.getInstance("HmacSHA256") и SecretKeySpec. Для сравнения байтовых массивов подходит MessageDigest.isEqual(expected, provided). Важны детали протокола: секрет может быть строкой или Base64-данными, а подпись — hex либо Base64. Декодируйте именно тот формат, который задаёт отправитель. Не пересобирайте JSON перед проверкой: пробелы и порядок полей меняют байты. Некорректный формат подписи должен приводить к отказу до обработки события. HMAC не предотвращает повторную доставку. Для этого отдельно нужны правила проверки времени или учёт идентификаторов событий. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

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 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Загрузчик классов — часть идентичности типа Для JVM класс определяется не только именем, но и загрузчиком, который его определил. Два одноимённых класса из разных загрузчиков могут оказаться несовместимыми типами. В типичной современной JVM есть bootstrap, platform и application class loader. Пользовательский загрузчик может добавлять свой способ поиска классов. При стандартной делегации родителю дочерний загрузчик видит классы родителей; обратная видимость автоматически не появляется. Это важно для плагинов: общий интерфейс должен загружаться так, чтобы обе стороны действительно использовали один тип. Конкретная схема может отличаться от стандартной, например в контейнерах и системах плагинов. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Приглашаем на Java Jam — бесплатный митап ЮMoney для бэкенд-разработчиков 🔥 ✅ 29 октября, четверг, 19:00 (мск) — приходите на митап в Санкт-Петербурге или смотрите трансляцию.  Спикеры из ЮMoney и Сбера выступят с докладами: 🟣 Один апгрейд — больше сотни сервисов: как мы обновляем Java-стек в компании Обсудим, как обновить Gradle, Spring Boot и Java в 120+ компонентах, не останавливая разработку. Расскажем, как выстраивали процессы на протяжении этого времени: от порядка действий и массовых патчей до взаимодействия с командами и решения трудностей, с которыми столкнулись во время последнего обновления. 🟣 Как я автоматизировал свой проект — и всё сломал Разберём, как выстроить автоматизацию в проекте с помощью ИИ и какие шишки можно набить на пути. Поговорим, как работает длинный контекст в моделях и как организовать работу с учётом этих особенностей. 🟣 Откатить нельзя оставить: мониторинг выкладки релиза на основе Sentry Ошибки случаются. Узнаем, какие из них появляются или возникают чаще после последнего релиза — и достаточно ли этого, чтобы принять решение об откате. Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam👈

Открыть в Telegram

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

Открыть в Telegram

Почему GC не устраняет все утечки памяти GC освобождает память объектов, которые больше недостижимы. Если приложение продолжает хранить ненужную ссылку, сборщик не может угадать, что объект больше не нужен бизнес-логике. Проверьте: • статическую коллекцию, в которую только добавляют элементы; • кеш без ограничений или удаления записей; • ThreadLocal в долгоживущем потоке; • слушателя, который остаётся зарегистрированным после закрытия экрана или сессии. Для поиска причины полезны heap dump и пути удержания объектов от GC roots. Сам рост занятой памяти ещё не доказывает утечку: смотрите, что удерживается после сборок и почему. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

InterruptedException: не теряйте запрос отмены sleep(), wait(), join() и некоторые операции блокирующих очередей могут выбросить InterruptedException. При этом флаг прерывания обычно сбрасывается. Если ваш метод не умеет обработать отмену, передайте исключение выше. Если сигнатура этого не позволяет, например в Runnable.run(), восстановите флаг и завершите задачу: catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } Важное отличие: LockSupport.park() не выбрасывает InterruptedException. После возврата нужно проверять состояние и условие ожидания. Thread.interrupted() читает и сбрасывает флаг текущего потока, а isInterrupted() только читает. Выбор метода влияет на дальнейшую обработку отмены. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Форматирование строк: читаемость и Locale Когда сообщение содержит несколько значений, шаблон помогает отделить структуру от данных: String message = String.format( "Пользователь %s оформил %d заказов", name, orderCount ); Для чисел с дробной частью результат может зависеть от Locale. Если это машинный формат, задавайте Locale явно. Для пользовательского текста подбирайте локаль пользователя. MessageFormat полезен для шаблонов локализуемых сообщений, но у него собственные правила экранирования. Простая конкатенация остаётся нормальным решением. Выбирать format ради обещанного ускорения не стоит. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Критическая уязвимость в 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 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

CSV: запятая внутри значения меняет правила Простое String.join(",", values) не подходит, если поля содержат кавычки, запятые или переносы строк. Один возможный способ экранирования: static String csv(String value) { if (value.contains(",") || value.contains("\"") || value.contains("\n") || value.contains("\r")) { return "\"" + value.replace("\"", "\"\"") + "\""; } return value; } Здесь null не допускается: способ записи отсутствующего значения нужно определить отдельно. Для обмена с другими программами согласуйте кодировку, разделитель и окончания строк. Если CSV откроют в таблице, отдельно учитывайте формулы: обычное CSV-экранирование не защищает от интерпретации значений вроде =... как формул. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

🔥 Прожарка резюме Java-разработчиков Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Возможно, дело не в навыках, а в резюме. 27 октября рекрутер из Skyeng и Java-разработчик из Wildberries разберут резюме участников в прямом эфире! Что разберём: ✦ почему рекрутер закрывает резюме, не дочитав до конца; ✦ как показать свой вклад и результаты, а не просто перечислить технологии; ✦ какие формулировки могут занизить твой грейд. 🗓 27 октября в 19:00 МСК Участие бесплатное 👥 Спикеры: — Анастасия Дегтярь, Senior TA в Skyeng, 6+ лет в найме; — Виктор Анохин, Java/Kotlin-разработчик в Wildberries, ex-Билайн. Эфир проводит ШОРТКАТ – менторская программа для разработчиков, которые хотят сменить работу или вырасти в грейде и зарплате. Переходи в бота, чтобы зарегистрироваться на эфир: @shortcut_sh_bot Реклама. О рекламодателе.

Открыть в Telegram

requireNonNull — явная проверка, а не магия типов Objects.requireNonNull проверяет ссылку во время выполнения и бросает NullPointerException с заданным сообщением: this.repository = Objects.requireNonNull( repository, "repository" ); Метод существует с Java 7. Он не делает типы Java автоматически null-безопасными и не проверяет поля объекта рекурсивно. @NotNull и @Nullable описывают контракт для анализатора или фреймворка. Чтобы получить проверку на входе HTTP-метода через Bean Validation, нужна соответствующая интеграция. Lombok @NonNull может сгенерировать проверку при обработке аннотаций — это другой механизм. Выбирайте его осознанно, а не как свойство JVM. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

🗄 Вебинар: JDBC: как Java-приложения взаимодействуют с базами данных JDBC позволяет Java-приложениям работать с базами данных. Разберём подключение, SQL-запросы, транзакции и обработку ошибок. 💬 О чём поговорим - Как подключиться к СУБД с помощью DriverManager и работать с Connection. - Как выполнять SQL-запросы через Statement и PreparedStatement и получать результаты через ResultSet. - Как управлять транзакциями: autocommit, commit и rollback. - Как использовать SQLException, чтобы разобраться в причинах ошибки при выполнении запроса. 🎯 Результат урока: - Вы разберётесь, как подключать Java-приложение к СУБД, выполнять SQL-запросы и работать с результатами. - Узнаете, как управлять транзакциями и обрабатывать ошибки при обращении к базе данных. 👉 Для участия зарегистрируйтесь: https://vk.cc/d3hffx Вебинар проходит в рамках старта курса «Java-разработчик», который помогает освоить современную Java-разработку: от основ и первых программ до серверных приложений, баз данных, Spring, контейнеров и очередей сообщений. Программа регулярно обновляется под требования рынка. 🚀 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Открыть в Telegram

Остановка задачи: interrupt требует сотрудничества interrupt() не убивает поток. Он сообщает задаче о запросе отмены. Код должен проверять этот сигнал или корректно выходить из прерываемой операции. Для рабочего цикла с ожиданием: try { while (!Thread.currentThread().isInterrupted()) { doWork(); Thread.sleep(500); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); // выходим из задачи } Если восстановить флаг и сразу продолжить прежний бесконечный цикл, следующий sleep может немедленно бросить исключение. Нужен выход или явная политика продолжения. Thread.stop() не используйте: в Java 25 этот метод ещё объявлен, но всегда выбрасывает UnsupportedOperationException. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Чем отличаются Web server и Application server? Web Server (веб-сервер) обрабатывает HTTP-запросы и отдает статический контент (HTML, CSS, JS, изображения). Application Server (сервер приложений) запускает бизнес-логику приложения, выполняет обработку данных и работает с базой данных. Web Server (веб-сервер) Принимает HTTP-запросы от браузера. Отдает статические файлы (HTML, CSS, JS, картинки). Может перенаправлять запросы к Application Server. Apache HTTP Server Nginx Microsoft IIS Допустим, пользователь открывает сайт example.com/index.html: Браузер отправляет HTTP-запрос: GET /index.html HTTP/1.1 Host: example.com Веб-сервер (например, Nginx) получает запрос и отправляет браузеру файл index.html. Web Server НЕ обрабатывает логику приложения, он просто отправляет файлы клиенту. Application Server (сервер приложений) Обрабатывает динамические запросы (например, авторизацию, платежи, работу с БД). Выполняет Java-код (Servlet, EJB, Spring, Hibernate). Может генерировать HTML-страницы на сервере (JSP, Thymeleaf). Управляет транзакциями и соединениями с базой данных. Tomcat (самый популярный в мире Java-сервер) WildFly (JBoss) GlassFish WebLogic, WebSphere Допустим, пользователь заходит на example.com/login: Браузер отправляет HTTP-запрос: POST /login HTTP/1.1 Host: example.com Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

👩‍💻 Что ломается при переходе на Spring Boot 4 После обновления проект может успешно компилироваться и проходить тесты, а затем упасть уже при запуске. Авторы разбирают реальные проблемы миграции: Jackson 2/3, старые коннекторы, Feign, Security 7, JUnit 6 и изменившиеся автоконфигурации. ⛓ Читать статью Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Большинство воспринимает Spring Boot просто как фреймворк для создания REST API. Но за ним скрывается гораздо более крупная экосистема • Spring Core и внедрение зависимостей • Spring MVC и WebFlux • JPA, Hibernate и базы данных • Безопасность с JWT и OAuth 2.0 • Kafka и RabbitMQ • Redis и распределённое кэширование • Docker, Kubernetes и облачные платформы • Мониторинг с Actuator, Prometheus и Grafana Spring Boot упрощает настройку проекта, а понимание всех стоящих за ним уровней помогает стать сильнее как бэкенд-разработчик. Фреймворк позволяет быстро начать работу. Экосистема помогает создавать приложения для продакшена. Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

ETag: ответ 304 работает только вместе с кешем Клиент сохраняет тело успешного ответа и его ETag. При следующем запросе он может передать метку в If-None-Match. • 304 — ресурс не изменился; используйте уже сохранённое тело. Нового тела в таком ответе нет. • 200 — сохраните новое тело и новую метку. Если ETag отсутствует, старую метку нужно сбросить. • Другие статусы обрабатываются отдельно; это не успешное обновление кеша. Отправлять If-None-Match имеет смысл, когда есть и метка, и соответствующее тело. Храните их согласованно. Для полноценного HTTP-кеша также важны Cache-Control, Vary и ключ кеша. Один ETag не реализует все правила кеширования. #Java Полезные ресурсы по Java 👩‍💻| Наш канал в MAX 🟪

Открыть в Telegram

Комментарии

0

Комментарии пишут вошедшие — так видно, кто автор.

Войти

Комментариев пока нет

Будьте первым, кто расскажет о канале другим.

Пожаловаться на канал

Расскажите, что не так: модератор проверит канал и примет решение. Подпись не нужна, но почту можно оставить — тогда ответим.

Причина Что не так (необязательно) Почта для ответа (необязательно)
Открыть в Telegram