Обновить
512K+

Java *

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

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

Как запустить Java-приложение с помощью CRaC в контейнере Docker

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

CRaC (Coordinated Restore at Checkpoint) — это проект OpenJDK, разработанный Azul для решения проблемы «медленного» запуска виртуальной машины Java в микросервисной среде.

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

В механизме восстановления контрольной точки (checkpoint-restore) нет ничего нового, и большинство из вас уже знают и используют его ежедневно. 

Если вы работаете на ноутбуке и закрываете крышку, операционная система обнаруживает это и сохраняет текущее состояние на диск. Как только вы снова открываете крышку, операционная система восстанавливает сохраненное состояние с диска.
CRaC предоставляет тот же механизм, но для JVM и вашего запущенного приложения.

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

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

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

Читать далее

Путешествие к центру Spring Security

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

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

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

Проблема

Для начала я обозначу проблему, с появлением которой я и начал столь интересный путь по стектрейсу в дебаггере. На проекте, над которым сейчас мы с командой работаем понадобилось прикрутить сервис авторизации. Не долго думая и собрав в кучу все требования, было принято решение поднять сервис, поддерживающий OAuth2 стандарт, а именно Keycloak. Этот сервис довольно популярен и по его настройке скопилось немало экспертизы. А также у коллег из других команд был опыт по развертыванию и настройке Keycloak. В общем, остановились на нем. Как гласит документация, в Keycloak поддерживается интеграция со Spring Security, поэтому проблем возникнуть не должно, НО…

После поднятия самого Keycloak сервера и конфигурирования Realm’a, Client’a юзеров и т. д., мы начали прикручивать авторизацию в наши микросервисы. Исходя из мануала, настройка Keycloak довольно проста (не входит в тему этой статьи). Но что же мы за программисты такие, если не хотим это дело как-то кастмизировать. Добавляем зависимости.

Читать далее

Сказка о типизации

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

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

Это только присказка, сказка будет впереди

Модульные тесты как оплот стабильности в Agile разработке

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

В этой статье мы рассмотрим ту часть тестирования, которой не касаются специалисты по тестированию — модульные тесты. Почему же при Agile так необходимо иметь качественное покрытие модульными тестами? Раскроем их положение в цикле разработки и цели их создания. Рассмотрим различные варианты оценки качества покрытия тестами при разработке backend приложения на языке Java с использованием Spring-boot. С помощью Jacoco построим отчет и увидим недостатки численных оценок покрытия тестами. Сформулируем субъективные оценки модульного тестирования и советы по их разработке.

Читать далее

Как я учился языку JAVA на Яндекс платформе

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

Вот наконец я созрел для написания отзыва о своей учебе в Яндекс практикуме на потоке Java программировании. Долго не мог и не хотел оставлять отклик по учебе, думаю он был бы не совсем корректным. Теперь, когда утихли первые и последние эмоции, думаю можно.   Итак, прежде чем описать свое мнение, ведь все что будет написано является сугубо субъективным, пропущенным через мой опыт и чувства, поэтому маленькое предисловие: немного о себе, это важно с точки зрения дальнейшего описания событий. Образование высшее медицинское, стаж работы на врачебных должностях, в том числе и заведующим отделением обширный, к тому же имею педагогическое образование и стаж преподавания семь лет. Это все к тому, что я понимаю о чем говорю и пишу в своем отзыве. А также для тех, у кого образование гуманитарий. Одно дела переучиваться людям с техническим образованием на программиста, а другое без такового. И последняя ремарка, сравнивать не с чем, пока на других платформах не пытался учиться, обзор будет сугубо о платформе Яндекс практикум,  и наверно будет отзыв не совсем честен, так как к началу обучения я самостоятельно в течение шести месяцев изучал данный вопрос, к моменту обучения представлял, что такое ООП (объектно-ориентированное программирование), в целом имел представление об языках программирования, а также изучил наизусть основы программирования java по книги «Java Полное руководство» Герберт Шилдт 10-е издательство и спокойно пользовался технической документацией по Java SE 11 на тот момент.

Читать далее

Универсальный загрузчик XML на java. Или как загрузить файлы ГАР на 250 гб и остаться при памяти

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

С проблемой загрузки больших XML столкнулся при переходе с КЛАДР и ФИАС на справочники ГАР - Государственный адресный реестр (Федеральная информационная адресная система).

Справочник ГАР содержит более подробную информацию чем предыдущие классификаторы. В том числе информацию по муниципальным делениям. В связи с чем справочник после распаковки занимет около 250 ГБ, что примерно в 3 раза больше чем тот же ФИАС.

Предыдущая загрузка работала на DOM-модели, т.е. весь XML-файл считывался в память. Соответственно при попытке загрузить ГАР таким же способом стали стабильно получать OutOfMemory. А значит настало время менять подход к загрузке)

Немного теории:

DOM (Document Object Model) - это стандартный интерфейс для работы с документами в формате XML (Extensible Markup Language). DOM-модель представляет XML-документ в виде дерева объектов, где каждый элемент и атрибут документа является узлом дерева.

SAX (Simple API for XML) является событийно-ориентированным API для чтения XML-документа. Он предоставляет возможность читать XML-документ последовательно и обрабатывать события, такие как начало и конец элемента, содержимое элемента и т.д.

StAX (Streaming API for XML) также является API для последовательного чтения и записи XML-документов. Он предоставляет потоковый доступ к XML-документу, позволяя читать его и записывать по частям. StAX предоставляет возможность читать и записывать XML-документы в виде потока событий, аналогично SAX, но также предоставляет возможность читать и записывать XML-документы в виде итерируемых наборов событий. StAX позволяет эффективно обрабатывать большие XML-документы и не требует реализации обработчиков событий.

Читать далее

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

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

Привет, Хабр! Меня зовут Ира, я SRE в команде Samokat.tech. В этом посте хочу поделиться подходом в тестировании, которым мы пользуемся сами. Если вам при подготовке тестов часто приходится писать похожие друг на друга как две капли воды заглушки (или, как их ещё называют, «моки»), а затем заботиться о том, чтобы их развернуть, то вам может понравиться наше решение. Освободившись от части рутинных забот, вы можете уделить больше времени чему-то более важному.

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

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

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

Читать далее

Вышла Java 20

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

Вышла общедоступная версия Java 20. В этот релиз попало около 1500 закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.


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

Что нового в Jmix 1.5

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

Недавно мы выпустили новую версию Jmix 1.5. В статье расскажем о ключевых обновлениях, представленных в этом функциональном релизе. 

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

Одна из наших разработок, Jmix – это технологическая open-source платформа для быстрой разработки бизнес-приложений на Java. О ней и пойдет речь.  

Читать далее

Как в IntelliJ IDEA написать и собрать в исполняемый .exe файл приложение на JavaFX

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

При кажущейся простоте создания приложения на JavaFX (особенно с помощью JavaFX Scene Builder 2.0 и бесплатных видео-уроков на различных ресурсах), написание функционала программы – это только половина пути. Программа должна работать, жить своей жизнью самостоятельно, без привязки к среде разработки. И, как показывает мой личный опыт, при сборке проекта и выпуске его в «большой мир» приходится преодолевать немало терний.

Надеюсь, что моя статья поможет кому-нибудь избежать ошибок, найти ответы на вопросы или просто сразу пойти правильным путем (например, создавать обычный maven-проект на Java-8, вручную прописывая в pom.xml зависимости и способ сборки, и всегда указывать на латинице имена учетных записей, директорий в своей операционной системе).

Читать далее

Как новичку подарить жизнь telegram-боту на java

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

Мне 43 года и я профессиональный юрист. Неуемная интеллектуальная энергия и неудовлетворенность основной профессией 2,5 года назад привели меня в IT. Да-да, вот так – взрослая тетя с гуманитарным образованием решила попробовать себя на ниве программирования и замахнулась аж на такой язык как… JAVA!!!

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

Оглянувшись по сторонам и не встретив направленных на меня глаз я поняла – все эти глаза устремлены в гаджеты! Месседжеры и социальные сети правят умами. Значит, надо действовать через них.

И тут я вспомнила, что самый частый юридический вопрос, с которым ко мне обращаются друзья/знакомые – это просьба дать ту или иную форму документа (договора, расписки, заявления, доверенности и т.д.). Эврика! – нужна несложная мобильная программа с формами самых востребованных документов, чтобы их оставалось просто скачать и наполнить необходимыми сведениями. И тут самым коротким путем к конечному пользователю мне представился telegram-бот.

Поскольку на курсах таким тонкостям не учили, вооружившись статьями и видеороликами из всемирной паутины, закатав рукава я принялась создавать свою первую «взрослую» программу-помощника человечеству!

