🎧 Что послушать — #подкаст Javaswag #81
🔹 Дата выпуска: 6 сентября 2025
🔹 Ведущий: Дмитрий Волыхин
🔹 Гость: Михаил Поливаха
🔹 Продолжительность: 1 час 56 минут
В выпуске обсуждают реактивное программирование и Open Source. Михаил рассказывает о своём опыте работы со стартапами, вкладе в открытые проекты, R2DBC, реактивных системах и спецификации реактивных потоков, а также делится взглядами на современные требования бизнеса и роль опыта в карьере разработчика.
🔹 Ключевые темы выпуска
00:00 — Начало
15:42 — Стартапы
19:04 — Культура стартапов или университетская жизнь
23:49 — ВУЗ или работа
28:30 — История про тимлида
30:42 — Город N
34:15 — Open Source
51:03 — Реактивное программирование
56:37 — R2DBC
01:00:46 — Open Source проекты
01:09:08 — Реактивная парадигма
01:11:02 — Реактивные системы
01:15:41 — Спецификация реактивных потоков
01:18:49 — Реактивное программирование и реляционные БД
01:23:09 — Непопулярное мнение
01:30:55 — Проблемы с производительностью
01:36:29 — Требования бизнеса
01:41:33 — Опыт уже не решает
🔗 Слушать выпуск
🐸 Библиотека джависта
#DevLife
🔹 Дата выпуска: 6 сентября 2025
🔹 Ведущий: Дмитрий Волыхин
🔹 Гость: Михаил Поливаха
🔹 Продолжительность: 1 час 56 минут
В выпуске обсуждают реактивное программирование и Open Source. Михаил рассказывает о своём опыте работы со стартапами, вкладе в открытые проекты, R2DBC, реактивных системах и спецификации реактивных потоков, а также делится взглядами на современные требования бизнеса и роль опыта в карьере разработчика.
🔹 Ключевые темы выпуска
00:00 — Начало
15:42 — Стартапы
19:04 — Культура стартапов или университетская жизнь
23:49 — ВУЗ или работа
28:30 — История про тимлида
30:42 — Город N
34:15 — Open Source
51:03 — Реактивное программирование
56:37 — R2DBC
01:00:46 — Open Source проекты
01:09:08 — Реактивная парадигма
01:11:02 — Реактивные системы
01:15:41 — Спецификация реактивных потоков
01:18:49 — Реактивное программирование и реляционные БД
01:23:09 — Непопулярное мнение
01:30:55 — Проблемы с производительностью
01:36:29 — Требования бизнеса
01:41:33 — Опыт уже не решает
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17💯2🔥1🥰1
🎭 Temporal.io + Spring Boot
Забудьте про самописные state machines и retry hell в базе. Temporal — это orchestration engine для долгоживущих бизнес-процессов с гарантиями выполнения, версионированием и time travel debugging.
📝 Промпт:
💡 Расширения:
— добавьте
— добавьте
— добавьте
🎯 Результат:
Получите отказоустойчивый слой оркестрации, который переживёт падения сервисов, последовательные обновления и сетевые сбои. Temporal гарантирует итоговое завершение без потери состояния.
🐸 Библиотека джависта
#Enterprise
Забудьте про самописные state machines и retry hell в базе. Temporal — это orchestration engine для долгоживущих бизнес-процессов с гарантиями выполнения, версионированием и time travel debugging.
📝 Промпт:
Generate a production-ready Spring Boot 3 + Temporal.io integration for complex business workflows:
— Configure Temporal client with connection pooling, namespace isolation, and TLS security.
— Implement long-running workflow: multi-step order fulfillment with compensation logic (saga pattern).
— Add workflow versioning strategy for zero-downtime deployments (patching vs. new versions).
— Configure activity retries with exponential backoff, custom retry policies per activity type.
— Implement human-in-the-loop workflow: pause execution, wait for external signals, handle timeouts.
— Add child workflows for parallel execution with aggregation of results.
— Configure workflow-to-workflow communication: signals, queries, updates.
— Implement idempotent activities with proper error handling and side-effect isolation.
— Add distributed cron workflows with timezone support and failure handling.
— Configure worker tuning: task queue pollers, concurrent activity execution, rate limiting.
— Integrate with Spring's transaction management for activities that modify database state.
— Add custom workflow interceptors for cross-cutting concerns: logging, metrics, tracing.
— Implement workflow testing with TestWorkflowEnvironment (time-skipping, determinism validation).
— Configure Temporal Web UI integration and custom search attributes for workflow queries.
— Add chaos testing: simulate worker crashes, network partitions, activity timeouts.
— Provide example: payment processing with 3D Secure, fraud check, settlement, and refund compensation.
— добавьте
continue-as-new pattern для обработки бесконечных event streams без memory leaks;— добавьте
OpenTelemetry integration для распределённого трейсинга через границы workflows и activities;— добавьте
custom Grafana dashboards для визуализации задержек workflow, процента успешных выполнений и обнаружения узких мест.🎯 Результат:
Получите отказоустойчивый слой оркестрации, который переживёт падения сервисов, последовательные обновления и сетевые сбои. Temporal гарантирует итоговое завершение без потери состояния.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3
Топ-3 статьи о Java и смежных технологиях за неделю по версии нашего канала.
Подробный разбор Apache Kafka — от базовых концепций до внутреннего устройства. Топики, партиции, репликация, consumer groups и принципы хранения сообщений.
Думаю, отличная статья для тех, кто хочет понять, почему Kafka стала стандартом де-факто в микросервисной архитектуре.
Production-кейс о deadlock при работе с CompletableFuture и ThreadPoolTaskExecutor.
Проблема: родительская задача блокирует единственный поток через join(), ожидая дочерние задачи, которые не могут стартовать.
Глубокое погружение в три типа совместимости: source-level, binary и behavioral. Разбор на примерах: почему добавление перегруженного метода сохраняет binary compatibility, но может нарушить поведение.
Обязательно к изучению перед рефакторингом публичных API.
#News
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1👾1
Наш подписчик спрашивает:
У меня на проекте сейчас миграция legacy на Spring Boot 3.2 с Java 21. Обсуждаем с командой включить виртуальные треды. В интернете встречаю противоречивые мнения. Одни показывают бенчмарки с 5-кратным улучшением производительности, другие пишут, что в реальных проектах не заметили разницы или даже словили деградацию перформанса.
Система у нас типичная: REST API → БД → внешние сервисы. Как думаете, стоит ли игра свеч?
🔹 Что думаете?
— Кто реально использует виртуальные треды в проде? Какие результаты?
— В каких сценариях они действительно дают профит, а где бесполезны?
— Есть ли подводные камни, о которых не пишут в гайдах?
P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2😁1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите метод для production-кода 👇
📦 Задание
Реализуйте метод, который выполняет операцию с повторными попытками:
public <T> T retry(Supplier<T> operation,
int maxAttempts,
long initialDelayMs) {
// Ваш код здесь
// При неудаче - повторить с задержкой
// Задержка удваивается: 100ms -> 200ms -> 400ms
// После maxAttempts выбросить исключение
}
Требования
— Первая попытка без задержки
— Каждая следующая: задержка *= 2
— После maxAttempts пробросить последнее исключение
— Если успех - вернуть результат
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤11👍3🤔1
Очередная неделя позади, надеюсь ваши пайплайны в порядке и на выходных есть время на отдых.
Делитесь фотографиями, как проходят выходные: учёба/пет-проекты/поездки/встречи.
Я сегодня поделюсь видом на Которскую бухту сверху 😍
Отправляйте фото в комментарии👇🏻
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😍5👍4🔥4❤1
Когда проектируешь систему с email-уведомлениями, важно понимать не только Spring Boot Starter Mail, но и что происходит уровнем ниже.
SMTP — это то, на чём всё держится. И если знать его команды и коды ответов, можно быстрее находить проблемы: почему письмо ушло в спам, где потерялось, какой сервер отклонил.
Про сам протокол можно почитать подробнее тут.
А так это выглядит на пратике👇🏻
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[email protected]"));
message.setSubject("Тема письма");
message.setText("Текст сообщения");
Transport.send(message); // Здесь и запускается SMTP-танец
@Service
public class EmailService {
@Autowired
private JavaMailSender mailSender;
public void sendEmail(String to, String subject, String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
}
}
Зависимость:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
ИЛИ
implementation 'org.springframework.boot:spring-boot-starter-mail'
application.yml:
spring:
mail:
host: smtp.gmail.com
port: 587
username: [email protected]
password: your-app-password
properties:
mail:
smtp:
auth: true
starttls:
enable: true
🔹 starttls.enable — шифрование соединения (команда STARTTLS в SMTP)
🔹 mail.smtp.auth — аутентификация на сервере
🔹 Порты: 25 (обычный), 587 (TLS), 465 (SSL)
Когда понимаешь, что происходит на уровне протокола, легче дебажить: смотришь логи Transport, видишь SMTP-коды ответов (250 OK, 550 rejected и т.д.) и сразу понятно, где проблема.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥1
Ctrl + Shift + F7 → Подсветка всех использований в файле
🔹 Когда это спасает
— Рефакторите метод и хотите быстро увидеть все места вызова? Один клик — и все использования подсвечены жёлтым.
— Не нужно открывать Find Usages и искать глазами.
— Ставите курсор на переменную → хоткей → мгновенно видите весь её жизненный цикл в файле.
— F3 и Shift + F3 для быстрого прыжка между подсвеченными местами.
— Esc убирает подсветку.
🔹 Почему это удобнее Alt + F7
— Не открывается отдельная панель.
— Работает молниеносно даже на огромных проектах.
— Идеально для локального анализа: видите использования только в текущем файле, без шума из других классов.
🔹 Бонус
— Работает для переменных, методов, классов, полей.
— Комбинируйте с Ctrl + W (расширить выделение), чтобы быстро выделить нужный участок кода.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍6❤2
🧠 Готовишься к собесам, а ноутбук еле тянет IDE?
Самое время прокачать скиллы и апгрейднуть железо!
Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!
📚 Среди курсов:
▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.
▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.
▫️ Python, математика для DS, основы IT и другие направления.
👉 Принять участие
Самое время прокачать скиллы и апгрейднуть железо!
Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!
📚 Среди курсов:
▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.
▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.
▫️ Python, математика для DS, основы IT и другие направления.
👉 Принять участие
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31💯2🔥1
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет при обращении к api/products без параметров?
Anonymous Quiz
49%
page будет равен 0
7%
page будет равен null
29%
код не скомпилируется
9%
вернётся ошибка 415
6%
Посмотреть ответ
😁7👍4❤2🔥2
ConcurrentSkipListMap — это потокобезопасная реализация NavigableMap из пакета java.util.concurrent.
В отличие от ConcurrentHashMap, эта структура поддерживает упорядоченность элементов и основана на вероятностной структуре данных Skip List (список с пропусками).
📦 Базовая структура
Внутри ConcurrentSkipListMap использует многоуровневый связанный список Skip List (см. фото).
Главная особенность:
— Элементы отсортированы по ключу (естественный порядок или Comparator).
— Несколько уровней индексации для быстрого поиска.
— Lock-free операции чтения через CAS (Compare-And-Swap).
— Минимальные блокировки только при изменении структуры.
🔍 Как устроено хранение
Базовые компоненты:
▪️ Node<K,V> — узел нижнего уровня.
▪️ Index<K,V> — узел индексного уровня.
▪️ HeadIndex<K,V> — голова уровня, хранит высоту.
Принцип работы
— Данные хранятся только на нижнем уровне (в Node).
— Верхние уровни содержат Index — указатели для быстрого прыжка.
— При вставке элемента случайно определяется высота (вероятность ~50% для каждого уровня).
— Максимальная высота ограничена 64 уровнями.
🔎 get(K key) — поиск
1. Начинается с верхнего уровня HeadIndex.
2. Движется вправо, пока ключ не станет больше искомого.
3. Спускается на уровень ниже.
4. Повторяет до нижнего уровня → O(log n).
5. Без блокировок, читает volatile-ссылки.
➕ put(K key, V value) — вставка
1. Выполняется поиск позиции (как в get).
2. Если ключ существует, обновляется через CAS → O(log n).
3. Если новый:
— Создаётся новый Node.
— Вставляется в нижний уровень с CAS.
— Случайно генерируется высота (геометрическое распределение).
— Создаются Index-узлы для верхних уровней.
— Связываются с соседями через CAS.
4. При необходимости увеличивается высота всей структуры.
Блокировки: минимальны, только при изменении указателей через CAS-retry loops.
➖ remove(Object key) — удаление
1. Находится узел на нижнем уровне.
2. Помечается как удалённый (marker node) через CAS.
3. Физически отсоединяется от списка.
4. Индексы на верхних уровнях удаляются постепенно (ленивое удаление).
5. Если верхние уровни опустели, высота уменьшается.
⚖️ Важные нюансы
1. Вероятностная балансировка
В отличие от AVL/Red-Black деревьев, балансировка достигается случайной высотой узлов.
Нет гарантии идеального баланса, но ожидаемая сложность O(log n).
2. Null и сравнения
Null ключи запрещены (NullPointerException).
Null значения допустимы (в отличие от ConcurrentHashMap).
Ключи должны быть Comparable или нужен Comparator.
3. Memory Consistency
Гарантии happens-before для put/get одного и того же ключа.
Weakly consistent bulk операции (putAll, clear).
— Упорядоченных concurrent-карт: логи по времени, рейтинги, приоритетные кэши.
— Range-запросы: subMap(from, to), headMap(to), tailMap(from).
— Навигация: firstEntry(), lastEntry(), floorEntry(key), ceilingEntry(key).
— Concurrent sorted set: keySet() даёт ConcurrentNavigableSet.
— Когда нужен порядок + потокобезопасность без глобальных блокировок.
Ставьте 🔥, если хотите ещё разбор.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍4❤2
Наткнулся недавно на пост про винду, очень удивился, что после закрытия поддержки десятки народ массово переходит обратно на семёрку 😳
Думал будут прыгать на одиннадцатую или *nix системы.
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁25👍5🔥2🥱1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Iterable — это
Iterator — это
Цикл for-each — это
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3🔥1
🎁 Конкурс от Proglib Academy!
Кстати, если кто-то ещё не в курсе — у нас тут раздают MacBook Pro 14.
Да-да, не шутка, настоящий, железный, с M3 Pro
Но! Чтобы успеть пройти 2 недели обучения к 15 ноября, курс нужно взять до конца октября — и сейчас на всё скидка 40%.
Чтобы поучаствовать, нужно:
1️⃣ Покупаешь любой курс до конца октября;
2️⃣ Проходишь 2 недели обучения к 15 ноября;
3️⃣ Написать куратору в чат #розыгрыш.
До 15 ноября, потом всё — поезд (и макбук) уйдёт.
👉 Участвовать в розыгрыше
Кстати, если кто-то ещё не в курсе — у нас тут раздают MacBook Pro 14.
Да-да, не шутка, настоящий, железный, с M3 Pro
Но! Чтобы успеть пройти 2 недели обучения к 15 ноября, курс нужно взять до конца октября — и сейчас на всё скидка 40%.
Чтобы поучаствовать, нужно:
1️⃣ Покупаешь любой курс до конца октября;
2️⃣ Проходишь 2 недели обучения к 15 ноября;
3️⃣ Написать куратору в чат #розыгрыш.
До 15 ноября, потом всё — поезд (и макбук) уйдёт.
👉 Участвовать в розыгрыше
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16💯3👍1🔥1