Обновить
128K+

Java *

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

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

Руководство по Java 8 Optional

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

В этом учебном пособии мы рассмотрим класс Optional, который был представлен в Java 8.

Цель класса — предоставить решение на уровне типа для представления опциональных значений вместо null (нулевых) ссылок.

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

Читать далее

Книга «Spring Boot по-быстрому»

Время на прочтение9 мин
Охват и читатели35K
image Привет, Хаброжители! Spring Boot, который скачивают более 75 миллионов раз в месяц, — наиболее широко используемый фреймворк Java. Его удобство и возможности совершили революцию в разработке приложений, от монолитных до микросервисов. Тем не менее простота Spring Boot может привести в замешательство. Что именно разработчику нужно изучить, чтобы сразу же выдавать результат? Это практическое руководство научит вас писать успешные приложения для критически важных задач. Марк Хеклер из VMware, компании, создавшей Spring, проведет вас по всей архитектуре Spring Boot, охватив такие вопросы, как отладка, тестирование и развертывание. Если вы хотите быстро и эффективно разрабатывать нативные облачные приложения Java или Kotlin на базе Spring Boot с помощью реактивного программирования, создания API и доступа к разнообразным базам данных — эта книга для вас.
Читать дальше →

Сегодня паттерн Посетитель в Java уже не нужен – лучше использовать переключатели паттернов

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

В современном языке Java паттерн Посетитель (Visitor) уже не нужен. Он отлично компенсируется использованием запечатанных типов и переключателей, использующих сопоставление с шаблоном – в таком случае те же цели достигаются проще и меньшим объемом кода.

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

Читать далее

Loom: зачем?

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

Недавно, 6 мая этого года, в OpenJDK вошёл JEP 425, который добавит к Java 19 в качестве превью-фичи Виртуальные треды.

Пожалуй, этот JEP — самое большое изменение семантики языка после появления Дженериков. Его масштабы трудно оценить. Для начала попробуем прикинуть, как оно может отразиться на нашей зарплате.

Читать далее

Как я позавидовал начинающим Junior Java разработчикам

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

На просторах интернета можно найти множество курсов по Java разработке для начинающих разного уровня сложности. Большая часть из них вполне хороши для того, чтобы помочь вам стать неплохим Junior разработчиком (конечно, курсов мало, нужна достаточно длительная практика на продуктиве, но базу они дают). Но что делать, если основы вы уже давно освоили, но не понимаете многих тонкостей и чувствуете, что вам не хватает базы для того, чтобы сделать шаг вперед и подтянуться до Middle? Можно изучать литературу, продолжать практиковаться на работе и учиться у более опытных коллег. Несмотря на то, что это все - тоже хорошие способы, им не хватает одного главного момента - систематичности и актуальности. Опытные товарищи постоянно заняты на сложных проектах и у них не очень много времени для того, чтобы дать вам волшебное ускорение в нужном направлении, да и то это обычно ограничивается кратким "копай сюда". Рабочие задачи на продуктиве - это бомба! Но при этом обычно спектр задач все равно ограничивается теми стеками и приемами разработки, которые в данный конкретный период времени востребованы заказчиком фирмы, в которой вам посчастливилось работать. А ведь экосистема Java очень-очень-очень большая! А заказы в фирме могут очень долго ограничиваться сложным и ценным, но достаточно узким стеком. А как же все остальное? Как же научится если не всему, то хотя бы главному, чтобы продвинуться дальше и стать мидлом?

Читать далее

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

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

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

Читать далее

Тестирование интеграции Kotlin веб сервиса на Spring Boot с базой данных

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

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

Читать далее

gRPC — безопасность или жесть?

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

Встроенные в gRPC способы проверки прав справляются со своими задачами, но накладывают ряд ограничений и не дают возможность писать сложные варианты проверок без «оригинальных» инженерных решений. А тот, кто хоть раз грешил обходом ограничений, знает, чем это чревато.

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

Наш backend-разработчик — Александр — нашел-таки то самое «оригинальное» инженерное решение. Решили поделиться с вами, чтобы и вам страдать не приходилось.

Оригинальное инженерное решение для упрощения аутентификации при вызове удаленных процедур по gRPC: proto-файл и реализация на Java.

Читать далее

Набор практик по работе с Postgresql глазами Spring java backend разработчика

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

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

Данная заметка - микс различных приемов работы с базой данных, мейнтененса, встречающихся проблем. В общем это чистой воды винегрет и что-то вроде шпаргалки. Я не являюсь гуру PostgreSQL, но могу поделиться своими наработками, которые использую достаточно часто являясь простым java разработчиком. Может кому-то что-то пригодиться.

Читать далее

Рукопись моей первой книги о Java

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

