java_iibrary | Unsorted

Telegram-канал java_iibrary - Java Portal | Программирование

12073

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Subscribe to a channel

Java Portal | Программирование

💡 Java — не стоит считать, что десятичным разделителем всегда будет точка.

✅ Шаблоны вроде #,###.## всё равно используют символы, зависящие от локали.

✅ Нужные разделители можно задать через DecimalFormatSymbols(locale).

✅ В Италии число будет выглядеть как 1.234,56, а в США — 1,234.56.

#Java #JavaDev

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Эти заметки — структурированное руководство по собеседованиям по проектированию систем.

Внутри разбираются как базовые подходы к System Design, так и конкретные архитектуры: веб-краулеры, системы уведомлений, платёжные платформы и другие типичные задачи с собеседований.

https://github.com/liquidslr/system-design-notes

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Подзапросы в SQL сначала могут казаться запутанными, но на деле это просто запросы, которые передают данные другому запросу.

В этой статье Абдулла объясняет, как работают подзапросы и где они используются в SQL.

Разбираются некоррелированные и коррелированные подзапросы, производные столбцы и таблицы, а также операторы IN, ANY, ALL, EXISTS и многое другое.

https://freecodecamp.org/news/how-to-work-with-subqueries-in-sql/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Вам доклады по Go или Java? VK приглашает на митап с двойной начинкой
26 августа VK собирает Go- и Java-инженеров, чтобы прокачать знания.

В программе два трека — Go и Java, по три доклада в каждом.

Трек Go:
• «Компиляция Go в динамическую либу, или как мы ускорили выкатку фичи в два раза, но нам не понравилось», Михаил Кичигин, бэкенд-разработчик, Avito Tech
• «Go-платформа VK: как мы построили единую основу для создания Go-сервисов», Александр Апанасенко, руководитель команды SDK Backend, VK
• «Почтальон от Kubernetes до Palo Alto. Как осуществляется доставка информации об адресах», Дарья Кулькина, бэкенд-разработчик, Точка Банк

Трек Java:
• «Перформанс-трюки в поисковой платформе Ozon», Пётр Портнов, ведущий разработчик среднего поиска, Ozon
• «Архитектура современного движка платёжной системы и переход к новой архитектуре», Игорь Крикунов, технический лидер разработки DBC, Альфа-Банк
• «Переход от федерации S3-кластеров в пользу коммунального и мультитенантного кластера», Кирилл Боблак, ведущий разработчик One-cloud, VK

А ещё будет мастер-класс по прокачке навыка, который сделает вас звездой любого вечера, и афтепати, чтобы обсудить доклады в неформальной обстановке.

Встречаемся в 17:00, начало в 18:00. Участие бесплатное, регистрация обязательна.

Читать полностью…

Java Portal | Программирование

Разработчику стоит знать основные концепции системного дизайна.

Это помогает показать потенциальным работодателям, что вы умеете превращать требования к архитектуре в готовый к продакшену код.

В курсе разбираются архитектура приложений, проектирование API, кэширование, сети, базы данных и многое другое.

https://freecodecamp.org/news/learn-system-design-principles/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Java: поверхностное клонирование копирует только сам объект, а вложенные объекты остаются общими.

super.clone() сам по себе создаёт поверхностную копию.

Глубокое клонирование дополнительно копирует и вложенные поля.

Если ссылки остаются общими, изменение вложенного объекта в одной копии будет видно и в другой.

#Java #SoftwareEngineering

👉 Java Portal

Читать полностью…

Java Portal | Программирование

9 советов по высокой производительности при использовании MySQL с JPA и Hibernate.

https://vladmihalcea.com/9-high-performance-tips-when-using-mysql-with-jpa-and-hibernate/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

На одном собеседовании по системному дизайну я использовал Kafka.
На другом — Redis.
На ещё одном — S3.
На ВСЕХ собеседованиях по системному дизайну я использовал базы данных.

Базы данных — основа любой архитектуры независимо от масштаба, стека или предметной области.

Если вы понимаете, как данные хранятся, запрашиваются, индексируются, реплицируются и партиционируются, то вы уже понимаете 70% системного дизайна.

Не отвлекайтесь на каждый новый модный компонент. Очереди, кэши и оркестраторы приходят и уходят.

А базы данных остаются.

Реляционные, NoSQL, временные ряды, векторные базы — подходы меняются, но принципы остаются теми же:

- пути чтения и записи
- индексация и кэширование
- транзакции и изоляция
- репликация и партиционирование

Разберитесь глубоко в том, как движутся данные, и вы увидите, как с ними связаны все остальные части системы.

Изучайте базы данных глубоко.

