Обновить
256K+

Java *

Объектно-ориентированный язык программирования

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

Стили интеграции: от файлов до событий — как выбрать правильно

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.2K

Выбирать стиль интеграции приложений — всё равно что выбирать фундамент для дома. Ошибёшься — и переделывать придётся, когда стены уже стоят.

В этой статье я разбираю четыре основных стиля интеграции: передача файлов, общая база данных, удалённый вызов процедур (RPC) и асинхронный обмен сообщениями (Messaging). Без воды, на реальных примерах — включая историю провала TSB Bank, который стоил сотен миллионов фунтов.

Вы узнаете:

▪️ почему общая база данных — это антипаттерн для микросервисов;
▪️ как асинхронность спасает прод, когда падают соседние сервисы;
▪️ какие best practice используют команды, чтобы не получить распределённый монолит.

Если вы архитектор, тимлид или разработчик, который хочет строить надёжные системы — добро пожаловать под кат.

Читать далее

Как устроена транскрипция в Jitsi Meet: Jigasi, SIP и путь до EMR

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.5K

Когда мы проектировали пайплайн автоматического заполнения EMR по итогам видеоконсультаций, исходная гипотеза была простой: Jitsi Meet — open source, документация есть, значит, подключить бота и получить транскрипт — задача на пару дней. На практике именно этот слой занял непропорционально много времени относительно своей "очевидности".

В этой статье разберу, как устроена транскрипция в Jitsi Meet под капотом, почему это не "просто включить кнопку", с какими конфигурационными нюансами пришлось столкнуться и как в итоге был выстроен пайплайн от видеозвонка до структурированного текста.

Читать далее

Семь вещей, которые нельзя делать из-за стирания типов в Java

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

Мы, разработчики на Java, используем параметризованные типы каждый день: List<String>, Map<Long, User>, Optional<Order> и так далее. Однако у параметризованных типов есть важная особенность: в Java они существуют в полном виде только на этапе компиляции.

Читать далее

Kotlin для новичков: всё о функциях за 15 минут

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

Продолжаем серию «Kotlin для новичков»!

В прошлых статьях мы настроили IDE, разобрались с переменными и типами данных, научились управлять потоком программы через условия и циклы. Пришло время сделать следующий шаг — освоить функции.

В этом туториале вы узнаете:

▪️ Как объявлять функции и чем это отличается от Java.
▪️ Что такое именованные аргументы и значения по умолчанию (и почему это круто).
▪️ Как работает стек вызовов и области видимости.
▪️ Главные best practices, которые используют в разработке.

Читать далее

Миграция с CUBA Platform на Jmix с помощью ИИ

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели4.9K

Многие команды продолжают использовать приложения на платформе CUBA, которые хорошо работают и ежедневно решают реальные бизнес‑задачи. Но со временем неизбежным становится вопрос: стоит ли продолжать поддерживать приложение на старом стеке или лучше перенести его на Jmix?

В этой статье я хочу показать, как такая миграция выглядит на практике. Мы перенесли приложение‑пример Timesheets с CUBA Platform на Jmix и записали процесс шаг за шагом. Timesheets — это не маленькое демо с несколькими сущностями и CRUD‑экранами. Это приложение для учета рабочего времени с согласованиями, несколькими способами ввода времени, кастомным UI‑поведением, календарем, диаграммами и немалым объемом бизнес‑логики.

Читать далее

Я написал симулятор квантового поля на Java. Вот что из этого вышло

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

Одним вечером я решил проверить: что если взять решётку из 10 000 узлов, задать одно правило передачи энергии между соседями — и просто запустить? Никакой теоретической физики из учебника, никакой подготовки. Посмотреть что вырастет само.

Спойлер: за один день появились волновое уравнение, интерференция, фазовый переход, рождение и аннигиляция частиц, и стрела времени. Всё из одного уравнения.

Читать далее

Виды тестирования ПО: статика, динамика и 5 уровней, которые работают на практике

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.1K

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

Читать далее

Как мы научили AI-агента пользоваться IDE: дебаг, рефакторинг и run-конфигурации. Что нового в Veai 5.8

