Обновить
128K+

Java *

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

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

Хранение 1 ТБ в виртуальной памяти на компьютере с 64 ГБ памяти с использованием Chronicle Queue

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

Java разработчики часто сталкиваются с проблемой обработки очень больших наборов данных в рамках ограничений виртуальной машины Java (JVM). Когда размер кучи значительно увеличивается — часто более чем на 32 ГБ, — время паузы при сборке мусора (GC) может увеличиваться, что приводит к снижению производительности. В этой статье рассматривается, как Chronicle Queue обеспечивает хранение и эффективный доступ к набору данных размером 1 ТБ на компьютере с 64 ГБ оперативной памяти.

Читать далее

Ускорение Spring REST API на 200%

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

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

Читать далее

Библиотека для кэширования Caffeine: анализ кода

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

То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому, что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.

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

Все желающие приглашаются в путешествие с разбором сложностей одной из наиболее востребованных систем кэширования, используемых в мире. Будь вы бывалый инженер или просто новичок, интересующийся продвинутыми механизмами кэширования, это исследование прольёт вам свет на многие вопросы и подведёт к важным практическим выводом. Поехали!

Читать далее

Что такое lsFusion: взгляд со стороны

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

Эта статья – небольшой обзор продуктов компании lsFusion и того предалагает пользователям компания lsFusion. Взялся я за него после того, как в статьях «Почему я не люблю 1С» и «Стоит ли идти в 1С программисты в 2025 году» упомянул эту систему как одну из возможных альтернатив 1С. На тот момент я только читал о том, что есть такая система как lsFusion на Хабре, из любопытства заходил на их сайт и просматривал в поиске дополнительную информацию. Тогда я ее упомянул только как «одну из систем» в перечне альтернатив, так как сами они явно позиционируют себя как учетная система.

Далее уже в комментариях я увидел большой тред, где сравнивали 1С и lsFusion. Мне стал интересен автор комментариев, оказалось, что это работник lsFusion. Я с ним связался, чтобы самому лучше понять, что же это за программный продукт. Получил ответы на многие собственные вопросы, изучил ближе саму систему. И теперь хочу поделиться тем, что узнал, чтобы помочь людям, которые находятся в поиске альтернативы 1С.

Читать далее

Hibernate proxy and N+1

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

Это вторая статья, связанная с пониманием, поиском и устранением проблемы N+1. Первая статья была про стратегии извлечения данных. Эта статья будет про Hibernate proxy. Понимание концепций стратегии извлечения данных и Hibernate прокси, это ключи к пониманию причин, приводящих к N+1. Подробней про N+1, будет рассказано в следующих статьях.

Читать далее

Explyt Spring Plugin. Патчим байткод Spring или как мы улучшили распознавание контекста приложений

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

Всем привет! На связи команда Explyt Spring (GitHub). Одной из уникальных особенностей нашего плагина, является практически стопроцентное понимание контекста Spring приложений. Где мы максимально нативным способом, через публичное Spring Boot Api, смогли получить доступ к контексту приложения и использовали эту информацию у себя в плагине для поддержки Spring Dependency Injection и навигации к «бинам». Но время не стоит на месте, и мы сделали еще один шаг в сторону улучшения распознавания Spring Context, путем модификации текущего байт‑кода Spring через параметр jvm: -javaagent, который позволил избавиться нам от большинства недостатков текущего подхода, кому интересно узнать детали реализации, то добро пожаловать под кат.

Читать далее

SAML2 ещё жив?! Как интегрировать Keycloak со Spring Boot в 2025 году

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

Команда Spring АйО перевела статью совместном использовании Spring Boot, SAML2 и Keycloak при запуске приложений. Здесь также приводятся некоторые кастомизированные решения, позволяющие более гибко работать с упомянутым набором технологий.

Читать далее

Реализация RPC во внутреннем взаимодействии модулей с Spring Boot

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

В какой-то момент я настолько устал настраивать все эти мелочи для REST-взаимодействия в микросервисах, что реализовал механизм, который сильно упрощает эту работу.

И я уверен, что вам стоит прочитать эту статью, если:

Вы используете Java и Spring Boot в своей работе.

Ваш проект строится на микросервисной архитектуре.

Вас раздражает бесконечное описание REST-контрактов и их поддержку.

А если у вас остались шрамы после попыток внедрения gRPC, то тем более рекомендую дочитать до конца.

В статье мы рассмотрим альтернативный подход к взаимодействию между сервисами — легковесное RPC-решение, которое удобно использовать внутри одного продукта. Оно не претендует на замену публичных API, но значительно упрощает жизнь внутри команды, где "правила игры" можно обсудить за кружкой пива.

Читать далее

Инъекция блокнотом или история о том, как мы новые диагностики делали

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

В этой статье я немного расскажу о том, как в Java осуществляется вызов команд уровня операционной системы. Также поговорим про OS Command и Argument Injections и про то, как мы делали диагностики, которые могут помочь в их обнаружении.

Читать далее

Сравнение SpringRunner со SpringExtension и @SpringBootTest

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

Команда Spring АйО перевела статью о том, как и когда использовать SpringRunner, SpringExtension и @SpringBootTest, когда их целесообразно комбинировать и как правильное понимание этих компонентов может помочь сделать тесты проще, быстрее и более узконаправленными.

Читать далее

Создаем Spring Boot Starter для Kafka с Avro: пошаговое руководство

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

Интеграция Apache Kafka в проекты на Spring Boot часто требует много boilerplate-кода.

В этой статье я делюсь опытом создания кастомного стартера kafka-spring-boot-starter, который упрощает настройку продюсера и консюмера Kafka с поддержкой Avro-сериализации.