Большинство других компонентов существуют лишь для того, чтобы перемещать эти данные, защищать их или оптимизировать доступ к ним.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Не забывайте поддерживать проекты с открытым исходным кодом, которыми сами пользуетесь.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Валидатор загрузки связей в JPA

В статье показано, как программно проверять, каким образом JPA и Hibernate загружают связанные сущности — через JOIN или отдельными дополнительными запросами.

Проблема особенно заметна с FetchType.EAGER. Например, @ManyToOne и @OneToOne используют его по умолчанию, из-за чего Hibernate может незаметно генерировать дополнительные запросы и приводить к классической проблеме N+1.

Автор строит собственный валидатор поверх механизмов Hibernate Statistics и Event Listeners. Он позволяет прямо в тестах определить

→ какие связанные сущности были загружены
→ какие пришли через дополнительные SQL-запросы
→ какие были получены через JOIN

Например, можно проверить, что запрос неожиданно загрузил две PostComment отдельными запросами и ещё один Post через JOIN. После замены запроса на JOIN FETCH валидатор подтверждает, что дополнительные SQL-запросы исчезли.

По сути, это способ ловить проблемы со стратегией загрузки и N+1 ещё на уровне тестов, до того как они попадут в продакшен.

https://vladmihalcea.com/jpa-association-fetching-validator/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Интеграционное тестирование базы данных с помощью Testcontainers

https://vladmihalcea.com/testcontainers-database-integration-testing/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Предсказание ветвлений всплывает снова и снова, потому что его влияние на производительность действительно огромное. Эту тему стоит понимать глубже.

У BitLemonSw как раз вышло новое видео о том, как работает предсказание ветвлений в современных процессорах.

Суть простая. В коде постоянно встречаются ветвления: циклы, if, switch/case, вызовы функций и возвраты.

Проблема в том, что процессоры работают конвейерно и не могут каждый раз ждать, пока станет известно, по какой ветке пойдёт выполнение. Иначе это сильно тормозило бы процессор.

Поэтому процессор заранее угадывает результат ветвления и продолжает загружать инструкции по предполагаемому пути. Если прогноз оказался верным — всё быстро. Если нет — часть работы приходится выбросить и начать заново.

https://youtu.be/UbDIoNY9E0w

👉 Java Portal

Читать полностью…

Java Portal | Программирование

90% PostgreSQL в 2026 году сводится к этим 10 вещам. Всё остальное — в основном споры об расширениях.

1. MVCC + VACUUM
Обновления создают мёртвые строки. Если autovacuum настроен плохо, таблицы и индексы раздуваются, а задержки постепенно растут неделями.

2. Индексы под реальные сценарии запросов
Порядок колонок в составных индексах важен. Нужно понимать частичные и покрывающие индексы, а также почему ORM иногда незаметно приводит к полному сканированию таблицы.

3. Блокировки и DDL
ALTER TABLE может заблокировать запись. Важно понимать режимы блокировок, очереди и безопасные приёмы вроде CREATE INDEX CONCURRENTLY и обновления данных небольшими партиями.

4. Уровни изоляции и аномалии
Read Committed, Repeatable Read, Serializable. Пропавшие или дублирующиеся строки часто нужно разбирать через конкурентные транзакции, а не искать проблему только в коде.

5. Управление соединениями
Слишком много соединений убивает CPU и память. Нужны PgBouncer, адекватные размеры пулов и контроль долгих транзакций в состоянии idle in transaction.

6. WAL, checkpoints и репликация
Объём WAL напрямую влияет на ввод-вывод. Плохие настройки checkpoints вызывают скачки задержек, а отставание реплик ломает чтение с реплик и делает переключение при сбое рискованным.

7. Основы планировщика запросов
EXPLAIN (ANALYZE, BUFFERS) — ваш отладчик. Нужно понимать оценки количества строк, типы JOIN и когда требуется ANALYZE или расширенная статистика.

8. Наблюдаемость, привязанная к реальным сбоям
Следите за p95 задержкой, ожиданием блокировок, временными файлами, попаданиями в кэш, отставанием autovacuum и реплик. Добавьте журнал медленных запросов с нормальными порогами.

9. Резервные копии и проверка восстановления
Базовые бэкапы плюс архивирование WAL — минимум. Главная ошибка — никогда не проверять восстановление и уже во время аварии выяснить, что не хватает ролей, расширений или восстановление занимает слишком долго.

10. Безопасность и права
Минимально необходимые права, отдельные владельцы объектов, никакого superuser у приложения, регулярная смена учётных данных, ограничение сетевого доступа и закрытая на запись схема public в production.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Как настроить JPA и Hibernate в Spring Petclinic с помощью Hypersistence Optimizer:

https://vladmihalcea.com/spring-petclinic-hypersistence-optimizer/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Чувак декомпилировал Java-игру, чтобы посмотреть, как она устроена внутри.