Время на прочтение4 мин
Охват и читатели14K

Дебаг, запуск проекта и рефакторинг. Все мы хорошо знакомы с этими фичами IDE и пользуемся ими практически каждый день. Но передовые ИИ-агенты для кодинга почему-то абсолютно ничего не знали про эту “базу” до релиза Veai 5.8 🙂 (ИИ-агент к JetBrains IDEs для написания кода, тестирования и отладки с доступом к топовым LLM и всем внутренним инструментам IDE).

Помимо глубокой интеграции агента с вашей любимой IDE, мы завезли ещё парочку улучшений и изменили подход к тарификации. Но обо всём по порядку.

Читать далее

Архитектура мультиканального Discord/Telegram voice-бота на Spring Boot: архитектура, грабли и production-решения

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели6.7K

Как я собрал мультиканального voice-бота на Spring Boot, который объединяет Discord, Telegram и веб-панель в одной системе.

Разбираю архитектуру, работу с голосом (TTS, запись каналов), интеграцию JDA + LavaPlayer и реальные проблемы продакшена — от memory leaks до ограничений Telegram API.

Читать далее

Обновления функциональности GigaIDE за март 2026

Время на прочтение3 мин
Охват и читатели6.9K

Закончился еще один месяц, а значит нам пора поделиться с Вами новостями о развитии GigaIDE. Ниже краткий обзор обновлений PRO-функционала GigaIDE, которые можно найти на нашем маркетплейсе. Обзор инкремента за февраль доступен по данной ссылке.

Читать далее

Tokenmaxxing: Новый тренд в бигтехах в 2026 году

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6.5K

Пока вы работаете, ваш коллега уже сжёг 210 миллиардов токенов за неделю. Это 33 Википедии. Он не написал ни строчки в продакшн — но возглавил корпоративный лидерборд и получил звание «Token Legend».

Токенмаксинг (tokenmaxxing) — это практика, при которой сотрудники компаний соревнуются за максимальное потребление токенов, превращая сам факт использования ИИ-инструментов в показатель производительности.

Рассмотрим откуда пошел термин, почему люди соревнуются и причем тут Performance Review в FAANG.

Читать дальше

Как проектировать бизнес‑логику в микросервисах: 3 правила агрегатов, которые работают

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6.8K

Когда бизнес-логика становится сложной, микросервисы из удобного инструмента превращаются в источник боли. Классические «сценарии транзакций» приводят к монструозным классам и распределённым транзакциям, которые невозможно поддерживать.

В этой статье разберу, как DDD и агрегаты помогают проектировать бизнес-логику так, чтобы она не разваливалась под нагрузкой. Покажу на реальном примере HR-сервиса:

▫️ почему объектные ссылки между сервисами — зло;
▫️ как одно правило «транзакция = один агрегат» меняет архитектуру.

Читать далее

Hibernate merge: начали за здравие, закончили за упокой

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели6.7K

Я уже давно хотел на этот счет написать статью. Она короткая, но имхо она нужна.

Давайте с места в карьер: merge в Hibernate это не универсальный save, и чаще всего он Вам не нужен.

На самом деле, если абстрагироваться, то это специализированная операция для случая, когда у вас есть detached-сущность, и вы хотите перенести ее состояние в текущий Persistence Context.

Проблема в том, что на практике merge очень часто используют для апдейта любой сущности (Spring Data JPA иногда так делает) и как следствие получают лишние SQL-запросы.

Ниже разберем на мой взгляд главное - почему именно так происходит, где merge действительно нужен, а где он превращается в антипаттерн (P.S да почти везде).

Читать далее

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

Kotlin для новичков: всё об условиях и циклах за 15 минут

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

Продолжаем серию «Kotlin для новичков»! Сегодня разбираем самое сердце любого кода — управляющие конструкции: if, when, for, while.Вы узнаете, почему if в Kotlin — это не просто оператор, а выражение, как when заменяет целые лесенки else-if, и чем for по диапазонам лучше классического цикла. Реальные примеры и лучшие практики и история о том, как мы отрефакторили 300 строк спагетти-кода в 80 строк с помощью when и диапазонов. Читайте, чтобы писать чистый и понятный код на Kotlin.

