Обновить
179.69

Java *

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

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

Трейсы в Spring Boot 3 с использованием Zipkin и Kafka в качестве транспорта

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

Рассмотрим вариант добавления трейсов в Spring Boot 3 приложение с использованием Kafka в качестве транспорта и Zipkin в качестве инструмента для трассировки.

Функциональность соберем в автоконфигурацию для подключения к Spring Boot приложениям.

Читать далее

Создание сервиса авторизации через систему ЕСИА

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

Всем привет. Меня зовут Динис, я старший разработчик в БФТ-Холдинге.

В данной статье приведен план по созданию сервиса авторизации через систему ЕСИА. Тема будет интересна тем, кто внедряет такой сервис для своего приложения. В статье я собрал ключевые выдержки из документации с частями кода, а весь код вы можете найти в конце статьи по ссылке на GitHub.

Что такое ЕСИА?

ЕСИА — единая система идентификации и аутентификации. В ней формируются, учитываются и хранятся сведения об участниках системы — физических и юридических лицах, которые прошли регистрацию с созданием учётной записи. Подтверждённая учётная запись в ЕСИА — своего рода электронный паспорт, с помощью которого можно получать доступ к разным сайтам, порталам и системам, не используя дополнительные средства регистрации и авторизации, например логин и пароль.

Читать далее

Жук, нумерология, хеш или ничо? Оптимизация работы с путями

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

Привет, Хабр! Меня зовут Евгений Кузьмин, я Java‑разработчик в CDEK. Надеюсь, все знают, что это за компания и чем занимается. Давайте представим, что вам нужно отправить посылку с гостинцами родственнику в Москву из Новосибирска. Вы приходите в ближайший пункт приёма посылок и оформляете услугу доставки. Что же происходит дальше? Казалось бы, всё очевидно: посылка сразу летит или едет из Новосибирска в Москву. Но всё не так просто...

Думаю, все согласятся, что не рационально гнать отдельную фуру с одной коробочкой для каждого заказа. Наша задача выстроить логистику таким образом, чтобы по пути загрузить и выгрузить как можно больше посылок и поехать дальше. В этой статье я поделюсь с своим опытом оптимизации задачи по редактированию и поддержке в актуальном состоянии огромного количества данных типа «куда направить товар». Классическая задача программирования на практике логистики. При этом мы не будем выходить за рамки стандартного стека Java Springboot и Postgres. Статья будет полезна разработчикам (от джуна до сеньора), которым интересно погрузиться в трудовые будни разработчика в сфере транспортной логистики.

Читать далее

На что способен КриптоПро JCP? Туториал по валидации отсоединенной электронной подписи

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

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

Меня зовут Вадим, я Java-разработчик SimbirSoft. В этой статье я расскажу, как на одном из проектов мы реализовали возможность валидации электронной подписи с помощью КриптоПро JCP. Этот фреймворк оказался хорошей альтернативой КриптоПро SVS после того, как последний попал под санкции Microsoft. Впоследствии на других подобных проектах я убедился в том, что решение рабочее и наиболее подходящее под бизнес-цели заказчиков. Прежде всего это банки, нанимающие организации и другие юрлица, где ведется электронный документооборот.

Читать далее

Байт-код — это просто! Как сделать DI по-настоящему быстрым

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

Привет! Меня зовут Григорий Юрков, и я уже несколько лет работаю в инфраструктурной команде Яндекс Маркета. Два года назад мы начали разрабатывать свой легковесный DI-фреймворк Scout, который предоставляет выразительный Kotlin DSL. Он не генерирует код, а делает всю работу в рантайме.

Недавний переход с compile-time-библиотеки Dagger 2 на нашу привёл к замедлению старта приложения. В этой статье мы будем подробно рассматривать то, как применение байт-кода помогло сохранить скорость на том же уровне и спасти проект по миграции на Scout.

Ускоримся!

Жилье в 500м от сетевых продуктовых магазинов в Москве. Или как публикация на Лента.ру избегает Хабр и дезинформирует

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

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

Читать далее

@Scheduled + @Async (в Spring Boot)

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

Недавно отвечал на вопрос почему аннотации @Scheduled и @Async иногда используют вместе, данный вопрос попался человеку на собеседовании.

Многие начинающие разработчики на java не до конца понимают в каких потоках происходит выполнение программы в таком случае.

В данном материале постараюсь объяснить зачем аннотации @Scheduled и @Async ставят вместе, какая проблема при этом решается, в каких потоках происходит работа программы и как делать правильно.

Подписывайтесь на мой блог в телеграм, где я раньше всего публикую все материалы.

Читать далее

Java Unsafe API для низкоуровневого манипулирования памятью

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

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

