🔹 Spring-потрошитель
Автор делится опытом анализа и оптимизации Spring-приложений, выявляя скрытые зависимости и избыточные компоненты.
Рассматриваются методы обнаружения неиспользуемых бинов, циклических зависимостей и других архитектурных дефектов, влияющих на производительность и поддерживаемость кода.
🔹 Тестирование CAP-теоремы на примере MongoDB
Автор проводит серию тестов с различными параметрами writeConcern и readConcern, анализируя их влияние на согласованность и доступность данных.
Рассматриваются реальные сценарии, включая сбои и аварийные ситуации, с целью выявления оптимальных настроек для обеспечения требуемых свойств системы.
🔹 Clean your Memory: From Finalize to Cleaner
Рассматриваются проблемы, связанные с finalize(), такие как непредсказуемость вызова и возможные утечки памяти.
Введение в Cleaner предоставляет более гибкий и эффективный механизм для освобождения ресурсов, улучшая производительность и стабильность приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
Forwarded from Библиотека задач по Java | тесты, код, задания
Как улучшить код? Отвечайте на опрос и добавляйте варианты в комментарии.
👍5❤1🔥1
Forwarded from Библиотека задач по Java | тесты, код, задания
Как можно улучшить архитектуру этого сервиса?
Anonymous Quiz
7%
Перенести метод calculateTotal в контроллер
10%
Объединить OrderRepository и EmailService в один фасад
47%
Вынести отправку email в доменное событие (OrderCreatedEvent)
21%
Использовать @Transactional в методе calculateTotal
15%
Добавить логирование
🤔9👍2🔥2👏1
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Google Docs
Конкурс на самую смешную IT-новость
Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
😁3👍1👏1
Java Developer — 250 000 — 450 000 ₽ — гибрид (Москва, Санкт-Петербург, Екатеринбург, Нижний Новгород, Казань, Новосибирск, Симферополь, Минск)
Java-разработчик (стажер/intern) — до 60 000 ₽ — гибрид (Екатеринбург)
Разработчик на Java (Кинопоиск) — 300 000 — 370 000 ₽ — гибрид (Москва, Санкт-Петербург)
Java Developer — до 500 000 ₽ — гибрид (Москва)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏2🔥1
⚙️ Инструмент недели: Apache Sling
Apache Sling — это фреймворк для создания контент-ориентированных приложений на Java. Он использует RESTful архитектуру, в которой URL-адреса напрямую соответствуют структуре контента в репозитории, что позволяет создавать гибкие и масштабируемые веб-приложения.
Фичи: интеграция с репозиториями JCR, поддержка различных языков шаблонов и скриптов, динамическая загрузка компонентов с помощью OSGi, модульность и масштабируемость. Apache Sling идеально подходит для разработки приложений, ориентированных на управление контентом.
🔗 Apache Sling на GitHub
🐸 Библиотека джависта #буст
Apache Sling — это фреймворк для создания контент-ориентированных приложений на Java. Он использует RESTful архитектуру, в которой URL-адреса напрямую соответствуют структуре контента в репозитории, что позволяет создавать гибкие и масштабируемые веб-приложения.
Фичи: интеграция с репозиториями JCR, поддержка различных языков шаблонов и скриптов, динамическая загрузка компонентов с помощью OSGi, модульность и масштабируемость. Apache Sling идеально подходит для разработки приложений, ориентированных на управление контентом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👏1
🧘♂️ Скучная работа в IT: путь к счастью или упущенные возможности?
В мире IT царит культ престижных компаний — FAANG, стартапов, хайпа. Но что, если настоящая гармония скрыта в «скучной» работе с мягкими дедлайнами, стабильным графиком и отсутствием стресса. Может ли спокойная работа в нетехнических компаниях быть ключом к удовлетворению и балансу между работой и личной жизнью?
🔹 Основные тезисы:
— Сотрудники «скучных» компаний отмечают спокойный темп работы, что позволяет уделять больше времени хобби и семье.
— Отсутствие переработок и гибкий график способствуют лучшему самочувствию и удовлетворенности жизнью.
— Хотя зарплаты могут быть ниже, стабильность и льготы компенсируют это.
💬 Стоит ли жертвовать карьерными амбициями ради спокойствия?
🔗 Подробнее в статье
🐸 Библиотека джависта #буст
В мире IT царит культ престижных компаний — FAANG, стартапов, хайпа. Но что, если настоящая гармония скрыта в «скучной» работе с мягкими дедлайнами, стабильным графиком и отсутствием стресса. Может ли спокойная работа в нетехнических компаниях быть ключом к удовлетворению и балансу между работой и личной жизнью?
🔹 Основные тезисы:
— Сотрудники «скучных» компаний отмечают спокойный темп работы, что позволяет уделять больше времени хобби и семье.
— Отсутствие переработок и гибкий график способствуют лучшему самочувствию и удовлетворенности жизнью.
— Хотя зарплаты могут быть ниже, стабильность и льготы компенсируют это.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥2
Нужно быстро набросать сервис для бизнес-функции? AI поможет сэкономить часы на шаблонах, валидации и boilerplate.
📝 Промпт:
Generate a Spring Boot REST endpoint that handles [описание бизнес-логики]. Include request/response DTOs, validation, exception handling, and service-layer interaction. Use best practices and explain design decisions.
— Добавьте
Use Java 17+ features if possible
, чтобы сразу писать современно— Добавьте
Add unit tests for controller and service
, чтобы не откладывать на потом— Добавьте
Make it modular for future feature extension
, если планируется масштабированиеPlease open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥5👏2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁45👍4💯3
🎯 Как добавить кастомные метрики в Spring Boot Actuator
В проде важно не просто «чтобы работало», а знать, как работает. Spring Boot Actuator позволяет получать системную информацию, но по-настоящему полезным он становится с кастомными метриками.
1️⃣ Добавьте зависимости
Также добавьте экспорт метрик в application.yml:
2️⃣ Создайте кастомную метрику
Например, метрика количества обращений к сервису:
Теперь можно вызывать countRequest() в любом месте.
3️⃣ Интегрируйте в проект
Каждый вызов /hello увеличивает счётчик.
4️⃣ Проверьте метрику
Откройте в браузере или через curl:
Найдите строку:
📌 Реальный профит: такие метрики позволяют строить Grafana-дэшборды, ставить алерты в Prometheus и быстро ловить аномалии.
💬 Используете кастомные метрики или довольствуетесь встроенными?
🐸 Библиотека джависта #буст
В проде важно не просто «чтобы работало», а знать, как работает. Spring Boot Actuator позволяет получать системную информацию, но по-настоящему полезным он становится с кастомными метриками.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Также добавьте экспорт метрик в application.yml:
management:
endpoints:
web:
exposure:
include: health, info, metrics, prometheus
metrics:
export:
prometheus:
enabled: true
Например, метрика количества обращений к сервису:
@Component
public class CustomMetrics {
private final Counter requestCounter;
public CustomMetrics(MeterRegistry registry) {
this.requestCounter = Counter.builder("custom_requests_total")
.description("Total custom requests")
.register(registry);
}
public void countRequest() {
requestCounter.increment();
}
}
Теперь можно вызывать countRequest() в любом месте.
@RestController
@RequiredArgsConstructor
public class MetricsTestController {
private final CustomMetrics customMetrics;
@GetMapping("/hello")
public String hello() {
customMetrics.countRequest();
return "Hello!";
}
}
Каждый вызов /hello увеличивает счётчик.
Откройте в браузере или через curl:
http://localhost:8080/actuator/prometheus
Найдите строку:
custom_requests_total{...} 42.0
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥7👏3❤1
С выходом Java 21 в стабильный релиз sealed-типы наконец-то стали полноценным инструментом. Формально они позволяют явно ограничивать наследование, делают модель более предсказуемой и защищённой.
Казалось бы — бери и используй везде, особенно там, где важна неизменность и контроль, как в DDD, CQRS или API-слоях.
Но в реальности мнения расходятся. Одни начинают всё новое писать через sealed, чтобы убрать "лишнюю гибкость", другие придерживаются старого доброго interface + impl, ссылаясь на читаемость, тестируемость и простоту изменений.
Sealed — это реальный шаг вперёд в проработке модели, или ненужный контроль там, где раньше всё было гибко и понятно?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👏2🔥1
Знаете, как в Java обычно обновить одно поле в неизменяемом объекте? Нужно создавать копию с нужным значением. Муторно. Lombok умеет делать это элегантно.
🔹 Что делает @With
Генерирует методы withX(...), которые создают копию объекта с изменённым полем. Подходит для immutable-моделей и паттерна builder. Класс при этом должен быть final (например, через @Value или вручную).
🔹 Пример
@Value
@With
public class User {
String name;
int age;
}
Теперь можно:
User user1 = new User("Alice", 25);
User user2 = user1.withAge(30); // создаётся новый объект с новым age
Объекты остаются неизменяемыми, но при этом легко "обновляемыми".
🔹 Зачем это нужно
— Удобно при работе с immutable-классами.
— Простой способ "копировать с изменением".
— Чистый, декларативный стиль без boilerplate.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥4👏3❤1🤔1
🚀 HTTP/2: эволюция веб-протокола
Если вы работаете с REST API, микросервисами или веб-приложениями на Spring Boot, понимание HTTP/2 — не просто полезно, а необходимо.
В отличие от HTTP/1.1, где каждое TCP-соединение обрабатывает только один запрос одновременно, HTTP/2 позволяет осуществлять параллельную передачу нескольких запросов и ответов по одному соединению.
Это означает:
— Экономия ресурсов сервера и клиента.
— Одновременная передача нескольких потоков данных.
— Уменьшение объема передаваемой информации.
🔗 Подробнее в статье
🐸 Библиотека джависта #буст
Если вы работаете с REST API, микросервисами или веб-приложениями на Spring Boot, понимание HTTP/2 — не просто полезно, а необходимо.
В отличие от HTTP/1.1, где каждое TCP-соединение обрабатывает только один запрос одновременно, HTTP/2 позволяет осуществлять параллельную передачу нескольких запросов и ответов по одному соединению.
Это означает:
— Экономия ресурсов сервера и клиента.
— Одновременная передача нескольких потоков данных.
— Уменьшение объема передаваемой информации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4👏1😢1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20👍2🔥2👾2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3🔥2
🔹 Как избавиться от Flaky-тестов с помощью JMina
Рассматривается использование библиотеки JMina для стабилизации нестабильных тестов. Автор делится практиками выявления и устранения причин нестабильности, улучшая надежность тестового покрытия.
🔹 Как ZGC аллоцирует память в хипе
Анализируется поведение сборщика мусора ZGC при выделении памяти. Обсуждаются особенности работы ZGC, его преимущества и потенциальные подводные камни при использовании в различных сценариях.
🔹 Паттерны и методологии разработки
Подборка материалов, посвященных современным паттернам проектирования и методологиям разработки. Рассматриваются лучшие практики, помогающие создавать устойчивые и масштабируемые приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏1
Forwarded from Библиотека задач по Java | тесты, код, задания
Какой признак характерен для архитектуры CQRS?
Anonymous Quiz
75%
Разделение команд (изменений) и запросов (чтения)
10%
Использование одного сервиса для чтения и записи
4%
Обязательное хранение в SQL
6%
Отказ от асинхронных коммуникаций
5%
Хранение бизнес-логики на клиенте
👍7🔥2👏2
Разработчик бэкенда (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
👍3🔥2👏2
Проблема: При большом количестве одновременных запросов блокирующая модель ввода-вывода приводит к исчерпанию потоков и задержкам в обработке, что негативно сказывается на отклике приложения и пользовательском опыте.
Решение: в книге 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
👍10🔥2👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍4👏1