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%
Разделение команд (изменений) и запросов (чтения)
9%
Использование одного сервиса для чтения и записи
4%
Обязательное хранение в SQL
6%
Отказ от асинхронных коммуникаций
5%
Хранение бизнес-логики на клиенте
Разработчик бэкенда (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
🎧 Что послушать — #подкаст
🔹 Javaswag #75
Дата выпуска: 4 февраля 2025
Ведущий: Дмитрий Волыхин
Гость: Илья Ильиных
Продолжительность: 2 часа 24 минуты
В этом выпуске подкаста Javaswag обсуждаются причины перехода с Java на Go, преимущества Go по сравнению с Java, а также использование редактора Vim для повышения эффективности разработки.
🔹 Ключевые темы выпуска
00:00 — Переход от Java к Go
06:13 — Проблемы с Optional и его использование
11:20 — Использование Optional в Java
18:30 — Важность форматирования кода
23:42 — Проблемы и решения в команде
31:05 — Переход на Vim и его связь с GoLang
36:30 — Проблемы с Gradle и тестами
44:51 — Проекты и архитектура микросервисов
51:03 — Сравнение Go и Java
56:13 — Погружение в Go и его особенности
01:10:36 — Мутационное тестирование и его важность
01:16:09 — Сравнение тестирования в Java и Go
01:24:44 — Принципы написания устойчивых тестов
01:31:32 — Тестирование как черный ящик
01:37:13 — Интерфейсы в Go и Java
01:43:09 — Обработка ошибок в Go и Java
01:48:18 — Теория монады и её применение в Java
01:53:35 — Проблемы написания больших проектов на Go
02:04:50 — Итераторы в Go и Lua
02:13:26 — Эффективные методы работы с кодом
02:19:12 — Непопулярные мнения о потоках в Java и Kotlin
02:24:34 — Проблемы и решения в Java и Kotlin
🔗 Слушать выпуск
🐸 Библиотека джависта #буст
🔹 Javaswag #75
Дата выпуска: 4 февраля 2025
Ведущий: Дмитрий Волыхин
Гость: Илья Ильиных
Продолжительность: 2 часа 24 минуты
В этом выпуске подкаста Javaswag обсуждаются причины перехода с Java на Go, преимущества Go по сравнению с Java, а также использование редактора Vim для повышения эффективности разработки.
🔹 Ключевые темы выпуска
00:00 — Переход от Java к Go
06:13 — Проблемы с Optional и его использование
11:20 — Использование Optional в Java
18:30 — Важность форматирования кода
23:42 — Проблемы и решения в команде
31:05 — Переход на Vim и его связь с GoLang
36:30 — Проблемы с Gradle и тестами
44:51 — Проекты и архитектура микросервисов
51:03 — Сравнение Go и Java
56:13 — Погружение в Go и его особенности
01:10:36 — Мутационное тестирование и его важность
01:16:09 — Сравнение тестирования в Java и Go
01:24:44 — Принципы написания устойчивых тестов
01:31:32 — Тестирование как черный ящик
01:37:13 — Интерфейсы в Go и Java
01:43:09 — Обработка ошибок в Go и Java
01:48:18 — Теория монады и её применение в Java
01:53:35 — Проблемы написания больших проектов на Go
02:04:50 — Итераторы в Go и Lua
02:13:26 — Эффективные методы работы с кодом
02:19:12 — Непопулярные мнения о потоках в Java и Kotlin
02:24:34 — Проблемы и решения в Java и Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 OpenTelemetry и Kubernetes
Автор делится опытом миграции демо-приложения с Docker Compose на Helm в Kubernetes. Он описывает использование Helm subcharts для настройки инфраструктуры (Traefik, Jaeger, PostgreSQL) и приложений, а также демонстрирует изоляцию компонентов с помощью vCluster.
🔹 Тестирование Spring-контроллеров с MockMvcTester
Автор представляет MockMvcTester, новый инструмент в Spring Framework 6.2, который упрощает написание тестов контроллеров с использованием AssertJ-стиля. Он показывает, как интегрировать MockMvcTester в проекты на Spring Boot 3.4.0 и выше, и предоставляет примеры конфигурации для различных сценариев тестирования.
🔹 Создание надежного Docker-образа для Spring Boot-приложения
Автор рассматривает лучшие практики упаковки Spring Boot-приложений в Docker-образы. В статье обсуждаются методы диагностики сбоев, таких как OutOfMemoryError, с использованием heap dump и GC-логов, а также инструменты мониторинга, включая Spring Boot Actuator и Java Flight Recorder.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Java | тесты, код, задания
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет выведено в консоль?
Anonymous Quiz
5%
Handler A processed request.
9%
Handler B processed request.
8%
Handler C processed request.
60%
Ничего
18%
Исключение
Java / Kotlin разработчик (Software Engineer) — до 450 000 ₽ — гибрид (Москва)
Java Backend Developer — от 1 500 до 3 000 ₽/час — удаленно
Java Developer — 180 000 — 300 000 ₽ — гибрид (Санкт-Петербург)
Senior Java Developer — 400 000 — 450 000 ₽ — гибрид (Москва)
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема: при создании индексов в Elasticsearch важно правильно настроить маппинг, чтобы обеспечить корректное хранение и поиск данных. Неправильная настройка маппинга может привести к неправильной индексации данных, ухудшению производительности и проблемам с поисковыми запросами.
Решение: в книге Elasticsearch in Action (Second Edition) автор предлагает пример настройки маппинга для индекса с типами данных и анализаторами, чтобы гарантировать правильную индексацию.
Пример кода для создания маппинга с типами данных и настройкой анализатора:
PUT /products
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "standard"
},
"price": {
"type": "float"
},
"description": {
"type": "text",
"analyzer": "english"
},
"available": {
"type": "boolean"
}
}
}
}
Преимущества:
— Обеспечивает правильную индексацию данных.
— Ускоряет поиск и улучшает точность запросов.
— Позволяет гибко настроить обработку данных и анализ текстов.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM