Обновить
128K+

Java *

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

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

Shadow AI — почему инженеры скрывают, что пользуются ИИ

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

Слушал подкаст Code of Leadership, выпуск про AI-assisted engineering. Полтора часа про то, как правильно встроить ИИ в разработку: копайлоты, MCP, метрики, место ИИ в SDLC. Разговор хороший, по делу. И где-то в середине проскочил термин, за который я зацепился и с которым хожу уже неделю — shadow AI. Проскочил сноской, в ряду прочих ИБ-рисков, между утечками и комплаенсом.

А я на этой сноске завис. Потому что мне кажется, что она интереснее основного разговора...

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

Новости

One Branch To Rule Them All

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

Всем привет. На связи Михаил, технический лидер проекта Axelix.

Я уже довольно давно хотел написать небольшую статью о нашей модели ветвления git в надежде, что она может пригодиться и другим.

В мире существует немало стратегий ветвления git, например: Gitflow, GitHub-flow, Trunk-Based-Development (TBD) и так далее.

По своему опыту могу сказать, что команды обычно не берут какую-либо стратегию в точности в её исходной форме, а либо изобретают нечто совершенно новое сами, либо просто берут, к примеру, уже упомянутый GitFlow и адаптируют его под свои нужды.

Читать далее

Собственный RAG над Confluence на Java

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

Цель статьи — показать не асбтрактный пример как можно извлечь пользу из собственного RAG локально (если вдруг кто‑то ещё этого не сделал), и заодно посмотреть, какие основные параметры тут вообще доступны. Еще очень хотелось попробовать Spring AI =) Часто сидя на звонках я слышал от коллег: «вот хорошо бы сделать собственный RAG для Confluence», «вот бы развернуть у себя». И как будто бы навайбкодить такое решение — дело пары вечеров, но часто дальше разговоров дело не двигается.

В общем, закатав рукава, сделал свой собственный туллинг для поиска по Confluence.

Читать далее

Как я ускорил работу с топом-пользователей с 36 минут до 20 секунд, используя Redis Sorted Set

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

Всем привет, меня зовут Михаил, я работаю Java/Kotlin разработчиком в ОТП Банке.

Все мы знаем про Redis. Часто используем его для in-memory кэша. В основном это ключ и значение. Но что, если можно пойти дальше и, как в том фильме, раскрыть все возможности Redis на 100%?

Сегодня я хочу поговорить о Sorted Set в Redis. Что это за зверь и как его использовать.

Буду показывать на примере таблицы лидеров. Это можно использовать для разных задач, но я выбрал именно эту. Будем замерять время, ресурсы при нагрузках - все, как мы любим.

Присаживайтесь, будет интересно!

Узнать, что это за покемон

Одно лишнее if — и объект уезжает в кучу: как C2 решает, каким аллокациям не быть

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

Пара new в горячем методе может вообще не попасть в кучу — а после безобидного if внезапно вернуть аллокации обратно. Разбираемся, как C2 принимает такие решения, где ломается скалярная замена и как проверить всё это через JMH и диагностические флаги JVM.

Разобраться в JVM

Эксперимент с Claude Code на заброшенном Java-проекте

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

В этой статье я хотел бы сделать отчёт по эксперименту: взять чужой заброшенный Java-проект и методично прогнать через Claude Code все стадии, которые проходит легаси-код в реальной команде — от первого знакомства до рефакторинга и аудита.

Проект — форк учебного e-commerce на Spring Boot 2.2 / Java 11, Spring Security, Spring Data JPA, JWT, PostgreSQL, Angular 7 на фронте. Не обновлялся около шести лет — типичный «замороженный» легаси, только меньшего масштаба, чем в реальной компании.

Читать далее

Пересекая реку Стикс: Spring Boot 3.5 и проблема зомби-зависимостей

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

Недавно я разбирал истории CVE, связанные с завершением поддержки Tomcat 8.5, и решил посмотреть на Spring Boot 3.5. Я задался тем же вопросом применительно к Spring Boot: что происходит с уровнем защищённости приложения, когда используемая версия достигает End Of Life (EOL)?

Читать далее

От клика до железа: хроника одного запроса. Часть 2

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

