Обновить
128K+

Java *

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

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

Введение в Apache Flink: осваиваем фреймворк на реальных примерах

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

Всем привет, меня зовут Александр Бобряков. Я техлид в команде МТС Аналитики, занимаюсь Real-Time обработкой данных. Недавно мы начали использовать фреймворк Apache Flink. Эту технологию выбрали, так как она (в отличие от Apache Spark) относится к true-стримингу и позволяет строить обработку данных с минимальной задержкой. В качестве DI-фреймворка выбрали привычный нам Spring Framework.

Наша команда использует разные виды тестирования: Unit, интеграционное, E2E, ручное, автоматизационное, нагрузочное. Этой теме будет уделено особое внимание. Я расскажу, какие подходы и паттерны помогут быть уверенными в качестве того, что вы разработали.

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

Читать далее

Helidon 4 вышел, а никто и не заметил

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

Те, кто использует Helidon в проде, наверняка точно знают, зачем им это нужно. Что делать остальным? Основная задача хомячка — объяснить детям концепцию смерти. Кажется, точно так же основная задача Helidon для широких народных масс — посмотреть на самые новые фишки Java и понять, нужно вам это или нет. Посмотрим, что же произошло в версии 4.0.0...

Интересно. Читать далее

Гайд по авторизации в Micronaut

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

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

Читать далее

Java Digest #6

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

Всем привет! ? ? ?

Мы — Java-разработчики Тинькофф: Андрей, Арсений и Константин. Собираем все интересное из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом.

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

В нашем мрачном путешествии поговорим о сборке мусора и таинственном процессе утилизации ненужных объектов в Java. Какие ужасы скрываются в этих загробных мирах? Заглянем в бездну тестирования и воззовем к силам распределенных транзакций, о которых шепчут только отважные.

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

В честь Хеллоуина, эту аннотацию нам помог сгенерировать ChatGPT

Читать далее

Пишем минимальный ActivityPub-сервер с нуля

Время на прочтение12 мин
Охват и читатели12K
В последнее время, на фоне покупки Twitter Илоном Маском, люди начали искать ему альтернативы — и многие нашли такую альтернативу в Mastodon.

Mastodon — это децентрализованная социальная сеть, работающая по модели федерации, как email. Протокол федерации называется ActivityPub и является стандартом W3C, а Mastodon — далеко не единственная его реализация, но самая популярная. Различные реализации протокола, как правило, совместимы друг с другом, настолько, насколько им позволяют их совпадения в функциональности. У меня есть и мой собственный проект ActivityPub-сервера — Smithereen, такой зелёный децентрализованный ВК, где я когда-нибудь таки верну стену.



В этой статье мы рассмотрим основы протокола ActivityPub и напишем минимально возможную реализацию сервера, позволяющую отправлять посты в сеть («fediverse»), подписываться на других пользователей и получать от них обновления.
Читать дальше →

Цикл постов про Keycloak. Часть вторая: Контроль доступа на уровне приложения

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

Цикл постов про Keycloak. Часть вторая: Контроль доступа на уровне приложения.

Этот пост является продолжением данной статьи

В прошлый раз мы настроили ABAC (Attribute Based Access Control) с использованием Keycloak, теперь реализуем проверку разрешений на уровне приложения.

Читать далее

Ускоряем запуск Spring Boot-приложений в контейнере

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

Знаете ли вы, что Spring Boot-приложение в контейнере может запускаться за миллисекунды? При этом без ущерба для производительности, памяти, паритета окружений разработки-продакшена, без ограничений возможностей языка Java, и почти без изменения кода приложения. Но как? С помощью Liberty 23.0.0.10-beta…

Читать далее

Эта неделя в мире Java (3 ноября)

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

Java-дайджест за последнюю неделю (3 ноября):

• Spring, Jakarta, Web

• IDE и редакторы

• Тестирование

• Статьи и подкасты

• Обзор статей на Хабре

Волшебно. Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Меня зовут Вадим, я 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 мин
Охват и читатели38K

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее