Обновить
512K+

Java *

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

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

Подведение итогов первого года от JPA Buddy

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

2021-й год закончился, уже почти прошел первый месяц 2022-го. Прошлый год стал знаменательным для JPA Buddy: первый публичный релиз, встреча с первым пользователем и рост до одного из самых высокорейтинговых плагинов на IntelliJ IDEA Marketplace. А еще завтра у Баддика первая годовщина — ровно год назад вышел первый публичный релиз! В этой статье мы решили поделиться историей, которая стоит за JPA Buddy, достижениями 2021-го года, некоторыми интересными фактами, которые получили от нашего комьюнити, и планами на 2022-й.  

Читать далее

Введение в Maven Toolchain

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

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

У меня есть проекты на Java 8, 11 и 17, и иногда я хочу поиграть с имеющимися сборками более новых версий.

Как обеспечить их создание без необходимости постоянно переключать среды выполнения Java?

Toolchain спешит на помощь!

Читать далее

Собираем многомодульный Gradle проект в Gitlab CI

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

Что может быть проще? Пишем команду сборкиgradle clean buildи все готово. На первый взгяд все действительно так, и займет это немного время. Но со временем кодовая база и, соответственно, количество тестов (ну я очень на это надесь) будет расти, вы не успеете опомниться как сборка будет у вас занимать уже 10 или больше минут

Читать далее

Как улучшить межсерверное взаимодействие и сэкономить время разработчика

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

Привет! Я Алексей, Java-разработчик. В статье поделился опытом внедрения подхода Contract-First в backend. 

Под катом подробности:

— что такое Code-First и зачем переходить на Contract-First,

— как перестать писать API-объекты руками и сэкономить 12 человеко-недель в спринт,

— как поддерживать однотипный код и API, если у вас 100+ микросервисов и 60 бэкендеров.

Читать о внедрении Contract-First

Уж+ёж: реактивные компоненты в сервлетном окружении (1/3)

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

Когда рассказывают о прелестях реактивного фреймворка Spring WebFlux и его подкапотном Project Reactor, для примера чаще всего показывают новые, создаваемые с нуля приложения. Однако на практике приходится строить из готовых блоков, в том числе из собственных прикладных и инфраструктурных модулей, которые уже написаны в императивном стиле и опираются на сервлетный стек. Как правило, такие модули нельзя/некогда/неохота (нужное подчеркнуть) переписывать, поэтому надо как-то адаптировать их к создаваемому реактивному приложению с минимумом правок (а лучше без них вовсе). О некоторых подходах к такой задаче и пойдёт речь в этой серии заметок.

Читать далее

Собрать библиотеку hsdis. Насколько глубока кроличья нора?

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

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

В данной статье я пытаюсь описать процесс сборки hsdis для Windows и для Linux, чтобы помочь вам сэкономить время и обойти подводные камни. Я не делал кросс-компиляцию, т.е. не собирал на Windows библиотеку hsdis для Linux. Для сборки hsdis под каждую платформу я использовал "родную" платформу. Может быть шаги, описанные ниже излишне сложны, но именно эти шаги привели меня к результату. Если есть какой-то более короткий путь к цели, пишите в комментариях.

Читать далее

HazelCast и синхронизация метода между несколькими нодами

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

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

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

Читать далее

Telegram-бот на вебхуках — Java+Spring, Redis, клавиатуры и деплой на Heroku — снова для самых маленьких

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


В предыдущих сериях


Это вторая статья в моей серии «для самых маленьких» — предыдущая была посвящена «классическому» Telegram-боту, наследуемому от TelegramLongPollingBot.

Для кого написано


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

Я пытаюсь писать как для себя, а не сразу для умных — надеюсь, кому-нибудь это поможет быстрее въехать в тему.

Предыстория


Учить словарные слова — занятие довольно скучное, а если делать это в лоб, ещё и малоэффективное, поэтому я решил разработать для дочери задания такого вида:



Ребёнок сначала выбирает правильный вариант, а затем закрепляет его написанием. По ощущениям, запоминание идёт неплохо. Дело оставалось за малым — написать бота и составить словари неправильных написаний.
Читать дальше →

Вы используете ненадежный код

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

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

Я сразу установил связь между Log4Shell и Security Manager. Сначала я не хотел об этом писать. Но ко мне поступили просьбы, и я не мог обойти это стороной.

Насколько я помню команда Oracle отказалась от Security Manager в Java 17. Один из аргументов, на котором основывалось это решение, заключается в том, что он изначально был разработан для защиты апплетов. 

Апплеты загружались из Интернета, поэтому их нужно было считать ненадежным кодом. Следовательно, нам пришлось запускать их в песочнице.

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

Это просто неправильно, и я объясню почему в этом посте.

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

Читать далее

Домашний билд-тест-сервер

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

Всем привет! Хочу рассказать о своём опыте настройки домашнего билд-тест-сервера.

Допустим, у вас есть хобби-проект, и вы работаете на нём в одиночку. Или вам просто нечем заняться, и вы решили поиграться с CI/CD, Linux администрированием, web разработкой.

Во-первых, почему именно домашний?

Ну, "домашний" значит, что вам не нужно ни за что платить (условно), что ресурсы ваши не ограничены - дисковое пространство, CPU (тоже условно), что у вас всё под контролем (root доступ, выбор операционной системы). Что вам не нужно вникать в правила пользования каким-то сторонним CI/CD сервисом, что вам придётся-таки разобраться с нюансами DevOps, пускай и в домашних условиях, пускай и на коленке.

Итак, допустим, у вас есть старый компьютер. У меня вот, например, такой завалялся: Fanless Mini PC Dual LAN Celeron J1900.

Читать далее

Разработка Android-приложения на Java для верификации QR-кодов сертификатов вакцинации

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

Спустя десятки лет после появления землян на планете Плюк на место КЦ пришёл КУ-АР в качестве самого ценного ресурса для чатлан и пацаков. Желающие приобрести себе в будущем малиновые штаны представители двух народов нашли способ подделки этого ценного средства, вследствие чего понадобилось внедрение способа его проверки на подлинность.

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

Читать далее

Лазерный проектор за 500 рублей — почему бы и нет…

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

Так уж сложилось, что я достаточно продолжительное время «неровно дышу» к теме лазерной проекции. Началось это достаточно давно, ещё во время студенчества, когда мы с моим соседом вдвоём собрали лазерную цветомузыку, которую применяли для ведения дискотек в небольшом кафе, а также, в дальнейшем, для своих студенческих вечеринок. В те времена (2000-2001 годы), возможности были достаточно ограничены, мы не умели программировать и работать с микроконтроллерами, вследствие чего поделки были достаточно простыми. В данный момент всё существенно изменилось и, используя доступность материальной базы, — можно собирать достаточно интересные и полезные вещи, например, лазерный проектор. Как это сделать — мы и поговорим в статье.

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

Потратить миллион, чтобы нанять двух джунов: профит и около него

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

Привет, меня зовут Валерий Антонов, я руковожу направлением Java в Уральском банке реконструкции и развития (УБРиР). 

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

Читать далее

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

Как в Java устроено выделение регистров в памяти

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

Привет, Хаброжители! Обратите внимание на большую распродажу в честь Старого Нового года.

Когда виртуальная машина Java компилирует ваш исходный код Java в машинный, одна из задач, которые она должна при этом выполнить – решить, где хранить локальные переменные Java и другие подобные временные значения. В вашей машине отсутствует концепция локальных переменных, поэтому на этапе компиляции необходимо определиться, какое место в памяти стека (какой машинный регистр) будет использоваться для хранения каждой переменной. Эта операция называется «выделение регистров». Может показаться, что выделение регистров – сложная абстрактная теоретическая тема, но в этом коротком посте я покажу, как сначала соотнести исходный код Java с теорией, потом понять, как его видит компилятор, а потом – показать результирующий машинный код. В данном случае моя цель – продемонстрировать, что все эти концепции очень легко опробовать на практике с реальным компилятором. 

Читать далее

Краткое сравнение библиотек отказоустойчивости на JVM

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

Независимо от того, внедряете ли вы микросервисы или нет, есть вероятность, что вы вызываете конечные точки HTTP. С HTTP-вызовами многое может пойти не так. Опытные разработчики планируют это и проектируют не только успешные пути. В общем отказоустойчивость (Fault Tolerance) включает в себя следующие функции: Retry (повтор попытки), Timeout (тайм-аут), Circuit Breaker (автоматический выключатель), Fallback (откат), Rate Limiter (ограничитель скорости), Bulkhead.

Несколько библиотек реализуют эти функции на JVM. В этом посте мы рассмотрим Microprofile Fault ToleranceFailsafe и Resilience4J.

Читать далее

Как починить HotSpot с помощью Java

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

Приветствую, за время праздников подготовил статью про низкоуровневое профилирование и производительность.

Читать далее

Полезные и неизвестные возможности Java

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

В этой статье вы узнаете о некоторых полезных функциях Java, о которых вы, вероятно, не слышали. 

Это мой личный список функций, использованных мной недавно или с которыми я столкнулся при чтении статей о Java. 

Я сосредоточусь не на языковых аспектах, а на API. Я уже опубликовал все примеры, относящиеся к этой статье, в Твиттере в форме, показанной ниже. Вы также можете найти их в моей учетной записи Twitter или просто под #javaхэштегом.

Читать далее

Тысячная статья про принципы SOLID

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

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

Читать далее

Дыра в безопасности, похожая на Log4Shell, обнаружена в популярном Java SQL движке базы данных H2

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

«Это Log4Shell, Джим, но не в том виде, в каком мы его знаем» — так никогда не говорил Commander Spock.

Это краткий обзор ошибки CVE-2021-42392дыры в системе безопасности, о которой недавно сообщили исследователи из компании по управлению цепочками поставок программного обеспечения Jfrog.

На этот раз ошибка находится не в осажденном наборе инструментов Apache Log4j, а в популярном Java SQL сервере под названием H2 Database Engine.

H2 не похож на традиционную SQL систему, такую ​​как MySQL или Microsoft SQL server.

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

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

Как и в случае с Log4j, это означает, что в вашей организации могут быть неявно запущенные экземпляры кода H2 Database Engine, если вы используете какие-либо приложения или компоненты разработки, которые сами по себе незаметно включают его.

Читать далее

Нестандартное применение программирования в реальной жизни

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

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

Однако программное обеспечение — это не только проекты компьютерных игр класса ААА или корпоративных проектов, предлагающих программное обеспечение по модели SaaS, это и использование его в обычной жизни, порой весьма неожиданным образом. О чём мы и поговорим в этой статье.
Читать дальше →