Статья о том, как я просто писал статьи на ИТ-тематику в личный блог, как вдруг получил контракт от издательства. Много работал и страдал. Прошёл через кучу этапов и написал рукопись своей первой книги о Java и её изменениях от версии к версии. Как чуть не переделал все перед самым концом, но довёл до конца и отдал текст редактору на следующий этап. Как отдохнул и переосмыслил увиденное и решил поделиться полученным знанием со всеми остальными.

Читать далее

Java библиотека для работы с внешним сервисом по протоколу RESTful API

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

Использование библиотеки-обертки для добавления функционала к RESTful API, предоставляемому внешним сервисом.

Читать далее

Разворачиваем проект серверов Minecraft

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

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

Не очень люблю воду в текстах, поэтому буду краток. Название статьи: «Разворачиваем проект серверов Minecraft». Что будем делать? Запускать проект серверов Minecraft. Для чего? Для практики, для отвлечения, и, в конечном итоге, для небольшого (а может и большого) практически пассивного источника дохода.

Читать далее

ORM — отвратительный анти-паттерн

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

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

Содержание статьи:

В статье приведены доводы, которые ставят под вопрос правильность присутствия ORM в рамках ООП.

Читать далее

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

Как отлаживать коллекции Java с Lightrun на продакшене

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

К старту курса по разработке на Java делимся руководством о том, как отлаживать коллекции Java на продакшене с платформой Lightrun и избегать при этом неприятностей с методом list.toArray(). За подробностями приглашаем под кат.

Читать далее

Блеск и нищета фреймворков тестирования: используем Groovy для скриптинга end-to-end тестов

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

Безусловно, тестирование важный аспект разработки ПО. Наличие тестов - это хорошо, а удобное тестирование - еще лучше. В этой статье я расскажу как запускать тесты, написанные на groovy без gradle, maven и даже без предварительной компиляции этих тестов, а также почему JUnit 5 - это намного больше, чем просто хорошая библиотека для unit тестов.

Читать далее

Как мы перевели API-модули микросервисного проекта с Feign на OpenFeign

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

Всем привет! Недавно мы решили задачу, как перейти на новую версию Spring + OpenFeign в мультимодульном проекте, в котором выделен API с навешенными аннотациями @FeignClient@RestController и @FeignClient. Я, Алексей Скакун, @hyragano ведущий разработчик ДОМ.РФ, поделюсь с вами этим кейсом.

Читать далее

Почему важен graceful shutdown в облачной среде (на примере Kubernetes + Spring Boot)

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

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

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

Читать далее

Thymeleaf + Spring WebFlux + Spring Security

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

Thymeleaf появился довольно давно, как минимум 10 лет назад, но он до сих пор весьма популярен и активно поддерживается. Шаблоны Thymeleaf удобны тем, что при простом открытии в браузере они выглядят как обычные HTML-страницы и их можно использовать как статический прототип приложения.

В этой статье рассмотрим, как создать простое приложение Spring WebFlux с Thymeleaf, аутентификацией Okta OIDC, защитой от CSRF-атак и контролем полномочий.

Читать далее

Ускоряем java-рефлексию в 2022

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

После прочтения заголовка у среднестатистического читателя наверняка возникнет весьма логичный вопрос: «Кто такая эта ваша рефлексия и зачем её ускорять?»

И если первая часть будет волновать только совсем уж откровенных неофитов (ответ тут), то вторая точно нуждается в пояснении.

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

Однако в java рефлексия реализована не самым быстрым (зато надёжным) методом, а именно, через использование JNI-вызовов. JNI (Java Native Interface) – очень полезная штука, позволяющая машине вызывать код из «внешнего мира», библиотек, написанных на C/C++ или ассемблере.

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

Тем не менее, рефлексия работает именно так: машина «выходит наружу», копается в своих внутренностях и «возвращается обратно», доставляя пользователю полученную информацию или вызывая методы/конструкторы.

А теперь представьте примерное быстродействие какого-нибудь фреймворка, который в процессе работы постоянно осуществляет рефлективные вызовы…

Читать далее
Представьте, что вы оказались в шахте: перед вами каменный монолит, в котором что-то поблёскивает — куски золота, не иначе. Блеск заманчивый, но вокруг грубый камень. В разработке часто возникает похожая ситуация: полезный юзерам код со всех сторон окружён камнем в виде инфраструктуры, конвертеров данных и легаси. На помощь приходит микросервисная архитектура: огромную глыбу можно раздробить на кусочки, в каждом из которых камня поменьше, а полезного кода — побольше. ПСБ предлагает разработчикам .NET и Java поддаться золотой лихорадке: посмотрим, кто лучше добывает полезный код из монолита. Присоединяйтесь к своей команде и работайте на общую победу: в зачёт идёт каждый правильный ответ.
Нужно больше золота