Обновить
512K+

Java *

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

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

Строка на 1,5 гигабайта

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

На своей предыдущей работе я занимался поддержкой Java-сервиса, обеспечивавшего удалённую функциональность UI подобно RDP или Citrix. Этот сервис был устроен на основе сессий, состоявших из взаимосвязанных объектов Java, которые должны были очищаться или после выхода пользователя, или после истечения заданного таймаута.

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

Манипуляции с байт-кодом Java

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

В этой статье мы разберём, как добавить к файлу класса публичный атрибут. Когда загрузчик классов завершит загрузку модифицированного файла класса, мы увидим то поле, которое добавили вручную.
Читать дальше →

Как создавать SBOM в Java с помощью Maven и Gradle

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

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

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

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

Но что, если вы передаете свое Java-приложение клиенту?

Как они узнают, какие зависимости включены?

Что еще важнее, как они могут проверить, не уязвимы ли эти зависимости для проблем безопасности?

Ответом является спецификация программного обеспечения SBOM (software bill of materials).

Читать далее

Наиболее распространённые мифы о Scala: сеанс с разоблачением

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

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

Сопоставление с шаблоном в Java — 5 примеров для занятых разработчиков

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

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

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

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

Шаблон проектирования: Chain of Responsibility

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

Всем привет.

Данная статья будет полезна начинающим Java разработчиком понять зачем нужен шаблон проектирования «Цепочка ответственности» и как его можно использовать на примерах.

Итак начнем с самого начала. Основная суть данного шаблона: связывание объектов‑получателей в цепочку и передача запроса по ней.

Читать далее

Многоязычность на Kotlin-бэкэнде

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

Язык программирования Kotlin часто ассоциируется с мобильной разработкой для Android и это неудивительно, учитывая что он принят Google как официальный язык разработки, и принес множество необходимых и удобных языковых конструкций и кооперативной многозадачности, при этом сохраняя совместимость на уровне байт-кода с ранними версиями JVM. Но применимость языка существенно выше и имеющиеся библиотеки (как созданные для Java, так и разработанные специально для Kotlin) позволяют создавать обычные приложения (например, на JavaFX или с использованием платформенных графических библиотек и Kotlin Native), а также создавать код для бэкэнда c подключениям к базам данных, кэшам, очередям сообщений и т.д. При этом, если для мобильной разработки проблем с поддержкой многоязычных сообщений не возникает (благодаря механизму ресурсов, в том числе строк, которые могут быть переопределены для конкретной локали), то для бэкэнда это становится нетривиальной задачей. В этой статье мы обсудим несколько подходов для создания бэкэнда с поддержкой нескольких языков.

Читать далее

Микросервисы сына маминой подруги. Пишем правильные микросервисные приложения на Java

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

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

Читать далее

Создаем байт-код для JVM без компилятора

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

Виртуальная машина Java использует концепцию промежуточного байт-кода для обеспечения переносимости между операционными системами и аппаратными платформами. Использование байт-кода позволяет отделить компилятор от среды выполнения и выполнять компиляцию с разных языков программирования для исполнения на JVM. В этой статье мы разберемся с внутренней организацией class-файлов и байт-кода в них и научимся работать с фреймворком ASM для исследования и программной генерации байт-кода для динамического определения новых классов или их компиляции из других языков программирования.

Читать далее

Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin

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

В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта. Запуск процессоров аннотаций выполняется внутри gradle (для Java-проектов через annotationProcessor, для Kotlin - kapt) и встраивается как зависимость для целей сборки проекта. И конечно же, как и для любого другого кода, для процессора аннотаций необходимо иметь возможность разрабатывать тесты. В этой статье мы рассмотрим основы использования кодогенерации (с использованием kapt) и разработки тестов для созданных генераторов кода. Во второй части статьи речь пойдет о разработке процессоров на основе Kotlin Symbol Processing (KSP) и созданию тестов для них.

Читать далее

