Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Как избавиться от Flaky-тестов с помощью JMina
Рассматривается использование библиотеки JMina для стабилизации нестабильных тестов. Автор делится практиками выявления и устранения причин нестабильности, улучшая надежность тестового покрытия.
🔹 Как ZGC аллоцирует память в хипе
Анализируется поведение сборщика мусора ZGC при выделении памяти. Обсуждаются особенности работы ZGC, его преимущества и потенциальные подводные камни при использовании в различных сценариях.
🔹 Паттерны и методологии разработки
Подборка материалов, посвященных современным паттернам проектирования и методологиям разработки. Рассматриваются лучшие практики, помогающие создавать устойчивые и масштабируемые приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Java | тесты, код, задания
Какой признак характерен для архитектуры CQRS?
Anonymous Quiz
75%
Разделение команд (изменений) и запросов (чтения)
10%
Использование одного сервиса для чтения и записи
4%
Обязательное хранение в SQL
6%
Отказ от асинхронных коммуникаций
6%
Хранение бизнес-логики на клиенте
Разработчик бэкенда (BDUI-платформа) — 220 000 — 480 000 ₽ — гибрид (Москва)
Java-разработчик — от 100 000 до 200 000 ₽ — удалёнка
Java Developer — от 300 000 ₽ — удалёнка
Senior Java Developer — от 4 500 до 6 000 € — гибрид (Москва)
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема: При большом количестве одновременных запросов блокирующая модель ввода-вывода приводит к исчерпанию потоков и задержкам в обработке, что негативно сказывается на отклике приложения и пользовательском опыте.
Решение: в книге Mastering Spring Boot 3.0 автор предлагает использовать Spring WebFlux — реактивный стек Spring, основанный на неблокирующей модели ввода-вывода. Это позволяет обрабатывать тысячи одновременных запросов с минимальными затратами ресурсов, обеспечивая высокую отзывчивость и масштабируемость приложения.
Пример реализации реактивного REST-контроллера с использованием Spring WebFlux:
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
public Flux<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/{id}")
public Mono<ResponseEntity<User>> getUserById(@PathVariable String id) {
return userService.getUserById(id)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}
@PostMapping
public Mono<User> createUser(@RequestBody User user) {
return userService.createUser(user);
}
}
В этом примере используются типы Flux и Mono из Project Reactor для представления потоков данных и одиночных значений соответственно. Это позволяет обрабатывать запросы и ответы асинхронно и неблокирующим образом.
Преимущества:
— Неблокирующая модель ввода-вывода позволяет эффективно использовать ресурсы при высоких нагрузках.
— Асинхронная обработка запросов обеспечивает быстрый отклик даже при большом количестве одновременных пользователей.
— Интеграция с другими реактивными библиотеками и потоками данных упрощает построение сложных бизнес-процессов.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть бизнес-логика, которая требует многозадачности, но нужно сделать это грамотно и без лишних усилий? ИИ поможет сэкономить время на сложных аспектах работы с потоками и синхронизацией.
📝 Промпт:
Generate a Spring Boot service that processes [описание бизнес-логики] with multithreading support. Use Java concurrency features like ExecutorService, CompletableFuture, or @Async. Ensure thread safety, synchronization, and efficient thread pool management. Explain design decisions and trade-offs.
— Используйте
Java 17+ features
, чтобы сразу писать асинхронный и многозадачный код на современном уровне— Добавьте
Add thread pool management
, чтобы контролировать нагрузку и избежать перегрузок— Добавьте
Add exception handling for multithreading
, чтобы предотвратить ошибки в параллельных операцияхPlease open Telegram to view this post
VIEW IN TELEGRAM
🛠 20 нюансов PostgreSQL
PostgreSQL давно перестал быть просто популярной СУБД — сегодня это мощный, гибкий и инновационный инструмент, способный решать самые сложные задачи в масштабируемых приложениях.
Если вы серьезно занимаетесь бэкендом и хотите держать руку на пульсе самых важных особенностей и тонкостей PostgreSQL, то игнорировать эти нюансы нельзя:
— как правильно оптимизировать запросы и работу с индексами,
— тонкости работы с транзакциями и параллелизмом,
— новые возможности JSON и работы с данными,
— расширенные методы мониторинга и отладки,
— и многое другое, что реально сэкономит время и ресурсы вашего проекта.
🔗 Подробнее в статье
🐸 Библиотека джависта #буст
PostgreSQL давно перестал быть просто популярной СУБД — сегодня это мощный, гибкий и инновационный инструмент, способный решать самые сложные задачи в масштабируемых приложениях.
Если вы серьезно занимаетесь бэкендом и хотите держать руку на пульсе самых важных особенностей и тонкостей PostgreSQL, то игнорировать эти нюансы нельзя:
— как правильно оптимизировать запросы и работу с индексами,
— тонкости работы с транзакциями и параллелизмом,
— новые возможности JSON и работы с данными,
— расширенные методы мониторинга и отладки,
— и многое другое, что реально сэкономит время и ресурсы вашего проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
Коллекции — база для любой бизнес-логики, но неправильный выбор структуры данных или операций приводит к тормозам и ошибкам.
🔹 Выбор структуры данных
— ArrayList быстрый доступ по индексу, но медленная вставка/удаление в середине.
— LinkedList эффективен для частых вставок и удалений, но медленный случайный доступ.
— HashSet быстрая проверка наличия элемента, но не гарантирует порядок.
— LinkedHashSet сохраняет порядок вставки, но чуть медленнее.
— TreeSet упорядоченный набор, но операции дороже из-за балансировки дерева.
🔹 Оптимизация операций
— Избегайте частых автокорректировок размера у ArrayList. Инициализируйте вместимость сразу, если размер известен.
— При массовой вставке используйте addAll() вместо последовательного add().
— Для поиска и фильтрации предпочитайте потоки (Stream API).
🔹 Коллекции и многопоточность
— Для многопоточных сценариев используйте ConcurrentHashMap или CopyOnWriteArrayList.
— Помните, что Collections.synchronizedXXX() — это обертки с блокировкой, часто неэффективные для интенсивных операций.
🔹 Память и производительность
— Помните о влиянии неизменяемых коллекций: они безопасны, но могут создавать накладные расходы по памяти.
— Профилируйте приложения, чтобы определить реальные узкие места в работе с коллекциями.
🔹 Дополнительно
— Используйте Collectors.toMap() и другие мощные инструменты Stream API для удобного преобразования и агрегации данных.
— В новых версиях Java появляются оптимизации и новые структуры (например, Immutable Collections в Java 9+).
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Смешные новости про IT теперь в одном канале
Мы запустили @hahacker_news — наш новый юмористический IT-канал.
Туда будем постить лучшие шутки до 19го мая, которые вы присылали на конкурс.
👉 @hahacker_news — голосование уже идёт, переходите, читайте, угарайте и оставляйте реакции
Мы запустили @hahacker_news — наш новый юмористический IT-канал.
Туда будем постить лучшие шутки до 19го мая, которые вы присылали на конкурс.
👉 @hahacker_news — голосование уже идёт, переходите, читайте, угарайте и оставляйте реакции
Please open Telegram to view this post
VIEW IN TELEGRAM