bookjava | Unsorted

Telegram-канал bookjava - Библиотека Java разработчика

10986

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Subscribe to a channel

Библиотека Java разработчика

Five Ways to Speed up Your Maven Builds

Как ускорить ваши Maven-сборки? «Поставить Gradle», — скажет кто-то. Ребята из Gradle считают иначе и даже подготовили статью на эту тему. По их мнению, в случае проблем со скоростью ваших сборок стоит присмотреться к профилям: возможно, некоторые плагины сильно замедляют сборку. С помощью профилей можно отключить часть плагинов для локальной или CI-сборки в зависимости от того, что вам нужно ускорить.

https://gradle.com/blog/five-ways-to-speed-up-your-apache-maven-builds/

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Хотите собрать свой мини-Google? 🚀
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.

Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.

После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.

Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.

Присоединяйтесь 22 октября в 20:00:

https://vk.cc/cQoBkb

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

🔥 Открытый урок «C# и ORM: работаем с базой данных».

Взаимодействие с базами данных - классический сценарий работы программы. В рамках ОУ рассмотрим инструменты из категории ORM, которые позволяют используя язык C# работать с БД (на примере PostgreSQL) безопасно и эффективно.

🗓 21 октября в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «C# Developer».

🎯 О чём поговорим:
✔️ для чего нужны БД
✔️ Какие сценарии использования реляционных баз данных на примере PostgreSQL
✔️ Что такое ORM
✔️ Какие библиотеки (ORM) используются при разработке на C# для работы с базами данных
✔️CRUD операции (создать, читать, обновить, удалить запись в БД)

👥 Кому будет полезно:
- Тем, кто понимает, как работает C#, но хочет узнать, как применять его в реальных программах
- Тем, кто писал на других языках программирования, и хочет узнать, как работать с БД на платформе .Net

🔗 Ссылка на регистрацию: https://vk.cc/cQlkmt

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Практикум, который снимет боль про микросервисы, о которой все молчат.

Sync vs Async: что убьёт ваш проект, а что спасёт?

15 октября, 19:00 — практический вебинар для разработчиков, архитекторов и девопсеров от OTUS. Работаем вместе с Олегом Голенищевым, Senior .NET-разработчиком Directum, преподавателем Microsoft.

Приходи, если хочешь:
✍Понимать, где Sync — мастхэв, а где Async — единственный шанс выжить
✍Получить FANG-уровня чек-лист по интеграции (и бонус — шаблоны конфигов Spring Boot для Kafka и RabbitMQ)
✍Забрать 7% скидку на любой курс OTUS (именно так, просто за регистрацию)
✍Не попасть в “клуб тех, кто строил микросервисы по учебнику, а теперь переписывает всё с нуля”

Запишись, чтобы не чинить то, что можно не ломать.
Запись, подарки и скидка — только для своих. Лови шанс — кликай на регистрацию: https://tglink.io/e5b902daf5b9

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHxXzNU

Читать полностью…

Библиотека Java разработчика

Советы по Spring 💡

Чтобы выполнять действия в транзакции базы данных, вы можете использовать шаблон Spring TransactionTemplate вместо @Transactional

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

В чем отличие между поверхностным и глубоким клонированием?

Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:

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

Глубокое копирование дублирует абсолютно всю информацию объекта:

✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода clone() должен вызываться super.clone();
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🚀AutoCloseable HTTP Client в Java 21

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Хочу показать, как за 5 минут включить виртуальные потоки (Project Loom) и не словить типичные грабли. Работает на Java 21+.

📌 Включение (авто)


# application.yml
spring:
threads:
virtual:
enabled: true # MVC, @Async, schedulers получат VirtualThreadPerTaskExecutor


📌 Ручной контроль (если нужен кастом)


@Bean
TaskExecutor vthreads() {
return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
}

// Привязать к @Async по умолчанию:
@Bean(name = {TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME})
TaskExecutor appExecutor() { return vthreads(); }


💡 Tomcat под Loom (MVC)


server:
tomcat:
threads:
max: 200 # это число платформенных (!) потоков, оставьте умеренным


💡 JDBC и пул соединений
Виртуальные потоки не отменяют лимиты БД. Не раздувайте пул, наоборот:


spring:
datasource:
hikari:
maximum-pool-size: 20 # ориентируйтесь на лимиты БД/кейсы, а не на «тысячи» v-threads
minimum-idle: 5


⚠️ Три частые ошибки

1. ThreadLocal-засады. Виртуальные потоки дешёвые, но ThreadLocal всё так же утекает. Используйте @Transactional /Context Propagation или ScopedValue вместо самодельных ThreadLocal.

2. Блокирующие HTTP-клиенты. Для массового I/O берите HttpClient (JDK) или WebClient c ограничением пула сокетов; не плодите соединения до бесконечности — узкое место сеть/БД.

3. Метрики и трейсинг. Обновите Micrometer/Brave до версий, корректно работающих с виртуальными потоками, и включите @Observed — без этого дебаг станет болью.

✅ Когда включать?

- Много блокирующего I/O (JDBC, REST к внешним сервисам) → почти всегда плюс.
- Чисто CPU-bound → выгоды мало, но и вреда нет.

Бонус: быстрый smoke-тест


IntStream.range(0, 10_000).parallel()
.forEach(i -> RestClient.create().get().uri("https://example.com").retrieve().toBodilessEntity());


С Virtual Threads сервер не «захлебнётся» потоками — упадёте ровно в реальные лимиты: БД, сеть, таймауты. Мониторьте их, а не «число потоков».

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Spring-потрошитель

Один из хрестоматийных докладов о Spring обзавелся текстовой версией на Хабре. Удивительно, что ее до сих пор не было. Докладу уже 11 лет, но его все еще можно смело рекомендовать. Евгений Борисов проходится по ключевым фичам фреймворка, которые актуальны и по сей день. А фирменная подача материала делает восприятие в общем-то непростой информации легким и приятным.

https://habr.com/ru/companies/jugru/articles/893638/

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Что такое Spring контейнер?

Spring контейнер — это основной компонент фреймворка Spring, который отвечает за управление жизненным циклом объектов (или бинов). Контейнер создаёт, конфигурирует и управляет зависимостями между объектами, а также реализует инъекцию зависимостей (DI), что упрощает разработку, улучшает тестируемость и поддерживаемость кода.

Он также управляет аспектами транзакций и безопасности.

Основной принцип Spring контейнера — это инверсия управления (IoC), при которой ответственность за создание объектов и управление их состоянием перекладывается на контейнер, а не на код разработчика.

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

🔍Тестовое собеседование с Java-разработчиком из МТС уже завтра