Рассказываю, как решал проблемы с тестами (например, auto.offset.reset=latest) и адаптировал стартер для гибкой работы со схемами.

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

Бонус в конце — удобный обзор ключевых настроек Kafka для продюсера и консюмера.

Читать далее

Подводный камень в docker env и java

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

Столкнулся с небольшим и интересным моментом: внедрение переменных окружения (а ля environment variables) в стандартный микросервис написанный на Java (классика жанра – Spring Boot).

Читать далее (Тема не сложная)

Как мы перестроили комментарии в ОК: от линейного хаоса к веточной гармонии

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

Комментарии в соцсетях — это как чипсы: начал читать, остановиться невозможно. Но в ОК до 2024 года они были плоскими — вместо структурированного диалога под постом пользователи видели бесконечную ленту сообщений, где ответы терялись в хронологическом порядке. Представьте: под постом про котиков кто-то спросил про корм, но ответ на вопрос появился в самом низу, через 500 комментариев с обсуждением хвостатых. Найти ответ на вопрос в такой системе, если он вообще существует, — тот ещё квест.

Меня зовут Александр Косницкий. Я разработчик в компании ОК. В этой статье я расскажу, как мы переходили с линейной структуры отображения комментариев к древовидной: с чего начали, с чем сталкивались и что получили в результате.

Читать далее

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

Автоматизация тестирования, которая не ломается при первом редизайне

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

Автоматизация тестирования, которая не ломается при первом редизайне

Как мы проектировали, внедряли и поддерживаем живую систему автотестов

Читать далее

RabbitMQ и Kotlin: делаем свою event-driven Jira на Spring

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

В этой статье мы рассмотрим, как можно в один клик развернуть RabbitMQ в облаке. Также напишем простое приложение на Spring Boot и Kotlin, которое будет взаимодействовать с этим брокером сообщений.

Читать далее

Spring-потрошитель

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

Технические доклады могут быстро устаревать и становиться невостребованными. Но со «Spring-потрошителем» Евгения Борисова получилось совсем иначе: мы провели мероприятие и опубликовали запись ещё 11 лет назад, а её просмотры по-прежнему растут, и уже перевалили за за 500 000. Перед собеседованиями этот доклад порой штудируют обе стороны: соискатели — чтобы подтянуть матчасть, работодатели — чтобы задать заковыристые вопросы.

В общем, получился главный доклад русскоязычного Java-сообщества. И теперь мы решили, что ему будет полезна ещё и текстовая версия на Хабре. Да, что-то в материале устарело (там речь заходит ещё про Java 7), так что делайте поправку на возраст. Но раз этот материал продолжают смотреть в видеоформате, то и возможность делать Ctrl+F кому-то наверняка пригодится.

А если кому-то хочется более свежих Java-докладов — мы тем временем вовсю готовим конференцию JPoint 2025 (пройдёт уже 3-4 апреля).

Далее повествование ведется от лица спикера.

Читать далее

Жизненный цикл бина в Spring

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

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

Читать далее

Allurium — java framework для автотестов. Мультиязычные, близкие к bdd репорты, без bdd структуры

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

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

Работа в автоматизации тестирования стала моей оффициальной профессией несколько лет назад. За это время мне довелось позаниматься очень широким спектром задач, в зависимости от компаний, где я работал. Начиная с тестирования пользовательских интерфейсов различных сайтов, web и мобильных приложений, обязанности заводили меня глубоко в тестирование сложных API сервисов и даже автоматизацию десктопных программ.

Первые годы я плотно занимался тестированием Web приложений на Java, хотя начинал не с неё. Разумеется, перепробовав много подходов, я нашёл для себя любимый stack, который применял при наличии свободы выбора. Для меня это сложилось в TestNg + Selenium + Allure. Естественно, мне приходилось работать со знаменитым Cucumber, а потом и вообще с чудовищьным (на мой взгляд) Serenity и ещё многими другими решениями, включая кастомные разработки разных людей.

Моё расположение никогда не лежало в сторону BDD, так как чаще всего я сам читал отчёты и проверял тесты, и в 100% случаев сам составлял сценарии с Gherkin (иногда по предоставленным сценариям, чаще нет). Так называемое удобство, дающее BDD пользователю, сводилось к минимуму, а вот взамен требовало многое — небоскрёбы из обёрток классов, сложности с наследованием, необходимость создавать кучу дубликатов мизерных действий, абсолютное неудобство передачи данных между шагами и процессами и прочие трудности.

Читать далее

Разработка Java-проекта с Jmix AI Assistant

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

Эта заметка инспирирована статей на Хабре Разработка Java-проекта с ChatGPT-4: от идеи до реализации [1]. После ее прочтения автор начал экспериментировать в разработке ПО с различными AI ассистентами.

Увидев статью блога Jmix AI Assistant — ваш помощник в освоении Jmix, решил реализовать с помощью Jmix AI Assistant приложение аналогичное приведенному в статье [1].

Главное отличие от указанной статьи в том, что вся разработка будет вестись с помощью одного инструмента Jmix AI Assistant без использования сторонних генераторов кода.

Читать далее

Концерт для Java с ИИ — разработка готовых к продакшен LLM приложений (часть 2)

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

Команда Spring АйО перевела и адаптировала доклад Томаса Витале “Concerto for Java and AI — Building Production-Ready LLM Applications”, в котором рассказывается по шагам, как усовершенствовать интерфейс приложения с помощью больших языковых моделей (LLM). В качестве примера автор доклада на глазах слушателей разрабатывает приложение-ассистент для композитора, пишущего музыку для фильмов. 

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

Читать далее