Telegram Web Link
Библиотека джависта | Java, Spring, Maven, Hibernate pinned «👾 AI-агенты — настоящее, о котором все говорят На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉 Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи! На обучении вы соберете полноценные…»
Нужна ли джуну реактивщина?

Наш подписчик спрашивает:

Я только начал изучать Java и Spring Boot, и недавно наткнулся на темы про реактивное программирование — Reactor, WebFlux и всё такое. Честно, пока не очень понимаю, зачем это нужно, и кажется слишком сложно. Мне пока бы просто освоить классический Spring MVC и нормально писать REST API. Стоит ли уже сейчас тратить время на реактивность или это вообще для более продвинутых?


🔹 Что думаете?

Насколько важно джуну погружаться в реактивный стек на старте? Не будет ли это лишним грузом и отвлечёт от освоения базовых концепций?

💬 Делитесь в комментариях:

— Когда вы начали работать с реактивным программированием и как оно повлияло на ваш код?
— Какие кейсы в реальной практике действительно требуют Reactor/WebFlux?
— Какие советы дадите джунам, чтобы грамотно подходить к изучению реактивности?

P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥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 для переключения потоков и оптимизации выполнения.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2👏1
Последние 2 дня скидки на курс «AI-агенты для DS-специалистов»

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

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

🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib

💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP

Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».

👉 Успейте до 1 июня: https://clc.to/Cttu7A
Стоит ли учить Java в 2025 году?

С развитием технологий встаёт вопрос: а актуальна ли Java для новых проектов и новичков? А различные ИИ?

Сторонники утверждают, что Java остаётся основой корпоративных систем с огромным сообществом и стабильной экосистемой. Противники говорят — язык устарел, уступает Kotlin, Go и Python по удобству и скорости разработки, а ещё ИИ.

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


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

💬 А вы что думаете, видите потенциал Java или смотрите в сторону новых технологий?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1😁1
🚨 Что на самом деле происходит с увольнениями в ИТ

Каждый день в чатах разработчиков появляются сообщения «ищу работу», «команду сократили», «проект закрыли». Но никто не говорит о причинах и масштабах катастрофы. Мы запустили большое исследование, чтобы раскрыть правду!

🎯 Что мы выясним:
→ Реальные причины увольнений
→ Сколько времени нужно на поиск работы
→ Самые безумные истории смены работы

Понимая реальную ситуацию, мы сможем принимать взвешенные решения о карьере и не попасться на удочку HR-сказок.

👉 Пройдите опрос за 3 минуты и помогите всему сообществу: https://clc.to/yJ5krg
🆕 Java Digest: подборка материалов

🔹 Пиши простой код

Интересный пост, в котором все по делу. Мы все любим свою работу и стремимся создавать что-то увлекательное. Однако бывает легко увлечься ненужными абстракциями и паттернами, особенно когда большую часть кода пишет AI-ассистент. А вот сделать всё максимально простым — задача куда сложнее.

🔹 GRASP: почему настоящая архитектура начинается не с SOLID

Автор размышляет о концепции ООП и моделях предметной области, о том, как выстроить чёткое представление этой модели. Затем он переходит к GRASP как методу перевода этого представления в код. Паттерны рассматриваются взаимосвязанно и логично.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥31👏1
😮 Топ-вакансий для джавистов за неделю

Senior Java Developer(Platform V DataGrid) — от 300 000 ₽ — удалёнка

Senior Java developer — от 250 000 до 320 000 ₽ — удалёнка

Java-разработчик Middle+ — до 287 400 ₽ — удалёнка

Tech Lead Manager — от 7 000 € — офис (Кипр)

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1
🎮 Эффективное управление ветками с помощью git rebase

Проблема: при работе с несколькими ветками в Git история коммитов может становиться запутанной из-за частых слияний, что усложняет анализ изменений.

Решение:
в книге "Mastering Git" автор показывает использование команды git rebase, которая позволяет линейно интегрировать изменения из одной ветки в другую, сохраняя историю чистой и понятной.

Пример кода:
# Переключаемся на ветку feature
git checkout feature

# Выполняем rebase на master
git rebase master

# Если возникают конфликты, разрешаем их и продолжаем rebase
git add <исправленные файлы>
git rebase --continue

# Переключаемся на master и сливаем изменения
git checkout master
git merge feature --ff-only


Преимущества:

