Как стать автором
Обновить
203.18

Java *

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

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

Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров1.1K

НЬЮ!


В предыдущих сериях (FAQ 1 2 3 4 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.

В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например,


SELECT
    MAX(score1, score2, score3, score4, score5) AS max_score,
    MIN(score1, score2, score3, score4, score5) AS min_score,
    MEDIAN(score1, score2, score3, score4, score5) AS median_score,
    score1 + score2 + score3 + score4 + score5 AS score_sum
FROM raw_scores INTO final_scores
WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin;

— тут у нас функции MAX, MIN и MEDIAN принимают любое количество аргументов типа Double и возвращают Double, а ABS только один такой аргумент.


Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >= или LIKE, которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми.


Предупреждение о сложности материала

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

Читать дальше →
Всего голосов 2: ↑2 и ↓0+2
Комментарии5

Новости

Ручное подтверждение сообщения в Kafka

Время на прочтение2 мин
Количество просмотров797

В этой статье описывается реализация задачи ручного подтверждения(acknowledgment) обработки сообщения в Kafka через ручную отправку смещения(commit offset) сообщения. Логика реализована с использованием Java, Spring и Kafka.

Читать далее
Всего голосов 3: ↑2 и ↓1+1
Комментарии1

21 ошибка в 21-й версии Apache NetBeans

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

Apache NetBeans — одна из первых IDE для Java, поддержка которой не прекращается на протяжении почти 30 лет. Совсем недавно вышла 21-я версия. Мы решили проверить исходный код такого долгожителя и выбрали наиболее интересные ошибки, которые разберём в этой статье.

Читать далее
Всего голосов 8: ↑9 и ↓-1+10
Комментарии1

Metatron — Open Source библиотека для генерации отчетов на языке Rust

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

Год назад возникла идея переписать весь Java-бекенд на Rust, который я уже несколько лет разрабатываю и поддерживаю. Я нашёл все аналоги библиотек и фреймворков из мира Java в экосистеме Rust:

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии13

Истории

Java для домохозяек: логика разбора сообщений внутри Telegram бота

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров614

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

Telegran bot (long polling) Avandy News, обзор статья, open source GitHub

Основная идея: Avandy News Analysis (включена в Реестр российского ПО, разраб - я)

Реестр российского ПО: Как попал в него

Читать далее
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Настройка сервиса аутентификации OpenAM и шлюза авторизации OpenIG для защиты приложений

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров393

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

В этой статье мы настроим централизованную аутентификацию через сервис аутентификации на Open Access Manager (OpenAM) и настроим доступ к приложению через шлюз авторизации Open Identity Gateway (OpenIG), который будет использовать сессию аутентификации OpenAM. В качестве защищаемого приложения будем использовать приложение, разработанное с использованием Spring Boot и Spring Security.

Читать далее
Рейтинг0
Комментарии0

Безопасный Continuous Deployment БД по принципам DB-First

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

В статье рассматривается Continuous Deployment для БД с бесшовными релизами за счёт обратно-совместимых обновлений и автоматизации проверок совместимости с помощью подхода DB-First.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии8

Java в облаках

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

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

Читать далее
Всего голосов 3: ↑2 и ↓1+1
Комментарии3

Еще раз о перформансе стримов в Java

Время на прочтение9 мин
Количество просмотров5.9K

Перевод статьи, где автор замеряет перформанс Stream API в Java на около-реалистичных (и не очень) задачах. Как и автору, мне нередко на глаза попадаются заявления что мол вся эта функциональщина в джаве - баловство и скорее вредный сахар. И что старовер с джавы 1.6 напишет на циклах заведомо более быстрый код, чем хипстер на стримах. Также в статье наглядно демонстрируется, в каких именно условиях параллельные стримы могут начать приносить пользу.

Читать далее
Всего голосов 8: ↑9 и ↓-1+10
Комментарии13

Старт разработки с применением GraphQL / DGS Framework

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

Привет! Мы – Екатерина и Виктория, middle-разработчик и старший разработчик в БФТ-Холдинге. В статье кратко расскажем об основах DGS фреймворка, его преимуществах, проблемах, с которыми мы столкнулись при работе с ним, а также покажем создание простого сервиса с поддержкой WebFlux.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

Shenandoah GC в JDK

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

Привет, Хабр!

Shenandoah GC — это сборщик мусора для OpenJDK, целью которого является минимизация времени пауз, возникающих в результате сборки мусора, путем выполнения процессов эвакуации памяти параллельно с работающими Java‑потоками. Фичей Shenandoah является то, что время пауз GC не зависит от размера кучи, что означает одинаково короткие времена пауз как для кучи размером в 200 МБ, так и для 200 ГБ. Это достигается за счет использования дополнительного указателя косвенности для каждого Java‑объекта, что позволяет потокам GC компактизировать кучу, пока Java‑потоки продолжают выполняться.

Разработка Shenandoah началась с экспериментального проекта, целью которого было предоставление альтернативы другим сборщикам мусора, которые приоритизируют пропускную способность или размер памяти над отзывчивостью. Уже к 12-й версии JDK Shenandoah был готов к использованию, хотя и оставался помеченным как экспериментальная функция. Это состояние сохранялось, чтобы соответствовать статусу других сборщиков мусора, таких как Epsilon GC и ZGC.

Основное событие в истории Shenandoah — включение его в состав продуктовых функций начиная с 15-й версии JDK. Т.е для его использования больше не требовалось разблокировать экспериментальные опции VM. Такое изменение было в основном косметическим и касалось классификации настроек Shenandoah. Тем не менее, это был значительный шаг вперед, подтверждающий зрелость этого сборщика мусора.

Читать далее
Всего голосов 8: ↑6 и ↓2+4
Комментарии1

ChatGPT Глубокая интеграция

Время на прочтение9 мин
Количество просмотров3.9K

Первое, что приходит в голову, когда речь заходит о ChatGPT и играх, это работа с текстом: диалоги, квесты, сюжет. Но это банально, скучно и не интересно. Мне же хочется, чтобы ИИ мог управлять буквально каждым аспектом геймплея. Сейчас я нахожусь на начальном этапе, и тем не менее мне удалось найти способ, которым можно реализовать все задуманное. Фундаментальной вещью в каждой игре является движение объектов, с этого я и решил начать.

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии8

«Михалыч, где заказ?» или как мы автоматизировали процесс заказа лома и отслеживали его по RFID

Время на прочтение11 мин
Количество просмотров1.5K

Для того, чтобы повысить качество производства и продолжать расти, бизнесу приходиться автоматизировать ручные операции. Но борьба с легаси-процессами только на первый взгляд кажется простой и лёгкой. Найти то, что плохо работает и придумать, как это решить, не так то просто. А отучить сотрудников делать так, как они привыкли — ещё сложнее.

Привет, Habr! На связи Александр Тамразов и Дмитрий Кривенко, разработчики из Аxenix.

Читать далее
Всего голосов 10: ↑9.5 и ↓0.5+9
Комментарии2

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

Зонтичный мониторинг на коленке

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров3.2K

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

Читать далее
Всего голосов 3: ↑3.5 и ↓-0.5+4
Комментарии0

Контроллеры на дженериках: пишем кода в 3 раза меньше

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

В рамках наших Java курсов "Из Middle в Senior" (предыдущие посты Миграция Java Spring Boot на Kotlin и «Работа с документами в Java») недавно вышел новый курс Startup: Spring Boot веб-приложение с хостингом и инфраструктурой на основе эволюции нашей платформы онлайн-обучения с 2016г.

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

Добро пожаловать
Всего голосов 9: ↑6 и ↓3+3
Комментарии22

Настройка аутентификации в приложении через Active Directory с использованием OpenAM

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров590

Почти каждая организация использует Active Directory для управления учетными записями сотрудников. И использование существующих учетных записей для доступа к корпоративным приложениям является хорошей практикой. В данной статье мы настроим аутентификацию в демонстрационном Spring Boot приложении через существующий сервер Active Directory в OpenAM.

Читать далее
Рейтинг0
Комментарии0

Как я написал клиент электронного дневника своей области

Время на прочтение5 мин
Количество просмотров11K

Сейчас я учусь в 8 классе. Где-то с октября (сейчас апрель) я изучаю разработку мобильных приложения для андроид. И как это бывает у каждого - я столкнулся с проблемой: а какое приложение мне сделать? И мне крайне повезло. Я не стал делать какой-нибудь фейковый магазин, калькулятор, блокнот, туду лист и всякую подобную заезженную тему.

Читать далее
Всего голосов 94: ↑102 и ↓-8+110
Комментарии28

Настройка HTTPS для контейнеризированных Java-сервисов

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

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

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

Для создания приложения мы будем использовать фреймворк Jmix, который основан на Spring Boot и Vaadin, поэтому описанные подходы будут работать также для широкого класса веб-приложений на Spring Boot. 

Мы предполагаем, что вы установили Docker актуальной версии для своей ОС, используя brew, chocolately или deb/rpm.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии2

Что скрывается в коде игрового движка, написанного на Java?

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

Вы когда-нибудь интересовались игровыми движками, написанными на Java? В этой статье мы рассмотрим и проверим на наличие ошибок в исходном коде один из популярных игровых движков — jMonkeyEngine. Возможно, мы даже узнаем, почему игры пишутся на C# и C++, а не на Java.

Читать далее
Всего голосов 12: ↑14.5 и ↓-2.5+17
Комментарии8

Как создать свой Spring Boot 3 — стартер?

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

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

Spring Boot starter'ы - отличный способ управлять созданием, развитием и поставкой общей кодовой базы. О том как создать свой Spring Boot 3 стартер и поговорим в этой статье.

Читать далее
Всего голосов 13: ↑12.5 и ↓0.5+12
Комментарии7
1
23 ...