В первой части мы заставили кнопку на веб-странице запустить локальный exe-файл через расширение Chrome и Native Messaging Host. Теперь усложним задачу: операция длится десять секунд, сообщает прогресс и поддерживает отмену. Для этого заменим sendNativeMessage() постоянным соединением connectNative(), перепишем хост на Java 21, разберём протокол, восстановление соединения и жизненный цикл процесса, а затем соберём exe с помощью GraalVM Native Image и проверим всё в настоящем Chrome.

Читать вторую часть

Как мы заменили 30-минутный polling на IMAP IDLE и построили маленькую распределённую систему

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

Когда-то наш почтовый загрузчик был обычным методом с @Scheduled. Раз в 30 минут он подключался к ящикам, искал новые вложения и запускал их обработку. Решение было простым, понятным и долгое время вполне рабочим.

Через несколько итераций вокруг того же загрузчика уже существовали IMAP IDLE listener'ы, PostgreSQL leases, heartbeat экземпляров приложения, перебалансировка почтовых ящиков между pod'ами, UID checkpoints, постоянная идемпотентность и отдельная обработка FolderClosedException. В какой-то момент мы даже попробовали держать несколько IMAP-соединений к одному ящику, но затем сознательно удалили эту часть архитектуры.

Это история не о том, как мы «заменили polling на push» одной настройкой. Она о том, как безобидный интеграционный адаптер постепенно превратился в маленькую распределённую систему. И о границе параллелизма, которую мы сначала провели не там.

Получить письмо

Как я навайбкодил бота в MAX и получил 2000 пользователей в течение 12 часов за 0 рублей

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

Всем привет, Хабр. Сегодня хочу рассказать свою историю провала и успеха, как я создал MAX-бота за 1 вечер и собрал более 2 тысяч пользователей на следующее утро, а через месяц потерял всё и всех.

Я живу в Республике Алтай, поэтому топливный кризис докатился до нас, наверное, позже всех. И 4 июля уже были очереди на заправках. Примерно в то же время появился легендарный gdebenz.ru. Автор уже писал историю своего успеха — вот его статья на vc.ru.

Вдохновляясь его идеей, а также проблемой функциональности (согласитесь, не всегда удобно с телефона заходить на сайт, где карта напичкана огромным количеством функционала), я решил создать бота в MAX. Тогда уже самозанятым дали возможность сделать до 2 ботов, поэтому одного я сделал для продакшена, второго использовал для дев-разработки.

Читать далее

Как я перестал разрывать архитектуру на десяток документов — и сделал свой C4-редактор

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

Инструмент: C4 QuietGridLabs. Можно открыть демо без авторизации: проект будет храниться локально в браузере.

Иногда архитектура «есть» — но пользоваться ею невозможно.

На доске лежит схема сервисов. В Confluence живёт описание. Где-то рядом — sequence-диаграмма, которую никто не открывал с прошлого года. ER-модель хранится в другом инструменте. А когда на ревью возникает простой вопрос «какой endpoint обслуживает этот путь?», команда начинает собирать ответ из памяти, догадок, выдумок, ссылок и исходников.

Я больше 15 лет работаю в ИТ, из них около десяти занимаюсь проектированием и системным дизайном. За это время перепробовал немало: Sparx, ArchiMate, Structurizr, Confluence, whiteboard-сервисы. Я не считаю их плохими — у каждого есть свой сценарий и своя аудитория. Но лично у меня постоянно оставалось ощущение разрыва: диаграмма была отдельно, документация отдельно, а живой контекст системы — в голове у людей.

В какой-то момент моими рабочими спасателями стали whiteboard и VS Code, а позже Cursor. В них можно быстро собрать мысль, оставить немного полезного творческого беспорядка и двигаться дальше. Но они не решали главную проблему: хотелось, чтобы система, её связи, сценарии и документация были одной навигационной моделью.

Так появился C4 QuietGridLabs. Это мой экспериментальный редактор, где C4-модель — это каркас проекта. К элементам можно прикреплять документацию, sequence-диаграммы, ER-диаграммы и описание API, а по связям — переходить от общего ландшафта к конкретным участникам взаимодействия.

Читать далее

2 рубля за сказку с озвучкой: как я считал юнит‑экономику AI‑продукта на коленке

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

Идея была простая: сделать что‑то небольшое в свободное время, что может превратится в параллельный источник дохода, не требуя от меня много личных часов. Остановился на Telegram‑боте, который генерирует персонализированные сказки на ночь: родитель задаёт участников, обстановку, тему — бот пишет сказку, при желании озвучивает.

Читать далее

Не подавать холодным! Прогрев JVM перед запуском трафика

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

Всем привет! Меня зовут Александр, я бэкенд-инженер в Банки.ру.

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

Дальше расскажу, что мы видели на графиках, какие версии проверили и отбросили, что происходит внутри JVM в первые минуты жизни процесса и что мы сделали.

Читать далее

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

Как мониторить Java-приложения: метрики, алерты и правило 80/20

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

Хороший мониторинг помогает быстро понять, что происходит с приложением и куда смотреть в первую очередь. Для этого не нужно пытаться измерить всё: базовый набор технических метрик покрывает большинство типовых проблем, а бизнес-метрики, SLO и анализ аномалий помогают заранее замечать нетипичные отклонения. В Календаре мы называем этот подход правилом 80/20.

Всем привет! Меня зовут Настя, я бэкенд-разработчик в Яндекс 360 и отвечаю за надёжность Календаря. В этой статье я покажу, какие метрики стоит взять за основу, как выбирать полезные алерты и чем дополнять базовый набор для оставшихся 20%.

Читать далее

Приложение простояло 918 мс, а сборщик мусора отработал за одну: разбираемся, куда ушло остальное

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

Секундная пауза в Java‑приложении легко выглядит как проблема сборщика мусора, хотя сам GC может отработать за миллисекунду.

Разберём, как safepoint’ы заставляют JVM ждать отдельные потоки, почему профилировщик способен указать не туда и какими инструментами найти реального виновника.

Читать далее

Анатомия VDD: Как я нашел RCE в форке Telegram, а Google Security не увидел «ничего вредоносного»

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

TL;DR Внутри альтернативного клиента ExteraGram работает внутренняя система динамического обновления компонентов. Через неё авторы могут в любой момент загрузить на ваш телефон код прямо из Telegram-канала, обойти окно установки (can_not_skip) и выполнить его в едином адресном пространстве приложения (с его UID и полными правами). В исследованной цепочке загрузки я не обнаружил проверки цифровой подписи. При компрометации канала или инфраструктуры обновлений это создаёт возможность массовой доставки вредоносного кода пользователям.

Как всё началось Был обычный вечер, делать было откровенно нечего. Я сам сидел на ExteraGram, и вдруг стало интересно - а как оно вообще внутри устроено? (Спойлер: после того, что я там увидел, я его снес).

Читать далее

Агент написал Джеймикс, тоже плохой

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

Часть 2 из 2. В первой части был холивар про самодельные фреймворки. Здесь — цифры: мы дали ИИ‑агенту построить одно и то же приложение на Джеймиксе и на голом Spring и честно сравнили результаты.

Читать далее

Почему мы написали свою библиотеку оркестрации ИИ агентов: AgentsGraph

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

Когда мы начинали строить продукт для распознавания и обработки первичных бухгалтерских документов — OCR, классификация, LLM‑извлечение полей, проверка человеком — казалось, что рынок оркестраторов уже всё решил: есть n8n для визуальных workflow, есть LangGraph для агентных пайплайнов, есть Temporal для durable‑исполнения. Мы попробовали примерить каждый — и в итоге написали свой: AgentsGraph, встраиваемую Java‑библиотеку декларативной оркестрации агентов. Ниже — почему.

Читать далее

Как мы заменили Oracle WebLogic в банке из топ-3: опыт внедрения единой платформы управления Java‑приложениями

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

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

Я Сергей Рощупкин, занимаюсь развитием платформы управления серверами приложений Digital Q.AppServer в «Диасофт». В статье разберу реальный кейс миграции с Oracle WebLogic в крупном банке, покажу, как устроена платформа и где в ней работают ИИ‑агенты, а в конце — практические советы инженерам, которые мы сформулировали по итогам проектов.

Читать далее

Пишем логи в journald с помощью Logback и FFM API

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

Разворачивать бэкенды для личного использования с помощью systemd удобно, но stdout плохо интегрируется с journald, а устанавливать софт только для просмотра логов не хочется. В статье - простой пример, как можно писать логи из Java-приложения в journald так, чтобы их потом удобно просматривать

Читать далее
1
23 ...