Обновить
181.79

Java *

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

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

Работа с геометрией в JPA и Spring Boot 3

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

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

Так как статей на эту тему на хабре раз и обчелся, то вот держите еще одну 😁

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

Читать далее

Использование алгоритма Бойера-Мура-Хорспула в Java с примером решения задачи с LeetCode

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

Алгоритм Хорспула используется для нахождения подстроки в строке. Например, у нас есть строка «The game is over» и подстрока «over». Алгоритм Хорспула вернет значение первого вхождения подстроки «over» в строку «The game is over», а именно 12. 

Фактически, данный алгоритм является упрощенным алгоритмом Бойера-Мура, который, считается работает лучше, чем стандартный алгоритм на случайных текстах, но в худшем случае его скорость равна |needle| * |haystack| вместо 3 х |haystack|. 

Тем не менее, для восприятия, на мой взгляд, он гораздо проще.

Итак, погнали.

Условие задачи с leetcode: https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/

Как работает алгоритм?

Строка и подстрока совмещаются по первому символу, и начинаются сравниваться от последнего символа к первому.

Для примера возьмем строку: «aabcdadbc» и подстроку «adb»

Совмещаются строки следующим образом (слева направо):

Читать далее

Flyway + Spring Boot: настройка и написание миграций баз данных

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

Написание скриптов миграции трудоёмкий процесс. И если есть возможность это дело автоматизировать – этим нужно пользоваться!

В этом гайде я расскажу как подключить и настроить Flyway в Spring Boot приложении, сгенерировать скрипты инициализации и миграции схемы базы данных вместе с Amplicode!

Читать далее

14 конференций осени и 14 видеозаписей докладов

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

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

Кратко описали их все для Хабра, и каждой добавили по видеозаписи доклада — чтобы можно было не просто читать красивые слова, а сразу увидеть конкретику и заодно узнать что-то полезное.

Вот общий список, а дальше в посте — отдельно про каждую.

SmartData (инженерия данных)
DotNext (.NET)
Flow (системный и бизнес-анализ)
PiterPy (Python) 
VideoTech (видеотехнологии)
GoFunc (Go)
КаргоКульт (HR-практики)
Joker (Java)
Heisenbug (тестирование)
Mobius (мобильная разработка)
SafeCode (безопасность приложений) 
DevOops (девопс)
HolyJS (JavaScript)
I'ML (использование ML)

Читать далее

Как публиковать библиотеку в Maven Central Portal в 2024 году

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

Начиная с 12 марта 2024 года регистрация на OSSRH портале теперь недоступна. Большинство существующих туториалов в интернете описывает как раз опыт публикации через OSSRH на Maven Central. Из-за чего после марта 2024 года эти туториалы стали не актуальны для публикации проектов новых авторов.

Читать далее

Рекурсия в Java с примером решения задачи с LeetCode

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

Рекурсивные методы в Java — это методы, которые вызывают сами себя и требуют осторожности с их обращением.

Чтобы не увидеть «StackOverflowError» на экране, нужно помнить о двух штуках: базисе и шаге рекурсии.

Базис — это условие выхода из рекурсии, а шаг — это вызов методом самого себя с измененными параметрами.

Самый частый пример, который можно встретить в интернете при попытке найти информацию о рекурсии — нахождение факториала числа. Быстренько пройдемся по нему перед рассмотрением более интересной задачки с leetCode.

Читать далее

Разбираемся с MavenGate. Настолько ли он страшен на самом деле

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

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

Меня зовут Михаил, я исследователь Центра научных исследований и перспективных разработок, в круг моих обязанностей входит разработка мобильных приложений Android и исследование безопасности разрабатываемых решений. Сегодня рассмотрим, так ли страшен «черт», как его малюют, или насколько страшен MavenGate на самом деле.

Читать далее

Тестируем качественные характеристики. Как сделать сложное простым

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

Привет, Хабр! Меня зовут Юрий Заковряшин. Я занимаюсь разработкой ПО более 40 лет, преподаю курсы по технологиям разработки программного обеспечения и программированию на платформе Java в СПбПУ Петра Великого.

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

Читать далее

Мы сопоставили языки программирования с специализацией World Of Warcraft

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

Привет, друзья разработчики и геймеры!

Мы с командой разработчиков "*** Telecom" решили весело и с увлечением сопоставить языки программирования с классами из мира World of Warcraft. Почему бы не объединить наше любимое хобби с нашей профессиональной деятельностью? Давайте вместе погрузимся в этот волшебный мир и узнаем, как каждый язык программирования может быть аналогом одного из классов в WoW!

Читать далее

Expression Problem и Объектные алгебры

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

Expression Problem (EP) — это классическая задача в программировании на совмещение несовместимого.

Автор задачи (Philip Wadler) формулирует следующие цели: создать такую абстракцию, что позволяла бы расширять иерархию в двух направлениях: добавлять новые классы и добавлять новые методы для обработки иерархии, сохраняя при этом строгую статическую типизацию и не требуя изменений существующего кода.

В динамически типизируемых языках мы бы могли добавить или переопределить метод на лету с помощью трюка, ставшего известным под неказистым названием monkey patching (хоть первоначально речь шла совсем не про обезьян, а про партизан — guerrilla).

А вот какие трюки применяют в статически типизированных языках рассмотрим под катом.

Читать далее

Разбираемся с Vespa. Часть 1

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

Эта статья открывает серию из трёх материалов, посвящённых работе с поисковой системой хранения данных Vespa.

Из этой статьи вы узнаете:

1) Как настроить конфигурацию Vespa.

2) Как запустить сервер конфигурации Vespa в Docker.

3) Как выглядит структура схемы данных.

4) Как выполнить фильтрацию полей в результатах поиска.

5) Как отключить валидацию схемы данных и файла конфигурации для локальной отладки.

Читать далее

Реактивный велосипед

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

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

Читать далее

Как я настраивал платежи и реферальную систему продаж «Приведи друга» в Telegram боте

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

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

Читать далее

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

Declarative Gradle: рывок или прорыв?

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

Полгода назад команда Gradle представила новый продукт — Declarative Gradle. Команда Spring АйО, со своей стороны, провела исследование и готова поделиться результатами. 

TL;DR: технология всё ещё активно развивается, но пока что не поддерживается привычными инструментами, такими как IntelliJ IDEA. Несмотря на это, нам удалось запустить Spring Boot приложение!

Читать далее

Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024

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


Друзья! А знаете ли вы, какой Android-смартфон был первым в мире и как он выглядел? А я теперь не просто знаю, но и могу физически пощупать настоящую легенду своих лет — HTC Dream, также известный как T-Mobile G1. Однако G1 был мне интересен не только как коллекционный девайс для гика, но и потенциально-диковинное устройство для разработки приложений: ведь в современном мире принято повышать минимальную версию Android для работы тех или иных программ, а я свои буду… понижать, чтобы они смогли заработать даже на самой первой версии Android! В сегодняшней статье мы с вами: посмотрим на Dream и постараемся понять, почему HTC выбрала именно Android, неудачно перепакуем аккумулятор, бэкпортируем мои клиенты ВК, YouTube и Telegram и посмотрим, правда ли старичок «бесполезен», как говорят в ретро-обзорах или что-то ещё да может! Интересно? Тогда добро пожаловать под кат!
Читать дальше →

Обзор GigaIDE от СБЕРа | Российская IntelliJ IDEA | Поддержка Spring вместе с Amplicode

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

Недавно СБЕР выпустил GigaIDE — новую IDE для Java, Kotlin и не только. Это событие вызвало бурные обсуждения среди разработчиков. Чаще всего звучали следующие вопросы:

Чаще всего звучали следующие вопросы:

1. Это просто пересобранная версия IntelliJ IDEA Community Edition?
2. Если нет, что нового предлагает GigaIDE?
3. Поддерживает ли она работу с базами данных и Spring?

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

Читать далее

7 основных способов оптимизировать кеширование в Spring Boot

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

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

В новом переводе от команды Spring АйО вы узнаете про 7 основных техник оптимизации кеширования в Spring Boot, которые могут помочь значительно улучшить производительность. От выбора идеальных кандидатов для кеширования до реализации асинхронного кеша и мониторинга метрик кеша.

Читать далее

Неожиданности в авторизации. Что скрывает Keycloak?

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

Авторизация и регистрация пользователей — важная часть приложения как для юзеров, так и для безопасности. Но какие неожиданности содержит исходный код популярного Open Source решения для авторизации, и как они могут повлиять на работу приложения?

Читать далее

Переписывая историю: от инструментов версионирования БД к практике

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

Пожалуй, почти каждый Spring разработчик сталкивается в своей практике с версионированием баз данных. На эту тему есть отличный доклад на Joker 2023 от Александра Шустанова, в котором спикер сравнивает 2 самых популярных инструмента для миграций БД: Flyway и Liquibase. Редакция Spring АйО приводит транскрипт доклада, для тех, у кого нет 45 минут для просмотра видео.

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

Читать далее

Умножение Монтгомери

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

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

Один из вариантов эффективного решения — умножать по модулю, вообще при этом не используя операции деления, с помощью алгоритма Монтгомери.

Про него я и хотел бы поговорить.

Читать далее

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