1 октября (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама.
О рекламодателе.

Читать полностью…

Библиотека Java разработчика

Маршрут построен: в пятницу – на VK JT Meetup!

Это неформальная встреча для ML-инженеров и Java-разработчиков от VK.

О чём расскажут:
• Какие вызовы возникают перед бэкендером в процессе создания B2B-продукта
• Как строят единую инфраструктуру поисковой платформы

А также поделятся пошаговым гайдом по выпуску RAG в прод

Дальше гостей ждут два потока: нетворкинг-зона и групповое решение кейсов по ML и Java.

Мероприятие пройдёт только офлайн — редкий шанс пообщаться с коллегами, задать вопросы экспертам и выиграть призы от VK. Регистрируйтесь!

📍 Нижний Новгород, только офлайн
📅 3 октября, сбор с 18:00
🎟 Вход по регистрации

Читать полностью…

Библиотека Java разработчика

О подводных камнях виртуальных потоков в Java

Виртуальные потоки (JEP 425) являются мощным инструментом для построения приложений, которые в теории могут обслуживать десятки тысяч запросов в секунду. Однако это в теории. Практика же может выглядеть совершенно иначе. Данная статья рассказывает о нескольких подводных камнях, из-за которых виртуальные потоки могут не сработать, а сделать даже хуже.

https://habr.com/ru/articles/950204/

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Запускаем WebSocket сервер на базе Jetty, без Spring

Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.

00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe

GitHub

Источник

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Библиотека для кэширования Caffeine: анализ кода

То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.

Правда, казалось, что рановато с головой погружаться в изучение нового подхода к кэшированию, пока ещё досконально не разобрался в аналогичной системе, с которой приходится иметь дело на работе сейчас. У нас в команде для работы с кэшированием используется библиотека Caffeine, и, положа руку на сердце, я не ориентировался в её внутреннем устройстве, не пытался проверить, можно ли в ней что-нибудь подкрутить, и есть ли в ней параметры, поддающиеся тонкой настройке. В этой статье я попробую законспектировать мои изыскания и рассказать, как на собственном опыте разбирался во внутреннем устройстве библиотеки Caffeine.

Все желающие приглашаются в путешествие с разбором сложностей одной из наиболее востребованных систем кэширования, используемых в мире. Будь вы бывалый инженер или просто новичок, интересующийся продвинутыми механизмами кэширования, это исследование прольёт вам свет на многие вопросы и подведёт к важным практическим выводам. Поехали!

https://habr.com/ru/articles/896266/

original https://adriacabeza.github.io/2024/07/12/caffeine-cache.html


Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Java для ИИ

Многие существующие и будущие возможности Java способны удовлетворить потребности в области искусственного интеллекта. Среди уже доступных функций — API внешних функций и памяти (Foreign Function and Memory API), а также Vector API. Среди будущих — те, что предлагаются в рамках проектов Valhalla и Babylon. В этой презентации будут рассмотрены эти возможности и то, как они могут использоваться Java-библиотеками и приложениями для создания конкурентоспособных ИИ-решений.

https://openjdk.org/projects/babylon/
https://github.com/openjdk/babylon
https://github.com/openjdk/babylon/tree/code-reflection/hat
https://inside.java/tag/babylon

источник

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Определение и отличие IP адресов LAN, PPP в Java. Использование DatagramSocket для нестандартных ситуаций

В некоторых случаях, например, при работе с Linux-системами, InetAddress.getLocalHost() может давать неожиданный результат. В таких ситуациях может быть полезно использовать другой способ — через DatagramSocket, отправляя запрос в сеть:


import java.net.*;

public class GetPreferredIP {
public static void main(String[] args) throws SocketException {
try (final DatagramSocket socket = new DatagramSocket()) {
socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
System.out.println(socket.getLocalAddress().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}


Сервер не получает эти данные, однако этот метод поможет определить предпочтительный локальный IP-адрес.

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Определение и отличие IP адресов LAN, PPP в Java

Чтобы определить IP-адрес локальной машины с использованием Java, примените следующий код:


import java.net.*;

public class GetIP {
public static void main(String[] args) throws UnknownHostException {
System.out.println(InetAddress.getLocalHost().getHostAddress());
}
}


Работа с несколькими сетевыми интерфейсами

Если ваш компьютер оснащён несколькими сетевыми интерфейсами, иногда бывает необходимо обойти весь список интерфейсов и отфильтровать адреса, не являющиеся обратными петлями и являющиеся локальными для сайта. Это особенно актуально при работе в средах с многочисленными сетями.


import java.net.*;
import java.util.*;

public class GetMultiIPs {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
if (iface.isLoopback() || !iface.isUp()) continue;

Enumeration<InetAddress> addresses = iface.getInetAddresses();
while(addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
if (addr instanceof Inet4Address) {
System.out.println(iface.getDisplayName() + " – " + addr.getHostAddress());
}
}
}
}
}


Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Примеры поведенческих шаблонов проектирования

🔴Цепочка обязанностей (Chain of responsibility) - Предназначен для организации в системе уровней ответственности.

🔴Команда (Command) - Представляет действие. Объект команды заключает в себе само действие и его параметры.

🔴Интерпретатор (Interpreter) - Решает часто встречающуюся, но подверженную изменениям, задачу.

🔴Итератор (Iterator) - Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого + __из объектов, входящих в состав агрегации.

🔴Посредник (Mediator) - Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.

🔴Хранитель (Memento) - Позволяет, не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях.

🔴Наблюдатель (Observer) - Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

🔴Состояние (State) - Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

🔴Стратегия (Strategy) - Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.

🔴Шаблонный метод (Template method) - Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.

🔴Посетитель (Visitor) - Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

☄️Как устроено автодополнение в поисковых системах?

🗓 8 октября в 20:00 МСК приглашаем на открытый урок OTUS «Как вырастить префиксное дерево». На вебинаре мы пошагово построим префиксное дерево (Trie) для слов из большого текста, добавим счётчики частот и реализуем автодополнение. Вы увидите, как по первым буквам мгновенно находятся все слова с этим префиксом и выводятся самые популярные варианты продолжений.

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

Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.

👉Зарегистрируйтесь сейчас и узнайте, как вырастить своё первое Trie-дерево: https://vk.cc/cQ8Kxo


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Spring – эволюция или революция!? | Spring АйО Подкаст №1

В первом выпуске подкаста Spring АйО в студии собрались 4 эксперта сообщества, чтобы попытаться раз и навсегда ответить на вопрос, чем же для нас стал Spring – эволюцией или революцией?

––––– Таймкоды –––––
00:00:00 – Всем привет!
00:00:28 – Какими были ваши первые ощущения от Spring?
00:01:14 – В чём секрет популярности Spring?
00:02:56 – Существует ли Spring без Boot?
00:05:30 – Победил ли Spring?
00:07:08 – А что с другими DI-фреймворками?
00:10:15 – Spring Native – таблетка от всех проблем?
00:14:30 – Что должно быть bean, а что нет?
00:22:10 – Как правильно внедрять зависимость?
00:26:20 – Что там со Spring Data, Михаил?
00:34:19 – AI заменит StackOverflow и Baeldung?
00:36:20 – Не становится ли Spring слишком сложным?
00:39:50 – Почему документация Spring так плоха?
00:41:23 – Есть ли рудименты в Spring?
00:43:28 – Зашел ли в тупик реактивный стек?
00:52:20 – Тупеют ли разработчики из-за Spring?
01:00:42 – В чём разница между сеньором сейчас и 10 лет назад?
01:03:40 – Java/Spring – самое удобное, что есть в этом мире?
01:05:08 – Почему Java так сильно тормозит?
01:08:43 – Чего нам не хватает в Spring?
01:18:00 – Как законтрибьютить в Spring?
01:24:15 – На чём зарабатывает Spring?
01:27:12 – Что делать после открытия Pull Request?
01:30:22 – Всем спасибо!

источник

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Deprecated Event

В статье рассматривается новое событие в JDK 22 для JFR, позволяющее отслеживать вызовы устаревших методов. Это полезно для определения зависимостей в сторонних библиотеках, которые используют методы, планируемые к удалению, такие как методы Security Manager. Такое отслеживание позволяет заранее обновить библиотеки, что может сократить технический долг и упростить переход на актуальные версии библиотек и инструментов.


public class API {
public static void enableLogging(boolean enable) {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
System.setProperty("log", String.valueOf(enable));
return null;
}
});
}
public static void runTask(Runnable task) {
try {
task.run();
} catch (ThreadDeath td) {
System.out.println("Task stopped.");
}
}
}