Как написать простое консольное приложение с аргументами на Java

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

Пост про то, как начинающий программист разбирается с консольными утилитами, Java и args4j

У меня появилось задание написать консольное приложение , которое должно разделять и соединять текстовые файлы...

Читать далее

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

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

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

Читать далее

Создаем читабельный e2e тест для микросервисов на Spring Boot с помощью Cucumber 7 и Wiremock

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

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

TL;DR

Весь код для микросервисов и e2e теста тут

Рекомендую быстро пробежаться по коду перед прочтением статьи т к в самой статье я объясню только неочевидные моменты реализации e2e тестирования.

Читать далее

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

Замеряй и ускоряй: как мы сократили время вызова метода в Java-коде в 16 раз

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

Привет, Хабр! Замер производительности кода — не самое простое упражнение для разработчика. Приходится решать кучу сложностей: разбираться с методом, создавать правильные условия. И всё равно можно получить результат с погрешностью, потому что любой метод «не бесплатный» и требует ресурсов процессора.

Меня зовут Александр Певненко, я Java-разработчик в СберТехе. Вместе с командой мы развиваем Platform V DataSpace. Это облачный сервис, который упрощает и ускоряет разработку приложений, используя концепцию Backend-as-a-Service (BaaS) для хранения и управления данными. Я расскажу про наш способ замера производительности кода с помощью бенчмарков. Рассматривать метод будем на примере оптимизации кода в Platform V Dataspace, которая помогла сократить время вызова метода в 16 раз.

В статье я буду пользоваться языком Java, Python для построения графиков и набором библиотек JMH — они также адаптированы для Kotlin, Scala и т.д. 

Читать далее

Потоковый обмен в распределённых системах и использование реактивных потоков в нереактивных приложениях: опыт «Магнита»

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

Привет, Хабр! На связи Андрей Зяблин, Java разработчик компании «Магнит». В статье я расскажу про три решения, которые позволяют реализовать потоковый обмен данными из БД между распределёнными приложениями.

Читать далее

Что Java-разработчикам расскажут на JPoint 2023?

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

Недавно Java дошла до юбилейной 20-й версии, а у нашей Java-конференции JPoint своя круглая дата: впервые она прошла 10 лет назад. Каких именно докладов о языке-юбиляре ожидать на конференции-юбиляре в апреле?

Как водится, в программе есть разные тематические блоки:
— и об инструментах («Как познавать Spring Boot 3 с помощью TDD»),
— и о производительности (тут научат пользоваться профайлером perf для JVM-задач),
— а также об архитектуре, тестировании, «реактивщине», работе с данными.

А полный список докладов с описаниями — далее в посте.

Читать далее

Выражение Hibernate запросов в виде типо‑безопасных Java-потоков

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

В этой статье вы узнаете, как расширение JPAstreamer Quarkus упрощает выполнение типо‑безопасных запросов Hibernate без излишней многословности и сложности.

Читать далее

Книга «Объекты. Стильное ООП»

Время на прочтение9 мин
Охват и читатели13K
image Привет, Хаброжители!

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

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

@Transactional в Spring и исключения

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

Привет! В этой статье я бы хотел рассказать, как Spring'овая аннотация @Transactional ведет себя при возникновении исключений. Про это немало написано, в том числе на Хабре. Например, тут или тут. Поэтому, чтобы не повторяться, я не буду подробно расписывать как и почему исключения влияют на откат транзакций, а вместо этого просто покажу несколько примеров.

Читать далее

Java для начинающих: решаем задачу умножения матриц

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

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

В этой статье я, Сергей Чеботарев, наставник на курсе «Java-разработчик», покажу пример задачи, которая более-менее подходит к этим требованиям. Мы немного потренируемся в реализации алгоритмов, использующих циклы, а также в использовании консольного ввода-вывода. Нам потребуются математические знания на уровне школьной математики, а для реализации я буду использовать JDK 11.

Читать далее