Forwarded from Библиотека задач по Java | тесты, код, задания
Почему контроллер возвращает просто текст, а не HTML-страницу?
Anonymous Quiz
18%
Нет аннотации @ResponseBody
53%
из-за @RestController, а нужен @Controller
16%
Ошибка в шаблонизаторе
3%
из-за @GetMapping, а нужен @PutMapping
10%
Посмотреть ответ
👍5🔥3👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16👍5🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21👍3🔥3
💻 Hardware для Java-разработки в 2025
За последние несколько лет я видел всё: от героических попыток поднять Spring Boot на 4GB RAM до сборок, где дажехром со 100+ вкладками IDEA + микросервисы + инфра в докере не вешает систему.
🤔 Интересно узнать реальную картину по рынку.
Что компании реально предоставляют разработчикам? С какими конфигурациями вы работаете комфортно, а где начинаете упираться в потолок?
💬 Поделитесь опытом:
— Модель и конфигурация вашего рабочего ноутбука
— Достаточно ли мощности для ваших задач
🐸 Библиотека джависта
#DevLife
За последние несколько лет я видел всё: от героических попыток поднять Spring Boot на 4GB RAM до сборок, где даже
🤔 Интересно узнать реальную картину по рынку.
Что компании реально предоставляют разработчикам? С какими конфигурациями вы работаете комфортно, а где начинаете упираться в потолок?
— Модель и конфигурация вашего рабочего ноутбука
— Достаточно ли мощности для ваших задач
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5❤3😁2
В Java 8 появился CompletableFuture — это реализация паттерна Promise, которая позволяет строить декларативные цепочки асинхронных операций.
По сути, это обёртка над Future, которая может быть завершена вручную (отсюда "Completable") и предоставляет богатый API для композиции.
🔹 Зачем он нужен
Классический Future не позволяет:
— Комбинировать несколько асинхронных операций.
— Обрабатывать результат без блокировки.
— Реагировать на ошибки внутри цепочки.
CompletableFuture решает эти проблемы, предоставляя fluent API для композиции асинхронных вычислений.
🔹 Базовый пример
javaCompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserFromDB(userId))
.thenApply(user -> user.getEmail())
.thenApply(String::toUpperCase)
.exceptionally(ex -> "default@example.com");
future.thenAccept(System.out::println); // не блокирует
Здесь каждый этап выполняется асинхронно. Если где-то произошла ошибка, сработает exceptionally().
🔹 Ключевые методы
▪️ supplyAsync() / runAsync() — запустить задачу асинхронно.
▪️ thenApply() — трансформировать результат.
▪️ thenAccept() — обработать результат (void).
▪️ thenCompose() — развернуть вложенный CompletableFuture.
▪️ thenCombine() — объединить результаты двух независимых future.
▪️ exceptionally() / handle() — обработка ошибок.
▪️ allOf() / anyOf() — дождаться завершения нескольких задач.
🔹 Пулы потоков
По умолчанию CompletableFuture использует ForkJoinPool.commonPool(). Для задач с блокирующими операциями (IO, БД) лучше передать свой Executor. Иначе можно заблокировать общий пул и замедлить всё приложение.
🔹 Подводные камни
— Отсутствие отмены
CompletableFuture.cancel() не останавливает выполнение задачи, а только меняет статус. Реальная отмена требует проверки Thread.interrupted() внутри задачи.
— Проглатывание исключений
Если не добавить exceptionally() или handle(), исключение останется внутри future до вызова get() или join().
— Цепочки могут выполняться синхронно
Методы без суффикса Async (например, thenApply) могут выполниться в том же потоке, где завершился предыдущий этап. Если нужна гарантия асинхронности, используйте thenApplyAsync().
— Для композиции нескольких асинхронных операций (API-вызовы, запросы в БД).
— Когда нужны неблокирующие обработчики результатов.
— В реактивных архитектурах (хотя там лучше Project Reactor или RxJava).
— Для CPU-bound задач с высокой конкуренцией (лучше использовать параллельные стримы или явное управление потоками).
— Когда важна отмена выполняющейся задачи.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍9🔥3❤1
💥 Октябрь — месяц апгрейда!
До конца этого месяца действует скидка 40% на все курсы Proglib Academy(кроме AI-агентов, ML для старта и математики) .
Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».
👨💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.
👨🏫 Преподаватели — инженеры из Яндекса и ВШЭ.
🎓 Сертификат по итогам обучения — в портфолио.
➖ 47 видеоуроков и 150 практических задач;
➖ поддержка преподавателей и чат;
➖ доступ к материалам на 12 месяцев.
Полная программа курса тут 👈
👉 Остальные курсы
До конца этого месяца действует скидка 40% на все курсы Proglib Academy
Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».
👨💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.
👨🏫 Преподаватели — инженеры из Яндекса и ВШЭ.
🎓 Сертификат по итогам обучения — в портфолио.
➖ 47 видеоуроков и 150 практических задач;
➖ поддержка преподавателей и чат;
➖ доступ к материалам на 12 месяцев.
Полная программа курса тут 👈
👉 Остальные курсы
code_review_checklist.pdf
59.7 KB
📋 Чек-лист Code Review
Собрал в один PDF всё, что нужно проверять при код-ревью — от архитектуры до безопасности. 75+ пунктов с цветовой маркировкой по приоритетам.
❓ Зачем?
Чтобы ничего не упустить и держать единый стандарт качества в команде.
❓ Как использовать?
Открываете при каждом PR, идёте по чек-листу. Красные пункты — критично, жёлтые — важно, белые — рекомендации.
Адаптируйте под свой проект и дополняйте на основе опыта команды.
🐸 Библиотека джависта
#Enterprise
Собрал в один PDF всё, что нужно проверять при код-ревью — от архитектуры до безопасности. 75+ пунктов с цветовой маркировкой по приоритетам.
Чтобы ничего не упустить и держать единый стандарт качества в команде.
Открываете при каждом PR, идёте по чек-листу. Красные пункты — критично, жёлтые — важно, белые — рекомендации.
Адаптируйте под свой проект и дополняйте на основе опыта команды.
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥6❤1
🎧 Что послушать — #подкаст 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
❤2👍2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15💯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👍3❤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("from@example.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("to@example.com"));
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: your-email@gmail.com
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
👍7❤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
🔥9👍5❤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
😁19🔥1💯1