Обновить
128K+

Java *

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

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

Ленивая инициализация в Spring Boot 2.2

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


От переводчика: поскольку Spring Framework является одним из основных фреймворков, на которых мы строим CUBA, то новости о новых возможностях Spring не проходят незаметно для нас. Ленивая инициализация — один из способов уменьшить время первой загрузки приложения, что в наш век повсеместного использования микросервисов является важной метрикой. Для тех, кто предпочитает чтению просмотр видео, есть 10-ти минутное выступление Josh Long, посвященное теме статьи.


Недавно анонсированный первый milestone релиз Spring Boot 2.2 добавляет поддержку ленивой инициализации. В этой статье мы рассмотрим новую функциональность и объясним, как ее включить.

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

Криптография в Java. Класс KeyPair

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

Привет, Хабр! Представляю вашему вниманию перевод 6, 7 и 8 статей автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Полное руководство по switch в Java

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

Старый добрый switch был в Java с первого дня. Мы все используем его и привыкли к нему — особенно к его причудам (кого-нибудь еще раздражает break?). Но начиная с Java 12, ситуация начала меняться: switch вместо оператора стал выражением:


boolean result = switch (ternaryBool) {
    case TRUE -> true;
    case FALSE -> false;
    case FILE_NOT_FOUND -> throw new UncheckedIOException(
            "This is ridiculous!",
            new FileNotFoundException());
    default -> throw new IllegalArgumentException("Seriously?!");
};

Результат работы switch-выражения теперь можно сохранять в переменную; ушла необходимость использовать break в каждой ветке case благодаря лямбда-синтаксису и многое другое.


Когда дело доходит до switch после Java 14, необходимо выбрать стиль его использования:


  • оператор или выражение (с Java 14)
  • двоеточия или стрелки (с Java 14)
  • метки или шаблоны (3-й превью в Java 19)
    В этом руководстве я расскажу обо всем, что необходимо знать о switch-выражениях, и как их лучше всего использовать в современной Java.
Читать дальше →

Получи оффер за 1 день в backend-команду в День космонавтики

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


Всем привет!

FunCorp продолжает расширяться в Москве: мы открываем новое направление и ищем в backend-команду Senior PHP и Senior Java разработчиков.

Нам очень понравился формат однодневного Hiring event’a, который мы проводили для QA-отдела 16 марта, поэтому мы решили провести подобное мероприятие и для backend.

Итак, FunCorp Cosmic Hiring event пройдёт 12 апреля (пятница) в московском офисе. Ссылка на мероприятие.
Читать дальше →

Криптография в Java. Класс Signature

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

Привет, Хабр! Представляю вашему вниманию перевод пятой статьи "Java Signature" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Распределение памяти в JVM

Время на прочтение5 мин
Охват и читатели45K
Всем привет! Перевод сегодняшнего материала мы хотим приурочить к запуску нового потока по курсу «Разработчик Java», который стартует уже завтра. Что ж начнём.

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



Два вида памяти

JVM разделяет память на две основные категории: «кучу» (heap) и «не кучу» (non-heap). Куча — это часть памяти JVM, с которой разработчики наиболее знакомы. Здесь хранятся объекты, созданные приложением. Они остаются там до тех пор, пока не будут убраны сборщиком мусора. Как правило, размер кучи, которую использует приложение, изменяется в зависимости от текущей нагрузки.
Читать дальше →

Как создать игру, если ты ни разу не художник

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

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

И не надо…
Читать дальше →

Криптография в Java. Класс Mac

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

Привет, Хабр! Представляю вашему вниманию перевод четвертой статьи "Java Mac" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Прошлое и будущее Java в интервью с Саймоном Риттером из Azul

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

