Создание и использование оберток (wrappers) в Java: подробный разбор
В мире разработки обертки (wrappers) — это мощный инструмент, который позволяет инкапсулировать сложную логику, добавлять новую функциональность или адаптировать существующие классы для более удобного использования. В этой статье мы рассмотрим, что такое обертки, какие задачи они решают, и как их правильно создавать на Java. Мы также приведем примеры реального применения, чтобы показать их пользу.
Читать: https://habr.com/ru/articles/868786/?utm_campaign=868786
@a_cup_of_java | Другие наши каналы
В мире разработки обертки (wrappers) — это мощный инструмент, который позволяет инкапсулировать сложную логику, добавлять новую функциональность или адаптировать существующие классы для более удобного использования. В этой статье мы рассмотрим, что такое обертки, какие задачи они решают, и как их правильно создавать на Java. Мы также приведем примеры реального применения, чтобы показать их пользу.
Читать: https://habr.com/ru/articles/868786/?utm_campaign=868786
@a_cup_of_java | Другие наши каналы
👍2
Java News Roundup: TomEE 10, Struts 7, Payara Platform, GlassFish, Commonhaus Foundation, Gradle
This week's Java roundup for December 16th, 2024 features news highlighting: GA releases of Apache TomEE 10.0.0 and Apache Struts 7.0.0; the December 2024 release of the Payara Platform, GlassFish 8.0.0-M9, Infinispan 15.1.0, Gradle 8.12.0, and SlateDB and Debezium join the Commonhaus Foundation.
By Michael Redlich
Read: https://www.infoq.com/news/2024/12/java-news-roundup-dec16-2024/
@a_cup_of_java | Другие наши каналы
This week's Java roundup for December 16th, 2024 features news highlighting: GA releases of Apache TomEE 10.0.0 and Apache Struts 7.0.0; the December 2024 release of the Payara Platform, GlassFish 8.0.0-M9, Infinispan 15.1.0, Gradle 8.12.0, and SlateDB and Debezium join the Commonhaus Foundation.
By Michael Redlich
Read: https://www.infoq.com/news/2024/12/java-news-roundup-dec16-2024/
@a_cup_of_java | Другие наши каналы
AI-ассистент с помощью Spring AI
Команда Spring АйО перевела туториал, в котором рассматриваются возможности Spring AI для интеграции с LLM.
Вы узнаете, как использовать API Function Calling для выполнения задач на естественном языке, генерировать ответы в JSON-формате и сохранять контекст диалога.
Читать: https://habr.com/ru/companies/spring_aio/articles/869080/?utm_campaign=869080
@a_cup_of_java | Другие наши каналы
Команда Spring АйО перевела туториал, в котором рассматриваются возможности Spring AI для интеграции с LLM.
Вы узнаете, как использовать API Function Calling для выполнения задач на естественном языке, генерировать ответы в JSON-формате и сохранять контекст диалога.
Читать: https://habr.com/ru/companies/spring_aio/articles/869080/?utm_campaign=869080
@a_cup_of_java | Другие наши каналы
❤2🔥2🙈2
Барьеры и модели памяти – explained
Всем привет!
Начну с предыстории.
Когда мы в Амазоне планировали переносить сервис с x86/64 на ARM, почему-то никто в нашей команде не поднял тему того, что надо уделить особое внимание работе с многопоточностью и синхронизацией, так как из-за того, что у этих двух архитектур разные модели памяти, могли случиться неожиданные проблемы.
Однако, на тот момент я тоже об этом не знал, и нам повезло, что мы изначально везде использовали модель памяти Sequential Consistency (что это – далее в статье), поэтому все прошло гладко. Теперь, зная про модели памяти и возможные последствия, боюсь представить, что было бы в противном случае.
Как родилась статья
Когда я впервые изучал модели памяти, я мало что понял, и спустя месяц все забыл. Потом прочитал еще раз, но, к сожалению, тоже хватило ненадолго. В итоге я решил расписать все для себя максимально подробно, с красивыми картинками, чтобы при необходимости можно было к ним возвращаться и не тратить много времени на вспоминание.
Статья основана на материалах лекции Computer Science Center (CSC) с курса “Параллельные вычисления” преподавателя Калишенко Е.Л. Крайне рекомендую ознакомиться со всеми лекциями курса (более структурированного материала по теме я еще не встречал). Благо он в открытом доступе – ссылка.
Что такое барьеры памяти и зачем это все нужно?
Начнем с небольшого описания того, как устроена “условная” архитектура процессора. Почему условная? Потому что может отличаться в зависимости от конкретной реализации, но суть похожа.
Читать: https://habr.com/ru/articles/869188/?utm_campaign=869188
@a_cup_of_java | Другие наши каналы
Всем привет!
Начну с предыстории.
Когда мы в Амазоне планировали переносить сервис с x86/64 на ARM, почему-то никто в нашей команде не поднял тему того, что надо уделить особое внимание работе с многопоточностью и синхронизацией, так как из-за того, что у этих двух архитектур разные модели памяти, могли случиться неожиданные проблемы.
Однако, на тот момент я тоже об этом не знал, и нам повезло, что мы изначально везде использовали модель памяти Sequential Consistency (что это – далее в статье), поэтому все прошло гладко. Теперь, зная про модели памяти и возможные последствия, боюсь представить, что было бы в противном случае.
Как родилась статья
Когда я впервые изучал модели памяти, я мало что понял, и спустя месяц все забыл. Потом прочитал еще раз, но, к сожалению, тоже хватило ненадолго. В итоге я решил расписать все для себя максимально подробно, с красивыми картинками, чтобы при необходимости можно было к ним возвращаться и не тратить много времени на вспоминание.
Статья основана на материалах лекции Computer Science Center (CSC) с курса “Параллельные вычисления” преподавателя Калишенко Е.Л. Крайне рекомендую ознакомиться со всеми лекциями курса (более структурированного материала по теме я еще не встречал). Благо он в открытом доступе – ссылка.
Что такое барьеры памяти и зачем это все нужно?
Начнем с небольшого описания того, как устроена “условная” архитектура процессора. Почему условная? Потому что может отличаться в зависимости от конкретной реализации, но суть похожа.
Читать: https://habr.com/ru/articles/869188/?utm_campaign=869188
@a_cup_of_java | Другие наши каналы
👍4
Как жить без IntelliJ IDEA? Часть №5. Заключение
Наступил конец года и вместе с ним завершается наш цикл статей. Команда Spring АйО рассмотрела некоторые последствия ухода Ultimate IDEA из РФ и как с этим теперь жить.
Давайте коротко перечислим итоги каждой части, посмотрим, что мы пропустили, а также попробуем представить, как бы выглядело идеальное решение.
Читать: https://habr.com/ru/companies/spring_aio/articles/869354/?utm_campaign=869354
@a_cup_of_java | Другие наши каналы
Наступил конец года и вместе с ним завершается наш цикл статей. Команда Spring АйО рассмотрела некоторые последствия ухода Ultimate IDEA из РФ и как с этим теперь жить.
Давайте коротко перечислим итоги каждой части, посмотрим, что мы пропустили, а также попробуем представить, как бы выглядело идеальное решение.
Читать: https://habr.com/ru/companies/spring_aio/articles/869354/?utm_campaign=869354
@a_cup_of_java | Другие наши каналы
😁6❤5⚡2❤🔥2😐2🫡1
Spring Boot, AspectJ. Введение в аспектно-ориентированное программирование
Привет, меня зовут Николай Пискунов, я руководитель направления Big Data и автор медиа вАЙТИ. Недавно мне в руки попался старый проект, написанный на Spring Boot. В нем я нашел пару десятков эндпоинтов, в которых метод обрамлен logger. Логирование в таком виде — это важный элемент как для ПО, так и для безопасности, но оно делает код объемнее, его становится сложнее читать.
В идеальном случае методы можно сократить буквально до пары строк, но для этого нужно отделить бизнес-логику от остального кода. Сделать это можно с помощью аспектно-ориентированного программирования (AOP) — языка для определения именованного аспекта. О нем и пойдет речь в этой статье.
Читать: https://habr.com/ru/companies/beeline_cloud/articles/869602/?utm_campaign=869602
@a_cup_of_java | Другие наши каналы
Привет, меня зовут Николай Пискунов, я руководитель направления Big Data и автор медиа вАЙТИ. Недавно мне в руки попался старый проект, написанный на Spring Boot. В нем я нашел пару десятков эндпоинтов, в которых метод обрамлен logger. Логирование в таком виде — это важный элемент как для ПО, так и для безопасности, но оно делает код объемнее, его становится сложнее читать.
В идеальном случае методы можно сократить буквально до пары строк, но для этого нужно отделить бизнес-логику от остального кода. Сделать это можно с помощью аспектно-ориентированного программирования (AOP) — языка для определения именованного аспекта. О нем и пойдет речь в этой статье.
Читать: https://habr.com/ru/companies/beeline_cloud/articles/869602/?utm_campaign=869602
@a_cup_of_java | Другие наши каналы
🎉2
5 лучших языков программирования для создания нейросетей
Топовые языки для программирования нейросетей — Python, Java, C#, С++.
Читать: «5 лучших языков программирования для создания нейросетей»
@a_cup_of_java | Другие наши каналы
Топовые языки для программирования нейросетей — Python, Java, C#, С++.
Читать: «5 лучших языков программирования для создания нейросетей»
@a_cup_of_java | Другие наши каналы
🔥2
Параллелизм может быть только 1
В прошлой статье автором были выявлены проблемы производительности в следствие блокировок и других причин. В этой статье попробуем с ними разобраться.
Продолжить мяукать
Читать: https://habr.com/ru/articles/869856/?utm_campaign=869856
@a_cup_of_java | Другие наши каналы
В прошлой статье автором были выявлены проблемы производительности в следствие блокировок и других причин. В этой статье попробуем с ними разобраться.
Продолжить мяукать
Читать: https://habr.com/ru/articles/869856/?utm_campaign=869856
@a_cup_of_java | Другие наши каналы
👏3😁2
10 самых интересных ошибок в Java проектах за 2024 год
В 2024 году мы проверили много проектов, о чём регулярно писали в свой блог. Теперь же настала новогодняя пора, и самое время рассказывать новогодние истории. Вот и мы решили поведать о самых интересных Java ошибках, встреченных нами в Open Source проектах.
Читать: https://habr.com/ru/companies/pvs-studio/articles/869920/?utm_campaign=869920
@a_cup_of_java | Другие наши каналы
В 2024 году мы проверили много проектов, о чём регулярно писали в свой блог. Теперь же настала новогодняя пора, и самое время рассказывать новогодние истории. Вот и мы решили поведать о самых интересных Java ошибках, встреченных нами в Open Source проектах.
Читать: https://habr.com/ru/companies/pvs-studio/articles/869920/?utm_campaign=869920
@a_cup_of_java | Другие наши каналы
🎉2
Паттерн Data Mapper на котиках: Практическое руководство от разработчика, который не боится мурлыкать
В этой статье мы рассмотрим интересный паттерн Data Mapper и его реализацию на Java. Data Mapper аккуратно переносит данные между объектами и базой данных, не вмешиваясь в логику самих объектов. Основная идея заключается в том, чтобы создать отдельный слой или компонент, который отвечает за перенос данных между объектами доменной модели и базой данных, при этом объекты домена остаются полностью независимыми от механизмов хранения данных
В отличие от Active Record, где объекты сами знают, как сохранять себя в базу, Data Mapper разделяет эти ответственности.
Читать: https://habr.com/ru/companies/otus/articles/868588/?utm_campaign=868588
@a_cup_of_java | Другие наши каналы
В этой статье мы рассмотрим интересный паттерн Data Mapper и его реализацию на Java. Data Mapper аккуратно переносит данные между объектами и базой данных, не вмешиваясь в логику самих объектов. Основная идея заключается в том, чтобы создать отдельный слой или компонент, который отвечает за перенос данных между объектами доменной модели и базой данных, при этом объекты домена остаются полностью независимыми от механизмов хранения данных
В отличие от Active Record, где объекты сами знают, как сохранять себя в базу, Data Mapper разделяет эти ответственности.
Читать: https://habr.com/ru/companies/otus/articles/868588/?utm_campaign=868588
@a_cup_of_java | Другие наши каналы
😁3🎉2
Кошмар работы с *.docx файлами на Java посредством класса XWPFDocument из API Apache POI
Использование *.docx файлов как шаблонов для формирования кастомных отчётов с помощью библиотеки Apache POI XWPF на Java и связанные с этим проблемы. Примеры кода выполняющие простейшие операции поиска, замены, удаления элементов документа.
Читать: https://habr.com/ru/articles/870544/?utm_campaign=870544
@a_cup_of_java | Другие наши каналы
Использование *.docx файлов как шаблонов для формирования кастомных отчётов с помощью библиотеки Apache POI XWPF на Java и связанные с этим проблемы. Примеры кода выполняющие простейшие операции поиска, замены, удаления элементов документа.
Читать: https://habr.com/ru/articles/870544/?utm_campaign=870544
@a_cup_of_java | Другие наши каналы
👍6
How Meta Ported Million Lines of Android Code from Java to Kotlin
In order to maximize the benefits brought by Kotlin in terms of productivity and safety, Meta engineers have been hard at work to translate their 10 million line Android codebase from Java into Kotlin. One year into this process, they have ported approximately half of their codebase and developed a specific tool, Kotlinator, to automate the process as much as possible.
By Sergio De Simone
Read: https://www.infoq.com/news/2024/12/meta-java-kotlin-port/
@a_cup_of_java | Другие наши каналы
In order to maximize the benefits brought by Kotlin in terms of productivity and safety, Meta engineers have been hard at work to translate their 10 million line Android codebase from Java into Kotlin. One year into this process, they have ported approximately half of their codebase and developed a specific tool, Kotlinator, to automate the process as much as possible.
By Sergio De Simone
Read: https://www.infoq.com/news/2024/12/meta-java-kotlin-port/
@a_cup_of_java | Другие наши каналы
🎉3🥱3
Построение динамических запросов к базе данных с использованием Spring Data JPA Specifications
Spring Data JPA Specifications — мощный инструмент для написания динамических запросов в реляционных базах данных. Они позволяют строить сложные SQL-запросы в декларативной форме, комбинируя их с помощью предикатов, таких как
Читать: https://habr.com/ru/articles/870698/?utm_campaign=870698
@a_cup_of_java | Другие наши каналы
Spring Data JPA Specifications — мощный инструмент для написания динамических запросов в реляционных базах данных. Они позволяют строить сложные SQL-запросы в декларативной форме, комбинируя их с помощью предикатов, таких как
AND, OR и т.д используя Java-код. В этой статье мы рассмотрим, зачем нужны Specifications, их преимущества и недостатки, а также лучшие практики для использования.Читать: https://habr.com/ru/articles/870698/?utm_campaign=870698
@a_cup_of_java | Другие наши каналы
👍4❤2
Какие языки программирования учить в 2025 году
Топ-7 языков, в котором нет Rust, но есть 1С.
Читать: «Какие языки программирования учить в 2025 году»
@a_cup_of_java | Другие наши каналы
Топ-7 языков, в котором нет Rust, но есть 1С.
Читать: «Какие языки программирования учить в 2025 году»
@a_cup_of_java | Другие наши каналы
🤣5🎉3👎2
Java News Roundup: Spring AI 1.0-M5, LangChain4j 1.0-Alpha1, Grails 7.0-M1, JHipster 8.8
This week's Java roundup for December 23rd, 2024 features news highlighting: the fifth milestone release of Spring AI 1.0; the first milestone release of Grails 7.0; the first alpha release of LangChain4j 1.0; and the release of JHipster 8.8.
By Michael Redlich
Read: https://www.infoq.com/news/2024/12/java-news-roundup-dec23-2024/
@a_cup_of_java | Другие наши каналы
This week's Java roundup for December 23rd, 2024 features news highlighting: the fifth milestone release of Spring AI 1.0; the first milestone release of Grails 7.0; the first alpha release of LangChain4j 1.0; and the release of JHipster 8.8.
By Michael Redlich
Read: https://www.infoq.com/news/2024/12/java-news-roundup-dec23-2024/
@a_cup_of_java | Другие наши каналы
🔥2
Kafka Streams ч5: настройка окон, работа с задержанными событиями и suppression
Это моя финальная часть(ну пока что ;)) серии статей про Kafka Streams, прошлые статьи тут [ноль, один, два, три] Теперь давайте разработаем приложение, которое считывает: cобытия о пульсе из топика pulse-events.
Читать: https://habr.com/ru/articles/870784/?utm_campaign=870784
@a_cup_of_java | Другие наши каналы
Это моя финальная часть(ну пока что ;)) серии статей про Kafka Streams, прошлые статьи тут [ноль, один, два, три] Теперь давайте разработаем приложение, которое считывает: cобытия о пульсе из топика pulse-events.
Читать: https://habr.com/ru/articles/870784/?utm_campaign=870784
@a_cup_of_java | Другие наши каналы
❤2
Что такое API и как с ним работать?
В этой статье разберёмся, что такое API и как он работает на практике, как запустить первые интеграции и как научиться разбираться в документации.
Читать: «Что такое API и как с ним работать?»
@a_cup_of_java | Другие наши каналы
В этой статье разберёмся, что такое API и как он работает на практике, как запустить первые интеграции и как научиться разбираться в документации.
Читать: «Что такое API и как с ним работать?»
@a_cup_of_java | Другие наши каналы
🔥5🤷♂1👍1
Конец года — новые баги с датами
Наткнулся сегодня (24-12-30) на преинтереснейшую ошибку.
Простенький скрипт ищет файл по дате создания в имени, и вместо вчерашнего дня (24-12-29) почему-то ищет файл за следующий год (25-12-29).
Казалось бы, мистика, всё прекрасно работало с лета, и как на зло сломалось как раз под конец года ... и кто в этом виноват?
Читать: https://habr.com/ru/articles/870994/?utm_campaign=870994
@a_cup_of_java | Другие наши каналы
Наткнулся сегодня (24-12-30) на преинтереснейшую ошибку.
Простенький скрипт ищет файл по дате создания в имени, и вместо вчерашнего дня (24-12-29) почему-то ищет файл за следующий год (25-12-29).
Казалось бы, мистика, всё прекрасно работало с лета, и как на зло сломалось как раз под конец года ... и кто в этом виноват?
Читать: https://habr.com/ru/articles/870994/?utm_campaign=870994
@a_cup_of_java | Другие наши каналы
👍7
Делаем свой docker-образ Apache Kafka
В 2024 году мы не дождались выхода в свет Apache Kafka 4.0, в которой окончательно исчезнет поддержка ZooKeeper, оставив нам для создания кластеров только KRaft. Кто-то давно уже перешёл на эту прекрасную технологию, другие же размышляют, как им жить дальше — оставаться на линейке 3.х или в омут с головой.
Новогодние каникулы самое подходящее время для того, что пощупать новую версию. Хотя код невозбранно доступен в Github проекта Apache Kafka, docker-образов текущих сборок 4.0 мне найти не удалось. Также поддержку 4.0 ещё не добавили в довольно популярный, и с недавних пор мною любимый, k8s-оператор strimzi. Ну что же, придётся устроить себе праздник самому!
Читать: https://habr.com/ru/articles/871108/?utm_campaign=871108
@a_cup_of_java | Другие наши каналы
В 2024 году мы не дождались выхода в свет Apache Kafka 4.0, в которой окончательно исчезнет поддержка ZooKeeper, оставив нам для создания кластеров только KRaft. Кто-то давно уже перешёл на эту прекрасную технологию, другие же размышляют, как им жить дальше — оставаться на линейке 3.х или в омут с головой.
Новогодние каникулы самое подходящее время для того, что пощупать новую версию. Хотя код невозбранно доступен в Github проекта Apache Kafka, docker-образов текущих сборок 4.0 мне найти не удалось. Также поддержку 4.0 ещё не добавили в довольно популярный, и с недавних пор мною любимый, k8s-оператор strimzi. Ну что же, придётся устроить себе праздник самому!
Читать: https://habr.com/ru/articles/871108/?utm_campaign=871108
@a_cup_of_java | Другие наши каналы
❤5👍2
Работа с файлами через Yandex Object Storage в Spring Boot
Yandex Cloud Object Storage - это совместимое с AWS S3 облачное хранилище. В этой статье мы интегрируем его в Spring Boot приложение, используя SDK Амазона
Читать: https://habr.com/ru/articles/871280/?utm_campaign=871280
@a_cup_of_java | Другие наши каналы
Yandex Cloud Object Storage - это совместимое с AWS S3 облачное хранилище. В этой статье мы интегрируем его в Spring Boot приложение, используя SDK Амазона
Читать: https://habr.com/ru/articles/871280/?utm_campaign=871280
@a_cup_of_java | Другие наши каналы
👍3😁3
Часть 1: Как я создал идеальный REST API — микросервис инцидентов на Java и Spring
В этой статье вы узнаете, как спроектировать и реализовать REST API для микросервиса на Java с использованием Spring Framework.
Рассмотрим лучшие практики, принципы архитектуры, реализацию CRUD-операций и удобные инструменты, такие как Lombok, ControllerAdvice, MapStruct. Эта статья будет полезна как начинающим разработчикам, так и тем, кто хочет улучшить свои навыки в проектировании REST API.
Читать: https://habr.com/ru/articles/870640/?utm_campaign=870640
@a_cup_of_java | Другие наши каналы
В этой статье вы узнаете, как спроектировать и реализовать REST API для микросервиса на Java с использованием Spring Framework.
Рассмотрим лучшие практики, принципы архитектуры, реализацию CRUD-операций и удобные инструменты, такие как Lombok, ControllerAdvice, MapStruct. Эта статья будет полезна как начинающим разработчикам, так и тем, кто хочет улучшить свои навыки в проектировании REST API.
Читать: https://habr.com/ru/articles/870640/?utm_campaign=870640
@a_cup_of_java | Другие наши каналы
👍8