Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
@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);
}
}
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>
@RestController
public class DashboardController {
@GetMapping("/dashboard")
public String dashboard() {
return "Welcome to the dashboard!";
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍11🔥5
Поработать с 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)
для мониторинга очередейPlease open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥5
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
👍3❤2🔥2
Работаете в большом Java-проекте и боитесь, что при переименовании метода или переменной что-то сломаете? IntelliJ IDEA умеет безопасно и быстро переименовывать элементы кода с помощью Shift + F6.
— Вместо ручного поиска и замены по всему проекту IDEA обновит все ссылки на метод, переменную или класс автоматически.
— Переименование учитывает контекст — не затронет одноимённые элементы в других частях кода.
— Работает со всеми элементами: методами, классами, переменными, параметрами и даже с ресурсами.
— Наведите курсор на имя метода, класса или переменной, которую хотите переименовать.
— Нажмите Shift + F6.
— Введите новое имя. IDEA покажет, где будет произведено переименование.
— Подтвердите и все ссылки обновятся мгновенно.
Очень удобно, когда нужно быстро рефакторить код, не опасаясь сломать логику, особенно в крупных проектах с множеством взаимосвязей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥7❤4
С тех пор как в Java 8 появился Stream API, начались споры: стоит ли массово переходить на стримы или классический for-loop по-прежнему лучше?
Сторонники Stream API говорят о выразительности, лаконичности и возможностях параллелизма. Противники указывают на потерю производительности в критичных местах и сложность отладки.
⚡️ На практике:
— Stream API отлично подходит для чистых операций с коллекциями и сложных цепочек преобразований.
— For-loop даёт полный контроль над процессом и зачастую работает быстрее, что важно в системах с высокими требованиями к производительности.
Что вы используете в повседневной работе?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥2
☝️Конфликты — это не страшно. Главное — научиться ими управлять!
Каждый тимлид и менеджер сталкивался с ситуацией, когда напряжение в команде мешает работе. Избегание или агрессия — не выход. Пора разобраться, как превращать конфликты в точки роста!
Приходи на бесплатный вебинар курса «Team Lead в IT» и узнай:
— Как не бояться конфликтов, а использовать их с пользой
— Конструктивные техники — вместо избегания или эмоциональных взрывов
— Как снижать напряжение и находить решения, которые устроят всех
Спикер: Алексей Кирсанов (Руководитель отдела продуктовой разработки Битрикс24) — знает, как работать с конфликтами без потерь для команды.
После вебинара сможешь записаться на курс со скидкой по промокоду TL_8 — не упусти возможность!
🔗 Регистрируйся → https://vk.cc/cOxlS0
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Каждый тимлид и менеджер сталкивался с ситуацией, когда напряжение в команде мешает работе. Избегание или агрессия — не выход. Пора разобраться, как превращать конфликты в точки роста!
Приходи на бесплатный вебинар курса «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, но быстрее на изменениях
🟢 Плюсы:
– меньше вращений при вставке/удалении
– лучше масштабируется, особенно при больших объёмах данных
– используется в
🟢 Минусы:
– чуть менее сбалансировано, чем AVL
– поиск может быть чуть медленнее, но разница минимальна
📌 Используется в системах, где часто происходят вставки и удаления, и важна скорость обновлений, а не только чтения.
🧠 Итого:
🔗 Подробнее
✅ Java библиотека #java
Если вы работаете с алгоритмами или backend-структурами, важно понимать, чем отличаются разные виды бинарных деревьев поиска. Они вроде бы похожи, но ведут себя по-разному под нагрузкой.
📘 1. Обычное BST (Binary Search Tree)
> левый элемент < корень < правый элемент
– простая реализация
– отлично работает в идеальных условиях (например, сбалансированные данные)
– если данные приходят в отсортированном виде — дерево вырождается в связный список
– время поиска, вставки, удаления может стать O(n) вместо O(log n)
📗 2. AVL-дерево
> разница высот левого и правого поддерева никогда не превышает 1
– очень быстрое чтение и поиск (потому что дерево строго сбалансировано)
– гарантированное O(log n) на все операции
– при вставке и удалении может потребоваться много вращений, особенно при массовых изменениях
– чуть сложнее в реализации
📌 Используется, когда важна максимально быстрая навигация по дереву (например, базы данных, кэшированные индексы)
📕 3. Red-Black Tree (Красно-чёрное дерево)
> баланс поддерживается за счёт цветов узлов и набора правил
> менее строгое, чем AVL, но быстрее на изменениях
– меньше вращений при вставке/удалении
– лучше масштабируется, особенно при больших объёмах данных
– используется в
TreeMap
(Java), std::map
(C++), Linux kernel
– чуть менее сбалансировано, чем AVL
– поиск может быть чуть медленнее, но разница минимальна
📌 Используется в системах, где часто происходят вставки и удаления, и важна скорость обновлений, а не только чтения.
🧠 Итого:
| Структура | Быстрее при... | Баланс | Где применяется |
|----------------|------------------------|--------|----------------------------------------|
| **BST** | — (только в идеале) | ❌ нет | учебные задачи, простые деревья |
| **AVL** | ✅ Поиске | ✅ строгий | базы данных, индексы, словари |
| **Red-Black** | ✅ Вставке/удалении | ⚠️ умеренный | языковые stdlib, ядра, runtime-структуры |
🔗 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1
Реактивное программирование для масштабируемых приложений
Работаете с высоконагруженными системами и хотите писать неблокирующий, отзывчивый код? Project Reactor — это современная реактивная библиотека для Java, которая позволяет создавать эффективные, масштабируемые и устойчивые приложения.
🟢 Зачем это нужно
— Обеспечивает асинхронную обработку данных с поддержкой backpressure — контроль потока данных, чтобы не перегружать систему.
— Улучшает использование ресурсов: вместо блокировки потоков реактивный код работает с событиями и колбэками.
— Позволяет строить сложные цепочки обработки с лаконичным и выразительным API (Flux, Mono).
— Отлично интегрируется с Spring WebFlux — современным реактивным веб-фреймворком.
🟢 Как использовать
— Подключите зависимость reactor-core в проект.
— Используйте Mono<T> для 0-1 элемента, Flux<T> — для потоков данных.
— Пример:
— Обрабатывайте ошибки реактивно с помощью операторов onErrorResume, retry.
— Используйте Schedulers для переключения потоков и оптимизации выполнения.
✅ Java библиотека #java
Работаете с высоконагруженными системами и хотите писать неблокирующий, отзывчивый код? 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 для переключения потоков и оптимизации выполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
ИТ-специалисты Петербурга, общий сбор
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
6 и 7 сентября пройдет ИТ-фестиваль «Сезон кода» для опытных разработчиков, ML-инженеров, архитекторов, специалистов по информационной безопасности и других ИТ-специалистов.
Спикеры из Т-Банка и других компаний зовут слушать доклады, обмениваться опытом и знакомиться с единомышленниками. Развлечения и музыка тоже будут.
В первый день:
— Разберетесь в архитектуре систем, надежности и работе с данными.
— Узнаете, как технологии помогают решать задачи клиентов и бизнеса.
— Поймете, как идеи становятся инструментами и продуктами.
Во второй день:
— Услышите про актуальные подходы к обеспечению информационной безопасности в разработке.
— Узнаете про backend-принципы, которые помогают работать эффективнее.
— Увидите, как работают LLM и куда все это движется.
Выбирайте один из дней или посетите оба. Встреча пройдет в новом ИТ-хабе Т-Технологий в Санкт-Петербурге.
Успейте зарегистрироваться до 5 сентября
❤3👍2🔥2🎄1
Forwarded from Java Guru 🤓
Что будет результатом кода?
Anonymous Quiz
17%
Ошибка компиляции
7%
Exception caught
34%
Finally block executed
30%
Exception caught и затем Finally block executed
12%
программа завершится с ошибкой
👍3🔥3❤1
🌐 JTS Topology Suite — мощная Java-библиотека для работы с геометрией. Проект предоставляет инструменты для создания и манипуляции векторной геометрией, включая пространственные операции. Входит в рабочую группу LocationTech Eclipse Foundation и служит основой для многих GIS-решений.
В комплекте идёт TestBuilder с GUI для визуализации геометрии и тестирования функций. Библиотека особенно полезна разработчикам GIS-приложений систем пространственного анализа. На базе JTS построены популярные порты для C++, .NET и JavaScript.
🖥 GitHub
✅ Java библиотека #java
В комплекте идёт TestBuilder с GUI для визуализации геометрии и тестирования функций. Библиотека особенно полезна разработчикам GIS-приложений систем пространственного анализа. На базе JTS построены популярные порты для C++, .NET и JavaScript.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
Нужно быстро подключить 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.)
для мониторинга кеша и статистики.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1