Иногда приходится сталкиваться с задачами, которые требуют выхода за рамки стандартных абстракций и безопасности Java. Мы ищем способы оптимизации, решения проблем производительности, или, возможно, просто хотим расширить свой кругозор в Java. Для таких случаев существует Java Unsafe API. Этот инструмент предоставляет нам низкоуровневый доступ к памяти и более широкие возможности для манипуляции данными.

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

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

Читать далее

Управление общей кодовой базой в микросервисной архитектуре

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

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

Читать далее

C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#

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

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

Тему предваряет обзор материалов, которые я использовал при написании своей статьи, в одном из которых есть сравнение C# делегатов с техникой которая заменяет их использование на Java, которое я тоже собираюсь проанализировать в конце.

Читать далее

Где 15 минут пешком от дома до метро в Москве и как различать панельные дома…

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

Продолжаем изучать географию столицы и как она влияет на комфорт жилья. В этой публикации подключим маршрутизацию и расчитаем пешеходные расстояния от входа в метрополитен до жилых зданий. В прошлый раз я анализировал жилье в городе на удаленность от негативных факторов и поделился инструкцией "Где в Москве жить «неплохо»". Теперь же перейдем на позитивные факторы выбора места квартиры и найдем в Москве жилые дома в шаговой доступности от метро.

Читать далее

Что выбрать новичку: Python или Java?

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

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

Читать далее

Stone: знакомство с API

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

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

Библиотеке исполнился 1.0.3 релиз. Испытав себя на более тысячи тестах, он чувствует себя более чем стабильно. Однако библиотеке присущ особый характер работы. Будучи созданным разработчиком в одиночку, вы можете встретить нестандартные взгляды на архитектуру. Автору предстоит непростая задача — раскрыть особенности работы библиотеки.

Читать далее

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

Управление зависимостями в микросервисной архитектуре

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

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

Читать далее

Распределённые транзакции

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

На собеседованиях на позицию middle/senior разработчика часто задают вопросы по распределенным транзакциям в микросервисной архитектуре.

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

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

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

Читать далее

Как потратить дни, чтобы сэкономить секунды: продвинутые коммиты в GitLab

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

Коммит изменения в GitLab — фоновый и рутинный процесс, на который никто не закладывает рабочего времени. Но в нем есть действия, которые съедают 18 секунд при каждом коммите. 10 коммитов — уже 3 минуты за день и 15 — за неделю. Да, немного, но на это тратится внимание. К тому же, за эти 15 минут можно сделать что-то полезное или просто выпить кофе и дать мозгу отдохнуть.

Мы в Selectel нашли способ, как упростить коммиты в GitLab и добавить им информативности — описания прямиком из Jira. Любите автоматизировать рутинные задачки? Тогда добро пожаловать под кат.
Читать дальше →

Разработка децентрализованных приложений на Spring Boot: инструменты Web3 Tech

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

Привет! Меня зовут Даниил, я разработчик в Web3 Tech. Недавно в JVM-инструментарии для нашей основной платформы «Конфидент» состоялся новый релиз, в который вошли библиотеки клиента для взаимодействия с нодой и Spring Boot стартеры. Далее в посте я расскажу об этих библиотеках, которые помогут вам комфортно и эффективно создавать на JVM-языках программирования полноценные приложения, взаимодействующие со смарт-контрактами нашей платформы.

Читать далее

Асинхронный API First

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

API-First — один из популярных подходов к проектированию серверных приложений. Для обеспечения этого подхода создано множество программных продуктов. Однако сложно найти продукт, который поможет реализовать этот подход для серверных приложений, использующих брокеры сообщений в качестве средства интеграции —  такие, как Apache Kafka, RabbitMQ, Apache ActiveMQ. Мы решили это исправить и представляем вам свое решение AxenAPI.

Читать далее

Как упростить себе жизнь: удобные юнит-тесты с JUnit и AssertJ

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

Для тестирования Java-приложений создано столько полезных инструментов, что в них немудрено запутаться. Вместе с тем с помощью каждого из них можно решить строго определенный круг прикладных задач. Меня зовут Константин Шибков, я старший Java-разработчик CDEK и программный директор курсов по Java в Skillbox. Сегодня расскажу о практике использования фреймворка для модульного тестирования JUnit 5, а также покажу на конкретных примерах, как проводятся стандартные юнит-тесты и параметризованные тесты. Вы сможете самостоятельно повторить их, воспользовавшись подготовленным репозиторием с готовыми примерами тестов на Java. 

Читать далее

Набор инструментов backend reliability инженера

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

Привет! Меня зовут Андрей, я возглавляю команду, которая отвечает за надежность и стабильную работу бэкенда в Wrike. Если вы когда-нибудь задумывались, что же такое «backend reliability», то знайте, что вы не один! Я часто объясняю, что это что-то вроде должности инженера по надежности сайта (SRE), но сфокусированная исключительно на бэкенде. В статье я расскажу о зонах ответственности BRE команды и инструментах, которые мы применяем для поддержания стабильной работы бэкенда на высоком уровне.

Читать далее

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