Представляем вам интервью с Саймоном Риттером — человеком, который работал над Java с самого начала и продолжает делать это в роли заместителя технического директора Azul — компании, работающей над виртуальной машиной Zing JVM и одним из лучших сборщиков мусора, C4 (Continuously Concurrent Compacting Collector).


  • Целая жизнь вместе с Java;
  • Как оставаться на острие прогресса и кодить, когда ты CTO;
  • Лучшие и худшие фичи JDK;
  • Участие в исполнительном комитете Java Community Process;
  • Не страшно ли что-то сломать в глобальном масштабе;
  • Переход на JDK 11/12;
  • Цена поддержки собственного форка OpenJDK;
  • С4 & Falcon vs Shenandoah & Graal;
  • Нужен ли мощный сборщик в мире микросервисов;
  • Судьба серверов приложений, Java EE / Jakarta EE и JavaFx;
  • Путешествие в Россию и свежий доклад на JPoint.
Читать дальше →

Улучшенный sandboxing для Groovy скриптов

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


От переводчика: При разработке CUBA Platform мы заложили в этот фреймворк возможность исполнения пользовательских скриптов для более гибкой настройки бизнес-логики приложений. О том, хороша или плоха эта возможность (и мы говорим не только о CUBA), ведутся долгие споры, но то, что контроль исполнения пользовательских сценариев необходим — это ни у кого не вызывает вопросов. Одна из полезных возможностей Groovy для управления исполнением пользовательских скриптов представлена в этом переводе статьи Cédric Champeau. Несмотря на то, что он недавно‏ покинул команду разработки Groovy, сообщество программистов, по видимому, еще долгое время будем пользоваться плодами его трудов.


Один из наиболее часто используемых способов использования Groovy — это скриптинг, поскольку Groovy позволяет легко исполнять код динамически, в рантайме. В зависимости от приложения, скрипты могут находиться в различных местах: файловой системе, БД, удаленных сервисах… но самое важное — разработчик приложения, исполняющего скрипты, не обязательно сам их пишет. Более того, скрипты могут работать в ограниченном окружении (ограниченный объем памяти, лимит на количество дескрипторов файлов, время исполнения…), или вы можете захотеть запретить пользователю использовать все возможности языка в скрипте.


Этот пост вам расскажет


  • почему Groovy хорошо подходит для написания внутренних DSL
  • каковы его возможности в плане безопасности вашего приложения
  • как настроить компиляцию для улучшения DSL
  • о значении SecureASTCustomizer
  • о расширениях для контроля типов
  • как использовать расширения для контроля типов, чтобы sandboxing был эффективным
Читать дальше →

Проблема глубинных ссылок в HATEOAS

Время на прочтение7 мин
Охват и читатели4.7K
Внешнее связывание (глубинное связывание) — в интернете, это помещение на сайт гиперссылки, которая указывает на страницу, находящуюся на другом веб-сайте, вместо того, чтобы указать на начальную (домашнюю, стартовую) страницу того сайта. Такие ссылки называются внешними ссылками (глубинными ссылками).
Википедия
Дальше будет использоваться термин «глубинные ссылки», как наиболее близкий к англоязычному «deep links». Речь в данной статье пойдет про REST API, поэтому под глубинными ссылками будут подразумеваться ссылки на HTTP-ресурсы. Например, глубинная ссылка habr.com/ru/post/426691 указывает на конкретную статью на сайте habr.com.

HATEOAS – компонент REST-архитектуры, позволяющий предоставлять клиентам API информацию через гипермедиа. Клиенту известен единственный фиксированный адрес, точка входа API; все возможные действия он узнает из ресурсов, полученных от сервера. Представления ресурсов содержат ссылки на действия или другие ресурсы; клиент взаимодействует с API, динамически выбирая действие из доступных ссылок. Подробнее о HATEOAS можно прочитать на Википедии или в этой замечательной статье на Хабре.

HATEOAS – следующий уровень REST API. Благодаря использованию гипермедиа, он отвечает на многие вопросы, возникающие при разработке API: как управлять доступом к действиям на стороне сервера, как избавиться от жесткой связности между клиентом и сервером, как изменять адреса ресурсов в случае необходимости. Но он не дает ответа на вопрос о том, как должны выглядеть глубинные ссылки на ресурсы.
Читать дальше →