— Чистая и линейная история изменений.
— Упрощение процесса ревью кода.
— Лёгкость в отслеживании изменений.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105🔥2👾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.) для мониторинга кеша и статистики.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👏3🔥21😁1
🫣 Устали от HR-сказок про «дружный коллектив» и «печеньки в офисе»?

Давайте честно поговорим о том, что действительно происходит на IT-рынке. Не в розовых презентациях, а в реальной жизни разработчиков, тестировщиков, аналитиков и всех, кто живет кодом.

🧐 Мы проводим исследование, чтобы выяснить:

— Как часто мы прыгаем между компаниями (и почему)
— Какие красные флаги заставляют бежать без оглядки
— Где реально находят работу
— Что бесит в HR больше всего
— Сколько кругов собеседований — это уже перебор

Результаты покажут реальную картину рынка. Без приукрашиваний. Может, компании поймут, что нужно менять, а специалисты — куда двигаться дальше.

😈 Опрос займет 5 минут, но результаты будут работать на всех нас → https://clc.to/9aaXVg
🎯 Как настроить JWT аутентификацию в Spring Boot

Для настройки JWT аутентификации в Spring Boot следуйте этим шагам:

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


2️⃣ Создайте класс для генерации JWT
public class JwtTokenUtil {
private static final String SECRET_KEY = "secretKey";

public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}

public static String getUsernameFromToken(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getSubject();
}

public static boolean isTokenExpired(String token) {
return getExpirationDateFromToken(token).before(new Date());
}

private static Date getExpirationDateFromToken(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getExpiration();
}

public static boolean validateToken(String token, String username) {
return (username.equals(getUsernameFromToken(token)) && !isTokenExpired(token));
}
}


3️⃣ Создайте фильтр для JWT токенов
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private static final String HEADER_STRING = "Authorization";
private static final String TOKEN_PREFIX = "Bearer ";

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String header = request.getHeader(HEADER_STRING);

if (header != null && header.startsWith(TOKEN_PREFIX)) {
String token = header.substring(TOKEN_PREFIX.length());

try {
if (JwtTokenUtil.validateToken(token, JwtTokenUtil.getUsernameFromToken(token))) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
JwtTokenUtil.getUsernameFromToken(token), null, new ArrayList<>());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
} catch (ExpiredJwtException e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}

filterChain.doFilter(request, response);
}
}


4️⃣ Настройте Spring Security
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter());
}
}


5️⃣ Создайте контроллер для логина
@RestController
public class AuthController {

@PostMapping("/login")
public String login(@RequestBody AuthRequest authRequest) {
if ("admin".equals(authRequest.getUsername()) && "admin123".equals(authRequest.getPassword())) {
return JwtTokenUtil.generateToken(authRequest.getUsername());
}
return "Invalid credentials";
}
}


🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍8🔥4🤔4👏1
Spring Boot vs Jakarta EE?

Сравнение двух крупных фреймворков до сих пор вызывает жаркие споры.

Любители Spring Boot хвалят скорость старта, гибкость и богатую экосистему. Фанаты Jakarta EE ценят стандартизацию, долгосрочную поддержку и интеграцию с корпоративными решениями.

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

— Spring Boot отлично подходит для быстрых проектов и микросервисов.
— Jakarta EE удобен для крупных систем с акцентом на стандарты и масштабируемость.

💬 Что в вашем опыте показало себя лучше?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥1👏1🥱1
👑 Магия IntelliJ IDEA

Когда нужно аккуратно скопировать блок кода, метод, выражение или просто цепочку вызовов — забудьте про мышь. У IntelliJ есть инструмент поумнее.

Хоткей: Ctrl + W (или Cmd + W на macOS)

🔹 Что делает

По нажатии IDEA «расширяет» выделение:
— сначала слово,
— потом выражение,
— затем строку целиком,
— потом блок кода,
— и так до всего метода или класса.

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

— Быстро выделить логически связанный фрагмент без лишней возни.
— Удобно вырезать или перемещать части кода.
— Работает даже внутри строк, SQL-запросов, JSON и XML.

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

— Поставьте курсор в нужное место.
— Нажимайте Ctrl + W по очереди — и наблюдайте, как IDEA понимает структуру кода.
— Ctrl + Shift + W — отменяет шаг назад.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍83👏2🥱2
This media is not supported in your browser
VIEW IN TELEGRAM
Сохраняйте шпаргалку по разрешениям файлов в Linux

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏2
2025/07/09 11:10:17
Back to Top
HTML Embed Code: