Что такое Serial Garbage Collector?
Serial GC — этооднопоточный сборщик мусора, работающий по принципу "Stop-the-World" . Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen).
🟢 Как работает
1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen.
2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации.
3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна.
🟢 Когда использовать
—В одноядерных системах или при ограниченных ресурсах , где многопоточный GC создаст больше нагрузки.
—В маленьких JVM (до 1-2 ГБ памяти) , где G1 или Parallel GC будут избыточны.
—В приложениях без жестких требований к паузам, например , в небольших утилитах или CLI-инструментах.
✅ Java библиотека #java
Serial GC — это
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4🔥3
Все знают
Ctrl + Alt + L
(форматирование кода), но мало кто знает это сочетание:—
Ctrl + Alt + Shift + L
→ Гибкое форматирование— Позволяет выбрать, что именно форматировать: весь файл, выделенный код или даже только измененные строки.
— Можно отключить автоформатирование аннотаций, импортов или пробелов, если не хотите, чтобы IDEA ломала ваш стиль.
— Полезно, если работаете в команде с жесткими code style правилами, можно форматировать только нужные части, не трогая остальной код.
— Выделите код, затем
Ctrl + Alt + Shift + L
, чтобы форматировать только его.— Используйте Settings → Editor → Code Style, чтобы настроить форматирование под себя.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤26🔥3👍2
Чек-лист: эффективная работа с многопоточностью
Держите под рукой этот чек-лист, чтобы избежать проблем с многопоточностью и повысить производительность кода:
🟢 Синхронизация
✓ Избегайте synchronized для долгих операций
✓ Используйте ReentrantLock для гибкой блокировки
✓ Следите за возможностью deadlock
🟢 Исполнители (Executors)
✓ FixedThreadPool подходит, когда количество потоков заранее известно и ограничено
✓ CachedThreadPool динамически создает потоки, но может привести к их неконтролируемому росту
✓ ForkJoinPool для задач, разбиваемых на подзадачи
🟢 Коллекции и очереди
✓ ConcurrentHashMap потокобезопасная альтернатива HashMap, но не подходит для сценариев с частыми изменениями
✓ BlockingQueue для потокобезопасных очередей
✓ CopyOnWriteArrayList хорош при редких изменениях списка, но ⚠️ медленный при частых модификациях (из-за копирования)
🟢 Работа с Future & CompletableFuture
✓ Используйте CompletableFuture для асинхронных операций вместо Future
✓ thenApply() и thenCompose() позволяют строить цепочки вызовов без блокировки
✓ exceptionally() для обработка ошибок без использования try-catch в коде
Автоматизируйте проверку кода с помощью FindBugs, SonarQube и Checkstyle.
❓ Какие задачи на проекте решаете с помощью многопоточки?
✅ Java библиотека #java
Держите под рукой этот чек-лист, чтобы избежать проблем с многопоточностью и повысить производительность кода:
✓ Избегайте synchronized для долгих операций
✓ Используйте ReentrantLock для гибкой блокировки
✓ Следите за возможностью deadlock
✓ FixedThreadPool подходит, когда количество потоков заранее известно и ограничено
✓ CachedThreadPool динамически создает потоки, но может привести к их неконтролируемому росту
✓ ForkJoinPool для задач, разбиваемых на подзадачи
✓ ConcurrentHashMap потокобезопасная альтернатива HashMap, но не подходит для сценариев с частыми изменениями
✓ BlockingQueue для потокобезопасных очередей
✓ CopyOnWriteArrayList хорош при редких изменениях списка, но ⚠️ медленный при частых модификациях (из-за копирования)
✓ Используйте CompletableFuture для асинхронных операций вместо Future
✓ thenApply() и thenCompose() позволяют строить цепочки вызовов без блокировки
✓ exceptionally() для обработка ошибок без использования try-catch в коде
Автоматизируйте проверку кода с помощью FindBugs, SonarQube и Checkstyle.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤7🔥5
Lombok — да или нет?
✔️ За Lombok
— Убирает тонны шаблонного кода (геттеры, сеттеры, toString(), equals(), hashCode()).
— Делает код компактнее и читабельнее.
— Ускоряет разработку, снижает когнитивную нагрузку.
❌ Против Lombok
— Скрывает важную логику, что усложняет отладку и поддержку.
— Добавляет магию и делает код зависимым от нестандартных аннотаций.
— Может вызывать проблемы с сериализацией и совместимостью при обновлениях.
❓ За Lombok или против? Пишите в комменты
✅ Java библиотека #java
— Убирает тонны шаблонного кода (геттеры, сеттеры, toString(), equals(), hashCode()).
— Делает код компактнее и читабельнее.
— Ускоряет разработку, снижает когнитивную нагрузку.
— Скрывает важную логику, что усложняет отладку и поддержку.
— Добавляет магию и делает код зависимым от нестандартных аннотаций.
— Может вызывать проблемы с сериализацией и совместимостью при обновлениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯30👍14🔥3
@Transactional
public void saveData(Entity entity) {
repository.save(entity);
}
Автооткат при исключениях, но не ловит checked-исключения без rollbackFor = Exception.class.
@Async
public CompletableFuture<String> fetchData() {
return CompletableFuture.completedFuture("Hello");
}
Использует TaskExecutor, но не забываем про конфиг @EnableAsync.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
Вместо тонны try-catch обрабатываем ошибки централизованно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥7❤6
Forwarded from Java Guru 🤓
new String("Hello_42") == "Hello_" + 42?
Такие вопросы о сравнении строковых и числовых констант проверяют знания о понятии пулов литералов (literal pool). Не следует путать с пулом констант класса. Виртуальная машина переиспользует один и тот же объект для строкового литерала при загрузке класса, если такой уже выделен в куче. Вот почему "Hello" == "Hello" истинно, не смотря на то что String – ссылочный тип. Такая оптимизация возможна благодаря свойству неизменяемости (immutable) класса String, и называется интернирование строк.
Кроме самих литералов, интернирование применяется ко всем константным выражениям. К таким выражениям в этом примере относятся неявное приведение числа 42 к строке и конкатенация констант. Это делает истинным "Hello_42" == "Hello_" + 42.
Пул литералов не работает, когда явно используется оператор new. Это причина, по которой выражение new String("Hello_42") == "Hello_" + 42 ложно.
Java Guru🤓 #java
Такие вопросы о сравнении строковых и числовых констант проверяют знания о понятии пулов литералов (literal pool). Не следует путать с пулом констант класса. Виртуальная машина переиспользует один и тот же объект для строкового литерала при загрузке класса, если такой уже выделен в куче. Вот почему "Hello" == "Hello" истинно, не смотря на то что String – ссылочный тип. Такая оптимизация возможна благодаря свойству неизменяемости (immutable) класса String, и называется интернирование строк.
Кроме самих литералов, интернирование применяется ко всем константным выражениям. К таким выражениям в этом примере относятся неявное приведение числа 42 к строке и конкатенация констант. Это делает истинным "Hello_42" == "Hello_" + 42.
Пул литералов не работает, когда явно используется оператор new. Это причина, по которой выражение new String("Hello_42") == "Hello_" + 42 ложно.
Java Guru🤓 #java
👍19❤3🔥3
Forwarded from Java News
Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций
Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллельном доступе может быть неожиданно сложным для только знакомящихся с уровнями изоляций БД.
Читать статью
Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллельном доступе может быть неожиданно сложным для только знакомящихся с уровнями изоляций БД.
Читать статью
VK
Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций
Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллель..
👍10🔥6❤4🍾1
Возможности Kotlin для создания DSL на примере JsonBuilder
Приглашаем на открытый урок.
🗓 22 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
Что вас ждёт:
✔️ рассмотрим общую теорию о DSL: назначение, особенности, практика;
✔️ попрактикуемся в создании DSL на примере JsonBuilder;
✔️ рассмотрим возможности Kotlin, полезные для создания DSL.
🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Kotlin5
👉 Регистрация на вебинар: https://vk.cc/cLU2aC
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Приглашаем на открытый урок.
🗓 22 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
Что вас ждёт:
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥2
Tika можно использовать как компонент индексации в поисковых системах, в системах, связанных с переводом и во многих других приложениях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2❤1
14 мая(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwZ6XvC
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🔥2🎅1
Как маппить объекты
Часто приходится конвертировать Entity -> DTO или DTO -> Model. Вот основные способы, как это сделать.
1️⃣ Ручной маппинг
Простой, но не очень масштабируемый.
2️⃣ MapStruct
Генерирует код на этапе компиляции → быстрее, чем рефлексия.
3️⃣ ModelMapper
Просто, но медленнее из-за рефлексии.
4️⃣ Record + Java 17
Используем record вместо классов DTO для упрощения кода.
5️⃣ Stream API для маппинга коллекций
Если нужно преобразовать список объектов.
❓ Какой способ используете в проектах?
✅ Java библиотека #java
Часто приходится конвертировать Entity -> DTO или DTO -> Model. Вот основные способы, как это сделать.
Простой, но не очень масштабируемый.
public class UserMapper {
public static UserDto toDto(User user) {
return new UserDto(user.getId(), user.getName());
}
public static User toEntity(UserDto dto) {
return new User(dto.getId(), dto.getName());
}
}
Генерирует код на этапе компиляции → быстрее, чем рефлексия.
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
UserDto toDto(User user);
User toEntity(UserDto dto);
}
Просто, но медленнее из-за рефлексии.
ModelMapper modelMapper = new ModelMapper();
UserDto dto = modelMapper.map(user, UserDto.class);
Используем record вместо классов DTO для упрощения кода.
record UserDto(Long id, String name) {}
UserDto dto = new UserDto(user.getId(), user.getName());
Если нужно преобразовать список объектов.
List<UserDto> dtos = users.stream()
.map(UserMapper::toDto)
.collect(Collectors.toList());
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥9❤4
Forwarded from Java News
JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!)
Каждый из нас, Java-разработчиков, хоть раз задумывался: "А что, если взять и написать свою IDE?". Ну, может, не полноценную замену IntelliJ IDEA, но что-то компактное, для души, для изучения Swing или просто для фана. Сегодня я хочу поделиться именно таким проектом – JForge, простой IDE для Java, написанной полностью на Swing, с акцентом на приятный темный интерфейс и базовые, но необходимые фичи.
Читать статью
Каждый из нас, Java-разработчиков, хоть раз задумывался: "А что, если взять и написать свою IDE?". Ну, может, не полноценную замену IntelliJ IDEA, но что-то компактное, для души, для изучения Swing или просто для фана. Сегодня я хочу поделиться именно таким проектом – JForge, простой IDE для Java, написанной полностью на Swing, с акцентом на приятный темный интерфейс и базовые, но необходимые фичи.
Читать статью
VK
JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!)
Каждый из нас, Java-разработчиков, хоть раз задумывался: "А что, если взять и написать свою IDE?". Ну, может, не полноценную замену Intel..
👍8❤4🔥3
📢 JSON — это удобно. До тех пор, пока всё не ломается.
Гибкий формат без схем кажется спасением, но на масштабе превращается в источник ошибок, конфликтов и головной боли.
🔍 Schema Registry — это способ вернуть контроль. На открытом уроке 19 мая в 19:00 МСК разберём:
— В чём слабые места JSON без схем;
— Как Schema Registry помогает валидации и версионированию;
— Когда всё-таки можно обойтись без схем;
— Какие инструменты реально работают (Avro, Protobuf, JSON Schema).
📊 Урок будет полезен разработчикам, дата-инженерам, архитекторам и PM, которые сталкиваются с интеграциями и масштабируемыми системами.
👉 Регистрируйтесь и получите скидку на программу обучения «Apache Kafka»: https://vk.cc/cLVFMI
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Гибкий формат без схем кажется спасением, но на масштабе превращается в источник ошибок, конфликтов и головной боли.
🔍 Schema Registry — это способ вернуть контроль. На открытом уроке 19 мая в 19:00 МСК разберём:
— В чём слабые места JSON без схем;
— Как Schema Registry помогает валидации и версионированию;
— Когда всё-таки можно обойтись без схем;
— Какие инструменты реально работают (Avro, Protobuf, JSON Schema).
📊 Урок будет полезен разработчикам, дата-инженерам, архитекторам и PM, которые сталкиваются с интеграциями и масштабируемыми системами.
👉 Регистрируйтесь и получите скидку на программу обучения «Apache Kafka»: https://vk.cc/cLVFMI
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍3❤2🔥2😁1
Знакомы с отдельными сочетаниями клавиш для рефакторинга, такими как
Shift + F6
или Ctrl + Alt + V
? Сочетание
Ctrl + Alt + Shift + T
открывает перед вами целый спектр возможностей рефакторинга в одном окне.— Открывает меню, предоставляющее доступ к различным видам рефакторинга, таким как переименование, перемещение, изменение сигнатуры, извлечение метода, переменной, константы и другие.
— В зависимости от выделенного фрагмента, IntelliJ IDEA предложит только те варианты рефакторинга, которые применимы к текущему элементу кода.
1. Выделите часть кода, которую хотите рефакторить (например, переменную, метод или класс).
2. Нажмите
Ctrl + Alt + Shift + T
.3. Выберите необходимый тип рефакторинга из появившегося меню с помощью стрелок → Enter.
4. Следуйте дальнейшим инструкциям IDE для завершения процесса рефакторинга.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥6❤4
Производительность и наблюдаемость бэкенда. Поиск проблем в продакшене
Признак мастерства бэкендера — глубокое понимание своего стека и того, как работает код в продакшене. Недаром во многих бигтех-компаниях принят подход “you build it, you run it”. Хороший программист не только умеет запилить фичи, но и знает, как работает в проде его софт, и может разобраться, почему его сервис тормозит. Для этого нужно знать особенности рантаймов, инфраструктуры и современные подходы к сбору телеметрии.
Приходи на курс — разберёшься в перформансе на уровне кода и инфраструктуры, научишься внедрять наблюдаемость как в бигтех-компаниях, прокачаешься для собеседований в компании, где ждут от разработчиков широкого инженерного мышления.
🌐 В программе курса:
🤩 Архитектура бэкенд-серверов (Golang, Java, PHP и др) и её особенности: модели обработки запросов и параметры конфигурации, влияющих на производительность
🤩 Zero-code instrumentation на разных языках программирования
🤩 Open Telemetry: основы технологии и применение на примере SigNoz
🤩 Суб-real-time телеметрия поверх UDP c PINBA и “промстэком” (Grafana/Prometheus)
🥸 Кто мы: R&D-центр Devhands. Автор курса — Михаил Курмаев, эксперт по сложным распределённым системам. Долгое время строил платформу в Badoo/Bumble, сейчас в Т-банке развивает дата-платформу.
🗓 Старт курса: 3 июня, 4 недели обучения.
Изучить программу и записаться можно здесь.
Ждем вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqv6iJ7v
Признак мастерства бэкендера — глубокое понимание своего стека и того, как работает код в продакшене. Недаром во многих бигтех-компаниях принят подход “you build it, you run it”. Хороший программист не только умеет запилить фичи, но и знает, как работает в проде его софт, и может разобраться, почему его сервис тормозит. Для этого нужно знать особенности рантаймов, инфраструктуры и современные подходы к сбору телеметрии.
Приходи на курс — разберёшься в перформансе на уровне кода и инфраструктуры, научишься внедрять наблюдаемость как в бигтех-компаниях, прокачаешься для собеседований в компании, где ждут от разработчиков широкого инженерного мышления.
Изучить программу и записаться можно здесь.
Ждем вас!
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqv6iJ7v
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥4
Случайно удалили ветку, а в ней была недоделанная фича или рабочий хотфикс? Паника близко?
git reflog
Показывает историю всех действий в Git — коммиты, переключения веток, ребейзы и даже force-push’и. Идеально, чтобы вернуть ветку из забвения или откатиться на стабильное состояние.
Например:
git checkout -b restore-branch HEAD@{3}
Создаёт новую ветку с того момента, где были 3 действия назад.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31❤8👍7
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.51</version>
</dependency>
Особенности fastjson2:
— скорость работы fastjson2 намного больше, чем у других популярных JSON библиотек, включая jackson/gson/org.json, бенчмарки тут
— fastjson2 поддерживает новые возможностей JDK, включая JDK 11/JDK 17, имеется поддержка Record, поддержка GraalVM Native-Image
— fastjson2 поддерживает JSONPath, поддерживает синтаксис SQL:2016 JSONPath
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤4🔥3
Присоединяйтесь к открытому уроку, узнайте, как динамически выражать и обрабатывать данные в Spring-приложениях.
🗓 21 мая в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
О чём поговорим:
Кому будет интересно:
Spring-разработчикам, Java-бэкенд-инженерам, архитекторам ПО, IT-специалистам и студентам, заинтересованным в технологиях Spring.
В результате урока:
Узнаете, для чего нужен SpEL и где его можно применять.
🔗 Ссылка на регистрацию: https://vk.cc/cLXMWD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥2