Как стать автором
Поиск
Написать публикацию
Обновить
52.07

Kotlin *

Статически типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Java Digest # 27

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.3K

Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Лето в разгаре, а Java-мир не останавливается ни на день. Пока кто-то разъезжается в отпуска, инженеры Oracle и энтузиасты экосистемы выкатывают один апдейт за другим. В этом выпуске вас ждут: JEPs для JDK 25 и 26 — от стабильного JFR до удаления Applet API, милестоны Project Reactor и Spring Framework 7, обновления от Micronaut, Apache Camel и GraalVM, день рождения Kotlin и революционные новости от JetBrain, пачка интересных видео с Java One’25 и Inside Java, обзоры книг, туториалов и просто полезные статьи на каждый день. А еще 30 августа нас ждет встреча на JVM Day в Москве!

Заваривайте кофе и читайте — от инженерных мелочей до изменений, которые могут повлиять на архитектуру ваших приложений. Поехали! 🚀

Читать выпуск №27

Kafka умеет синхронно. В Spring Boot

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.5K

Apache Kafka — король асинхронного взаимодействия в микросервисных архитектурах. Но что если нужно получить ответ сразу?

Перевод от команды Spring АйО шаг за шагом покажет, как превратить Kafka в инструмент синхронной коммуникации — с настройкой ReplyingKafkaTemplate, топиками для ответа и тайм-аутами.

Читать далее

flowOn vs withContext: правильное переключение потоков в Flow в Kotlin

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров477

Привет, Хабр!

Сегодня мы рассмотрим, как правильно переключать контексты в Kotlin Flow и почему flowOn — это не то же самое, что withContext.

Читать далее

Explyt Spring Debugger

Время на прочтение5 мин
Количество просмотров1.2K

Всем привет! На связи команда Explyt Spring. Недавно была статья от JetBrains, а также ее перевод на Habr, где они рассказывали о новом плагине Spring Debugger и о том как используют нативный код Spring для лучшего понимания контекста приложения. С помощью non‑suspending breakpoints JetBrains «вклиниваются» в жизненный цикл Spring и собирают все необходимые для плагина данные. Но ведь это почти тоже что и мы пытались делать в нашем плагине с помощью javaagent, о котором писали статьи. И нам даже показалось, что они вдохновлялись нашими статьями, первая из которых увидела свет в октябре 2024 года (возможно только показалось).

Нужно отдать должное тому как они интегрировали эту идею в плагин — данные о контексте сами подгружаются в процессе дебага, максимально прозрачно для пользователя и без лишних действий с его стороны. У нас же, требовалось загружать контекст приложения вручную, выбрав соответствующую «ран» конфигурацию, на основе которой мы получали данные о приложении, что стало предметом конструктивной критики со стороны пользователей.

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

Читать далее

JEP 511: Импорт модулей в Java 25 — как упростить работу с библиотеками

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров967

Команда Spring АйО проанализировала JEP 511: импорт модулей. Теперь можно будет одним импортом подключать все пакеты, которые экспортирует модуль. Это сильно упростит работу с большими библиотеками, особенно в прототипах и обучении.

Читать далее

Аннотация Lazy как спасение от циклических зависимостей

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.7K

В прошлом посте команда Spring АйО подробно разобрала, как @Lazy помогает экономить ресурсы и ускорять старт приложения. Но забыли упомянуть ещё один крайне полезный кейс применения этой аннотации — борьбу с циклическими зависимостями.

Читать далее

Простая минификация Json тел запросов / ответов с Kotlin Serialization

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.6K

Привет!

Недавно в рамках одного из проектов на стеке KMP, Ktor и Kotlin Serialization мы с командой решили провести эксперимент и определить возможность и целесобразность минификации тел запросов / ответов на Json.

Да, мы знаем про GraphQL, Protobuf и др., но в нашем случае имел место необузданный интерес наколхозить такое решение. И при всей его наивности удалось сократить средний размер итоговых джсонов (после всех внутренних оптимизаций) на 15-20%.

