В Spring Boot 4 библиотекой для работы с JSON по умолчанию стала Jackson 3.
✅ Изменились пакеты:
✅ Вместо обычного изменяемого бина
✅ Крайний вариант (устаревший): добавить
#SpringBoot4 #Jackson3
👉 Java Portal
✅ Изменились пакеты:
com.fasterxml → tools.jackson✅ Вместо обычного изменяемого бина
ObjectMapper используется неизменяемый JsonMapper, создаваемый через Builder✅ Крайний вариант (устаревший): добавить
spring-boot-jackson2#SpringBoot4 #Jackson3
Please open Telegram to view this post
VIEW IN TELEGRAM
Автор 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
1. VACUUM и переполнение счётчика идентификаторов транзакций
2. Лимиты подключений и модель «один процесс на подключение»
3. Неудачные планы выполнения запросов — интересно, насколько здесь помогут новые хинты для запросов в PostgreSQL 19
4. Статистика для JSON
Раздел о JSON оказался интересным. Любопытно, устраняют ли расширения PostgreSQL вроде DocumentDB некоторые из этих ограничений.
Стоит прочитать, если вы работаете с PostgreSQL.
https://malisper.me/the-four-horsemen-behind-thousands-of-postgres-outages/
Please open Telegram to view this post
VIEW IN TELEGRAM
malisper.me
The four horsemen behind thousands of Postgres outages - malisper.me
Postgres is great, but there are some very common problems that people have that can pretty easily lead to outages with Postgres. These aren’t just theoretical issues. From talking to a lot of startups, these are the things that actually cause outages in…
Используйте
✅ Он проверяет, ссылаются ли два объекта
#Java #JavaDev
👉 Java Portal
Files.isSameFile(path1, path2), чтобы проверить, указывают ли два пути на один и тот же файл. Метод также учитывает симлинки.Path на один и тот же реальный файл в файловой системе.#Java #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Кэшировать или не кэшировать?
Это вопрос, с которым бэкендер сталкивается каждый день.
Большинство инженеров кэшируют слишком много.
Это ленивая инженерия.
Вот небольшой фреймворк, чтобы принимать решение правильно:
I. Данные часто запрашиваются?
II. Их дорого получать?
III. Они изменчивые?
IV. Объём данных большой?
V. Влияет ли это на воспринимаемую пользователем задержку?
VI. Безопасно ли кэшировать?
VII. Есть ли механизм протухания или инвалидации кэша?
👉 Java Portal
Это вопрос, с которым бэкендер сталкивается каждый день.
Большинство инженеров кэшируют слишком много.
Это ленивая инженерия.
Вот небольшой фреймворк, чтобы принимать решение правильно:
I. Данные часто запрашиваются?
II. Их дорого получать?
III. Они изменчивые?
IV. Объём данных большой?
V. Влияет ли это на воспринимаемую пользователем задержку?
VI. Безопасно ли кэшировать?
VII. Есть ли механизм протухания или инвалидации кэша?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Клиентское кэширование в HTTP работает так
Сервер может отдавать два типа ресурсов — статические и динамические. Статические данные не меняются между запросами, поэтому их можно кэшировать на стороне клиента с помощью специальных HTTP-заголовков.
Когда клиент впервые делает GET-запрос к ресурсу, локальный кэш проверяет его наличие. Если ресурса нет, запрос уходит на сервер. Сервер в ответе указывает, что данные можно закэшировать -> заголовок Cache-Control задаёт время жизни ресурса, а ETag определяет его конкретную версию. Кэш сохраняет ответ и возвращает его клиенту.
При повторном запросе, если ресурс ещё актуален, кэш сразу отдаёт его клиенту, минуя сервер. Однако сервер может обновить ресурс до истечения срока жизни в кеше, поэтому данные в кеше и на сервере не всегда строго согласованы. Обычно это приемлемо, а чтобы гарантировать обновление, сервер просто меняет версию ресурса.
Если ресурс в кеше устарел, кэш отправляет новый запрос на сервер с условным заголовком, например If-None-Match, где указывает сохранённую версию. Если сервер имеет новую версию, он возвращает её. Если изменений не было, он отвечает кодом 304 Not Modified, и клиент продолжает использовать локальные данные.
👉 Java Portal
Сервер может отдавать два типа ресурсов — статические и динамические. Статические данные не меняются между запросами, поэтому их можно кэшировать на стороне клиента с помощью специальных HTTP-заголовков.
Когда клиент впервые делает GET-запрос к ресурсу, локальный кэш проверяет его наличие. Если ресурса нет, запрос уходит на сервер. Сервер в ответе указывает, что данные можно закэшировать -> заголовок Cache-Control задаёт время жизни ресурса, а ETag определяет его конкретную версию. Кэш сохраняет ответ и возвращает его клиенту.
При повторном запросе, если ресурс ещё актуален, кэш сразу отдаёт его клиенту, минуя сервер. Однако сервер может обновить ресурс до истечения срока жизни в кеше, поэтому данные в кеше и на сервере не всегда строго согласованы. Обычно это приемлемо, а чтобы гарантировать обновление, сервер просто меняет версию ресурса.
Если ресурс в кеше устарел, кэш отправляет новый запрос на сервер с условным заголовком, например If-None-Match, где указывает сохранённую версию. Если сервер имеет новую версию, он возвращает её. Если изменений не было, он отвечает кодом 304 Not Modified, и клиент продолжает использовать локальные данные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Используйте
✅ Несколько потоков могут одновременно удерживать блокировку чтения
✅ Для записи требуется эксклюзивная блокировка
✅ При преобладании чтения пропускная способность выше, чем с одной эксклюзивной блокировкой
#Java #Concurrency
👉 Java Portal
ReentrantReadWriteLock, когда операций чтения много, а записи происходят редко.✅ Несколько потоков могут одновременно удерживать блокировку чтения
✅ Для записи требуется эксклюзивная блокировка
✅ При преобладании чтения пропускная способность выше, чем с одной эксклюзивной блокировкой
#Java #Concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Большинство проблем с производительностью упираются в то, как вы работаете с памятью.
И эта статья до сих пор остаётся одним из лучших материалов по теме:
• Как на самом деле работает оперативная память
• Кеши процессора и почему от них так сильно зависит производительность
• Практические методы оптимизации
• Инструменты для измерения того, что реально происходит в системе
Автор — Ульрих Дреппер из Red Hat.
Материалу почти 20 лет, но он до сих пор актуален.
Доступно бесплатно:
https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
👉 Java Portal
И эта статья до сих пор остаётся одним из лучших материалов по теме:
• Как на самом деле работает оперативная память
• Кеши процессора и почему от них так сильно зависит производительность
• Практические методы оптимизации
• Инструменты для измерения того, что реально происходит в системе
Автор — Ульрих Дреппер из Red Hat.
Материалу почти 20 лет, но он до сих пор актуален.
Доступно бесплатно:
https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
💡 В Spring Boot 4 изменилось имя настройки, отвечающей за включение трассировки.
✅
✅
#SpringBoot4 #Observability
👉 Java Portal
✅
management.tracing.enabled → management.tracing.export.enabled✅
@ConditionalOnEnabledTracing → @ConditionalOnEnabledTracingExport#SpringBoot4 #Observability
Please open Telegram to view this post
VIEW IN TELEGRAM
Если вы присваиваете переменной значение, полученное из её текущего значения с применением арифметической операции, можно использовать оператор составного присваивания.
Подробнее об операторе составного присваивания: https://social.ora.cl/6018BDGLH0
👉 Java Portal
Подробнее об операторе составного присваивания: https://social.ora.cl/6018BDGLH0
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите разобраться в алгоритмах поиска и сортировки на Java?
Этот подробный курс научит эффективно искать данные и сортировать массивы с помощью самых важных алгоритмов информатики.
Он подойдёт как тем, кто только начинает изучать Java, так и тем, кто готовится к экзаменам. Вы поймёте, как работают эти алгоритмы и как пошагово отслеживать их выполнение.
https://social.ora.cl/6011BEIoOf
👉 Java Portal
Этот подробный курс научит эффективно искать данные и сортировать массивы с помощью самых важных алгоритмов информатики.
Он подойдёт как тем, кто только начинает изучать Java, так и тем, кто готовится к экзаменам. Вы поймёте, как работают эти алгоритмы и как пошагово отслеживать их выполнение.
https://social.ora.cl/6011BEIoOf
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
Связь: @devmangx
РКН: https://clck.ru/3H4WUg
👍3😁1🌚1
Spring Boot 4: чтобы перенести ключи конфигурации, временно используйте
✅ При запуске и в логах он показывает, какие ключи устарели.
✅ Обновите ключи, затем удалите зависимость.
#SpringBoot4 #Migration
👉 Java Portal
properties-migrator как помощник.✅ При запуске и в логах он показывает, какие ключи устарели.
✅ Обновите ключи, затем удалите зависимость.
#SpringBoot4 #Migration
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Вместо чистой теории весь курс построен вокруг чтения и разбора фундаментальных работ из реальных систем:
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤔2👍1
Используйте
✅
✅
#Java #Files
👉 Java Portal
Files.isSameFile(a, b), чтобы проверить, указывают ли два пути на один и тот же файл.✅
Path.equals сравнивает только текстовое представление пути.✅
isSameFile проверяет реальный файл и учитывает симлинки.#Java #Files
Please open Telegram to view this post
VIEW IN TELEGRAM
В Spring Boot 4 больше нет поддержки Undertow — теперь рекомендуется использовать Tomcat или Jetty.
Что изменилось:
* Undertow несовместим с Servlet 6.1.
* Вместо
* Не разворачивайте приложения на Spring Boot 4 в старых сервлет-контейнерах.
👉 Java Portal
Что изменилось:
* Undertow несовместим с Servlet 6.1.
* Вместо
starter-undertow используйте Tomcat (по умолчанию) или Jetty.* Не разворачивайте приложения на Spring Boot 4 в старых сервлет-контейнерах.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
Лучшие инженеры не изучают распределённые системы по поверхностным пересказам. Они сразу обращаются к фундаментальным научным статьям. Чтение таких работ помогает понять, почему системы спроектированы именно так, а не просто научиться ими пользоваться.
Вот пять классических статей всех времён, которые должен прочитать каждый разработчик.
1. The Google File System (2003)
Почему стоит прочитать: статья изменила подход всей индустрии, предложив считать отказ компонентов нормой, а не исключением. В ней описано, как построить масштабную отказоустойчивую распределённую систему хранения данных на базе недорогого массового оборудования, оптимизировав её под интенсивную последовательную дозапись вместо произвольной записи.
Ссылка: https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf
2. Dynamo: Amazon’s Highly Available Key-Value Store (2007)
Почему стоит прочитать: исчерпывающий разбор того, как пожертвовать согласованностью ради высокой доступности — AP в теореме CAP. В статье изложены ключевые паттерны, лежащие в основе масштабируемых NoSQL-хранилищ: консистентное хеширование, векторные часы, gossip-протоколы и настраиваемый кворум для операций чтения и записи.
Ссылка: https://allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
3. In Search of an Understandable Consensus Algorithm (Raft) (2014)
Почему стоит прочитать: Paxos печально известен тем, насколько сложно его понять и корректно реализовать, тогда как Raft делает концепцию реплицируемых конечных автоматов более доступной. Алгоритм разбивает задачу консенсуса на отдельные подзадачи, которые легко анализировать: выбор лидера, репликацию журнала и обеспечение безопасности.
Ссылка: https://raft.github.io/raft.pdf
4. Spanner: Google’s Globally-Distributed Database (2012)
Почему стоит прочитать: статья показывает, как добиться строгой сериализуемости и внешней согласованности между дата-центрами по всему миру. Секрет — API Google TrueTime, ограничивающий неопределённость времени с помощью синхронизированных GPS-приёмников и атомных часов.
Ссылка: https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf
5. Time, Clocks, and the Ordering of Events in a Distributed System
Почему стоит прочитать: на физическое время нельзя полагаться при работе с независимыми узлами. Лэмпорт вводит логические часы и фундаментальное отношение «произошло до» (happened-before), лежащее в основе упорядочивания событий в современных распределённых сетях.
Ссылка: https://amturing.acm.org/p558-lamport.pdf
👉 Java Portal
Вот пять классических статей всех времён, которые должен прочитать каждый разработчик.
1. The Google File System (2003)
Почему стоит прочитать: статья изменила подход всей индустрии, предложив считать отказ компонентов нормой, а не исключением. В ней описано, как построить масштабную отказоустойчивую распределённую систему хранения данных на базе недорогого массового оборудования, оптимизировав её под интенсивную последовательную дозапись вместо произвольной записи.
Ссылка: https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf
2. Dynamo: Amazon’s Highly Available Key-Value Store (2007)
Почему стоит прочитать: исчерпывающий разбор того, как пожертвовать согласованностью ради высокой доступности — AP в теореме CAP. В статье изложены ключевые паттерны, лежащие в основе масштабируемых NoSQL-хранилищ: консистентное хеширование, векторные часы, gossip-протоколы и настраиваемый кворум для операций чтения и записи.
Ссылка: https://allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
3. In Search of an Understandable Consensus Algorithm (Raft) (2014)
Почему стоит прочитать: Paxos печально известен тем, насколько сложно его понять и корректно реализовать, тогда как Raft делает концепцию реплицируемых конечных автоматов более доступной. Алгоритм разбивает задачу консенсуса на отдельные подзадачи, которые легко анализировать: выбор лидера, репликацию журнала и обеспечение безопасности.
Ссылка: https://raft.github.io/raft.pdf
4. Spanner: Google’s Globally-Distributed Database (2012)
Почему стоит прочитать: статья показывает, как добиться строгой сериализуемости и внешней согласованности между дата-центрами по всему миру. Секрет — API Google TrueTime, ограничивающий неопределённость времени с помощью синхронизированных GPS-приёмников и атомных часов.
Ссылка: https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf
5. Time, Clocks, and the Ordering of Events in a Distributed System
Почему стоит прочитать: на физическое время нельзя полагаться при работе с независимыми узлами. Лэмпорт вводит логические часы и фундаментальное отношение «произошло до» (happened-before), лежащее в основе упорядочивания событий в современных распределённых сетях.
Ссылка: https://amturing.acm.org/p558-lamport.pdf
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
Уже очевидно, что ВАЙБКОДИНГ — главный навык ближайших лет
Посмотрите сами. ИИ уже забирает на себя работу целых команд: пишет код, закрывает задачи джунов и позволяет стартапам запускать продукты в 2–3 раза меньшим составом. То, на что раньше нужны были несколько разработчиков, сегодня всё чаще делает один человек с ИИ-агентами.
И это только начало. Те, кто освоит вайбкодинг сейчас, смогут быстрее запускать проекты, автоматизировать огромный объём работы, увереннее конкурировать на рынке и зарабатывать больше тех, кто продолжает делать всё вручную.
Начать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 50 тысяч: @vibecoding_tg
Посмотрите сами. ИИ уже забирает на себя работу целых команд: пишет код, закрывает задачи джунов и позволяет стартапам запускать продукты в 2–3 раза меньшим составом. То, на что раньше нужны были несколько разработчиков, сегодня всё чаще делает один человек с ИИ-агентами.
И это только начало. Те, кто освоит вайбкодинг сейчас, смогут быстрее запускать проекты, автоматизировать огромный объём работы, увереннее конкурировать на рынке и зарабатывать больше тех, кто продолжает делать всё вручную.
Начать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.
Подписывайтесь, нас уже 50 тысяч: @vibecoding_tg
💊10
SELECT FOR UPDATE в PostgreSQL на самом деле выполняет запись.На heap-странице Postgres у каждого tuple есть заголовок с метаданными этой записи.
Когда транзакция выполняет
SELECT FOR UPDATE, у найденных строк обновляется заголовок: они помечаются как заблокированные, а в xmax записывается идентификатор транзакции, которая установила блокировку.В частности, в заголовке
infomask выставляются два бита:HEAP_XMAX_EXCL_LOCK и HEAP_XMAX_LOCK_ONLY.Из-за этого страница становится dirty, а изменение также попадает в WAL. Позже WAL может быть отправлен на standby-реплику.
Сама dirty-страница затем может быть сброшена на диск фоновым процессом.
После коммита блокировка снимается.
Забавно, что операция чтения в итоге может вызвать целую цепочку операций записи на диск.
раться с новой возможностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👀2
Тюнинг производительности Spring Boot.
https://vladmihalcea.com/spring-boot-performance-tuning/
👉 Java Portal
https://vladmihalcea.com/spring-boot-performance-tuning/
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍4
JetBrains переносит возможности IntelliJ IDEA в другие редакторы.
Новое расширение Java & Kotlin by IntelliJ IDEA уже доступно в предварительной версии для VS Code и всех его форков, включая Cursor и Antigravity.
Возможности IntelliJ IDEA — теперь в любом редакторе, где вы работаете.🙂↔️
👉 Java Portal
Новое расширение Java & Kotlin by IntelliJ IDEA уже доступно в предварительной версии для VS Code и всех его форков, включая Cursor и Antigravity.
Возможности IntelliJ IDEA — теперь в любом редакторе, где вы работаете.
Please open Telegram to view this post
VIEW IN TELEGRAM
The JetBrains Blog
IntelliJ IDEA Goes LSP: Java and Kotlin Intelligence Comes to VS Code, Cursor, and Agentic Flows - The JetBrains Blog
It’s no secret that agentic development is changing how developers build software. As agents take on more and more of the implementation work, developers spend less and less time manually editing code