Читать далее

Децентрализованная оркестрация на RabbitMQ вместо Apache Camel

Время на прочтение7 мин
Охват и читатели6.9K

В этой статье мы расскажем о библиотеке оркестрации обработки данных, которая использует RabbitMQ как децентрализованный механизм передачи объектов между микросервисами. Ее задача — создание единого автоматизированного рабочего бизнес‑процесса.

Описание архитектуры

Речь пойдет о системе, которая ежедневно обрабатывает большой объем данных, получаемых как единовременно в виде файлов скачиваемых с различных FTP обменников в установленные регламентом промежутки времени, так и данных, получаемых в онлайн режиме в виде асинхронного стриминга информации посредством Kafka\RabbitMQ.

Читать далее

Выпущена версия Jmix 2.8

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.6K

Мы рады сообщить о выпуске Jmix 2.8! В этом релизе мы продолжаем улучшать фреймворк и Studio, делая Jmix еще более надежной основой для корпоративной разработки. Jmix 2.8 также является LTS-релизом и будет получать бесплатную поддержку в течение трех лет.

Ниже приведен краткий обзор основных новых возможностей Jmix 2.8. Полный список изменений можно найти в разделе документации Что нового.

Читать далее

Hibernate Reactive: опыт миграции, архитектурные компромиссы и скрытая сложность

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.8K

Наш проект на Quarkus столкнулся с необходимостью более эффективного использования ресурсов под высокой нагрузкой. В поисках решения мы решили попробовать миграцию с классического Hibernate ORM на Hibernate Reactive (HR). В этой статье я поделюсь реальным опытом этого перехода: разберу ключевые архитектурные различия, расскажу о неочевидных «граблях», на которые мы наступили, и покажу на production-коде, какую цену пришлось заплатить за реактивность.

Версии используемого ПО: Quarkus: 3.31.3, Quarkus Hibernate Reactive: 3.31.3 и Vertx-pg-client (реактивный клиент PostgreSQL): 4.5.24.

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

Читать далее

CUBA: почему она спасала мои хакатоны и убивала мои продакшн-проекты

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.8K

Если вы хоть раз занимались корпоративной разработкой на Java, вы наверняка слышали про CUBA Platform. И нет — это не про Карибы.

CUBA — это full-stack Java-фреймворк для быстрой разработки бизнес-приложений: CRM, документооборот, ERP-подобные системы, внутренние инструменты и всё то, что принято называть словом «enterprise».

Я работал с ним на нескольких хакатонах и в паре реальных проектов. И у меня к нему сложные чувства — поэтому и пишу.

Читать далее

Агрегаты в микросервисах: гайд по проектированию бизнес-логики с примерами на Java

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.4K

Разрабатываете микросервисы и чувствуете, что бизнес-логика превращается в хаос?

В статье на примере простого UserService разберем, как три правила агрегатов DDD и асинхронные доменные события помогают навести порядок.

Обсудим, почему нельзя хранить объектные ссылки между сервисами, как спроектировать агрегат на Spring Boot

Читать далее

Конференция Яндекс-разработчиков по JVM-языкам, бекендеры собрались обсудить будущее Java-подобных языков

Время на прочтение3 мин
Охват и читатели9.8K

28 марта состоялась, с одной стороны, довольно камерная встреча небольшого круга специалистов: Backend‑разработчиков Java. Разумеется, на встрече были и фронтэнд‑специалисты, и фулстек‑программисты, но когда залу задавали вопросы, кто есть кто — максимальное и максимально доминирующее количество рук было именно от специалистов бекенда.

Как это было. Я пришел на час позже, не в 12 обеда, но в час дня. Сразу попал в зал на лекцию, где рассказывались не суперсложные вопросы, но затрагивались вопросы времени в Java, рассинхронизации серверов, специфики подсчета времени в таком старом языке, как Java, с учетом максимальной экономии памяти и того, что было до UTC: функции вне библиотеки time для подсчета минут и секунд при анализе времени постов, создания того или иного контента, проведения операций в целом.

Читать далее