Читать далее

JEP 520: Метод-трейсинг и тайминг в JFR — замер времени конкретных методов без кода и агентов

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.3K

Команда Spring АйО провела небольшое исследование JEP 520. В Java 25 JFR (Java Flight Recorder) позволит точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.

Читать далее

Java в 2025 году: взгляд на результаты опроса Stack Overflow

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров7.7K

Рустам Курамшин, эксперт Spring АйО, разобрал свежий отчёт Stack Overflow за 2025 год о результатах ежегодного опроса разработчиков за 2025 год, и это отличный повод взглянуть на экосистему Java через призму статистики и интересов сообщества.

Читать далее

Уже завтра! OpenIDE — профессиональные инструменты без ограничений

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров16K

Уже завтра, 31 июля состоится публичный запуск OpenIDE — новой мультиязычной среды разработки, построенной на базе IntelliJ IDEA Platform.

Мероприятие пройдет онлайн на YouTubeVK и RUTUBE каналах Spring АйО. Участие абсолютно бесплатное.

Главное — зарегистрироваться, чтобы получить на почту ссылки на трансляцию и файл .ics для добавления события в календарь.

Читать далее

JEP 519: Компактные заголовки объектов — теперь официально

Уровень сложностиПростой
Время на прочтение1 мин
Количество просмотров2.2K

Команда Spring АйО представляет одну немаловажную фичу Java 25: компактные заголовки объектов (Compact Object Headers). Это позволит JVM экономить память и ускоряться без вмешательства в код.

Читать далее

Введение в Jimmer ORM

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров2.9K

Совсем недавно статью про ORM-фреймворк Jimmer Михаила Поливахи, эксперта сообщества Spring АйО, опубликовал Baeldung.

Перед вами переработанная и дополненная версия, подготовленная специально для сообщества Spring АйО. В ней Михаил раскрывает ключевые особенности Jimmer: отсутствие JPA-наследия,  декларативные DTO и гибкий DSL и потенциальную интеграцию со Spring.

Читать далее

Бизнес требует стабильной работы мобильного приложения у всех пользователей. Что делать?

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров809

Как загружать большие объемы данных? Часть 1.

Привет, друзья! Наша команда более 10 лет занимается вопросами эффективной передачи данных на мобильные устройства. Мы исследовали разные варианты: одни оказались слишком медленными, другие приводили к переполнению памяти на мобильном устройстве.

Хотим рассказать, как мы в команде «Форсайт. Мобильная платформа» сделали синхронизацию больших объемов данных, чтобы это работало, в том числе, на ТСД (терминал сбора данных). Для экономии батареи ТСД специально снабжают слабыми процессорами. Весь подбор инструментов и алгоритмов мы уже апробировали в продукте «Форсайт. Мобильная платформа» (ФМП).

Специфичные условия для мобильного приложения начнем РАЗБИРАТЬ С КРЫШИ, так будет проще подобраться к существу вопроса. В среднем, отличие общедоступных приложений от бизнес‑приложений — в объеме потребляемых данных. У бизнес‑приложений объем данных значительно больше. Но, как водится, ожидание бизнес‑пользователей от приложения точно такие же, как и у всех: приложение должно работать не просто быстро, а моментально. А это значит, что нужно найти особые техники по ускоренной передаче данных. При подборе технологий для транспорта данных нам хотелось получить:

А) Стабильный механизм передачи данных.

Б) Самый быстрый/производительный протокол из возможных.

Поскольку мы производим спецшину по транспорту данных, для нас это означает, что мобильный пользователь будет обращаться в наш инструмент за «чемоданом» данных, и мы должны как можно быстрее передать ему этот «чемодан» целиком. У разработчиков возникает вопрос — насколько большой может быть «чемодан»? Насколько будет нескромен кейс, который нужно будет тащить? За ориентир мы взяли ½ миллиона записей табличных данных.

