Как стать автором
Обновить
0
Денис @1D00msdayread⁠-⁠only

Пользователь

Отправить сообщение

JPA Entity. Загрузи меня не полностью

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров7.7K

JPA часто подвергается критике за невозможность загружать сущности частично, что на самом деле является большим заблуждением. Spring Data JPA и Hibernate включают в себя множество инструментов по частичной загрузке сущностей. 

Команда Spring АйО подготовила статью, в которой рассмотрела имеющиеся в Spring Data JPA инструменты для частичной загрузки сущностей, а также разобрала их особенности и corner-кейсы.

Читать далее
Всего голосов 20: ↑19 и ↓1+18
Комментарии14

gRPC: проблемы и решения при переходе с REST

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

Вот уже 24 года мы используем сложный для понимания, завязанный на особенности HTTP REST-протокол. Не пора ли переходить к чему-то более современному?

Привет! Меня зовут Игорь Алексеев и я работаю бэкенд-разработчиком в компании Garage Eight. Некоторое время назад я внедрил gRPC для части своих сервисов. В этой статье поговорим о том, что такое gRPC, сравним его с возможными альтернативами, рассмотрим преимущества gRPC и пробежимся по проблемам, которые возникают почти в каждом проекте, где этот протокол приходится внедрять.

Читать далее
Всего голосов 8: ↑5 и ↓3+5
Комментарии25

Виртуальные потоки Java 21 — чувак, где мой lock?

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

Как показывает опыт Netflix, использование виртуальных потоков, представленных в Java 21, может спровоцировать возникновение неожиданных проблем. В новом переводе от команды Spring АйО мы подробно исследуем уникальные трудности, возникшие у команды Netflix при интеграции виртуальных потоков в Spring Boot на Tomcat. 

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

Читать далее
Всего голосов 20: ↑19 и ↓1+20
Комментарии27

Java Digest #15

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

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

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

В этом выпуске у нас много материалов, посвященных развитию Java. Коснемся и Leyden, и Valhalla, и Loom, и GC в JDK 23. За прошедший месяц вышло много интересных докладов с последнего JPoint, некоторые из них мы осветили в этом выпуске. А в разделе со статьями собрали много туториалов и обзоров. Dev-контейнеры от JetBrains, реализация Transactional Outbox с использованием Spring Boot, отслеживание вызова Deprecated-методов, история сбоя в Netflix, связанного с виртуальными тредами, — вот далеко не полный список. И на сладкое — пара свежих выпусков подкастов JavaHut и javaswag. Приятного чтения 😉

Читать выпуск 15
Всего голосов 17: ↑17 и ↓0+21
Комментарии5

Soft Assertions в AssertJ

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

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

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

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

Читать далее
Всего голосов 13: ↑12 и ↓1+13
Комментарии2

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 11: ↑6 и ↓5+4
Комментарии38

Java HotSpot JIT компилятор — устройство, мониторинг и настройка (часть 1)

Время на прочтение8 мин
Количество просмотров35K
JIT (Just-in-Time) компилятор оказывает огромное влияние на быстродействие приложения. Понимание принципов его работы, способов мониторинга и настройки является важным для каждого Java-программиста. В цикле статей из двух частей мы рассмотрим устройство JIT компилятора в HotSpot JVM, способы мониторинга его работы, а также возможности его настройки. В этой, первой части мы рассмотрим устройство JIT компилятора и способы мониторинга его работы.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

Поиск по произвольным параметрам

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

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

Давайте
Всего голосов 9: ↑3 и ↓6-3
Комментарии12

Погружение в индексы PostgreSQL

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


Автор статьи: Артем Михайлов

В данной статье мы сделаем погружение в индексы PostgreSQL — мощного и гибкого реляционного СУБД с открытым исходным кодом. Мы рассмотрим концепции, типы индексов и методы их применения для ускорения запросов к данным. Статья будет полезна как для начинающих разработчиков, так и для опытных, желающих углубить свои знания в области индексирования в PostgreSQL.

Индексы представляют собой структуры данных, которые позволяют базе данных быстрее находить и извлекать информацию. Они аналогичны оглавлениям в книгах, которые упрощают поиск определенной информации, указывая на ее местоположение. Правильное использование индексов может существенно улучшить производительность запросов, сокращая время обработки и уменьшая нагрузку на систему.
Читать дальше →
Всего голосов 22: ↑14 и ↓8+9
Комментарии1

Как из метрик Prometheus построить график Latency

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

Обычно мы подключаем сбор метрик в prometheus к нашим web‑приложениям с помощью каких‑то клиентских библиотек, которые отдают метрики на /metrics. В этой статье я хочу рассказать как визуализировать Latency с помощью Histogram метрики.

