Java библиотека
31.6K subscribers
2.3K photos
78 videos
8 files
2.02K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

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

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

Сообщество VK https://vk.com/javatutorial
加入频道
👩‍💻 Как настроить Spring Security с кастомной формой логина

Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.

1️⃣ Добавьте зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>


2️⃣ Создайте SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/css/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true)
.permitAll()
)
.logout(logout -> logout
.logoutSuccessUrl("/login?logout")
);

return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
var user = User.withUsername("admin")
.password("{noop}admin123") // Для простоты, без шифрования
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}


3️⃣ Создайте кастомную HTML-форму

src/main/resources/templates/login.html (если используете Thymeleaf):
<!DOCTYPE html>
<html>
<head><title>Login</title></head>
<body>
<h2>Login</h2>
<form method="post" action="/login">
<label>Username: <input type="text" name="username" /></label><br/>
<label>Password: <input type="password" name="password" /></label><br/>
<button type="submit">Login</button>
</form>
</body>
</html>


4️⃣ Реализуете контроллер
@RestController
public class DashboardController {

@GetMapping("/dashboard")
public String dashboard() {
return "Welcome to the dashboard!";
}
}


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍11🔥5
👩‍💻 Интеграция брокеров сообщений в Spring Boot с AI

Поработать с Kafka или RabbitMQ, но нет времени вникать в тонкости конфигурации и шаблонного кода? AI справится с этим за секунды — с учётом лучших практик и особенностей выбранного брокера.

📝 Промпт:
Generate a Spring Boot service that integrates with [Kafka/RabbitMQ] to handle asynchronous message processing for [описание бизнес-задачи]. 
Include configuration, producer, and consumer code.
Ensure reliability with retry mechanisms, message acknowledgment, and error handling.
Use Spring Cloud Stream or native client APIs. Explain architectural choices and trade-offs.


💡 Дополнительные возможности:

— Добавьте Dead Letter Queue (DLQ) для обработки неуспешных сообщений
— Настройте observability (Micrometer + Prometheus/Grafana) для мониторинга очередей

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥5
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.

Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.

Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа

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

Узнайте подробности и оставьте заявку.
👍32🔥2
🧑‍💻 Магия IntelliJ IDEA

Работаете в большом Java-проекте и боитесь, что при переименовании метода или переменной что-то сломаете? IntelliJ IDEA умеет безопасно и быстро переименовывать элементы кода с помощью Shift + F6.

🟢Зачем это нужно

— Вместо ручного поиска и замены по всему проекту IDEA обновит все ссылки на метод, переменную или класс автоматически.
— Переименование учитывает контекст — не затронет одноимённые элементы в других частях кода.
— Работает со всеми элементами: методами, классами, переменными, параметрами и даже с ресурсами.

🟢Как использовать

— Наведите курсор на имя метода, класса или переменной, которую хотите переименовать.
— Нажмите Shift + F6.
— Введите новое имя. IDEA покажет, где будет произведено переименование.
— Подтвердите и все ссылки обновятся мгновенно.

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

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥74
🖥 Stream API vs классический for-loop?

С тех пор как в Java 8 появился Stream API, начались споры: стоит ли массово переходить на стримы или классический for-loop по-прежнему лучше?

Сторонники Stream API говорят о выразительности, лаконичности и возможностях параллелизма. Противники указывают на потерю производительности в критичных местах и сложность отладки.

⚡️ На практике:

— Stream API отлично подходит для чистых операций с коллекциями и сложных цепочек преобразований.
— For-loop даёт полный контроль над процессом и зачастую работает быстрее, что важно в системах с высокими требованиями к производительности.

Вопрос к вам:

Что вы используете в повседневной работе?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥2
☝️Конфликты — это не страшно. Главное — научиться ими управлять!

Каждый тимлид и менеджер сталкивался с ситуацией, когда напряжение в команде мешает работе. Избегание или агрессия — не выход. Пора разобраться, как превращать конфликты в точки роста!

Приходи на бесплатный вебинар курса «Team Lead в IT» и узнай:
— Как не бояться конфликтов, а использовать их с пользой
— Конструктивные техники — вместо избегания или эмоциональных взрывов
— Как снижать напряжение и находить решения, которые устроят всех

Спикер: Алексей Кирсанов (Руководитель отдела продуктовой разработки Битрикс24) — знает, как работать с конфликтами без потерь для команды.

После вебинара сможешь записаться на курс со скидкой по промокоду TL_8 — не упусти возможность!

🔗 Регистрируйсяhttps://vk.cc/cOxlS0

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
🌳 AVL, Red-Black и обычные BST — в чём разница и что использовать

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

📘 1. Обычное BST (Binary Search Tree)

🟢Это простое бинарное дерево, где:
> левый элемент < корень < правый элемент

🟢Плюсы:
– простая реализация
– отлично работает в идеальных условиях (например, сбалансированные данные)

🟢Минусы:
– если данные приходят в отсортированном виде — дерево вырождается в связный список
– время поиска, вставки, удаления может стать O(n) вместо O(log n)

📗 2. AVL-дерево

🟢Это самобалансирующееся BST, в котором:
> разница высот левого и правого поддерева никогда не превышает 1

🟢Плюсы:
очень быстрое чтение и поиск (потому что дерево строго сбалансировано)
– гарантированное O(log n) на все операции

🟢Минусы:
– при вставке и удалении может потребоваться много вращений, особенно при массовых изменениях
– чуть сложнее в реализации

📌 Используется, когда важна максимально быстрая навигация по дереву (например, базы данных, кэшированные индексы)

📕 3. Red-Black Tree (Красно-чёрное дерево)

🟢Более "гибкое" самобалансирующееся дерево
> баланс поддерживается за счёт цветов узлов и набора правил
> менее строгое, чем AVL, но быстрее на изменениях

🟢Плюсы:
– меньше вращений при вставке/удалении
лучше масштабируется, особенно при больших объёмах данных
– используется в TreeMap (Java), std::map (C++), Linux kernel

🟢Минусы:
– чуть менее сбалансировано, чем AVL
поиск может быть чуть медленнее, но разница минимальна

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

🧠 Итого:

| Структура | Быстрее при... | Баланс | Где применяется |
|----------------|------------------------|--------|----------------------------------------|
| **BST** | — (только в идеале) | нет | учебные задачи, простые деревья |
| **AVL** | Поиске | строгий | базы данных, индексы, словари |
| **Red-Black** | Вставке/удалении | ⚠️ умеренный | языковые stdlib, ядра, runtime-структуры |


🔗 Подробнее

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
Реактивное программирование для масштабируемых приложений

Работаете с высоконагруженными системами и хотите писать неблокирующий, отзывчивый код? Project Reactor — это современная реактивная библиотека для Java, которая позволяет создавать эффективные, масштабируемые и устойчивые приложения.

🟢Зачем это нужно

— Обеспечивает асинхронную обработку данных с поддержкой backpressure — контроль потока данных, чтобы не перегружать систему.
— Улучшает использование ресурсов: вместо блокировки потоков реактивный код работает с событиями и колбэками.
— Позволяет строить сложные цепочки обработки с лаконичным и выразительным API (Flux, Mono).
— Отлично интегрируется с Spring WebFlux — современным реактивным веб-фреймворком.

🟢Как использовать

— Подключите зависимость reactor-core в проект.
— Используйте Mono<T> для 0-1 элемента, Flux<T> — для потоков данных.
— Пример:
Flux.just("user1", "user2", "user3")
.flatMap(this::fetchUserDetailsAsync)
.filter(user -> user.isActive())
.subscribe(user -> System.out.println("Active user: " + user.getName()));

— Обрабатывайте ошибки реактивно с помощью операторов onErrorResume, retry.
— Используйте Schedulers для переключения потоков и оптимизации выполнения.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
ИТ-специалисты Петербурга, общий сбор 

6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.

Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут. 

В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными. 
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.

Во второй день: 
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.

Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.

Успейте зарегистрироваться до 5 сентября
3👍2🔥2🎄1
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍3🔥21
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
🌐 JTS Topology Suite — мощная Java-библиотека для работы с геометрией. Проект предоставляет инструменты для создания и манипуляции векторной геометрией, включая пространственные операции. Входит в рабочую группу LocationTech Eclipse Foundation и служит основой для многих GIS-решений.

В комплекте идёт TestBuilder с GUI для визуализации геометрии и тестирования функций. Библиотека особенно полезна разработчикам GIS-приложений систем пространственного анализа. На базе JTS построены популярные порты для C++, .NET и JavaScript.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
👩‍💻 Интеграция Redis в Spring Boot с AI

Нужно быстро подключить Redis для кеширования, блокировок, хранения состояний или очередей задач — без лишней возни с конфигами и шаблонами? AI сгенерирует код под ключ — учитывая назначение, паттерны и лучшие практики.

📝 Промпт:
Generate a Spring Boot service that integrates with Redis to handle [caching / rate limiting / distributed locks / task queues] for [описание бизнес-логики].  
Include configuration, connection pooling, and example use cases.
Ensure reliability with TTL management, error handling, and fallback mechanisms.
Use Spring Data Redis or Lettuce/Jedis client. Explain the trade-offs of chosen technologies and patterns (e.g., Cache Aside, Write-Through).


💡 Дополнительные возможности:

— Добавьте also include support for Redis Streams (or Pub/Sub) for event-driven processing with examples для включения Redis Streams или Pub/Sub.
— Добавьте use Lua scripts for atomic operations and provide sample use cases (e.g., rate limiting or locking) для Lua-скриптов.
— Добавьте integrate Spring Boot Actuator and Redis metrics for monitoring cache performance (hit/miss, TTL, etc.) для мониторинга кеша и статистики.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1