Организация поиска данных с применением Spring Data Key-Value Repositories

Время на прочтение4 мин
Охват и читатели8.8K
В интерактивных системах используются множество различных справочников-словарей данных, это различные статусы, коды, наименования и пр., как правило их много и каждый из них не большой. В структуре у них часто бывают общие атрибуты: Код, ИД, Название и др. В прикладном коде много бывает различных поисков, сравнений по Коду, по ИД справочника. Поиски могут носить расширенный характер, например: поиск по ИД, по Коду, получить список по критерию, сортировки и др… И как следствие справочники кэшируют, уменьшая частое обращение к БД. Здесь хочу показать пример как может пригодится для этих целей Spring Data Key-Value Repositories. Основная мысль такая, это продвинутый поиск в Key-Value Repositorie и в случае отсутствия объекта, делать поиск через Spring Data Repositories в БД и далее помещать в Key-Value Repositories.
Читать дальше →

Mockito и как его готовить

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

О статье


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


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

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

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

Криптография в Java. Класс MessageDigest

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

Привет, Хабр! Представляю вашему вниманию перевод третьей статьи "Java MessageDigest" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Из Groovy ушёл Cédric Champeau‏

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


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

Если рассмотреть причины ухода в том виде, как их формулирует сам Седрик, получается история о том, как Groovy-сообщество хотело лучшего, а в итоге ненамеренно сделало себе хуже. В самом сообществе, впрочем, есть другие трактовки произошедшего. В любом случае история может быть интересна и разработчикам из JVM-мира, и не только.
Читать дальше →

Почему бессерверные технологии – это революция в продукт-менеджменте

Время на прочтение9 мин
Охват и читатели5.7K
image
Бессерверные архитектуры фундаментальным образом сказываются на лимитирующих факторах, сковывающих разработку продукта.

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

JDK 9/JEP 280: конкатенация строк никогда больше не будет прежней

Время на прочтение9 мин
Охват и читатели14K
И снова здравствуйте. Как мы уже писали, на следующей неделе стартует новая группа обучения по курсу «Разработчик Java», по устоявшейся традиции делимся с вами переводом интересного материала по теме.

Начиная с JDK 9 конкатенация строк претерпела значительные изменения.

JEP 280 («Indify String Concatenation») был реализован в рамках JDK 9 и, в соответствии с разделом «Summary»: «Изменяет статическую последовательность байт-кода конкатенации строк, сгенерированную javac, для использования вызовов invokedynamic к функциям библиотеки JDK». Влияние, которое это оказывает на конкатенацию строк в Java, легче всего заметить, посмотрев на javap-вывод классов, использующих конкатенацию строк, которые скомпилированы в JDK до JDK 9 и после JDK 9.


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

Криптография в Java. Класс Cipher

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

Привет, Хабр! Представляю вашему вниманию перевод второй статьи "Java Cipher" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

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

Криптография в Java

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

Привет, Хабр! Представляю вашему вниманию перевод статьи "Java Cryptography" автора Jakob Jenkov.


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

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

OBD2 reader — диагностика автомобиля

Время на прочтение6 мин
Охват и читатели83K
При создании приложения мы столкнулись с множеством выборов, проблем и так далее, с которыми попробуем ознакомить вас в этой статье. Как оказалось с автомобилем можно вести диалог, причем довольно таки продуктивный. Естественно для того чтобы организовать общение с автомобилем необходимо «установить контакт», «задать правильный вопрос» и правильно понять «ответ», полученный от автомобиля. Соответственно статья и будет нацелена на то, чтобы доступным языком объяснить организацию диалога, а также рассказать вам какие ошибки могут встретиться вам на пути и как с ними бороться.
Читать дальше →