Будет полезно тем, кто еще не строил метрики из Prometheus, а так же тем, кто хочет понять как их интерпретировать.

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии9

Книги для начинающих разработчиков: от «Чистой архитектуры» до «Паттернов проектирования»

Время на прочтение5 мин
Количество просмотров32K

Книги — отличный источник знаний, это верно. Но как определить, где хорошая книга, а где не очень? Лучше всего воспользоваться рекомендательными сервисами либо же посмотреть обзоры на разные книги в сети. Именно поэтому сегодня публикуем подборку хороших изданий, которые в основном пригодятся начинающим разработчикам. Но, вероятно, они будут полезны и более опытным коллегам. Под катом — самое интересное!

Читать далее
Всего голосов 13: ↑10 и ↓3+16
Комментарии13

Топ-11 ошибок при установке Kubernetes, которые не стоит допускать

Время на прочтение14 мин
Количество просмотров16K

Автор делится своим опытом установки Kubernetes на AWS Cloud и с использованием Ubuntu 20.04. Он столкнулся с некоторыми ошибками в процессе установки, и смог найти решения для них.

Читать далее
Всего голосов 15: ↑10 и ↓5+6
Комментарии9

Реализация алгоритма SHA-256

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

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

Читать далее
Всего голосов 25: ↑24 и ↓1+25
Комментарии14

Разбираем float на части

Время на прочтение3 мин
Количество просмотров7.1K

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

Читать далее
Всего голосов 12: ↑7 и ↓5+4
Комментарии15

Как работает веб-браузер (с картинками)

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

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

Эта статья приоткроет завесу магии, скрывающуюся за кулисами веб-браузеров.

Давайте начнем!

Читать далее
Всего голосов 25: ↑22 и ↓3+24
Комментарии9

Лучший способ использовать аннотацию Spring Transactional

Время на прочтение5 мин
Количество просмотров28K

В этой статье я собираюсь показать вам лучший способ использования аннотации Spring Transactional.

Это один из лучших методов, которые я применял при разработке RevoGain, веб-приложения, которое позволяет вам рассчитать прибыль, полученную при торговле акциями, товарами или криптовалютами с помощью Revolut.

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии17

Spring AOP: как работает проксирование

Время на прочтение6 мин
Количество просмотров51K

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

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

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

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии8

Бомба Log4j и кризис опенсорса

Время на прочтение5 мин
Количество просмотров58K


Учитывая стремительную цифровизацию бизнеса и развитие наших мобильных и веб-платформ, вопросы информационной безопасности для М.Видео-Эльдорадо крайне важны. Наверняка почти все в курсе про эпическую уязвимость в библиотеке Apache Log4j. Она поддерживает выполнение внешнего кода для интеллектуального парсинга логов, куда попадает и пользовательский ввод. Грубо говоря, одна строчка в адресной строке браузера у школьника кладёт сервер, если эту строчку скушает логгер (на многих серверах записываются в логи все HTTP-запросы).

Уязвимость в библиотеке сидела с 2013 года, но заметили только сейчас. А когда начали копать глубже, то обнаружили пропасть, дно которой не просматривается вообще.

Спустя месяц можно с холодной головой осмыслить произошедшее и подумать, что эта история означает для всего движения Open Source.
Читать дальше →
Всего голосов 97: ↑72 и ↓25+70
Комментарии253

Эффективное управление транзакциями в Spring

Время на прочтение10 мин
Количество просмотров79K
Всем добрый день!

Что ж, конец месяца у нас всегда интенсивные, вот и тут остался всего день до старта второго потока курса «Разработчик на Spring Framework» — замечательного и интересного курса, который ведёт не менее прекрасный и злой Юрий (как его называют некоторые студент за уровень требований в ДЗ), так что давайте рассмотрим ещё один материал, который мы подготовили для вас.

Поехали.

Введение

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

Важный аспект в управлении транзакциями — определение правильных границы транзакции, когда транзакция должна начинаться и когда заканчиваться, когда данные должны быть добавлены в БД и когда они должны быть откачены обратно (в случае возникновения исключения).

Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии2

@Transactional в Spring под капотом

Время на прочтение16 мин
Количество просмотров202K

Spring предоставляет много удобств и многие его возможности кажутся магией - поставил аннотацию и все работает. Но, когда что-то идет не так (например, почему-то не работают транзакции как ожидается), приходится лезть внутрь и смотреть, где сломалось. В статье показан путь от создания инфраструктуры для обработки Transactional до обработки исключений.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии28

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность