Обновить
256K+

Java *

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

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

Как положить приложение 21 запросом* к /actuator/health

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

* 21 и более параллельным запросом в определённых условиях :)


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

Читать дальше →

Поисковый запрос на баги в Apache Solr

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

И вновь мы проверяем продукт Apache. На этот раз выбор пал на Solr — платформу поискового сервера с открытым исходным кодом. Благодаря Solr можно эффективно и быстро искать информацию в базах данных и на интернет-ресурсах. При решении такой сложной задачи очень легко допустить разнообразные ошибки, даже несмотря на огромный опыт разработчиков Apache. Именно такие ошибки мы рассмотрим в этой статье.

Читать далее

Самый простой способ проверить работу веб-приложения под нагрузкой на примере JMeter и Grafana

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

Привет, меня зовут Рамиль, я программист в отделе разработки серверных решений ЮMoney. В этой статье расскажу о своём эксперименте с нагрузочным тестированием с помощью JMeter, Grafana и Prometheus, а также покажу, как тестировал три сценария: с двумя, 10 и 100 запросами в секунду.

Читать далее

Spring Boot Starter: практически, принципиально и подробнее. Часть 3

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

Привет, Хабр! С вами снова Сергей Соловых, Java-разработчик в команде МТС Digital. Мы продолжаем изучать возможности и нюансы построения собственного Spring Boot Starter. В предыдущих частях мы разобрали структуру стартеров, автоконфигурацию и зависимости бинов. А сегодня давайте поговорим о параметрах приложения.

Умение работать с файлами конфигураций позволяет избежать hard-coding-данных в коде библиотеки. Это делает ее более гибкой и легко конфигурируемой, это значит, что ее можно адаптировать под конкретные требования. С помощью параметров можно настроить контекст или изменить поведение сервиса. Начнем с рассмотрения нескольких способов интеграции параметров из файла конфигурации в код приложения.

Читать далее

Soft Assertions в AssertJ

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

Бывало ли у вас такое, что тест падает на первом же assertion'e из десяти? Вы исправляете ошибку, запускаете тест снова, и он падает на втором assertion'e. И так десять раз. Выматывает, не так ли?

На самом деле, есть способ ускорить этот процесс — использовать Soft Assertions. С их помощью тест выполнится полностью, даже если один или несколько assertion'ов упадут, и вы сразу увидите все ошибки.

В новой статье от Михаила Поливахи, эксперта сообщества Spring АйО, вы узнаете, что такое Soft Assertions и как ими пользоваться.

Читать далее

«Java – это язык синих воротничков»

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

Поговорили с Сергеем, ведущим Java-разработчиком Нижегородского подразделения «Криптонита». В интервью – о языке программирования Java, «синих воротничках», бесполезности pet-проектов и работе инженера в энтерпрайзе без прикрас.

Сергей, расскажи, как именно ты пришёл к мысли изучать Java?

Это забавная история. Все мальчишки в начале 90-х хотели компьютер для игр. Моим товарищам покупали «Спектрум», на котором игры были цветные. У моих родителей не было таких денег. Поэтому они, скрепя сердце, купили мне старый компьютер без модуля цветной псевдографики. Назывался он «Партнер 01.01», как сейчас помню.

Читать далее

Инверсия управления Контейнеров и паттерн Инъекции Зависимостей — перевод

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

В основе сборки любых компонентов лежит общий шаблон того, как они выполняют прокидывание зависимостей, это концепция, которую разработчики называют очень общим именем Inversion of Control (IoC: инверсия контроля). В этой статье я углублюсь в то, как работает этот паттерн под более конкретным названием «Dependency Injection» (Инъекция зависимостей), и сравню его с альтернативой - Service Locator

Читать далее

Автоматизация интеграционных и приемочных тестов с помощью 1001 велосипеда

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

Современное приложение на Java с использованием Spring Boot, включающее множество клиентов (веб, десктоп, мобильные), может столкнуться с проблемами в тестировании по мере его роста. Даже при хорошем покрытии тестами (80%+), увеличение объема интеграционных и приемочных тестов может привести к значительным задержкам в процессе разработки. Тесты могут занимать до 24 часов для выполнения, что снижает эффективность и увеличивает риск багов в продакшене. Не знаю кто сказал, но вполне четко описывает процесс разработки

Что делать

... кроме написания резюме в поисках более интересно проекта?

Пробуем понять, где в авто тестах тормоза. И понимаем что все интеграционные и приемочные зависят либо от скорости тестера, либо от скорости отклика клиента во время авто-тестов. И то и то в сотни и тысячи раз медленнее вашего апи.

После анализа ситуации остается одно: как-то все это автоматизировать, причем быстро и дешево.

Ускорить тестировщика, без незаконных препаратов, мы не можем, как и сделать UI который будет работать без задержек, на скорости api (но можно постараться, но дорого...).

Основные шаги для решения:

Читать далее

Создание масштабируемых приложений при помощи Kafka и реактивного программирования

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


Введение


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

Использование алгоритма бинарного поиска для нахождения квадратного корня числа на Java

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

Наткнулась на leetcode на задачку с нахождением квадратного корня из неотрицального числа.

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

Итак, условие задачи здесь: https://leetcode.com/problems/sqrtx/description/

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

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

Акцентирую внимание еще раз: массив должен быть отсортирован по возрастанию.

Если массив не отсортирован, то сортировка потребует минимум O(log n * n) временной сложности, что нужно учитывать.

Поэтому, если массив небольшой и неупорядоченный, то, скорее всего, лучше будет линейный поиск со сложностью O(n).

Итак, теперь вернемся к нашей задачке. Нужно найти квадратный корень из неотрицательного числа, где само число может быть любым от 0 до 231 - 1. Если корень из числа извлекается с остатком, например, корень из 8 это 2.82842…, то нужно округлить в меньшую сторону до целого, т.е. в данном случае до 2.

Начнем, по порядку, ограничив краевые случаи. Так, если х = 0, то можно сразу вернуть 0.

Читать далее

Как синхронизировать потоки в Java

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

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

Всё начинается с потребности в быстродействии и масштабируемости. C несколькими потоками можно обрабатывать больше операций одновременно.

В этой статье мы рассмотрим, как синхронизировать потоки в Java.

Читать далее

Как разработать онлайновый компилятор кода при помощи Java и Docker

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


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

Исходный код к этой статье выложен на Github в этом репозитории
Читать дальше →

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

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

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

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

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

Читать далее

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

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

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

Алгоритм Хорспула используется для нахождения подстроки в строке. Например, у нас есть строка «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 мин
Охват и читатели20K

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

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

Читать далее

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

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

Вот уже много лет мы каждую осень проводим серию конференций. Но в этот раз их впервые будет целых 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 мин
Охват и читатели7.9K

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Читать далее