Обновить
256K+

Java *

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

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

Kafka Connect на примере Debezium PostgresConnector

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

В предыдущей статье про микросервисную архитектуру на основе событий с использованием Kafka Streams достаточно поверхностно был упомянут io.confluent.connect.jdbc.JdbcSourceConnector, который использовался для вычитания данных из SQLite и отправки их в топик Kafka. Сейчас я бы хотел более подробно разобрать технологию Kafka Connect на примере io.debezium.connector.postgresql.PostgresConnector. Как и в прошлый раз, я реализовал небольшой демо проект, код которого доступен на GitHub. В проекте кода совсем немного, однако чтобы понять все настройки, примененные в коннекторе, придется достаточно подробно пройтись по теоретической части. Итак, приступим.

Читать далее

Генерация PDF-документации из OpenAPI-спецификации в SpringBoot-приложении

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

При интеграции с нашим приложением, написанном на "классическом" SpringBoot-стэке встал вопрос о предоставлении описания АПИ партнеру. Фактически из коробки SpringBoot позволяет развернуть на стороне приложения тонкий Swagger-клиент и сгенерировать на лету спецификацию в формате Swagger (OpenAPI), которая представляет собой JSON особой структуры (хотя если читатель не знает, что это, наверное нет никакого смысла вообще читать эту статью).

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

В ходе изысканий в google, была найдена статья, и советы на stackoverflow, которые фактически повторяли эту статью. Фактически было найдено 2 варианта решения:

1) Использовать онлайн-конвертер

2) Настроить цепочку из 3 maven-плагинов:

Читать далее

Немного о гигиене Java кода

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

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

Читать далее

Польза создания однородных задач для параллельного вычисления

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

Как правильно использовать возможности параллельного программирования?
Зачем программистам математика и зачем знать алгоритмы?

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

Весь код из статьи находится здесь.

Читать далее

Безопасность web приложений с использованием Identity Provider

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

В современном цифровом мире, где взаимодействие с онлайн-ресурсами и web приложениями стало неотъемлемой частью нашей повседневной жизни, безопасность и управление личной идентификацией стали ключевыми аспектами. Именно в этом контексте становится крайне важным понятие “Identity Provider” или, сокращённо, IdP.

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

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

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

Читать далее

Java Digest #7

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


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

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

?? Добро пожаловать в волшебный мир Java, где декабрьский Java Digest обещает увлекательное приключение! В этом месяце Spring Boot 3.2.0 приносит поддержку виртуальных потоков, проекта CRaC, RestClient и JdbcClient. Kotlin 1.9.20 представляет стабильность Kotlin Multiplatform и улучшения производительности. В выпуске немного обновлений по JEP-ам, полезные статьи и видео. Пусть ваш декабрь будет полон кодовой магии и вдохновения. Mischief managed ???

Читать седьмой выпуск

Деплой приложения на Java. Хостим проект через push в Git

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

В статье мы рассмотрим, как развернуть в облаке приложение на Java, на примере Spring Boot приложения с встраиваемой базой данных H2. А именно, мы попробуем развернуть приложение с простым REST API, сборкой Maven и тремя эндпоинтами, позволяющими добавить продукт, получить список всех продуктов и узнать общую стоимость всех продуктов. 

Код приложения из примера можно скачать по ссылке.

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

Читать далее

QIWI Server Party 9.0 — 14 декабря, офлайн и онлайн

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

Привет! Совсем скоро мы проведём наш очередной QIWI Server Party, уже 9-й по счёту. Это митап для backend-разработчиков и тех, кому в целом интересна подобная тематика.

Как обычно, расскажем об опыте больших компаний из первых рук — будут не только спикеры из нашей компании, но и коллеги из Альфа-Банка и Яндекса. На митап можно будет прийти как офлайн, если вы в Москве, так и посмотреть трансляцию. Главное — заранее зарегистрироваться.

Итак, вот программа:

Читать далее

Как распараллелить тесты с базой данных

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

Представьте проект, в котором уже написано несколько сотен тестов. Каждый тест настраивает базу под себя: добавляет данные, вызывает truncate по окончанию. Хочется запускать тесты параллельно, чтобы ускориться, но если два теста запустить одновременно, они почти наверняка друг другу помешают.

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

Читать далее

Хроники пикирующего бота или как важно не пропускать стадию QA в проектах

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

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

Читать далее

Генерация контрактов OpenApi или прикладной API first: совсем немного про зачем

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

