47 источников · 64 тем
Архитектура1Базы данных6БД1Вайбкодинг1Идемпотентность1Инфраструктура3Криптография2Лицензии1Логика1Менеджмент1Микросервисы2Мониторинг2Пароли2Производительность2Разметка данных1Ранжирование1Риски1Рынок труда1Совместимость1Тестирование1Хеширование1Чистый код1Экономика1Эло1Языки программирования1Яндекс1AI5Amplicode1API4ArchUnit1Auth1ConnectionDetails1DevOps1Docker Compose1GC1Gradle1HealthTech1Hibernate1Highload3Java8JDBC1JDK2JFR1JPA3JVM5Kafka1Kotlin1Latency1LLM1MCP4ML1Observability1Open Source1ORM1PostgreSQL1QA1RAG1Security2Skill1Skills1Spring3Spring Boot1SRE1Testcontainers1
Habr
Статья
Базы данных
Краткое резюме · 8 пунктов
- Хранение событий в платформе требует 2 ТБ дискового пространства и замедляет запросы.
- Решение: заменить Postgres на ClickHouse для эффективного сжатия данных и аналитических запросов.
- Используются PeerDB и Temporal для бесшовного переноса данных из Postgres в ClickHouse.
- Тестирование показало сжатие данных в 31 раз и улучшение производительности запросов.
- Возникли проблемы с отсутствием id у строк, заполнением нового поля в каждой строке, созданием публикаций и удалением записей в ClickHouse.
- Доработки на стороне разработки: вставка батчами, использование unhex() и bytes_as_strings, фильтрация по "байтовым" полям.
- Тестирование в продакшене: улучшение производительности и сокращение занимаемого места на диске.
- Пользовательские запросы на чтение данных не требуют высокой производительности.
Открыть источник ↗
Habr
Статья
AI
Краткое резюме · 6 пунктов
- Модель поддерживает 10 языков, включая русский.
- Модель сохраняет интонации, эмоции и особенности тембра.
- Qwen3-TTS работает быстро даже на старшей модели 1.7B.
- Возможности модели включают синтез с готовыми голосами, создание голоса по описанию и клонирование голоса.
- Модель может использоваться для озвучки контента, разработки игр, аудиокниг, автоматизации и многого другого.
- Портативная версия Qwen3-TTS Portable PRO доступна для скачивания с поддержкой NVIDIA GPU и CPU, а также русифицированным интерфейсом.
Открыть источник ↗
Yandex
Блог
Highload
- Блог со статьями о проектировании высоконагруженных приложений
Открыть источник ↗
Habr
Статья
AIВайбкодинг
Краткое резюме · 7 пунктов
- Вайбкодинг — ролевая игра для парней, желающих чувствовать себя хакерами без сложной работы.
- Автор статьи, ML-инженер, навайбкодил приложение, используя LLM, и столкнулся с неочевидными трансформациями личности.
- Различаются вайбкодинг и программирование с AI-ассистентом.
- Автор испытал положительные стороны вайбкодинга, такие как быстрое решение задач и рост насмотренности.
- Однако долгосрочное использование вайбкодинга может привести к негативным последствиям, таким как снижение когнитивной выносливости и атрофия problem solving.
- Автор подчеркивает важность сохранения сопротивления и контроля над процессом разработки.
- В конечном итоге автор считает, что использование AI-ассистентов должно сопровождаться самостоятельным решением задач и сохранением контроля над проектом.
Открыть источник ↗
Habr
Статья
Логика
Краткое резюме · 8 пунктов
- Метод Холмса часто связывают с «абдуктивной логикой», хотя он использовал дедуктивный метод.
- В 1978 году ученые исследовали метод Холмса в эпистемологической перспективе.
- Пирс разработал логическую процедуру «абдукция».
- Абдукция — метод здравого смысла, основанный на ограничении вариантов событий.
- Метод Холмса основан на жестком ограничении вариантов событий с помощью дедуктивного метода.
- Холмс ищет маловероятные или невозможные версии событий, основываясь на дедуктивных ограничениях.
- Шерлок Холмс всегда внимательно изучает улики и место преступления для поиска ключей к другим версиям.
- Метод Холмса опирается на дедуктивный метод, хотя он также использует индукцию и абдукцию для восстановления хода событий.
Открыть источник ↗
Habr
Статья
Базы данныхPostgreSQL
Краткое резюме · 8 пунктов
- WAL — ключевой компонент внутреннего устройства Postgres.
- WAL используется для записи изменений в базе данных на диск.
- WAL состоит из последовательности записей (record) с заголовком и полезной нагрузкой.
- WAL записывается в WAL buffers, которые затем отправляются на диск.
- Оптимизация WAL включает использование различных кодеков сжатия, таких как pglz, LZ4 и ZSTD.
- В Postgres 15 был осуществлен переход на использование LZ4 для сжатия WAL.
- Оптимизация WAL также включает сжатие больших записей целиком, а не по страницам.
- В будущем планируется возможность сжатия одного record на основе данных о предыдущем.
Открыть источник ↗
Habr
Статья
Базы данных
Краткое резюме · 9 пунктов
- Настройка пула соединений важна для производительности веб-приложений.
- Размер пула соединений должен быть небольшим, чтобы избежать задержек и блокировок.
- Уменьшение размера пула соединений может значительно улучшить производительность.
- Ограниченные ресурсы, такие как CPU, диск и сеть, влияют на производительность базы данных.
- SSD-накопители работают быстрее благодаря параллелизму и умному управлению памятью контроллером.
- Увеличение числа потоков может работать лучше, когда блокировки создают возможности для выполнения.
- Формула ((число_ядер × 2) + эффективное_число_шпинделей) может использоваться для определения оптимального размера пула соединений.
- Блокировка пула может возникать из-за захвата слишком большого количества соединений одним потоком.
- Размер пула должен быть минимальным для предотвращения взаимоблокировки и может зависеть от конкретного случая.
Открыть источник ↗
Habr
Статья
Инфраструктура
Краткое резюме · 7 пунктов
- Технический долг в инфраструктуре — проблема, которая может привести к серьезным последствиям.
- Классический подход «работает — не трогай» больше не работает, необходимо системно решать проблему.
- Харденинг — стратегия защиты от кибер-коллекторов и предотвращения рисков.
- Технический долг представляет собой портфель «токсичных активов» с различными профилями риска.
- Харденинг включает инвентаризацию активов, сегментацию, управление конфигурациями, обновление и управление доступами.
- Реальные кейсы из практики К2Тех демонстрируют методологию погашения технического долга.
- Системный подход к харденингу помогает превратить инфраструктуру в надежный и предсказуемый бизнес-актив.
Открыть источник ↗
Habr
Статья
Микросервисы
Краткое резюме · 5 пунктов
- Миграция данных при переходе с монолита на микросервисы является важным вопросом.
- Варианты решения: использование общей базы, представление как интерфейс, база как интерфейс, служба-обертка, выставление агрегата.
- Синхронизация данных между монолитом и микросервисами может быть выполнена через переключение владельца, синхронизацию приложением, трассировочную запись или синхронизацию внешним сервисом.
- Выбор решения зависит от конкретных требований и ограничений проекта.
- Важно руководствоваться принципами минимализма и достаточности при выборе решения.
Открыть источник ↗
Habr
Статья
Микросервисы
Краткое резюме · 8 пунктов
- Статья посвящена миграции с монолита на микросервисы и 7 миграционных паттернам.
- Паттерн «Удавка» подходит для поэтапного выноса части функционала из монолита с возможностью отката.
- Паттерн «Композиция UI» используется для разделения функционала на модули и выноса одного из них в микросервис.
- Паттерн «Разделение по абстракции» подходит для обособления функционала, используемого разными модулями.
- Паттерн «Шпион» используется для разработки и тестирования нового функционала, пока микросервис не реализован полностью.
- Паттерн «Параллельное выполнение» применяется для апробирования нового функционала перед его внедрением.
- Паттерн «Канареечный релиз» позволяет выпускать функционал только для части клиентов для снижения уровня негатива в случае ошибки.
- Паттерн «Декоратор» используется для сбора данных по интенсивности использования функционала перед имплементацией микросервиса.
Открыть источник ↗
Habr
Статья
HighloadБазы данных
Краткое резюме · 11 пунктов
- Ритейл в Яндекс Еде: отдельный проект с 1 миллиардом записей о ценах и остатках товаров.
- Первая версия сервиса была на базе PostgreSQL и представляла собой гигантский кеш.
- Новая архитектура сервиса: «простое» хранилище, отделенное от витрин и продуктовой логики.
- Переход от JSON к protobuf для компактности хранения данных и упрощения обновлений.
- Использование брокера сообщений для синхронизации изменений и обеспечения надежности системы.
- Выбор YDB для масштабируемой СУБД с автоматическим решардированием, автоматическим масштабированием и брокером сообщений с exactly once.
- Переход от архитектуры «перезаписываем всё» к архитектуре «применяем изменения».
- Синхронизация асинхронных обновлений и валидаций с использованием оптимистических блокировок и версионирования.
- Использование батчевания сообщений на уровне protobuf для снижения накладных расходов.
- Обучение работы с распределенной СУБД: Cross-Shard Transactions, оптимизация запросов, «соль» к ключу шардирования.
- Решение проблемы с оптимистическими блокировками и поколениями с помощью изменения логики и добавления событий в исходящий топик.
Открыть источник ↗
Habr
Статья
Highload
Краткое резюме · 6 пунктов
- Netflix столкнулся с проблемой в Ranker: скоринг «серендипности» потреблял 7,5% CPU.
- Решение: батчинг, оптимизация архитектуры и использование разных библиотек для вычислительных ядер.
- «Горячая точка» в Ranker — Java-вычисления скалярных произведений внутри энкодера «серендипности».
- Использование JDK Vector API для векторизации умножения матриц на аппаратуре AVX-512.
- Оптимизация помогла снизить потребление CPU на 7% и падение средней задержки на 12%.
- Vector API позволил заменить сложную реализацию на Java-код, упрощая ревью, сопровождение и итерации.
Открыть источник ↗
Habr
Статья
Observability
Краткое резюме · 6 пунктов
- OpenTelemetry — современный фреймворк для сбора, обработки и экспорта телеметрических данных.
- Spring Boot 4.0 предлагает новый Spring Boot Starter для OpenTelemetry.
- Micrometer Tracing с мостом OpenTelemetry экспортирует трассировки в формате OTLP в бэкенд.
- Spring Boot поддерживает отправку логов по OTLP в OpenTelemetry-совместимый бэкенд.
- OpenTelemetry SDK позволяет экспортировать логи в формате OTLP.
- Важно использовать протокол OTLP для интеграции с OpenTelemetry, а не конкретную библиотеку.
Открыть источник ↗
Habr
Статья
Базы данныхJPA
Краткое резюме · 8 пунктов
- Строго типизированные API становятся хрупкими со временем.
- Метамодели, такие как Querydsl и JPA Criteria, помогают решить эту проблему.
- Новый механизм в Spring Data предлагает более легкую и естественную альтернативу.
- Строковые ссылки на свойства имеют ограничения, включая хрупкость и отсутствие проверки компилятором.
- Альтернативные подходы на основе метамоделей обеспечивают проверку на этапе сборки.
- Spring Data предоставляет адаптеры для интеграции метамоделей с различными API.
- Типобезопасные ссылки на свойства обеспечивают безопасность, рефакторинг-безопасность и ясность кода.
- Поддержка Kotlin в Spring Data адаптирует Kotlin-дружелюбные API с использованием перегрузки оператора div (/).
Открыть источник ↗
Habr
Статья
Базы данныхJPA
Краткое резюме · 10 пунктов
- Spring Data JDBC — легковесный репозиторный слой доступа к данным поверх реляционной БД.
- Принцип «what you see is what you get» — каждое обращение к репозиторию означает конкретный SQL-запрос.
- Агрегат в Spring Data JDBC — дерево (DAG) сущностей с одним корнем (Aggregate Root).
- Репозиторий работает с агрегатом как с единым целым: загружает и сохраняет целиком.
- Размер агрегата напрямую определяет стоимость его загрузки.
- Старайтесь проектировать маленькие агрегаты.
- Используйте Single Query Loading для загрузки всего агрегата одним SQL-запросом.
- Для больших объёмов данных используйте Stream как возвращаемый тип.
- Для массовых операций используйте @Modifying запросы вместе с @Query.
- Не забывайте закрывать Stream и обеспечивать открытую транзакцию.
Открыть источник ↗
CodingHorror
Статья
Чистый код
Краткое резюме · 9 пунктов
- Теория разбитого окна: не оставляйте «сломанные окна» без внимания и исправляйте их сразу.
- Пренебрежение ускоряет процесс деградации программного обеспечения.
- Теория основана на статье из Atlantic Monthly 1982 года.
- Разбитые окна могут привести к беспорядку и преступности.
- Оставленная без присмотра собственность становится легкой добычей для вандалов.
- Вандализм начинается быстрее в районах с анонимностью и отсутствием заботы о частной собственности.
- Восприятие беспорядка создает петлю отрицательной обратной связи.
- Стабильное соседство может превратиться в негостеприимные джунгли из-за отсутствия заботы.
- Растущая разобщенность может привести к изменению поведения жителей и снижению их активности на улицах.
Открыть источник ↗
Habr
Статья
MCP
Краткое резюме · 6 пунктов
- MCP — универсальный протокол для взаимодействия с ИИ.
- MCP создан для упрощения интеграции ИИ-ассистентов с различными API и сервисами.
- Основная цель MCP — унификация способа обмена контекстом между ИИ и внешним миром.
- MCP стандартизирует взаимодействие между компонентами: диалог, инструменты, память и ресурсы.
- Протокол обеспечивает безопасность данных и конфиденциальность, но не решает проблемы безопасности полностью.
- MCP уже стал стандартом для ИИ-агентов и поддерживается ключевыми игроками индустрии.
Открыть источник ↗
Habr
Статья
MCP
Краткое резюме · 7 пунктов
- MCP — открытый протокол, разработанный Anthropic, для интеграции ИИ в экосистеме Java.
- MCP упрощает взаимодействие между приложениями на ИИ и источниками данных, инструментами и агентами.
- MCP фокусируется на сочетаемости и стыкуемости, обеспечивая гибкость и возможность переключения между LLM провайдерами.
- MCP Java SDK — последняя языковая привязка протокола.
- SDK предлагает многофункциональный фундамент для интеграции ИИ моделей с внешними инструментами.
- Spring AI расширяет MCP Java SDK, добавляя возможности для интеграции со Spring Boot приложениями.
- Стартеры Spring Boot облегчают интеграцию ИИ сценариев в приложения.
Открыть источник ↗
SpringIO
Статья
JDBC
Краткое резюме · 7 пунктов
- Начиная с Spring Data JDBC 3.2.0-M2, поддерживается загрузка одним запросом.
- Загрузка одним запросом загружает произвольные агрегаты с помощью одного оператора select.
- Для включения необходимо вызвать setSingleQueryLoadingEnabled(true) на относительном отображающем контексте.
- В версии 3.2.0-M2 это работает только для простых агрегатов.
- База данных должна поддерживать аналитические функции.
- Идея: представить данные агрегата в Excel, используя оконные функции для создания индекса строк в группах.
- Текущий подход реализован только для Spring Data JDBC, simple aggregate и специфических методов запроса.
Открыть источник ↗
Habr
Статья
Auth
Краткое резюме · 7 пунктов
- DPoP — механизм безопасности OAuth 2.0, привязывающий access token к клиенту.
- DPoP решает проблему утечки токенов и несанкционированного доступа.
- Bearer-токены не обеспечивают достаточную безопасность, так как не проверяют владение приватным ключом.
- DPoP требует, чтобы клиент отправлял DPoP Proof JWT для каждого запроса токена.
- DPoP Proof содержит клеймы, ограничивающие его использование конкретным endpoint'ом и токеном.
- Keycloak и Quarkus предоставляют встроенную поддержку DPoP.
- DPoP становится необходимостью для доступа к чувствительным ресурсам.
Открыть источник ↗
Habr
Статья
Криптография
Краткое резюме · 8 пунктов
- Автор создал кроссплатформенное приложение Dark Message для шифрования сообщений.
- Dark Message обеспечивает end-to-end шифрование с использованием AES-256.
- Приложение работает полностью офлайн и не требует интернет-соединения.
- Данные никогда не покидают устройство пользователя.
- Для создания приложения использовался ИИ (Claude от Anthropic).
- Приложение разработано на Windows, iOS и Android.
- Решены проблемы с кириллицей, разными клавиатурами и алгоритмами деривации ключей.
- Приложение опубликовано в App Store, RuStore и доступно для Windows.
Открыть источник ↗
Habr
Статья
JVMJDK
Краткое резюме · 7 пунктов
- Обновление микросервисов с JDK 8 на JDK 17 привело к проблемам с памятью в контейнерах.
- Утилизация памяти выросла в 4 раза, контейнеры начали ловить OOMKill и перезапускаться.
- JVM стала создавать больше потоков, OS выделяла больше памяти, дефолтный GC в JDK 17 добавил накладные расходы.
- Проблема была вызвана багом в JDK, который привел к раздуванию нативной памяти.
- Переход на JDK 17 может быть сложным из-за скрытых особенностей поведения JVM в контейнерах.
- Важно следить за потреблением нативной памяти и использовать рекомендованные исправления.
- Опыт показывает важность понимания взаимодействия JVM с контейнерными рантаймами и Linux-аллокаторами.
Открыть источник ↗
Habr
Статья
JVMGC
Краткое резюме · 6 пунктов
- Утечка памяти в Java возникает, когда объекты не освобождаются GC из-за оставшихся ссылок.
- Статические коллекции, внутренние классы, забытые слушатели и кэши без политики вытеснения — частые причины.
- VisualVM, Eclipse MAT и JConsole/JVisualVM помогают выявлять утечки памяти.
- Предотвращение: ограничение статических коллекций, методы очистки, статические вложенные классы, удаление слушателей.
- Закрытие ресурсов через try-with-resources и тестирование на утечки также важны.
- Проактивные практики и инструменты помогают предотвратить утечки и обеспечить стабильную работу кода.
Открыть источник ↗
Habr
Статья
Инфраструктура
Краткое резюме · 7 пунктов
- Инфраструктура включает множество компонентов: агенты, оркестровка, IaC, CI/CD.
- Повышение надежности: уменьшение связности, нивелирование падения CI/CD, кросс-ДЦ-инсталляция БД.
- Разделение сервисов по тирам надежности: критичные, важные, внутренние, нерегулярно используемые.
- Обеспечение работоспособности в режиме «минус один ДЦ» для всех сервисов.
- Уменьшение числа онлайн-зависимостей для повышения надежности.
- Избегать кольцевых зависимостей и использовать «админский контур» для деплоя компонентов.
- Сомневаться во всем и валидировать индустриальные практики для обеспечения надежности.
Открыть источник ↗
Habr
Статья
HibernateJPAORM
Краткое резюме · 9 пунктов
- Merge в Hibernate — это не универсальный save, и чаще всего он вам не нужен.
- Merge — специализированная операция для detached-сущности, которую нужно перенести в текущий Persistence Context.
- На практике merge часто используют для апдейта любой сущности и получают лишние SQL-запросы.
- Merge — мердж состояния объектов, а не просто сохранение изменений.
- Вне detached-сценария механика почти всегда избыточна.
- Merge может быть вредным из-за лишнего SELECT перед UPDATE и каскадирования изменений.
- Антипаттерн «find → change → save» — типичный сервисный метод с лишними накладными расходами.
- Merge имеет место при работе с detached-сущностью между транзакциями.
- Важно помнить цену merge и использовать его разумно.
Открыть источник ↗
Habr
Статья
QAТестирование
Краткое резюме · 6 пунктов
- Регрессионное тестирование может столкнуться с проблемой парадокса пестицида.
- Команда Яндекс Такси внедрила систему весов для тест-кейсов.
- Система помогает отбирать наиболее опасные сценарии, включая старые и потенциально проблемные.
- Внедрение привело к актуализации базы, проверке гипотез и победе над парадоксом пестицида.
- Дежурный получает приоритетные задачи от системы, снижая когнитивную нагрузку.
- В планах — развитие регресса в сторону Data-Driven-тестирования с Impact Analysis.
Открыть источник ↗
Habr
Статья
Spring
Краткое резюме · 7 пунктов
- Spring Boot 4 и Spring Framework 7 — новые версии популярных Java-фреймворков.
- Spring Boot 4 модулирует автоконфигурацию для ускорения запуска и уменьшения размера uber-jar.
- Spring Framework 7 интегрирует core resilience: повторные попытки и ограничение конкурентности.
- Поддержка версионирования HTTP API реализована через HTTP-заголовки.
- Команда Spring исследует поддержку ИИ-ассистентов в рамках Spring Tools.
- Переход со Spring Boot 3 на 4 облегчается модулем совместимости с Jackson 2 и руководством по миграции.
- Расширенная корпоративная поддержка Spring Boot 4 предоставляет гибкость для обновления.
Открыть источник ↗
Habr
Статья
Менеджмент
Краткое резюме · 8 пунктов
- Enterprise-решения часто требуют погружения в детали доменной области.
- Знание доменной области может быть полезным, но также фатальным для программиста и проекта.
- Неравномерная конфигурация компетенций в команде приводит к перегрузке ключевых разработчиков.
- Код становится менее стабильным, производительным и прозрачным для других.
- Проблема связана с Subject Matter Expert — «дамокловым мечом» над системой.
- Проблема часто возникает из-за неправильного менеджмента.
- Для решения важно стремиться к взаимозаменяемости и удерживать обученный персонал.
- Следить, чтобы никто не работал на грани срыва.
Открыть источник ↗
Habr
Статья
Java
Краткое резюме · 6 пунктов
- Маленькая ошибка в дизайне Java API может привести к серьезным проблемам.
- Пример: метод getCache() возвращает ссылку на изменяемое состояние объекта.
- Проблема может привести к сломанной инкапсуляции и нарушению безопасности.
- Решение: возвращать неизменяемую копию или read-only обертку.
- Важно, чтобы элементы коллекции также были immutable.
- Необходимо внимательно следить за передачей возможности мутирования внутреннего состояния.
Открыть источник ↗
Habr
Статья
MCPSkill
Краткое резюме · 7 пунктов
- Spring Explore — Skill для анализа Spring-приложений и определения контекста.
- Skill помогает понять специфику Spring-фреймворков и экосистемы.
- Spring Explore расширяет знания Agent в области проектирования архитектуры приложений.
- Skill может использоваться в «ручном» режиме для получения ответов на вопросы.
- Автоматическое использование: Agent самостоятельно подбирает и активирует skills.
- Spring Explore также может использоваться в собственных skills для анализа и генерации кода.
- Пример: создание REST endpoint с использованием DDD.
Открыть источник ↗
Habr
Статья
Инфраструктура
Краткое резюме · 7 пунктов
- Axelix — инструмент для упрощения отладки, тестирования и мониторинга Spring Boot приложений.
- Ядро проекта Axelix — Open Source продукт на GitHub.
- Axelix будет следовать модели Open Core и может быть установлен аналогично Grafana.
- Инструмент помогает решить проблемы с отладкой: уровень логирования, свойства, N+1 запросы.
- Axelix интегрируется с AI Agent-ами для ревью кода, документации и других задач.
- Инструмент отличается от Spring Boot Admin и имеет больше возможностей.
- Первый milestone выпущен, GA-релиз планируется во второй половине лета 2026 года.
Открыть источник ↗
Habr
Статья
ЛицензииOpen Source
Краткое резюме · 5 пунктов
- Copyright возникает автоматически при создании кода и задает исключительные права автора на копирование, создание производных работ, распространение и публичный показ.
- Публичный код сам по себе не становится Open Source: права на использование нужно явно дать через лицензию, желательно одобренную OSI.
- Copyleft-лицензии различаются по силе: AGPL может затрагивать SaaS-сценарии и модификации, LGPL мягче для обычного использования библиотеки.
- Для монетизации открытого продукта возможны dual licensing, Source Available лицензии и BSL с отложенным переходом в Open Source.
- Для проектов с внешними контрибьюторами дальше становятся важны CLA, DCO и управление правами на вклад участников.
Открыть источник ↗
Habr
Статья
ИдемпотентностьAPIБДKafkaSpring
Краткое резюме · 5 пунктов
- Статья описывает Phantom Write Problem: проверки идемпотентности проходят, но данные всё равно повреждаются при реальной конкурентности, crash-recovery и повторах.
- Выделены четыре режима отказа: истечение TTL для ключей, частичное выполнение с зависшим IN_PROGRESS, TOCTOU-гонка при конкурентной проверке и потеря идемпотентности на границах API/Kafka/downstream.
- Рекомендуемый паттерн Idempotency Barrier: хранить ключи в БД, не завязывать корректность на TTL, выполнять бизнес-запись и смену статуса в одной транзакции, атомарно захватывать ключ через INSERT ... ON CONFLICT / SELECT ... FOR UPDATE и прокидывать correlation/idempotency key через системные границы.
- Для финансовых и order-processing систем Redis-only и локальная API-дедупликация недостаточны; каждый downstream-потребитель должен иметь собственный барьер идемпотентности.
- Для наблюдаемости предлагаются метрики idempotency.hit.rate, idempotency.stale.reclaim.count и idempotency.status.distribution.
Открыть источник ↗
Habr
Статья
JavaJDKJVMПроизводительность
Краткое резюме · 5 пунктов
- JEP 526 вводит LazyConstant: потокобезопасную ленивую инициализацию значения через Supplier, которое успешно вычисляется не более одного раза при первом get().
- Объект позволяет хранить ссылку как final, а вычисленное значение помечается @Stable; это даёт JVM возможность применить constant folding.
- null запрещён, исключение из Supplier не кешируется и позволяет повторную попытку, циклический вызов get() приводит к IllegalStateException, а отмена и таймауты не предусмотрены.
- List.ofLazy и Map.ofLazy лениво вычисляют каждый элемент по индексу или ключу, неизменяемы и полезны для простых in-memory cache; equals может инициировать вычисление многих элементов.
- API развивает Stable Values из JDK 25: в JDK 26 оно переименовано и упрощено, а в JDK 27 ожидается удаление вспомогательных методов вроде проверки инициализации и orElse.
Открыть источник ↗
Baeldung
Статья
JavaSecurityПаролиХеширование
Краткое резюме · 5 пунктов
- Для хранения паролей нужны односторонние, устойчивые к коллизиям и намеренно медленные функции хеширования, усложняющие перебор.
- Для каждого пароля следует генерировать уникальную случайную соль: она повышает энтропию и защищает от заранее вычисленных rainbow tables.
- MD5 и обычный SHA-512 не рекомендуются для паролей: они слишком быстрые, а MD5 также уязвим к коллизиям.
- PBKDF2, BCrypt и SCrypt подходят лучше благодаря настраиваемой вычислительной сложности, которую можно повышать по мере роста мощности оборудования.
- Java предоставляет PBKDF2 через PBEKeySpec и SecretKeyFactory, а Spring Security — реализации PasswordEncoder для PBKDF2, BCrypt и SCrypt; соль создаётся и сохраняется в результирующем хеше автоматически.
Открыть источник ↗
Habr
Статья
JavaSecurityПаролиКриптография
Краткое резюме · 6 пунктов
- Пароли следует хранить как криптографические хеши и использовать проверенные алгоритмы, а не разрабатывать собственную схему хеширования.
- Уникальная случайная соль добавляется к каждому паролю и хранится вместе с хешем; одинаковые пароли получают разные хеши, поэтому заранее вычисленные rainbow tables становятся непрактичными.
- Соль не является секретом и не препятствует перебору после компрометации базы, но заставляет атакующего подбирать каждый пароль отдельно.
- Перец — общий секрет, который хранится отдельно от базы и добавляет защиту при утечке хешей и солей; его рекомендуется применять совместно с солью.
- Перец создаёт операционные риски: его потеря или компрометация требует массового сброса паролей, а сменить его без знания исходных паролей нельзя.
- Поддержка pepper зависит от алгоритма: статья указывает Argon2 как вариант со встроенной поддержкой и отмечает отсутствие такой поддержки у PBKDF2, BCrypt и SCrypt.
Открыть источник ↗
Habr
Статья
AIRAGHealthTechLLM
Краткое резюме · 6 пунктов
- Yandex Cloud, Ассоциация детских ревматологов и студент ИТМО встроили ИИ-агента в систему дистанционного мониторинга «Ювенильный артрит», которой пользуются около 1500 пациентов и 32 врача.
- LLM выполняет только две узкие задачи: извлекает структурированные данные из свободного текста пациента и формирует черновик ответа на основе истории болезни и найденных документов.
- Оценка риска не доверена модели: триаж реализован детерминированным Python-кодом, а клинические пороги вынесены в аудируемый rules.yaml; критические случаи эскалируются врачу.
- RAG-база содержит 5070 фрагментов из 48 PDF-документов, включая клинические рекомендации Минздрава, инструкции к препаратам и нормативные акты; эмбеддинги multilingual-e5-base хранятся в PostgreSQL с pgvector.
- Агент развёрнут в Docker на виртуальной машине Yandex Cloud и интегрирован через REST API; Yandex Cloud не имеет прямого доступа к персональным данным пациентов, а при разработке использовались синтетические данные.
- На этапе пилота врач проверяет каждый ответ: может одобрить, отредактировать или отклонить черновик. По оценке врачей, подготовка ответа ускоряется в несколько раз, а доля вопросов, решённых при первом обращении, выросла на 40%; следующий шаг — пилот на 5-10 семьях и полноценное исследование клинического эффекта.
Открыть источник ↗
Habr
Статья
JavaМониторингSREDevOps
Краткое резюме · 6 пунктов
- Правило 80/20 предлагает закрывать большинство типовых инцидентов компактным набором технических метрик, а оставшиеся специфичные случаи — бизнес-метриками, SLO и анализом аномалий.
- Для HTTP/gRPC-серверов и клиентов базой служат RED-метрики: количество запросов, ошибки и длительность. Для очередей дополнительно критичен лаг, а для баз данных — состояние пула соединений и задержки операций.
- На уровне JVM следует контролировать CPU, thread pools, heap и non-heap memory, GC и задержки; стандартные метрики Spring Boot Actuator дополняются собственными для ForkJoinPool, safepoint и других специфичных источников проблем.
- Мониторинг нужно строить по слоям приложения, JVM, контейнера, оркестратора, ОС и инфраструктуры, сохраняя как детальные графики каждого слоя, так и общий обзор. Для поиска скрытых задержек предлагается jHiccup, адаптированный к Micrometer.
- Бизнес-метрики выбираются из назначения сервиса, истории пропущенных инцидентов и согласованных SLO; анализ сезонных аномалий помогает заметить отклонение поведения даже при успешных запросах и нормальном error rate.
- Дашборды рекомендуется организовывать как one-pager с ключевыми индикаторами и drill-down до компонентов. Каждый алерт должен быть полезным, не флапать и иметь ранбук с понятными действиями дежурного.
Открыть источник ↗
GilTene
Статья
JavaJVMМониторингLatency
Краткое резюме · 6 пунктов
- Runtime hiccup — кратковременная остановка или задержка выполнения приложения, вызванная JVM, ОС, оборудованием либо конкурирующей нагрузкой, а не обязательно кодом приложения.
- Среднее значение и стандартное отклонение плохо описывают такие задержки: распределение обычно мультимодальное — система работает нормально большую часть времени, но изредка останавливается на сотни миллисекунд или секунды.
- Редкие паузы заметно ухудшают высокие перцентили latency, поэтому их нельзя списывать на шум или выбросы даже при низкой средней загрузке CPU.
- jHiccup измеряет время, которое отдельный поток тратит на выполнение практически пустой операции. Если «ничего не делать» внезапно занимает долгое время, задержку испытали и рабочие потоки приложения.
- Инструмент не определяет первопричину паузы, но отделяет задержки runtime-платформы от полезной работы приложения и показывает их частоту и длительность на hiccup charts и графиках перцентилей.
- Измерять hiccups следует под реальной нагрузкой: именно тогда проявляются регулярные шаблоны остановок, незаметные на простаивающей системе.
Открыть источник ↗
Habr
Статья
JavaJVMПроизводительностьJFR
Краткое резюме · 6 пунктов
- Производительность Java-приложения часто ухудшают небольшие антипаттерны в горячих путях; каждый из них выглядит безобидно, но вместе они увеличивают CPU, аллокации, давление на heap и частоту GC.
- В статье разобраны восемь проблем: конкатенация строк в циклах, вложенные stream() с O(n^2), String.format() в горячем коде, автобоксинг, исключения для control flow, широкая синхронизация, повторное создание переиспользуемых объектов и пиннинг виртуальных потоков в JDK 21-23.
- Основные исправления — использовать StringBuilder вне цикла, сводить обработку к одному проходу, применять примитивы в вычислениях, не использовать исключения как штатное ветвление и переиспользовать ObjectMapper, DateTimeFormatter и похожие тяжёлые объекты.
- Оптимизировать нужно по данным профилирования: JFR показал, что вложенный stream был крупнейшим CPU-hotspot и занимал около 71% стековых CPU-сэмплов. Один и тот же паттерн может быть безвредным в редком коде и дорогим на каждом запросе.
- В демонстрационном приложении исправления сократили время операции с 1198 до 239 мс, увеличили пропускную способность с 85000 до 419000 заказов в секунду, уменьшили пик heap с более чем 1 ГБ до 139 МБ и число пауз GC с 19 до 4.
- Даже небольшая экономия на одном вызове становится существенной на флоте инстансов: меньшая нагрузка может повысить пропускную способность и сократить необходимое количество серверов.
Открыть источник ↗
Habr
Статья
KotlinЯзыки программированияAPI
Краткое резюме · 6 пунктов
- Текущее деструктурирование Kotlin позиционное: val (name, age) = person вызывает component1() и component2(), поэтому перестановка свойств или изменение структуры data class может незаметно изменить смысл кода.
- Именное деструктурирование связывает переменные со свойствами по имени и не зависит от порядка: (val name, val age) = person. Явное переименование записывается как (val years = age) = person.
- Позиционный вариант сохраняется для Pair, Triple и коллекций, но получает квадратные скобки: val [x, y] = point. Новый синтаксис также применим в лямбдах и циклах.
- Возможность появилась в Kotlin 2.3.20 со статусом Experimental и включается через -Xname-based-destructuring=only-syntax; полное будущее поведение можно проверить с -Xname-based-destructuring=complete.
- Для безопасной миграции предусмотрен режим -Xname-based-destructuring=name-mismatch, который предупреждает о местах, где позиционное и именное поведение расходятся либо будущий синтаксис перестанет компилироваться.
- План предусматривает длительный переход: круглые скобки должны стать именными ориентировочно в Kotlin 2.7.0 к концу 2027 года. Генерация componentN() для data class при этом сохраняется, а изменение касается мест использования.
Открыть источник ↗
SpringIO
Статья
Spring BootConnectionDetailsTestcontainersDocker Compose
Краткое резюме · 6 пунктов
- Spring Boot 3.1 отделил автоконфигурацию подключений к удалённым сервисам от строковых configuration properties с помощью типизированной абстракции ConnectionDetails.
- Базовый интерфейс служит маркером, а специализированные контракты вроде JdbcConnectionDetails и RedisConnectionDetails описывают только данные, необходимые для подключения. Настройки пула и другие аспекты по-прежнему задаются properties.
- Если в контексте есть подходящий bean ConnectionDetails, автоконфигурация использует его с приоритетом над configuration properties; при отсутствии bean сохраняется прежнее поведение через properties.
- Абстракция введена прежде всего для интеграции Spring Boot с Docker Compose и Testcontainers, но подходит и для cloud/service binding, где приложение может автоматически обнаруживать связанный сервис.
- Типизированный контракт снижает хрупкость по сравнению с @DynamicPropertySource и другими строковыми ключами: несовместимое изменение API выявляется при компиляции, а переименование property может остаться незамеченным до runtime.
- В Spring Boot 3.1 предусмотрены контракты для Cassandra, Couchbase, Elasticsearch, JDBC, Kafka, MongoDB, Neo4j, R2DBC, RabbitMQ, Redis и Zipkin; собственный источник подключения можно предоставить обычным bean нужного типа.
Открыть источник ↗
HyrumWright
Другое
APIСовместимостьАрхитектура
Краткое резюме · 6 пунктов
- Закон Хайрама утверждает: при достаточном числе пользователей API кто-нибудь начнёт зависеть от каждого наблюдаемого поведения системы независимо от того, обещано ли оно официальным контрактом.
- Помимо документированного интерфейса постепенно возникает неявный интерфейс из деталей реализации, обнаруженных потребителями при регулярном использовании.
- Неявными контрактами становятся не только форматы и побочные эффекты, но и производительность, порядок результатов, тексты ошибок, особенности багов и другие наблюдаемые характеристики.
- Чем популярнее система, тем сильнее реализация ограничивает будущие изменения: для сохранения совместимости может потребоваться bug-for-bug compatibility.
- В пределе реализация фактически становится интерфейсом, поэтому формально совместимое изменение способно сломать потребителей. Автоматические тесты помогают обнаруживать такие зависимости, но не устраняют их.
- При развитии широко используемых API нужно учитывать скрытых потребителей, оценивать наблюдаемое поведение и планировать миграцию даже для изменений, которые не затрагивают заявленный контракт.
Открыть источник ↗
Habr
Статья
JavaArchUnitGradleAPI
Краткое резюме · 7 пунктов
- Netflix использует ArchUnit и Gradle-плагины Nebula ArchRules, чтобы централизованно распространять архитектурные правила и применять их в тысячах JVM-репозиториев.
- Для управления жизненным циклом библиотечных API используются статусы @Public, @Experimental и @Deprecated; остальные API считаются внутренними. Правила выявляют downstream-проекты, которые нарушают эти границы.
- ArchUnit анализирует JVM-байткод через ASM, поэтому правила работают с Java, Kotlin и Scala, видят связи между классами и описываются типобезопасным fluent API, который удобно покрывать unit-тестами.
- ArchRules Library собирает правила в отдельный JAR-вариант arch-rules. Автономные библиотеки содержат универсальные правила, а пакетные поставляют правила вместе с основной библиотекой и автоматически применяются только к использующим её source set.
- ArchRules Runner обнаруживает правила через ServiceLoader, запускает их в изолированном Gradle work action и позволяет настраивать приоритеты, исключения source set и порог падения сборки.
- Результаты агрегируются в консольный и JSON-отчёты с точным местом нарушения; интеграция с CI и внутренним developer portal показывает авторам библиотек реальных потребителей экспериментальных, устаревших и внутренних API.
- Подход помогает принимать обоснованные решения об удалении API: сначала обнаружить и приоритизировать зависимости потребителей, затем провести миграцию и только после этого вносить ломающие изменения.
Открыть источник ↗
Habr
Статья
SpringAIMCPSkillsAmplicode
Краткое резюме · 6 пунктов
- Статья рассматривает переход от браузерного чата к IDE-интеграции, агентному программированию и специализированным Skills. Качество результата зависит от контекста проекта, его соглашений и доступных агенту инструментов.
- Spring Agent Toolkit объединяет Skills, Spring MCP и хуки для разработки Spring-приложений. По заявлению авторов, компоненты совместно тестируются, чтобы снижать конфликты инструкций и подключать нужные навыки по ситуации.
- Установка выполняется через плагин Amplicode в IDE и настройку Spring Agent. Spring MCP предоставляет структурированные сведения о бинах, зависимостях, доменных сущностях и эндпоинтах, включая компоненты библиотек и стартеров.
- MCP также позволяет запускать и отлаживать приложение, выполнять тесты и Connekt-скрипты, генерировать миграции и читать классы из зависимостей.
- Spring Skills сначала учитывают существующие паттерны проекта, затем применяют специализированные рекомендации; явные проблемы предлагается сообщать разработчику вместе с возможными исправлениями.
- В набор входят планирование и исследование Spring Boot-приложения, работа с JPA и транзакциями, DTO и мапперами, Spring Security, CRUD REST и отладка через IntelliJ IDEA. Основная идея — согласованный набор инструментов вместо случайной коллекции конфликтующих Skills.
Открыть источник ↗
Habr
Статья
MLРазметка данныхРанжированиеЭлоЯндекс
Краткое резюме · 6 пунктов
- Для оценки моделей, выбирающих лучшие фотографии в Яндекс Диске, абсолютные баллы заменили попарными сравнениями: асессорам проще выбрать лучший кадр по конкретному признаку, чем согласовать субъективную десятибалльную шкалу.
- Из примерно 1500 фотографий, предоставленных сотрудниками и исполнителями, отобрали 500. После удаления чувствительного контента разнообразие повышали с помощью эмбеддингов и идеи максимально разнесённых векторов simplex ETF, сокращая визуальные дубли.
- Каждая фотография выступала участником турнира по 16 эстетическим характеристикам. Вместо сравнения всех со всеми использовали итеративный подбор пар с близкими текущими показателями по аналогии со швейцарской системой.
- Рейтинги пересчитывали по схеме Эло: неожиданная победа над сильным соперником изменяет рейтинг больше, чем ожидаемая. После 12 итераций получили оценки по каждому признаку; категории associations и face авторы выделили как особенно субъективные.
- Корреляционные матрицы сопоставили человеческие оценки с выходами текущей и экспериментальной ML-моделей, показывая различия в согласованности по цветам, геометрии, фокусу и другим характеристикам. Такие связи помогают анализировать модели, но сами по себе не доказывают причинность.
- По оценке авторов, разметка оказалась в 100 раз эффективнее кругового турнира. Результат — компактный датасет и воспроизводимая методология сравнения моделей по субъективным признакам.
Открыть источник ↗
Habr
Статья
AIЭкономикаРискиРынок труда
Краткое резюме · 6 пунктов
- Автор рассматривает два негативных сценария развития ИИ-индустрии: недостаточная окупаемость инфраструктуры может привести к долговому кризису, а успешная автоматизация — к вытеснению работников и снижению потребительского спроса.
- В сценарии провала подчёркивается разрыв между локальной полезностью ИИ и ростом производительности экономики в целом. По интерпретации автора, ускорение отдельных задач может сопровождаться увеличением нагрузки и выгоранием, а не сокращением рабочего времени.
- Статья приводит оценку необходимой годовой выручки ИИ-индустрии в $2 трлн для окупаемости планируемых к 2030 году дата-центров; капиталоёмкость, долговое финансирование и быстрое устаревание оборудования рассматриваются как факторы риска.
- В сценарии успеха автор ссылается на оценку Goldman Sachs об автоматизации эквивалента 300 млн рабочих мест. Потенциал автоматизации не равнозначен фактически произошедшим увольнениям; дальнейшее снижение зарплат и спроса описывается как возможное последствие.
- Дополнительными каналами распространения кризиса автор считает задолженность домохозяйств и непрозрачность private credit: потеря доходов может затруднить обслуживание долгов и усилить проблемы финансовой системы.
- Материал представляет пессимистическую авторскую интерпретацию, а не доказательство неизбежной катастрофы. Приведённые прогнозы, сравнения с кризисом 2008 года и причинные выводы не проверены здесь независимо и требуют сверки с первоисточниками.
Открыть источник ↗