public class Service {
public static void log(String message) {
String shouldLog = System.getProperty("log", "true");
if (new Boolean("log")) {
System.out.print(message);
}
}
}


https://egahlin.github.io/2024/05/31/deprecated-event.html

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Как вы решаете вопрос с покрытием?
Почти в каждом проекте висит задача: поднять покрытие до 70%.
И почти в каждой команде никто не хочет этим заниматься.

Explyt – AI-плагин для Java и Kotlin разработчиков, который снимает эту боль.
Он генерирует юнит-тесты прямо в IDE: по коду, по runtime-трассам, по спекам. И делает это так, как будто реально вник в проект.

📌 Что умеет:
- создаёт осмысленные тесты для Java и Kotlin-кода
- поддерживает JUnit 4/5, TestNG, кастомные фреймворки
- превращает execution trace в автотесты
- предлагает фиксы, если сгенерированный тест падает
- есть режим агента, где AI сам меняет код, запускает тесты и ищет ошибки

📦 Плагин доступен:
- через JetBrains Marketplace
- или напрямую с сайта разработчика

🎁 30 дней бесплатного доступа – просто пользуйтесь.
👉 Попробовать на своём проекте

Читать полностью…

Библиотека Java разработчика

Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей.

Соревнования пройдут в двух треках:

1. Алгоритмические задачи
Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад.

2. Программирование роботов
Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только.

Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве.

Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель.

Регистрируйся до 20 октября по ссылке.

Читать полностью…

Библиотека Java разработчика

Что вы знаете про Collection?

Collection — это интерфейс в java.util, который задаёт общий контракт для всех коллекций, хранящих группы объектов. Через него определяются ключевые операции: добавление и удаление элементов, проверка их наличия, очистка коллекции, получение размера и итерация. Основные реализации — List, Set и Queue.

Сам интерфейс не потокобезопасен, но его можно обернуть в синхронизированную версию через Collections.synchronizedCollection() или использовать классы из java.util.concurrent. Collection работает с дженериками, что обеспечивает типобезопасность и упрощает работу с элементами.

Важно помнить, что Map не наследуется от Collection, так как представляет пары ключ–значение и имеет свою иерархию.

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Защита Spring Boot приложений с помощью Keycloak и OIDC

Многие приложения используют аутентификацию и авторизацию. Однако для разработчиков это часто оказывается непростой задачей.

В этой статье рассматривается Spring Security — решение от Spring для добавления безопасности в ваши Spring-приложения. С помощью примеров и модульных тестов вы познакомитесь с аннотациями и классами Spring. Конечная цель — настроить приложение с использованием OpenID Connect в связке с Keycloak. Введение в OpenID Connect и Keycloak уже рассматривалось в предыдущей статье. Если вы ещё не знакомы с этими концепциями, рекомендуется ознакомиться с тем материалом.

https://mydeveloperplanet.com/2025/06/11/secure-your-spring-boot-apps-using-keycloak-and-oidc/

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Spring Boot — Управление транзакциями с использованием аннотации @Transactional

В корпоративных приложениях транзакции обеспечивают согласованность и целостность данных.
Транзакция — это последовательность операций, выполняемых как единое логическое целое.
Все операции внутри транзакции либо успешно выполняются (commit), либо полностью откатываются (rollback).

Spring Boot упрощает управление транзакциями с помощью аннотации @Transactional, которая основана на декларативном механизме управления транзакциями Spring.
Это избавляет разработчиков от написания шаблонного кода для ручного управления транзакциями.

https://www.geeksforgeeks.org/springboot/spring-boot-transaction-management-using-transactional-annotation/

Мы в MAX

👉@BookJava

Читать полностью…

Библиотека Java разработчика

Офер в VK для бэкендеров и ML-щиков — станьте частью команды за выходные.

4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.

Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.

Читайте подробности на сайте и подавайте заявку до 2 октября!

Читать полностью…

Библиотека Java разработчика

Быстрый поиск подстроки: Кнут–Моррис–Пратт на практике!

Разберём алгоритм Кнута–Морриса–Пратта (КМП): почему он работает за линейное время и как «переиспользует» уже найденные совпадения. Покажем, где наивный подход теряет секунды (и деньги), а КМП — нет.

После вебинара вы:
— понимаете префикс-функцию и логику «сдвигов»;
— умеете сравнить наивный поиск и КМП на реальных данных;
— знаете, как внедрить быстрый поиск в проде.

⏰ Урок пройдёт 24 сентября в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных». Всем участникам — персональные условия обучения.

👉 Для участия зарегистрируйтесь:

https://vk.cc/cPIpN3

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Библиотека Java разработчика

Ускорение Spring REST API на 200%

Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.

https://habr.com/ru/companies/maxilect/articles/896240/

👉@BookJava

Читать полностью…
Subscribe to a channel