Читать далее

Вопросы и ответы для собеседования по Kotlin. Часть 2

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

Вопросы и ответы для собеседования по Kotlin. Часть 1

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

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

JDK 20 и JDK 21: что мы знаем на сегодняшний день

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

JDK 20, третий не-LTS-релиз после JDK 17, достиг начальной фазы релиз-кандидата, как заявил Марк Рейнхольд, главный архитектор Java Platform Group в Oracle. Основной репозиторий исходного кода, форкнутый в стабилизационный репозиторий JDK в середине декабря 2022 г. (Rampdown Phase One), определяет набор функций для JDK 20. Критические ошибки, такие как регрессии или серьезные функциональные проблемы, могут быть устранены, но должны быть одобрены в процессе Fix-Request. Согласно графику выпуска, JDK 20 будет официально выпущен 21 марта 2023 года. Стоит отметить, что JEP 438 был добавлен в набор функций в начале марта 2023 года.

В сентябре 2023 года планируется выпустить общедоступный и следующий выпуск LTS В настоящее время в качестве целевых для JDK 21 предлагается два (2) JEP.

Также можно предположить, какие дополнительные JEP могут быть включены в JDK 21, основываясь на ряде проектов и кандидатов JEP.

Читать далее

Говорящая Java

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

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

Статья неплохо зашла, на столько неплохо, что меня пригласили поднимать с колен доступность в IDE на базе IntelliJ.

С виндой то там всё было ок, а вот для MacOS требовалось вмешательство, и я вмешался. Погнали под кат, там всё расскажу. А кто буковы не любит, внизу видео с моего доклада на SnowOne по этой теме.

Читать далее

SourceBuddy динамически компилирует исходный код Java

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

Через два месяца после первого коммита в октябре 2022 года Питер Верхас, старший архитектор EPAM Systems, выпустил версию 2.0.0 SourceBuddy, новой утилиты, которая компилирует динамически исходный код Java, заданный в строке или файле, в файл класса. 

Утилит SourceBuddy требует Java 17 и представляет собой упрощенный фасад для компилятора javac, который обеспечивает ту же функциональность.

Версия 2.0.0 поддерживает комбинацию скрытых и нескрытых классов во время компиляции и выполнения. Кроме того, был упрощен API, включая критические изменения, такие как изменение метода loadHidden() на метод hidden(), поэтому и выпущен новый основной релиз. Полный обзор изменений для каждой версии доступен в документации по выпускам на GitHub.

Читать далее

Не можете измерить — не сможете улучшить: как мы используем метрики в разработке автотестов

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

Привет! Меня зовут Александр, я работаю QAA менеджером в компании Wrike, начинал с позиции QAA инженера в далеком 2010-ом и был первым в этой роли. За 12 лет нам удалось построить крутую команду и создать систему контроля качества, которая позволяет быстро и без багов деплоить продуктовый код в продакшен. 

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

Читать далее

Снова про ARIS. Коллекция «велосипедов» для разработчика

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

Нестандартные подходы к написанию скриптов, разработка собственных библиотек и другая полезная информация для разработчиков скриптов ARIS.

Если Вы уже знаете что такое ARIS, то добро пожаловать. Если нет, то можете прочитать вот эту статью.

Читать далее

Первая информация о JDK 21: что принесет следующий LTS релиз?

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

Поскольку мы все с нетерпением ждем скорого выпуска JDK 20, список функций, которые появятся в JDK 21 этой осенью, также постепенно проясняется.

Сегодня мы рассмотрим тему того, что принесет следующий LTS релиз JDK 21.

Читать далее

Java для сисадминов

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

Эта статья написана в основном для системных администраторов Java-приложений (DevOps-инженеров, SRE и других производных специализаций). Вероятнее всего, Java-разработчики уже все это прекрасно знают. Хотя Junior Java-разработчикам эта информация может помочь систематизировать знания.

Статья не претендует на полноту или полную непогрешимость. Во-первых, нельзя объять необъятное. Во-вторых, все меняется и проверенные истины могут перестать быть истинами в новых версиях. В сети существует множество статей об  устройствах Java, однако в этой статье в блоге ЛАНИТ я стремился сделать выжимку основных моментов, необходимых для администраторов Java-приложений. Для более глубокого погружения в тот или иной вопрос потребуется обратиться к другим источникам.

Читать далее