Есть бизнес-логика, которая требует многозадачности, но нужно сделать это грамотно и без лишних усилий? ИИ поможет сэкономить время на сложных аспектах работы с потоками и синхронизацией.
📝 Промпт:
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.
8%
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
🎯 Как настроить Spring Security с кастомной формой логина
Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.
1️⃣ Добавьте зависимость
2️⃣ Создайте SecurityConfig
3️⃣ Создайте кастомную HTML-форму
src/main/resources/templates/login.html (если используете Thymeleaf):
4️⃣ Реализуете контроллер
🐸 Библиотека джависта #буст
Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/css/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true)
.permitAll()
)
.logout(logout -> logout
.logoutSuccessUrl("/login?logout")
);
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
var user = User.withUsername("admin")
.password("{noop}admin123") // Для простоты, без шифрования
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}
src/main/resources/templates/login.html (если используете Thymeleaf):
<!DOCTYPE html>
<html>
<head><title>Login</title></head>
<body>
<h2>Login</h2>
<form method="post" action="/login">
<label>Username: <input type="text" name="username" /></label><br/>
<label>Password: <input type="password" name="password" /></label><br/>
<button type="submit">Login</button>
</form>
</body>
</html>
@RestController
public class DashboardController {
@GetMapping("/dashboard")
public String dashboard() {
return "Welcome to the dashboard!";
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🥵 Устали от статей, где эйчары рассказывают, как на самом деле выглядит рынок труда в ИТ?
Мы тоже! Поэтому решили узнать правду и представить ее всем айтишникам — но нам нужен ваш голос. Опрос займет 3 минуты, а пользы — вагон для всего сообщества.
Результаты этого исследования помогут понять, как специалистам искать работу в 2025-м (а компаниям — специалистов).
👉 Если вы готовы сделать свой вклад в исследование — велком: https://clc.to/VGgyNA
Мы тоже! Поэтому решили узнать правду и представить ее всем айтишникам — но нам нужен ваш голос. Опрос займет 3 минуты, а пользы — вагон для всего сообщества.
Результаты этого исследования помогут понять, как специалистам искать работу в 2025-м (а компаниям — специалистов).
👉 Если вы готовы сделать свой вклад в исследование — велком: https://clc.to/VGgyNA
⚙️ Интеграция брокеров сообщений в Spring Boot с AI
Поработать с Kafka или RabbitMQ, но нет времени вникать в тонкости конфигурации и шаблонного кода? AI справится с этим за секунды — с учётом лучших практик и особенностей выбранного брокера.
📝 Промпт:
💡 Дополнительные возможности:
— Добавьте
— Настройте
🐸 Библиотека джависта #буст
Поработать с Kafka или RabbitMQ, но нет времени вникать в тонкости конфигурации и шаблонного кода? AI справится с этим за секунды — с учётом лучших практик и особенностей выбранного брокера.
📝 Промпт:
Generate a Spring Boot service that integrates with [Kafka/RabbitMQ] to handle asynchronous message processing for [описание бизнес-задачи].
Include configuration, producer, and consumer code.
Ensure reliability with retry mechanisms, message acknowledgment, and error handling.
Use Spring Cloud Stream or native client APIs. Explain architectural choices and trade-offs.
— Добавьте
Dead Letter Queue (DLQ)
для обработки неуспешных сообщений— Настройте
observability (Micrometer + Prometheus/Grafana)
для мониторинга очередейPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Работаете в большом Java-проекте и боитесь, что при переименовании метода или переменной что-то сломаете? IntelliJ IDEA умеет безопасно и быстро переименовывать элементы кода с помощью Shift + F6.
🔹 Зачем это нужно
— Вместо ручного поиска и замены по всему проекту IDEA обновит все ссылки на метод, переменную или класс автоматически.
— Переименование учитывает контекст — не затронет одноимённые элементы в других частях кода.
— Работает со всеми элементами: методами, классами, переменными, параметрами и даже с ресурсами.
🔹 Как использовать
— Наведите курсор на имя метода, класса или переменной, которую хотите переименовать.
— Нажмите Shift + F6.
— Введите новое имя. IDEA покажет, где будет произведено переименование.
— Подтвердите и все ссылки обновятся мгновенно.
Очень удобно, когда нужно быстро рефакторить код, не опасаясь сломать логику, особенно в крупных проектах с множеством взаимосвязей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 Ключевые возможности HTTP/2
⠀
HTTP/2 — современный протокол передачи данных, который значительно улучшает работу веб-приложений по сравнению с HTTP/1.1.
В карточках собраны важнейшие функции HTTP/2, которые помогают:
⚡️ Повысить скорость загрузки страниц и отклика серверов
⚡️ Оптимизировать параллельную передачу данных
⚡️ Снизить сетевые задержки и нагрузку
⠀
🔗 Подробнее — в полной статье
🐸 Библиотека джависта #буст
⠀
HTTP/2 — современный протокол передачи данных, который значительно улучшает работу веб-приложений по сравнению с HTTP/1.1.
В карточках собраны важнейшие функции HTTP/2, которые помогают:
⚡️ Повысить скорость загрузки страниц и отклика серверов
⚡️ Оптимизировать параллельную передачу данных
⚡️ Снизить сетевые задержки и нагрузку
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM