Новые последовательные типы коллекций в JDK 21 (Sequenced Collection Types)
JEP 431: Sequenced Collections был повышен со статуса Candidate до Proposed to Target для JDK 21. В этом JEP предлагается ввести «новое семейство интерфейсов, которые представляют концепцию коллекции с элементами расположенными в четко определенной последовательности».
https://www.infoq.com/news/2023/03/collections-framework-makeover/
JEP 431: Sequenced Collections был повышен со статуса Candidate до Proposed to Target для JDK 21. В этом JEP предлагается ввести «новое семейство интерфейсов, которые представляют концепцию коллекции с элементами расположенными в четко определенной последовательности».
https://www.infoq.com/news/2023/03/collections-framework-makeover/
InfoQ
Java's Collections Framework Gets a Makeover with New Sequenced Collection Types
JEP 431: Sequenced Collections has been promoted from Candidate to Proposed to Target status for JDK 21. It proposes introducing "a new family of interfaces that represent the concept of a collection whose elements are arranged in a well-defined sequence…
Spring Modulith: достигли ли мы зрелости модульности
В статье довольно интересный взгляд на проблему модульности. Перевод не везде сделан идеально, но в крайнем случаи можно полистать и первоисточник.
То что микросервисы не панацея от всех бед стало очевидно для многих достаточно быстро, но "умелые маркетологи" упорно продолжали их "продавать" на разных площадках. Вокруг идеи микросервисов возникла целая индустрия с курсами, книгами...
Я считаю, что под каждую задачу нужно выбирать подходящий инструмент\технологию\архитектуру. Есть определенные субъективные критерии. Думаю, что их описание заслуживает отдельной статьи и возможно выступление на JPoint\Jocker ))
А есть ли альтернативы?
Довольно интересная альтернатива - модульный монолит (modular monolithic (modulithic) Java applications). Она тоже не является панацеей от всех бед, но в определенных кейсах может оказаться довольно привлекательной альтернативой.
https://github.com/moduliths/moduliths
https://habr.com/ru/articles/701984/
В статье довольно интересный взгляд на проблему модульности. Перевод не везде сделан идеально, но в крайнем случаи можно полистать и первоисточник.
То что микросервисы не панацея от всех бед стало очевидно для многих достаточно быстро, но "умелые маркетологи" упорно продолжали их "продавать" на разных площадках. Вокруг идеи микросервисов возникла целая индустрия с курсами, книгами...
Я считаю, что под каждую задачу нужно выбирать подходящий инструмент\технологию\архитектуру. Есть определенные субъективные критерии. Думаю, что их описание заслуживает отдельной статьи и возможно выступление на JPoint\Jocker ))
А есть ли альтернативы?
Довольно интересная альтернатива - модульный монолит (modular monolithic (modulithic) Java applications). Она тоже не является панацеей от всех бед, но в определенных кейсах может оказаться довольно привлекательной альтернативой.
https://github.com/moduliths/moduliths
https://habr.com/ru/articles/701984/
GitHub
GitHub - moduliths/moduliths: Building modular, monolithic applications using Spring Boot
Building modular, monolithic applications using Spring Boot - moduliths/moduliths
Спорно конечно, но заставляет задуматься…
С одной стороны хочется более прогнозируемого результата, но с другой стороны нужно учитывать и риски. Часто задачек в моменте больше чем хотелось бы.
https://youtu.be/uLp-Ht_cRk8
С одной стороны хочется более прогнозируемого результата, но с другой стороны нужно учитывать и риски. Часто задачек в моменте больше чем хотелось бы.
https://youtu.be/uLp-Ht_cRk8
🔥1
Примеры паттернов проектирования в JDK
Паттерны проектирования описывают типичные способы решения часто встречающихся проблем при проектировании программ.
Есть ли примеры использования паттернов в самой JDK?
В статье есть примеры: https://www.javacodegeeks.com/2011/03/design-patterns-in-jdk.html
Паттерны проектирования описывают типичные способы решения часто встречающихся проблем при проектировании программ.
Есть ли примеры использования паттернов в самой JDK?
В статье есть примеры: https://www.javacodegeeks.com/2011/03/design-patterns-in-jdk.html
Java Code Geeks
Design Patterns in the JDK - Java Code Geeks
Brian Du Preez, our JCG partner from Zen in the art of IT has made a very fine job of collecting the most common design patterns found in the
🔥1
Java JDBC и PostgreSQL
Интересная статья о взаимодействии JDBC-драйвера с PostgreSQL.
Из нее вы узнаете про:
1. Разницу между простым и расширенным протоколами PostgreSQL.
2. Почему расширенный протокол более эффективен и используется драйвером JDBC по умолчанию.
3. Почему важно закрывать PreparedStatement.
и еще много интересного ))
https://foojay.io/today/a-dissection-of-java-jdbc-to-postgresql-connections/
Интересная статья о взаимодействии JDBC-драйвера с PostgreSQL.
Из нее вы узнаете про:
1. Разницу между простым и расширенным протоколами PostgreSQL.
2. Почему расширенный протокол более эффективен и используется драйвером JDBC по умолчанию.
3. Почему важно закрывать PreparedStatement.
и еще много интересного ))
https://foojay.io/today/a-dissection-of-java-jdbc-to-postgresql-connections/
foojay
A Dissection of Java JDBC to PostgreSQL Connections
When using Java JDBC with PostgreSQL, know the difference between simple and extended protocols, how to recognize protocol implementations, and more.
👍3
Spring Data JPA: проекции в запросах
Проекции в Spring Data JPA очень привлекательный инструмент для реализации запросов. Правильно подобрав проекцию можно добиться хорошей производительности.
https://habr.com/ru/companies/otus/articles/722060/
Проекции в Spring Data JPA очень привлекательный инструмент для реализации запросов. Правильно подобрав проекцию можно добиться хорошей производительности.
https://habr.com/ru/companies/otus/articles/722060/
Хабр
Spring Data JPA: проекции в запросах
Вероятно, первое, что приходит вам на ум, когда вы реализуете запрос с помощью Spring Data JPA — это проекции. Это связано с тем фактом, что проекции определяют атрибуты сущности и столбцы базы...
JBrainfuck — Пишем компилятор Brainfuck под Java VM
Если вы задумывались о написании своего компилятора или того как работают компиляторы, то почитать статью однозначно стоит. Примеры построены на базе ASM для генерации байт-кода. В статье разрабатывается компилятор для языка Brainfuck, но поняв принципы можно попробовать сделать свой DSL, который будет к тому же хорошо интегрироваться с существующими наработками на JVM-ных языках.
Вообще свой DSL "с меньшей болью" можно строить и на Groovy, но...мы же "не ищем легких путей"? )) Пример в статье можно рассматривать больше как хардкордный подход к вопросу с DSL.
https://habr.com/ru/articles/229267/
Если вы задумывались о написании своего компилятора или того как работают компиляторы, то почитать статью однозначно стоит. Примеры построены на базе ASM для генерации байт-кода. В статье разрабатывается компилятор для языка Brainfuck, но поняв принципы можно попробовать сделать свой DSL, который будет к тому же хорошо интегрироваться с существующими наработками на JVM-ных языках.
Вообще свой DSL "с меньшей болью" можно строить и на Groovy, но...мы же "не ищем легких путей"? )) Пример в статье можно рассматривать больше как хардкордный подход к вопросу с DSL.
https://habr.com/ru/articles/229267/
Хабр
JBrainfuck — Пишем компилятор Brainfuck под Java VM
Меня давно интересовал вопрос написания своего компилятора под Java VM, но было недостаточно опыта, дабы сделать это. Да и как-то руки не доходили, а недавно все же решил разобраться в этой теме и...
Что таит в себе метод clear() в Java Collection API?
В статье приведено интересное исследование последствий использования метода clear() на большой коллекции ArrayList.
В стандартной реализации этот метод удаляет содержимое из внутренней структуры данных, которая является Object[]. При этом размер самого массива не уменьшается. Соответственно чем больше у вас таких кейсов тем больше импакт.
https://dzone.com/articles/clear-details-on-java-collection-clear-api
В статье приведено интересное исследование последствий использования метода clear() на большой коллекции ArrayList.
В стандартной реализации этот метод удаляет содержимое из внутренней структуры данных, которая является Object[]. При этом размер самого массива не уменьшается. Соответственно чем больше у вас таких кейсов тем больше импакт.
https://dzone.com/articles/clear-details-on-java-collection-clear-api
DZone
Clear Details on Java Collection ‘Clear()’ API
Several of us might be familiar with the clear () API in the Java collections framework. In this post, let’s discuss what the purpose of this clear() API is. What is the performance impact of using this API? What happens under the JVM when this API is invoked?
👍3🔥1
Потоковый обмен в распределённых системах и использование реактивных потоков в нереактивных приложениях: опыт «Магнита»
Интересный опыт использования реактивных потоков. Рассматриваются три решения, которые позволяют реализовать потоковый обмен данными из БД между распределёнными приложениями:
1 Реализация с использованием hibernate
2 Реализация с использованием mybatis
3 Ограничение скорости обмена с использованием механизма обратного давления («backpressure») и библиотеки Bucket4j
https://habr.com/ru/companies/magnit/articles/726090/
Интересный опыт использования реактивных потоков. Рассматриваются три решения, которые позволяют реализовать потоковый обмен данными из БД между распределёнными приложениями:
1 Реализация с использованием hibernate
2 Реализация с использованием mybatis
3 Ограничение скорости обмена с использованием механизма обратного давления («backpressure») и библиотеки Bucket4j
https://habr.com/ru/companies/magnit/articles/726090/
Хабр
Потоковый обмен в распределённых системах и использование реактивных потоков в нереактивных приложениях: опыт «Магнита»
Привет, Хабр! На связи Андрей Зяблин, Java разработчик компании «Магнит». Несколько лет назад, продляя дочери подписку на Netflix, я заинтересовался, как они поддерживают обслуживание...
❤1🔥1
Обработка исключений в Java в функциональном стиле
В Java начиная с версии 8 появились новые возможности в виде функциональных интерфейсов и потоков (Stream API).Однако применение функционального стиля на практике осложняется тем, что все стандартные функциональные интерфейсы из пакета
В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.
https://habr.com/ru/articles/676852/
В Java начиная с версии 8 появились новые возможности в виде функциональных интерфейсов и потоков (Stream API).Однако применение функционального стиля на практике осложняется тем, что все стандартные функциональные интерфейсы из пакета
java.util.function
не объявляют проверяемых исключений (являются checked exception unaware).В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.
https://habr.com/ru/articles/676852/
Хабр
Обработка исключений в Java в функциональном стиле
Обработка исключений в Java в функциональном стиле В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле. Предпосылки В Java...
🔥2👍1
Java Records
Java Record-ы появились в Java 12 как preview feature (JEP 359), а финальный релиз был в Java 16 (JEP 395). В разных источниках обычно приводят примеры их использования для описания DTO (Data Transfer Objects), но сфера их применения гораздо шире. В статье автор приводит разные примеры. Мне понравился пример реализации стейт машины «State implementation”.
https://www.infoq.com/articles/exploring-java-records/
Java Record-ы появились в Java 12 как preview feature (JEP 359), а финальный релиз был в Java 16 (JEP 395). В разных источниках обычно приводят примеры их использования для описания DTO (Data Transfer Objects), но сфера их применения гораздо шире. В статье автор приводит разные примеры. Мне понравился пример реализации стейт машины «State implementation”.
https://www.infoq.com/articles/exploring-java-records/
InfoQ
Exploring Java Records beyond Data Transfer Objects
Records are a concise and easy-to-use syntax for creating immutable classes. By using Records, you can ensure that your APIs are bulletproof and less prone to errors. Additionally, Records can be applied with Domain-Driven Design (DDD) principles to create…
❤2👍1🔥1
Смерть от тысячи микросервисов
Статья заставляет задуматься ))
Пару фактов: Dropbox, Twitter/X, Facebook, Instagram, Shopify, Stack Overflow — эти и другие компании начинали как монолитные базы кода. Многие по сей день имеют в своей основе монолит. Shopify по-прежнему остается монолитом Rails. WhatsApp стал сверхновой благодаря монолиту Erlang и 50 инженерам. Что касается серверов, WhatsApp предпочитает использовать меньшее количество серверов и вертикально масштабировать каждый сервер в максимально возможной степени. Instagram был приобретен за миллиарды — с командой из 12 человек.
https://habr.com/ru/articles/760426/
Статья заставляет задуматься ))
Пару фактов: Dropbox, Twitter/X, Facebook, Instagram, Shopify, Stack Overflow — эти и другие компании начинали как монолитные базы кода. Многие по сей день имеют в своей основе монолит. Shopify по-прежнему остается монолитом Rails. WhatsApp стал сверхновой благодаря монолиту Erlang и 50 инженерам. Что касается серверов, WhatsApp предпочитает использовать меньшее количество серверов и вертикально масштабировать каждый сервер в максимально возможной степени. Instagram был приобретен за миллиарды — с командой из 12 человек.
https://habr.com/ru/articles/760426/
Quastor
How Shopify Ensures Consistent Reads
How Shopify deals with consistency issues due to replication lag with their primary-replica database setup.
🔥3❤2
Введение в Java Process Memory Model
В статье довольно простым языком описывается структура памяти виртуальной машины Java и даются параметры командной строки, которыми можно управлять областями памяти.
https://habr.com/ru/articles/744834/
В статье довольно простым языком описывается структура памяти виртуальной машины Java и даются параметры командной строки, которыми можно управлять областями памяти.
https://habr.com/ru/articles/744834/
Хабр
Введение в Java Process Memory Model
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено. Память, при этом, ресурс не бесконечный, и поэтому необходимо использовать...
👍3😍1
Под капотом Apache Kafka: zero copy и быстрые IO-операции с диском
В чем секрет высокой производительности Kafka?
Чтобы обеспечить высокую скорость операций записи на диск и чтения, Kafka использует не классическую передачу данных, а технологию под названием «Zero-copy», когда ЦП не копирует данные из одной области памяти в другую, а работает с прямым доступом к памяти (DMA, direct memory access) и отображением в памяти (memory mapping), а также со страничным кэшем.
https://bigdataschool-ru.turbopages.org/bigdataschool.ru/s/blog/kafka-page-cashe-and-zero-copy-transfer-technology.html
В чем секрет высокой производительности Kafka?
Чтобы обеспечить высокую скорость операций записи на диск и чтения, Kafka использует не классическую передачу данных, а технологию под названием «Zero-copy», когда ЦП не копирует данные из одной области памяти в другую, а работает с прямым доступом к памяти (DMA, direct memory access) и отображением в памяти (memory mapping), а также со страничным кэшем.
https://bigdataschool-ru.turbopages.org/bigdataschool.ru/s/blog/kafka-page-cashe-and-zero-copy-transfer-technology.html
🔥2
Вышла Java 21
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
https://habr.com/ru/articles/762084/
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
https://habr.com/ru/articles/762084/
🔥2🐳1
Перестаём бояться генерировать байт-код
Многие, возможно, думают, что работа с байт-кодом Java — это какая-то особенная магия. Разобраться в этом полезно для лучшего понимания как все работает изнутри.
https://habr.com/ru/articles/759990/
Многие, возможно, думают, что работа с байт-кодом Java — это какая-то особенная магия. Разобраться в этом полезно для лучшего понимания как все работает изнутри.
https://habr.com/ru/articles/759990/
Хабр
Перестаём бояться генерировать байт-код
Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом....
🔥3
Использование оконных функций с Hibernate 5 и 6
Начиная с версии 6, вы можете использовать оконные функции в запросах JPQL (Java Persistence Query Language — платформенно-независимый объектно-ориентированный язык запросов). Более старые версии Hibernate поддерживают их только в нативных запросах.
https://habr.com/ru/companies/otus/articles/743910/
Начиная с версии 6, вы можете использовать оконные функции в запросах JPQL (Java Persistence Query Language — платформенно-независимый объектно-ориентированный язык запросов). Более старые версии Hibernate поддерживают их только в нативных запросах.
https://habr.com/ru/companies/otus/articles/743910/
Thorben Janssen
JPQL - How to Define Queries in JPA and Hibernate
JPQL allows you to define database queries based on your entity model. Learn how to use all its features to build powerful queries with JPA and Hibernate.
👍3🔥1
Прожарка java.lang.String
Иногда комментарии к статье оказываются интереснее статьи )) вот пример. Хотя подача материала интересная и провокационная: как сломать строки в Java.
https://habr.com/ru/companies/bar/articles/747528/
Иногда комментарии к статье оказываются интереснее статьи )) вот пример. Хотя подача материала интересная и провокационная: как сломать строки в Java.
https://habr.com/ru/companies/bar/articles/747528/
Хабр
Прожарка java.lang.String
Давайте абьюзить баг в java.lang.String , который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки...
🤣2🥱1
Выступление на Joker 2023: Польза и вред Java-сообществ для инженеров
Эксперты из разных сфер поделятся опытом. Поговорим о том, как возникают сообщества, какие есть риски и чем сообщества полезны инженерам и компании. Обсудим роли и как начать проявляться.
https://jokerconf.com/talks/8136e7bf53844a45b3a3bde40cfd05bc/?referer=/persons/ee4fea77ee85444cba7f1f866c8b862b/
Эксперты из разных сфер поделятся опытом. Поговорим о том, как возникают сообщества, какие есть риски и чем сообщества полезны инженерам и компании. Обсудим роли и как начать проявляться.
https://jokerconf.com/talks/8136e7bf53844a45b3a3bde40cfd05bc/?referer=/persons/ee4fea77ee85444cba7f1f866c8b862b/
Joker 2023. Конференция для опытных Java‑разработчиков
Польза и вред Java-сообществ для инженеров | Доклад на Joker 2023
Поговорим о том, как возникают сообщества, какие есть риски, и чем сообщества полезны инженерам и компании. Обсудим роли и как начать проявляться.
🔥3❤1
Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции
При реализации потоковой обработки и анализа данных может возникнуть необходимость агрегирования записей для объединения нескольких независимых поток данных или обогащения какой-либо модели данных. Для этой цели может использоваться Kafka Streams, которая позволяет выполнять обработку данных в режиме реального времени.
https://habr.com/ru/articles/747658/
При реализации потоковой обработки и анализа данных может возникнуть необходимость агрегирования записей для объединения нескольких независимых поток данных или обогащения какой-либо модели данных. Для этой цели может использоваться Kafka Streams, которая позволяет выполнять обработку данных в режиме реального времени.
https://habr.com/ru/articles/747658/
Хабр
Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции
При реализации потоковой обработки и анализа данных может возникнуть необходимость агрегирования записей для объединения нескольких независимых поток данных или обогащения какой-либо модели данных....
❤1