Новое место, новая позиция, новый продукт! Финтех, камунда, ~ 40 (!) микросервисов за которые отвечает наша команда. Первый спринт. Я в роли наблюдателя. В спринте вроде бы обычная задача - нужно вызвать из одного сервиса другой, и обработать результат. Ребята оценивают, начинают работу, и что я вижу в течение следующих дней: один разработчик берёт сервис-сервер, другой сервис-клиент, и каждый начинает реализацию контракта описанного в табличке в confluence. Что-от около десятка полей, если мне не изменяет память. Они уходят на пару дней, возвращаются, начинают тестирование контракта, выясняется что одно или два поля немного различаются в названии, уходят править нейминг, возвращаются, тестируют и только после этого переходят к написанию какой-то логики.

И тут меня понесло. Да, дело не конкретно в этих ребятах или задаче. Или продукте. Или компании. Они просто делают работу как привыкли делать. С точки зрения разработчика - закрыть такую задачу за 3 или 6 дней - нет особой разницы. Над сроками вообще начинаешь заморачиваться только после перехода в роль которая за эти самые сроки хоть как-то отвечает. Но потратить 4 дня силами двух разработчиков только на контрактую обвязку...

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

Немного итогов

Компоновка аннотаций в Spring

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

Привет Хабр! Совсем недавно, в процессе разработки на Spring я столкнулся с невероятным количеством бойлерплейт-кода в аннотациях. Решение сделать с этим что-то было принято мгновенно и вот что из этого вышло...

Читать далее

Следование style guide для .proto файлов с помощью protolint в GitHub Actions

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

В этом посте я расскажу, как настроить protolint для проверки .proto файлов на соответствие официальному style guide в GitHub Actions и поделюсь практическим опытом его использования.

Читать далее

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

Мигрируем Java Spring Boot приложение на Kotlin

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

Доброе время!

Немного статистики по Kotlin: по недавней выборке на hh.ru в вакансиях "программист, разработчик" по слову Java и Kotlin почти треть вакансий (а в некоторых регионах больше) требуют владения Kotlin. А по последнему  отпросу от AZUL 2023 47% организаций используют Kotlin. Таким образом освоив Kotlin и добавив в резюме репозиторий с проектом на нем вы получите на 30% больше возможностей!

Как известно, лучший способ выучить новый язык программирования - это пройти курсы сделать на нем проект. Для Java программистов на мой взгляд самый простой и эффективный способ - взять собственный небольшой Spring Boot REST API проект и сделать его миграцию.

В рамках наших курсов "Из Middle в Senior" (см. предыдущий пост по курсу «Работа с документами в Java») я выпустил новый курс Spring Boot REST API приложение на Kotlin и хочу поделиться здесь особенностями миграции и полезными ссылками для тех, кто захочет это сделать самостоятельно. Статья в помощь тем, кто решил мигрировать на Кotlin свой Java проект, НЕ для изучения основ Kotlin.

Итак, приступим:

На грани ИИ: пример поиска и обработки векторов в PostgreSQL + pgvector

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

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

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

Читать далее

Производительность базового поиска в Ozon как культурный феномен

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

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

Читать далее

Эмулятор QUIK: как наладить тестирование вендорного продукта

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

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

Читать далее

Обеспечение обратной совместимости gRPC API с помощью protolock в GitHub Actions

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

В этом посте я поделюсь с вами подробной инструкцией по настройке автоматической проверки обратной совместимости gRPC API с помощью protolock в GitHub Actions.

Читать далее

Эффективное создание и деплой gRPC API с помощью GitHub Actions и Packages для проекта на Kotlin и React

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

В этом посте я покажу, как с помощью GitHub Actions легко реализовать генерацию и публикацию gRPC API пакетов в GitHub Packages, в реестрах Apache Maven и npm. Если вы хотите освоить GitHub Packages для своих проектов и научиться генерировать gRPC API для сервисов на Kotlin/Java и gRPC-web клиентов — добро пожаловать под кат.

Читать далее

Потоки в Java: От рождения до смерти. Введение в многопоточность

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

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

Жизненный цикл потока - основная концепция Java, которую мы подробно рассмотрим в этой статье. Мы будем использовать краткую иллюстрированную диаграмму и фрагменты практического кода, чтобы более глубоко понять состояния потока во время его выполнения. Эта статья о создании потока - отличное начало для понимания потоков в Java.

Читать далее