На выходе получил полностью обфусцированный код: вместо нормальных имён — $$1, $$2 и прочий мусор. Для человека разбирать такое вручную — боль.

Но для LLM это почти идеальная задача. Она довольно быстро восстанавливает смысл кода, понимает связи между классами и объясняет, что именно происходит.

Такие задачи идеал для ИИ.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Современная Java — сверху, Rust — снизу.

Той Java, которую вы привыкли представлять, больше нет.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Самое время снова вспомнить о Java Records.

В этом руководстве показано, как record помогает объединять связанные неизменяемые данные в один объект. По сравнению с набором отдельных переменных код становится понятнее и проще в сопровождении.

Если вы ещё не используете record, это один из самых простых способов писать более чистый и выразительный код на Java.

Подробнее: https://social.ora.cl/6012BDGFKM

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Оптимизация производительности Spring Boot.

https://vladmihalcea.com/spring-boot-performance-tuning/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

🚀 Spring Boot 4: @ConfigurationPropertiesSource для внешних типов.

✅ Теперь метаданные можно генерировать даже для типов, которые находятся в другом модуле.

#SpringBoot4 #Config

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Похоже, это один из самых полных справочников по самостоятельному хостингу.

Огромный открытый гайд со всем, что нужно для старта и дальнейшего изучения self-hosting:

Docker, Kubernetes, базы данных, LLM, сети, Raspberry Pi, Home Assistant, безопасность, программирование и ещё куча всего.

Если давно хотели научиться запускать собственный софт вместо того, чтобы зависеть от SaaS-сервисов, это точно стоит сохранить.

Источник: github.com/mikeroyal/Self-Hosting-Guide

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Импортируете CSV в Postgres? Используйте COPY или \copy.

Это быстро, потому что данные передаются одной массовой командой с минимальным количеством обменов по протоколу, одним разбором и планированием, прямым преобразованием строк и без накладных расходов на отдельный запрос для каждой строки.

Что важно знать:

FORMAT csv
Включает стандартный разбор CSV: запятые, поля в кавычках и экранированные кавычки.

Список целевых столбцов
Порядок столбцов в CSV редко совпадает с таблицей. Всегда указывайте целевые столбцы в том порядке, в котором они идут в файле. Postgres сопоставляет их по позиции, а не по имени из заголовка CSV.

HEADER / HEADER n
Пропускает строки заголовка. Обычный HEADER пропускает первую строку. Ожидается, что Postgres 19 позволит передавать число, например HEADER 2, чтобы пропускать несколько начальных строк.

DEFAULT 'string'
Позволяет сопоставить специальную строку в CSV, например '__DEFAULT__', с выражением DEFAULT соответствующего столбца.

Неуказанные столбцы
Столбцы таблицы, которые не указаны в списке целевых столбцов, автоматически получают DEFAULT или NULL.

Лишние столбцы в CSV
Postgres выдаст ошибку, если в CSV больше полей, чем указано целевых столбцов. Обрежьте файл или сначала загрузите данные в более широкую промежуточную таблицу.

NULL-значения
В формате csv стандартным представлением NULL является пустая строка без кавычек. Это можно изменить через NULL 'string'.

Обработка ошибок через ON_ERROR и REJECT_LIMIT
Исторически COPY останавливался на первой ошибке преобразования. В новых версиях появились:

• ON_ERROR ignore в Postgres 17 — пропускает некорректные строки и сообщает их количество
• REJECT_LIMIT n в Postgres 18 — задаёт максимальное число плохих строк при ON_ERROR ignore, после которого импорт будет остановлен
• ON_ERROR set_null в Postgres 19 — заменяет некорректное поле на NULL вместо того, чтобы отбрасывать всю строку

👉 Java Portal

Читать полностью…

Java Portal | Программирование

🔴 Тестовый собес с Java-разработчиком уже завтра! 
[+ разбор 50 сложных вопросов в подарок ]

19 августа (уже завтра!) в 19:00 по мск
приходи онлайн, чтобы посмотреть на настоящее интервью на Middle Java-разработчика!

Собеседование проведёт Сергей Чамкин - старший разработчик из Uzum, ex-WildBerries

Как это будет:

📂 Сергей задаст разработчику-добровольцу вопросы и задачи, которые могут спросить на реальном собесе
📂 После каждого ответа респондента ты услышишь подробный комментарий от ментора и поймёшь, чего на самом деле ожидает собеседующий на интервью
📂 В конце сможешь задать любой вопрос Сергею и получить на него развёрнутый ответ

Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы

Но ты можешь посмотреть его бесплатно 🔥
Только завтра, в прямом эфире!

🎁 Подарок для всех, кто зарегается на веб — файл с ОТВЕТАМИ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥

Жми на кнопку, чтобы попасть на эфир и забрать подарок ↓
@shortcut_sh_bot 

Реклама.
О рекламодателе.

Читать полностью…

Java Portal | Программирование

Spring Boot 4: можно объединять несколько TaskDecorator для асинхронных задач.

Каждый из них может переносить свой контекст в рабочий поток.

Spring Boot объединяет их и определяет порядок выполнения через @Order.

Типичная связка: MDC для логов + контекст безопасности для пользователя.

#SpringBoot4 #Async

👉 Java Portal

Читать полностью…

Java Portal | Программирование

11 принципов разработки ПО, которые стоило понять гораздо раньше.

1. SOLID — более качественное объектно-ориентированное проектирование
2. DRY — не повторяйся
3. KISS — не усложняй
4. YAGNI — не реализуй то, что пока не нужно
5. SRP — одна ответственность
6. Open/Closed — расширяй, не ломая существующее
7. Dependency Inversion — уменьшай связанность
8. Composition — собирай систему из гибких компонентов
9. Separation of Concerns — разделяй ответственность между частями системы
10. Fail Fast — обнаруживай проблемы как можно раньше
11. Measure First — оптимизируй только то, что действительно имеет значение

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Переименование поля в API изнутри кажется безобидным. Снаружи оно может положить каждый дашборд, который рассчитывал на старое имя.

Любое изменение API попадает в одну из двух категорий, и от этого зависит всё.

Если изменение ломающее, нужно поднимать версию: удаление или переименование полей, добавление обязательных параметров или фундаментальное изменение поведения эндпоинта.

Безопасные изменения можно выпускать без новой версии: добавлять необязательные поля, новые эндпоинты или просто ускорять работу.

Большая часть боли появляется из-за двух противоположных ошибок. Не версионировать вообще — и каждый релиз превращается для пользователей в лотерею. Версионировать всё подряд — и в итоге вы поддерживаете пять версий, а разработчики уже не понимают, какую использовать.

Несколько простых правил помогают держать баланс:

— Показывайте версию явно, например /v1/ в URL, как это делают Stripe и GitHub.
— Используйте семантическое версионирование, чтобы смена мажорной версии сразу означала необходимость изменений в клиентском коде.
— Если версия выводится из эксплуатации, говорите об этом прямо в ответе через заголовок Sunset и давайте 6–12 месяцев на миграцию.

Версия API — это обещание о том, что не изменится.

Нарушать его нужно редко и громко. Никогда — молча.

Какую ошибку вы встречали чаще?

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Сопоставление с образцом для instanceof: переменную можно объявить прямо в проверке.

Старый подход: сначала instanceof, затем отдельное приведение типа.

Новый подход: if (obj instanceof Dog d) — переменная d сразу готова к использованию.

При этом d существует только там, где условие проверки истинно.

#Java #PatternMatching

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Ещё один отличный плейлист по структурам данных и алгоритмам от pmavrin.

https://youtube.com/playlist?list=PLrS21S1jm43igE57Ye_edwds_iL7ZOAG4&si=4mS5lXn3uxI-V2LM

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Типы классов в Java:

1. Concrete Class — обычный класс с полной реализацией методов.
2. Abstract Class — нельзя создать напрямую через new; может содержать абстрактные методы.
3. Final Class — нельзя наследовать.
4. Static Nested Class — статический вложенный класс внутри другого класса.
5. Inner Class — нестатический класс внутри другого класса.
6. Local Class — класс, объявленный внутри метода или другого блока.
7. Anonymous Class — класс без имени, обычно используется для одноразовой реализации.
8. Singleton Class — класс, спроектированный так, чтобы существовал только один его экземпляр.
9. POJO — простой Java-класс без специальных требований к наследованию или фреймворкам.
10. Record Class — компактная форма класса для хранения данных; появилась как предварительная возможность в Java 14.
11. Enum Class — класс, представляющий фиксированный набор констант.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Spring Boot 4: теперь лучше использовать RestTestClient вместо TestRestTemplate.

У него более удобный API в стиле RestClient, он работает как с MockMvc, так и с реальным портом приложения.

При необходимости добавьте @AutoConfigureRestTestClient.

#SpringBoot4 #RestTestClient

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Используйте Collectors.summarizingInt(), чтобы за один проход получить количество элементов, сумму, минимум, максимум и среднее значение.

Так не придётся несколько раз прогонять один и тот же поток данных.

Метод возвращает объект IntSummaryStatistics.

Для long и double есть аналогичные методы: summarizingLong() и summarizingDouble().

#Java #Streams

👉 Java Portal

Читать полностью…
Subscribe to a channel