J
Java библиотека
31.08.2026 18:31 · 👁 858
Яндекс Музыка до 360 дней бесплатно
Яндекс Музыка для вас и 3-х ваших близких.
Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс.
Попробуйте бесплатно❤️
Слушать
#реклама 18+
music.yandex.ru
О рекламодателе
J
Java библиотека
31.08.2026 09:04 · 👁 1.5K
💻Хотите понять, как PostgreSQL 18 ускоряет дисковый I/O до 3× и что это даёт на практике?
1 сентября в 20:00 МСК разберём асинхронный I/O и io_uring: от архитектуры до живого бенчмарка. На уроке покажем, как работал синхронный I/O раньше, объясним новую подсистему AIO с параметром io_method и роль effective_io_concurrency, запустим один и тот же тяжёлый запрос на sync vs io_uring — увидите разницу в реальном времени.
Урок полезен DBA, SRE, разработчикам highload-систем и тем, кто планирует миграцию на PG 18 — получите понимание, как настроить io_method под свой профиль нагрузки и замерять эффект на своих данных.
⏰Открытый урок пройдёт в преддверии старта курса «PostgreSQL для администраторов баз данных и разработчиков». Зарегистрируйтесь, чтобы увидеть возможности PG 18 вживую: https://vk.cc/d13NpT
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
J
Java библиотека
31.08.2026 06:33 · 👁 1.5K
Как подключить Keycloak к Spring Boot проекту
Keycloak — это современный open-source Identity Provider от Red Hat, который часто используется в enterprise-проектах для SSO (Single Sign-On), OAuth2 и OpenID Connect. Ниже пошаговая настройка интеграции Keycloak с Spring Boot 3 и Spring Security 6.
1️⃣ Зависимости
Проверь, что в проекте есть или добавь следующие зависимости:
— Spring Web
— Spring Security
— OAuth2 Resource Server
— OAuth2 Client
2️⃣ Разворачиваем Keycloak
Запусти Keycloak через Docker:
docker run -d \
-p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:25.0.2 start-dev
После запуска открой http://localhost:8080, войди под admin/admin и создай realm, например demo-realm.
3️⃣ Настройка клиента в Keycloak
В разделе Clients → Create client укажи:
— Client ID: spring-client
— Client Protocol: openid-connect
— Root URL: http://localhost:8081
В разделе Settings:
— Установи Access Type → confidential
— Включи Standard Flow Enabled
— Укажи Redirect URI: http://localhost:8081/login/oauth2/code/keycloak
Сохрани и перейди на вкладку Credentials, скопируй Client Secret.
4️⃣ Настройка application.yml
server:
port: 8081
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: spring-client
client-secret: YOUR_CLIENT_SECRET
scope: openid, profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
keycloak:
issuer-uri: http://localhost:8080/realms/demo-realm
5️⃣ Конфигурация безопасности
Настрой SecurityConfig.java:
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/public").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(Customizer.withDefaults())
.logout(logout -> logout
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
);
return http.build();
}
}
🧠 Зачем это нужно
Keycloak снимает головную боль по хранению паролей, управлению ролями и сессиями. Он интегрируется с LDAP, AD, SAML и десятками внешних OAuth-провайдеров.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
J
Java библиотека
30.08.2026 13:26 · 👁 1.7K
Регистрируйтесь на Yandex Scale 2026
Главная конференция Yandex Cloud.
Узнайте о сервисах, которые меняют ваш бизнес.
4 офлайн-трека (AI, Infra + DevTools, Data, Security), онлайн-трек Deep Tech, воркшопы по ИИ и интерактивы. Подробнее о программе читайте в карточках🗒
📅24 сентября
🚗Москва + 💻онлайн
Участие бесплатное!
Зарегистрироваться
#реклама 16+
scale.yandex.cloud
О рекламодателе
J
Java библиотека
30.08.2026 09:23 · 👁 1.7K
10 техник оптимизации Java, которые выведут вас на новый уровень
Когда Java-приложение внезапно начинает «подвисать», причина почти всегда кроется в прозаичных деталях: неоптимизированных циклах, неудачном выборе коллекций, забытом кэше или агрессивном GC. В этой статье — 10 практических техник, которые помогут выжать максимум из JVM без преждевременной микрооптимизации и шаманства. Только доказавшие свою эффективность подходы, которые реально работают в проде — от финтеха до высоконагруженных API.
Читать статью
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
J
Java библиотека
28.08.2026 10:39 · 👁 2.2K
🔥 Одна аннотация, которая экономит тонны кода в Spring
@RestController - это не просто удобство, а скрытая магия, про которую многие забывают.
Под капотом это комбинация @Controller + @ResponseBody .
То есть тебе не нужно писать @ResponseBody в каждом методе - всё работает автоматически.
• Меньше бойлерплейта
• чище код
• меньше шансов забыть и получить неожиданный результат
Кажется мелочью, но на больших проектах это реально экономит время и нервы
Если до сих пор используешь @Controller + @ResponseBody вручную - пора упрощать
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
J
Java библиотека
26.08.2026 05:08 · 👁 2.8K
Вопрос с собеседования
Почему в Java интерфейс может иметь методы с реализацией (default)? Это не противоречит идее интерфейса?
Ответ: Нет, не противоречит. Они нужны, чтобы можно было добавлять новые методы в интерфейс, не ломая старые классы, которые уже его реализуют.
Без default при добавлении нового метода пришлось бы менять весь существующий код. С default-методом интерфейс даёт базовую реализацию метода, которую необязательно переопределять в реализующих классах.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
J
Java библиотека
25.08.2026 14:39 · 👁 2.8K
Знаете, что в Java switch можно использовать как выражение, а не только как отдельный блок кода?
Раньше для выбора значения часто писали так:
int timeout;
switch (env) {
case "dev":
timeout = 5;
break;
case "test":
timeout = 10;
break;
case "prod":
timeout = 30;
break;
default:
throw new IllegalArgumentException(env);
}
Работает, но кода много, и легко забыть break.
В современном Java можно записать это короче:
int timeout = switch (env) {
case "dev" -> 5;
case "test" -> 10;
case "prod" -> 30;
default -> throw new IllegalArgumentException(env);
};
Такой switch сразу возвращает значение, поэтому его удобно использовать для конфигов, статусов, ролей, типов платежей, уровней логирования и любых фиксированных сценариев.
Если логика в ветке сложнее, можно использовать yield:
int price = switch (type) {
case "vip" -> {
int discount = 20;
yield basePrice - discount;
}
default -> basePrice;
};
Код получается компактнее, а Java помогает следить, чтобы результат действительно был получен.
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪
J
Java библиотека
25.08.2026 09:20 · 👁 2.2K
➡️ Автотесты интерфейса и API часто живут в разных наборах инструментов, усложняя настройку и сопровождение.
Playwright позволяет объединить эти проверки и сократить количество лишних зависимостей в проекте.
📆 3 сентября в 20:00 МСК на открытом уроке «UI и API тестирование с Java и Playwright» разберём:
➖ устройство Playwright,
➖сравним его с Selenium
➖ напишем первые автотесты на Java.
Вы научитесь:
🟥запускать проверки пользовательского интерфейса и API,
🟥структурировать код,
🟥подключать тесты к конвейеру непрерывной интеграции и доставки.
Также вы получите критерии, которые помогут оценить целесообразность перехода на Playwright в рабочем проекте.
Занятие проходит в преддверии старта курса «Автоматизатор тестирования на Java. Продвинутый уровень».
✔️ Зарегистрируйтесь, чтобы освоить Playwright на практике и расширить набор инструментов автоматизации: https://vk.cc/d0OA0X
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
J
Java библиотека
24.08.2026 20:20 · 👁 2.1K
В Java лямбда-выражение создаёт экземпляр функционального интерфейса. Во время выполнения этот экземпляр создаётся с помощью класса LambdaMetaFactory
Следующий код на Java создаёт объект Function<String, String>
Function<String, String> f = s -> s.toUpperCase();
Во время выполнения объект создаётся с помощью кода, аналогичного следующему:
@SuppressWarnings("unchecked")
void main() throws Throwable {
MethodHandles.Lookup lookup;
lookup = MethodHandles.lookup();
CallSite callSite;
callSite = LambdaMetafactory.metafactory(
lookup,
"apply",
MethodType.methodType(Function.class),
MethodType.methodType(Object.class, Object.class),
lookup.findStatic(
getClass(),
"lambda",
MethodType.methodType(String.class, String.class)
),
MethodType.methodType(String.class, String.class)
);
MethodHandle target;
target = callSite.getTarget();
Function<String, String> f;
f = (Function<String, String>) target.invokeExact();
String msg;
msg = f.apply("Hello, World!");
IO.println(msg);
}
private static String lambda(String s) {
return s.toUpperCase();
}
При выполнении этот код выведет в консоль HELLO, WORLD!
Полезные ресурсы по Java 👩💻| Наш канал в MAX 🟪