java_iibrary | Unsorted

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

12073

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

Subscribe to a channel

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

MIT 6.824 (распределённые системы) — один из лучших бесплатных инженерных курсов в интернете.

Вместо чистой теории весь курс построен вокруг чтения и разбора фундаментальных работ из реальных систем:

GFS (Google File System) — архитектура с одним главным узлом, распределение чанков и работа с eventual consistency при больших нагрузках на добавление данных.

Raft — выбор лидера, репликация журнала и инварианты безопасности. Алгоритм разбирается намного доступнее, чем Paxos.

ZooKeeper — координация без блокировок, системы с преобладанием чтения, линейно согласованные записи и eventual consistency для чтений через watches.

Spanner — глобально распределённые транзакции, двухфазный commit поверх Paxos и использование TrueTime (атомные часы + GPS) для обеспечения внешней согласованности.

Также в курсе разбираются MapReduce, Spark, Frangipani, Memcached от Facebook и другие системы.

Если хотите выйти за пределы поверхностного system design и понять, как внутри устроены реальные распределённые хранилища и системы консенсуса, этот курс — настоящий клад.

Плейлист: https://youtube.com/playlist?list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB

👉 Java Portal

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

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

Хотите разобраться в алгоритмах поиска и сортировки на Java?

Этот подробный курс научит эффективно искать данные и сортировать массивы с помощью самых важных алгоритмов информатики.

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

https://social.ora.cl/6011BEIoOf

👉 Java Portal

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

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

💡 В Spring Boot 4 изменилось имя настройки, отвечающей за включение трассировки.

✅ management.tracing.enabled → management.tracing.export.enabled
✅ @ConditionalOnEnabledTracing → @ConditionalOnEnabledTracingExport

#SpringBoot4 #Observability

👉 Java Portal

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

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

Используйте ReentrantReadWriteLock, когда операций чтения много, а записи происходят редко.

✅ Несколько потоков могут одновременно удерживать блокировку чтения
✅ Для записи требуется эксклюзивная блокировка
✅ При преобладании чтения пропускная способность выше, чем с одной эксклюзивной блокировкой

#Java #Concurrency

👉 Java Portal

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

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

Кэшировать или не кэшировать?

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

Большинство инженеров кэшируют слишком много.
Это ленивая инженерия.

Вот небольшой фреймворк, чтобы принимать решение правильно:

I. Данные часто запрашиваются?
II. Их дорого получать?
III. Они изменчивые?
IV. Объём данных большой?
V. Влияет ли это на воспринимаемую пользователем задержку?
VI. Безопасно ли кэшировать?
VII. Есть ли механизм протухания или инвалидации кэша?

👉 Java Portal

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

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

Автор pgrust — PostgreSQL, переписанного на Rust, — рассказал о четырёх распространённых причинах сбоев PostgreSQL:

1. VACUUM и переполнение счётчика идентификаторов транзакций
2. Лимиты подключений и модель «один процесс на подключение»
3. Неудачные планы выполнения запросов — интересно, насколько здесь помогут новые хинты для запросов в PostgreSQL 19
4. Статистика для JSON

Раздел о JSON оказался интересным. Любопытно, устраняют ли расширения PostgreSQL вроде DocumentDB некоторые из этих ограничений.

Стоит прочитать, если вы работаете с PostgreSQL.

https://malisper.me/the-four-horsemen-behind-thousands-of-postgres-outages/

👉 Java Portal

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

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

Сохрани этот ресурс, если работаешь с SQL.

Это playground без установки, где можно:

- создавать таблицы, выполнять запросы и делиться результатами;
- работать с MySQL, PostgreSQL и SQL Server.

Бесплатно и без установки:
→ http://runsql.com/r

👉 Java Portal

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

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

В Spring Boot 4 больше нет @MockBean — вместо него теперь используется @MockitoBean.
Для моков в полях всё привычно:

— @MockitoBean
— @MockitoSpyBean

Но в классах @Configuration они больше не используются. Для общих моков теперь рекомендуется подключать тестовые конфигурации через @Import.

#SpringBoot4 #Testing

👉 Java Portal

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

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

Используйте Stream.peek() только для отладки, а не для реальной логики.

✅ peek() выполняется как побочный эффект, поэтому его вызов легко не заметить или вообще потерять при выполнении Stream pipeline.
✅ Для намеренной обработки данных лучше использовать map() или forEach().

#Java #Streams

👉 Java Portal

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

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

💡 Используй Instant.truncatedTo(...), когда нужно сравнивать время с точностью до дня, часа или минуты.

✅ Instant.equals() сравнивает значение целиком, поэтому разница даже в наносекундах даст false
✅ truncateTo(ChronoUnit.DAYS) отбрасывает более мелкие единицы времени
✅ Удобно для проверок вроде «тот же день» или «тот же час»

#Java #Time

👉 Java Portal

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

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

Вы создали составной индекс:

(first_name, last_name, city)


Затем выполнили запрос:
SELECT *
FROM users
WHERE last_name = 'Smith';


Результат?
База данных проигнорировала индекс и выполнила Sequential Scan (полное последовательное сканирование таблицы).

Почему? 🤔

Разве индекс не должен использоваться, если last_name является его частью?
Что изменится, если запросы будут такими:
WHERE first_name = ?
WHERE first_name = ? AND last_name = ?
WHERE first_name = ? AND city = ?


Понимание порядка полей в составных индексах — одна из самых важных оптимизаций производительности SQL, которую должен знать каждый backend-разработчик.

👉 Java Portal

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

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

В JVM уже есть вполне хороший встроенный профайлер.
Он доступен ещё с Java 11, но многие до сих пор им не пользуются.

Называется JDK Flight Recorder (JFR). В JEP 328 для него даже был задан ориентир: не более 1% overhead в конфигурации по умолчанию на SPECjbb2015.

JFR можно включить прямо для уже запущенного процесса:

jcmd <pid> JFR.start


По умолчанию он не активен — возможно, поэтому о нём часто забывают.

👉 Java Portal

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

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

A Compiler Writing Journey — практическое руководство по созданию компиляторов.

https://github.com/DoctorWkt/acwj

👉 Java Portal

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

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

PostgreSQL 19 теперь умеет показывать активность асинхронного ввода-вывода прямо в EXPLAIN.

Это упрощает понимание:
→ где именно используется асинхронный I/O;
→ какие части плана обращаются к хранилищу;
→ получает ли запрос преимущество от асинхронного чтения.

Меньше догадок и больше прозрачности в том, что PostgreSQL делает под капотом плана выполнения запроса.
В PostgreSQL 18 появился асинхронный I/O.

А в PostgreSQL 19 стало проще увидеть, как он работает.

👉 Java Portal

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

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

Не позволяйте одному контейнеру съесть всю память сервера.

Устанавливайте лимиты памяти в Docker с помощью флага --memory или через настройки в файле Compose

👉 Java Portal

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

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

Spring Boot 4: чтобы перенести ключи конфигурации, временно используйте properties-migrator как помощник.

✅ При запуске и в логах он показывает, какие ключи устарели.
✅ Обновите ключи, затем удалите зависимость.

#SpringBoot4 #Migration

👉 Java Portal

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

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

Если вы присваиваете переменной значение, полученное из её текущего значения с применением арифметической операции, можно использовать оператор составного присваивания.

Подробнее об операторе составного присваивания: https://social.ora.cl/6018BDGLH0

👉 Java Portal

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

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

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

И эта статья до сих пор остаётся одним из лучших материалов по теме:

• Как на самом деле работает оперативная память
• Кеши процессора и почему от них так сильно зависит производительность
• Практические методы оптимизации
• Инструменты для измерения того, что реально происходит в системе

Автор — Ульрих Дреппер из Red Hat.

Материалу почти 20 лет, но он до сих пор актуален.

Доступно бесплатно:

https://people.freebsd.org/~lstewart/articles/cpumemory.pdf

👉 Java Portal

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

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

Клиентское кэширование в HTTP работает так

Сервер может отдавать два типа ресурсов — статические и динамические. Статические данные не меняются между запросами, поэтому их можно кэшировать на стороне клиента с помощью специальных HTTP-заголовков.

Когда клиент впервые делает GET-запрос к ресурсу, локальный кэш проверяет его наличие. Если ресурса нет, запрос уходит на сервер. Сервер в ответе указывает, что данные можно закэшировать -> заголовок Cache-Control задаёт время жизни ресурса, а ETag определяет его конкретную версию. Кэш сохраняет ответ и возвращает его клиенту.

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

Если ресурс в кеше устарел, кэш отправляет новый запрос на сервер с условным заголовком, например If-None-Match, где указывает сохранённую версию. Если сервер имеет новую версию, он возвращает её. Если изменений не было, он отвечает кодом 304 Not Modified, и клиент продолжает использовать локальные данные.

👉 Java Portal

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

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

Используйте Files.isSameFile(path1, path2), чтобы проверить, указывают ли два пути на один и тот же файл. Метод также учитывает симлинки.

✅ Он проверяет, ссылаются ли два объекта Path на один и тот же реальный файл в файловой системе.

#Java #JavaDev

👉 Java Portal

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

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

В Spring Boot 4 библиотекой для работы с JSON по умолчанию стала Jackson 3.

✅ Изменились пакеты: com.fasterxml → tools.jackson
✅ Вместо обычного изменяемого бина ObjectMapper используется неизменяемый JsonMapper, создаваемый через Builder
✅ Крайний вариант (устаревший): добавить spring-boot-jackson2

#SpringBoot4 #Jackson3

👉 Java Portal

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

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

Тяжело нынче быть Java-разработчиком...

👉 Java Portal

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

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

Флаг Java, который снижает потребление памяти без единого изменения в коде.

