Обновить
206.15

Java *

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

Генерация случайных чисел

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6.9K
Картинка Benzoix, Freepik

Зачем вообще нужны случайные числа? Дело в том, что случайные числа не представляют собой оторванную от жизни абстракцию, а широко применяются во множестве областей, начиная от научных исследований и заканчивая технологиями, окружающими нас.

Рассмотрим наиболее известные применения случайных чисел и способы их получения как программным способом, так и комбинированным (программно-физическим).
Читать дальше →

В поисках идеального Database-клиента для IDE: Amplicode выбирает DBeaver

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

Один из частых вопросов, которые мы слышим от наших пользователей, связан с заменой встроенного инструмента для работы с БД, доступного ранее в IntelliJ IDEA Ultimate. В связи с тем, что DataGrip больше не доступен (а именно так называлась эта функциональность), многим разработчикам приходится искать альтернативу инструменту.

Нас эта проблема волнует не только как разработчиков Amplicode, но и как участников проекта OpenIDE. Мы считаем очень важным предоставить российским разработчикам максимально удобное и мощное решение.

Читать далее

На страже производительности Spring Boot приложений: Профилирование и оптимизация

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

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

В этой статье мы подробно рассмотрим, как можно оптимизировать производительность Spring Boot приложений, используя базовые методы профилирования и тюнинга. Особое внимание будет уделено таким аспектам, как профилирование процессора и памяти, оптимизация сборки мусора и тюнинг виртуальной машины Java (JVM).

Читать далее

Эффективный подход к тестированию веб-контроллеров в Spring Boot приложениях

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

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

Читать далее

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

Неблокирующий вызов внешнего сервиса в процессе

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

Довольно часто из процесса приходится обращаться по API к различным внешним сервисам. По сути, это стандартный сценарий оркестрации систем или даже микросервисов (пардон за модное слово). На BPMN диаграмме это выглядит просто и логично – постучались куда-то по API, получили ответ и перешли к следующей задаче. Для моделей аналитического уровня это нормально.

Однако, переходя к исполняемой модели, надо учитывать, что внешний сервис может быть недоступен или просто отвечает очень небыстро. Что происходит с процессом в это время?

Читать далее

Мой опыт создания регистрации: @AuthenticationalPrinciple, JWT, UserDetails

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

Казалось бы, что может быть проще создания регистрации и логика: взял пароль, взял username, сохранил в базу, когда пользователь заходит, просто сравниваешь значения с теми, что лежат в базе.

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

Сегодня я покажу как решить эту проблему.

Читать далее

Шатаем ActiveMQ

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

Пожалуйста обновите ActiveMQ после прочтения этой статьи. Рассказ об одной известной атаке на инфраструктуру крупных ИТ-проектов — брокер сообщений Apache ActiveMQ.

Читать далее

Тренды Java, часть 2: свой стек или глобальные фреймворки?

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

Продолжаем делиться результатами исследования трендов Java в России. Первую часть о выборе версий Java, систем сборки и IDE, а также использовании ИИ в разработке читайте здесь. Во второй части мы расскажем о том, какие дистрибутивы JDK, фреймворки, языки JVM и профайлеры выбирают Java-разработчики в России.

В исследовании, завершившемся в третьем квартале 2024 года, приняли участие более 500 специалистов из разных отраслей — от финансов и IT до нефтегаза и e-commerce. Более половины респондентов работают в крупных компаниях со штатом более 1000 человек.

Внимание! В 2025 году технологический ландшафт Java в России будет исследовать TechRadar. Присоединяйтесь к анонимному опросу, если хотите повлиять на формирование независимого среза российского рынка Java. Чтобы оставаться востребованным, важно понимать, какие технологии в тренде, а какие уходят.
Спойлер: в конце статьи есть подробности. 

И так, поехали!

Читать далее

Функциональное программирование в Java

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

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

В этой статье я опишу функциональное программирование и расскажу, как оно реализовано в Java. Помимо вопроса «что это?», я постараюсь ответить на вопросы «зачем?», «когда?» и «как?» это используется.

Читать далее

Java 24! Спецвыпуск Java Digest

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

Всем привет! 👋 👋 👋 👋 👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин, Константин и Роман. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
Сегодня вышла Java 24! Давайте посмотрим, что нового она принесла нам! 

Читать спецвыпуск

Автоматизация деплоя: из Bitbucket через Jenkins в MicroK8s — опыт финтех-разработчика

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

Всем привет! Я — Java-разработчик с пятилетним опытом в финтехе, и сегодня я расскажу, как настроить CI/CD для деплоя Spring Boot приложения из Bitbucket через Jenkins в MicroK8s. Это не просто теория — я поделюсь реальным кейсом, разберу ошибки, с которыми столкнулся, и дам рабочий код. Если вы хотите автоматизировать деплой и не наступать на грабли — поехали!

Представьте: у вас есть микросервис на Spring Boot, который нужно быстро и без ошибок доставить в продакшен. Ручной деплой отнимает время, а команда требует стабильности. Я решил эту задачу с помощью Bitbucket, Jenkins и MicroK8s, но путь оказался не таким гладким, как хотелось бы. Проблемы с аутентификацией, конфликты портов и настройка окружения заставили меня попотеть. Как я справился? Об этом — в статье.

CI/CD (Continuous Integration/Continuous Deployment) — это must-have для современных разработчиков. Автоматизация сборки, тестирования и деплоя приложений экономит время, снижает вероятность ошибок и ускоряет доставку кода до продакшена. В этой статье мы разберем, как настроить полноценный CI/CD-пайплайн для Spring Boot приложения, используя связку Bitbucket, Jenkins и MicroK8s.

Читать далее

Вклад авторов