Обновить
256K+

Java *

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

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

Оптимизируем JDBC connection pool HikariCP. Прод, ресурсы и типовые ошибки

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

Продолжаем разбирать HikariCP: как выбирать размер пула, что учитывать в Kubernetes и при нескольких сервисах, почему большой maximumPoolSize не всегда помогает, какие настройки стоит пересмотреть перед продом и какие ошибки чаще всего приводят к проблемам с базой.

Читать далее

Новости

Ollama Cloud Client: когда модели слишком тяжелы для локального запуска

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

Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ Beeline Cloud. Сегодня я хочу поделиться историей создания одного интересного проекта — клиента для облачного сервиса Ollama.

Читать далее

Как развернуть Spring Boot в Kubernetes за полчаса: туториал

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

Хотите увидеть, как живое Spring Boot‑приложение проходит путь от репозитория до кластера Kubernetes? В статье пройдем путь от создания простого HealthController до автоматического деплоя через CI/CD. Разберём Dockerfile без магии, манифесты Deployment с пробами, настройку ресурсов и изящный Graceful Shutdown. В финале вы получите живую связку «код — контейнер — кластер», готовую к продакшену.

Читать далее

Оптимизируем JDBC connection pool HikariCP. Основы и настройка

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

HikariCP давно стал де-факто стандартом JDBC connection pooling в JVM-проектах. Но подключить его мало: важно правильно выбрать размер пула, таймауты, maxLifetime, keepaliveTime, leak detection и метрики.

Разбираем, как настроить HikariCP для Java, Kotlin, Scala и Spring Boot, какие ошибки чаще всего встречаются в проде и почему maximumPoolSize нельзя просто копировать из соседнего сервиса.

Читать далее

Конкатенация строк в Java: почему советы 2008 года всё ещё работают — и почему этого уже недостаточно

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

Вы наверняка видели такой код - for (String s : data) { result += s; } сотни раз.

Что с ним не так?

Ведь он выглядит безобидно, почти идиоматично. Но в продакшене под нагрузкой этот цикл способен генерировать сотни мегабайт мусора в секунду - даже если сам результат никому не нужен.

И казалось бы, проблема конкатенации строк в Java давно решена. Джунам говорят: используй StringBuilder и будет тебе щастье. А статьи десятилетней давности сравнивают + и append() в бенчмарках и ставят точку.

В сегодняшней статье я копнул немного глубже и оказалось, что реальность сложнее.

Вред не исчез - он принял новые, менее очевидные формы.

Заглянуть

Поддержка Docker Compose в Spring Boot 3.1

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

Иногда перед разработчиком встает задача воссоздания некоторого окружения локально. В него часто входят различные компоненты инфраструктуры, такие как:

– PostgreSQL

– Kafka

– RabbitMQ

– Redis

И так далее. Менеджить целый зоопарк таких сервисов локально бывает не очень удобно. К счастью, у команды Spring Boot для вас есть небольшой помошник - Spring Boot Docker Compose.

Комментарий от Михаила Поливахи:

Друзья, хоть на дворе уже Spring Boot 4, мы знаем, что большинство из вас сидит на Spring Boot 3. И мы посчитали очень нужным рассказать о таком Spring Boot инструменте, который, на наш взгляд, делает локальную разработку со Spring Boot намного более приятной.

Читать далее

Kubernetes: архитектура и абстракции — полный гайд

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

Почему Kubernetes стал стандартом оркестрации контейнеров? Разбираем архитектуру без скучной теории: Control Plane, поды, сервисы, деплойменты — на реальных примерах. Вы узнаете, как избежать типичных ошибок, увидите опыт миграции Tinder и получите лучшие практики, которые применяют ведущие команды. Статья для тех, кто хочет не просто знать команды kubectl, а понимать, как проектировать отказоустойчивые платформы

Читать далее

Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

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

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

Для реализации выбран абстрактный бизнес-процесс запроса абстрактных ресурсов. Пример придуман максимально общим. Необходимо реализовать обработку бизнес-процесса с несколькими стадиями.

Читать далее

От Infinispan до Postgres на 1 ТБ: эволюция кэша поиска отелей

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

Всем привет! Хочу рассказать, как мы проектировали кэш поиска отелей и почему за полтора года прошли путь от Infinispan к managed Redis а затем к Postgres. По стеку java-21, spring-boot-3, 1 вендор отелей, расчетная нагрузка 1000 RPS и 10M запросов в сутки.

Читать далее

Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения

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

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

Я Java-разработчик и в основном работаю с backend: Spring Boot, базы данных, интеграции, авторизация, WebSocket — всё то, что обычно находится за интерфейсом.

В какой-то момент я поймал себя на мысли: я каждый день пользуюсь мессенджерами, но плохо понимаю, как они устроены внутри. Окей, JWT, WebSocket, PostgreSQL, Redis — это понятно. Но что технически означает фраза “end-to-end encryption”? Как сервер доставляет сообщения, если он не должен их читать? Где живут ключи? Что хранится в базе? Что происходит, если у пользователя два устройства?

Решил разобраться через практику. Написал мессенджер с нуля. Назвал Chaos Messenger.

Сразу честно: криптографическую часть я изучал вместе с Claude и ChatGPT — читал спецификации X3DH и Double Ratchet, разбирал примеры, задавал вопросы, пока не сложилась цельная картина. Frontend тоже делался с активной помощью ChatGPT: я backend-разработчик, React для меня не основная среда. Но архитектура, backend, интеграция WebCrypto, модель конвертов, хранение сообщений и принципиальные решения — мои.

Для меня AI здесь был не заменой понимания, а инструментом — примерно как документация, Stack Overflow и ревью коллег. Без понимания threat model и архитектуры такой проект всё равно не собрать.

В статье расскажу, как работает E2EE изнутри: как устанавливается сессия через X3DH, как каждое сообщение получает отдельный ключ через Symmetric Ratchet, почему сервер хранит только зашифрованные конверты, и какие ошибки я допустил по дороге.

Стек: Spring Boot 3, React 18, WebCrypto API, PostgreSQL, Redis, WebSocket/STOMP, Prometheus, Grafana.

Читать далее

Моки без боли

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

Моки — достаточно крутой инструмент, если использовать его правильно.

И все-таки лично для меня писать и поддерживать тесты на моках всегда было отдельным видом боли. Думаю, все знакомы с ситуацией: добавил в метод новый аргумент — и пошёл в 30 тест-кейсов проставлять заглушки. И это только от одного нового аргумента.

И я не буду здесь спорить о терминологии — в этой статье я буду называть все тестовые дублёры «моками». Примеры будут на Scala, но моки в других языках работают похожим образом, так что боль универсальная. Как и решение — об этом в статье.

Читать далее

GraphCompose: как я приволок ECS из геймдева и снапшот-тесты из фронта в PDF-генерацию на Java

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

TL;DR

Я сделал библиотеку для генерации PDF на Java, в которой:

Документ описывается семантически (модули, секции, параграфы, таблицы, слои), а не через moveTo/lineTo/showText.

Layout и рендер — это два разных прохода. Геометрия резолвится один раз, потом её рисуют. Поэтому документ можно тестировать до того, как написан хотя бы один байт PDF.

Под капотом — ECS-архитектура в стиле игровых движков: Entity / Component / System. Сущности документа лежат в EntityManager, компоненты прицепляются и снимаются, системы (LayoutSystemPaginationSystemRenderingSystem) работают над ними.

Тестирование трёхуровневое: unit → layout-снапшоты (как у Jest для React) → визуальная регрессия по PNG-диффу.

На простом инвойсе библиотека идёт 2.45 мс (iText 5 — 1.57 мс, JasperReports — 4.45 мс). На стресс-тесте: 50 потоков, 5000 документов, 0 ошибок, ~2000 doc/sec.

Это статья про задумку и инженерные решения, которые получились нетривиальными. Если вам интересно, как декларативный UI, ECS и снапшот-тесты влезают в одну библиотеку для PDF — заходите.

Читать далее

Меня продали как мидла с 4 годами опыта. Мне было 0. Как я выжил и чему научился

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

Сегодня я хочу вам рассказать интересную историю из своей жизни про аутстафф. Когда я только начинал карьеру, я попал на стажировку в одну аутстафф-компанию. Проходил я ее 3 месяца, и после успешного завершения спустя месяц попал на проект... мидлом с 4 годами опыта.

Эта статья - про ад и слезы. Про реальный опыт.

Сейчас есть люди, которые без опыта ставят себе 3-4 года и идут покорять горы, думая, что все это очень легко. Конечно, в мое время еще не было ChatGPT, AI-агентов и всего такого (говорю прям как дед), было сложнее. Но дело не в инструментах, а в желании и стремлении. А еще в умении не сломаться, когда на тебя орут, ты ничего не понимаешь, а заказчик думает, что ты мидл с 4 годами опыта.

Сейчас я расскажу, как я не сломался. Хотя был близко. Очень близко.

Поехали!

Читать далее

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

Почему Python стал главным помощником Java‑команд

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

Python уже не просто язык для скриптов и Data Science — в 2026 году он стал «клеем», который связывает микросервисы, тесты и CI/CD в Java‑проектах. Как получилось, что даже консервативные Java‑разработчики всё чаще пишут интеграционные тесты на pytest, запускают контейнеры с Testcontainers и рулят пайплайнами в GitHub Actions с помощью Python‑скриптов?

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

Читать далее

Профилировщик и Wildfly-клиент для GigaIDE

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

В этой статье мы продолжаем обсуждать инструменты в GigaIDE. Напомню, что ранее мы уже рассказывали про наши инструменты для работы с Docker/Podman, файловым SFTP-источником в этой статье, а также с клиентом БД — в этой. Сегодня мы сосредоточимся на инструментах для Java-разработки. Первый плагин в обзоре — Profiler, задача которого состоит в том, чтобы автоматизировать профилирование и визуализацию отчётов, и WildFly, задача которого выполнять подготовку, развёртывание и запуск, и решать другие задачи в отношении серверов приложений WildFly или JBoss.

Читать далее

Архитектурные решения в backend: 5 практических приёмов, которые помогают держать баланс

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

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

Читать далее

Экстремально чистый код

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

Старый код редко лежит бесплатно. Даже если его никто не вызывает, он попадает в поиск, ревью, CI, локальный запуск и голову каждому новому разработчику. Разбираю на примерах: DTO, endpoint’ы, которые «скорее всего не используются», deprecated events, конфиг-поля, Docker/CI-хвосты и продуктовые фичи «на будущее».

Читать далее

Как я написал лучшее приложение для изучения иностранных языков с помощью SFSpeechRecognizer (нет)

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

Вообще‑то, я бэкендер последние лет 20, но недавно остался без работы (и AI тут не причём), решил «замутить» свой «стартап», пока ищу новую работу Java‑программиста. А заодно подтянуть новые технологии, поглубже изучить немецкий и английский и немного развеяться…

Писать приложения под iOS было моим хобби последние лет 10, и пару моих приложений до сих пор постоянно висят в топе в Российском AppStore, но это были всё «игрушки», а захотелось сделать что‑то взаправду стоящее, и так возникла идея написать лучшее (ни больше ни меньше) приложение для изучения языков с помощью аудирования. Точнее, товарищ подсказал идею. А ещё точнее — идея давно была реализована под Андроид, но аналогов под iOS нет, а очень хотелось. И мне, и товарищу:). Да и смартфона с андроидом у меня нет и никогда не было, не судите строго, но не люблю я вирусы и глюки.

Идея следующая: берёте любое аудио на любом нужном вам языке, загружаете в приложение, и оно автоматически (можно так же вручную) разбивает аудиофайл на нужные вам сегменты для «шэдоуинга», аудирования, многократного прослушивания и тому подобного. Аналогов в сторе я не нашёл, точнее, что‑то отдалённо похожее там есть, но без своих настроек, без выбора своего контента для изучения, без красивой визуализации аудио, короче, без всего того, что нам бы хотелось иметь.

Итак, идея есть, какие технологии использовать? В старых моих приложениях был UIKit, Realm/CoreData, и, сториборды. Не судите строго, я как бэкэндер тогда не знал, что использование сторибордов среди «трушных» айосников считается плохим тоном и плохой приметой. Но теперь‑то я решил использовать современные технологии! И выбрал такой стэк: SwiftUI, SwiftData, Speech Framework. Что касается последнего, то он вроде бы доступен ещё с iOS 10, но я решил, что технологии развиваются, и распознавание текста из аудио должно было бы сделать со времени iOS 10 огромный рывок вперёд. Но теперь я не так сильно в этом уверен, и об этом эта моя маленькая статья…

Читать далее

Froggle — фича-флаги без боли

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

Фича-тоглы: мир удобства без лишней настройки

В мире кубов и контейнеров JVM приложения чувствуют себя немного странного когда речь заходит о вопросах: кто сожрал все ресурсы в кластере? или как же мне вывернуть приложение чтобы не рестартить его? Со вторым вопросом предлагаю ознакомится ближе.

Читать далее

Отображаем списки SharePoint в корпоративном портале: опыт реализации Proxy Object Storage для Инкоманд

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

В новой версии платформы Инкоманд появился No Code инструмент «Инкоманд Объекты», позволяющий создавать структуры данных и управлять ими без написания кода — Object Definition’ы, поля, связи, представления, права доступа настраиваются через UI. Но данные не всегда рождаются и живут в самой системе. На практике объекты часто находятся в смежных системах, и задача разработчика — не дублировать их, а организовать бесшовный доступ.

В этой статье я расскажу, как мы реализовали такое решение с помощью механизма Proxy Object Storage, и с какими проблемами пришлось столкнуться на пути интеграции Инкоманд с Microsoft Graph API.

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