Compact Object Headers уменьшают размер заголовка каждого объекта с 16 до 8 байт на 64-битных архитектурах.
В одном из сценариев бенчмарка SPECjbb2015 в JEP указывается снижение использования heap на 22% и CPU на 8% — OpenJDK, JEP 519.

Более того, согласно JEP 534, Amazon уже использует эту возможность в продакшене в сотнях сервисов, причём большинство из них работает на бэкпортах для Java 17 и 21.

В JDK 25 эту опцию нужно включать вручную:
-XX:+UseCompactObjectHeaders

Но есть важный момент: JEP 534 предлагает сделать Compact Object Headers поведением по умолчанию в JDK 27.

👉 Java Portal

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

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

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

Но ZGC работает иначе.
В JEP 439 прямо указано: паузы ZGC стабильно измеряются в микросекундах, тогда как у G1 — сборщика по умолчанию — они могут составлять от миллисекунд до секунд.

При этом длительность пауз ZGC не растёт вместе с размером heap: согласно официальной документации, он рассчитан на heap от нескольких сотен мегабайт до 16 ТБ.
Важно: ZGC не является сборщиком по умолчанию. По умолчанию используется G1.

ZGC нужно включать вручную:

-XX:+UseZGC


А начиная с Java 23 этот флаг уже включает generational-режим ZGC, который и считается рекомендуемым.

👉 Java Portal

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

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

Собираем бэкенд-комьюнити на JVM Day

Бэкендеры, 29 августа в Москве пройдет хардкорная конференция. Ждут своих: Java-, Scala- и Kotlin-разработчиков, архитекторов и тимлидов.

Здесь выступят и расскажут:
— Андрей Кулешов — что нового в мире JVM за год.
— Сергей Петрелевич — разработка по Mechanical Sympathy.
— Александр Ланцов — Java после Loom: другие модели concurrency.
— Антон Курако — как бенчмарки вводят в заблуждение.

А вечером во дворе T-Space — посиделки, интерактивы и открытый микрофон с историями ошибок.
Мест мало, а цена билета будет расти.

Успевай зарегистрироваться

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

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

Spring Boot 4: для подключения поддерживаемых технологий теперь лучше использовать более узкие, специализированные starter-зависимости.

✅ В Boot 4 появились более компактные модули под конкретные технологии
✅ spring-boot-starter-* подключает соответствующую автоконфигурацию
✅ Для Flyway, Liquibase и Mongo теперь нужны отдельные starter’ы

#SpringBoot4 #Modular

👉 Java Portal

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

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

Анимированное введение в преобразование Фурье от 3Blue1Brown.

https://youtu.be/spUNpyF58BY

👉 Java Portal

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

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

Используйте Comparator.nullsFirst() или Comparator.nullsLast(), если ключи сортировки могут быть null.

✅ comparing(User::getName) выбросит NullPointerException, если getName() вернёт null.
✅ Оберните компаратор в nullsFirst() или nullsLast(), чтобы явно задать порядок для null.
✅ Для сортировки по нескольким полям добавляйте thenComparing().

#Java #Comparator

👉 Java Portal

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

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

В PostgreSQL 19 autovacuum станет умнее и сможет работать параллельно.

Теперь PostgreSQL сможет запускать сразу несколько autovacuum-воркеров, оценивать риск для каждой таблицы и в первую очередь обслуживать те, где очистка нужнее всего.

Раньше autovacuum мог превращаться в длинную очередь: один воркер обрабатывал таблицы по одной, из-за чего проблемные таблицы могли ждать, пока завершится менее срочная работа.

В PostgreSQL 19 несколько таблиц можно будет очищать одновременно, а приоритет получат таблицы с наибольшим риском.

👉 Java Portal

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

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

Если говорить про «прикольные штуки с конференций по программированию», Java Ring, пожалуй, самая крутая.

Ты получал своё кольцо, записывал свои предпочтения по кофе, а затем использовал его для аутентификации и получения бесплатного «Java» на JavaOne 1998.

Конечно, внутри него был небольшой микропроцессор, который запускал JVM, с целыми 6 КБ NVRAM. В то время они заявляли(?), что «конференция — это компьютер», потому что эти кольца носили 14 000 участников.

Насколько я могу понять, никто не использовал какое-либо… настоящее P2P-вычисление. Тем не менее, в маркетинговых материалах это называли параллельным компьютером.

Забавно, но спустя почти 30 лет эта идея может продолжать жить. Некто по имени yamad проделал отличную работу по реверс-инжинирингу Java Ring и ведёт подробный блог об этом. Замена севшей герметичной батареи оказалась сложной задачей, но, судя по всему, ему удалось запускать и записывать новые программы на устройство, которое работает на оригинальной JVM!

Мне очень, очень хочется теперь раздобыть несколько Java Ring просто ради того, чтобы проверить, можно ли сделать с ними хоть что-нибудь в стиле P2P…

Вот оригинальная серия постов в блоге yamad. Оказалось, что найти IDE было отдельным приключением!
https://yamad.jp/en/

👉 Java Portal

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