Читать далее

Ближайшие события

Асинхрон внутри синхрона

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.8K

Привет, Хабр! Я Борис Шляга, программист в отделе разработки кредитных продуктов для физических лиц. Мы занимаемся продуктом «Кубышка» — это небольшой заем до зарплаты на непредвиденные расходы.

С появлением новых правил регулирования кредитов и займов возникла необходимость в проверке долговой нагрузки клиентов при выдаче продукта. Теперь Кубышка не может быть одобрена клиентам с высоким ПДН.

Сервис расчета ПДН давно работал внутри компании — нам оставалось только реализовать интеграцию с ним. Расскажу, как мы это сделали, как решили проблемы «по дороге» и что в итоге получилось.

Читать далее

Spring Tips: Аннотация @Lazy

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.8K

Хотите ускорить запуск приложения и сэкономить память? Аннотация @Lazy в Spring поможет инициализировать бины только тогда, когда они действительно понадобятся. Команда Spring АйО поможет разбобраться, как применять @Lazy точечно и глобально, в чём плюсы и подводные камни ленивой инициализации, и как избежать неожиданных ошибок на проде.

Читать далее

Rich Errors в Kotlin 2.4: шаг вперёд или шаг в сторону?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.8K

Команда Spring АйО не могла остаться в стороне и не прокомментировать одну из самых обсуждаемых новинок Kotlin, анонсированную на KotlinConf 2025 — Rich Errors.

Читать далее

Mobile System Design. Проектируем новостную ленту

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2.4K

Элементы System Design уже прочно вошли в процесс собеседований. Однако в мобильной разработке довольно часто возникает недопонимание что же все-таки необходимо продемонстрировать чтобы получить заветный офер. В этой статье я разберу один из кейсов, который может встретиться на реальном собеседовании и кроме этого покажу примерный сценарий такого интервью. Данная статья будет интересна мобильным разработчикам, как Android, так и iOS. Сам формат System Design Interview я разбирал в предыдущей статье. Здесь же мы сконцентрируемся на практике.

Итак, задача: спроектировать новостную ленту. 

Читать далее

Structured Concurrency в Java: наконец-то находит опору

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров6.9K

API structured concurrency в Java наконец-то обрёл устойчивость. В новом переводе от команды Spring АйО подробно рассматриваются последние изменения, появившиеся с выходом JEP 505: фабричный метод open(), политики Joiner'ов, улучшенная отмена задач, дедлайны, передача контекста через ScopedValues и строгая защита от ошибок использования. Всё это делает параллельное программирование в Java более безопасным, читаемым и управляемым.

Читать далее

Пишем агента на Kotlin: KOSMOS

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров3.2K

Интернет завален реализациями на Питоне, но иногда удобнее разбираться с технологиями на своём основном языке. Для мен;я это Kotlin.

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

Статья обещает соблюдать два принципа, упрощающих восприятие:

‣ Движение от частного к общему, потому что легче воспринимать примеры, чем абстракцию.
‣ Быстрая обратная связь, как с REPL.

Агента реализуем так, чтобы легко было заменить лежащую в основе LLM. Посмотрим, как отличается работа при использовании REST API в сравнении с SDK, пощупаем Гигачат и Anthropic.

Ах да, 🪐 KOSMOS — акроним. Kotlin Open Synthetic Mind Orbiting System.

Читать далее

Погружение в разработку плагинов для Android Studio

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров1.8K

В одной из прошлых статей было рассказано, как начать разработку собственного плагина для Android Studio (или IntelliJ Idea). В этой статье окунёмся немного глубже и создадим более сложные и, хочется верить, ещё более полезные инструменты для повседневной работы в IDE.

Рассмотрим разработку плагинов для IntelliJ Idea и Android Studio на нескольких нетипичных, но простых и боевых задачах. Будет много полезных ссылок, пояснений и несколько примеров с кодом.

Читать далее