Обновить
512K+

Java *

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

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

Java ScopedValue: Ускоренный ThreadLocal

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

В инкубаторе JEP-429 появилась новая альтернатива ThreadLocal под названием ScopedValue (в значительной степени как поддержка и развитие Virtual Threads). ScopedValue предназначен для того, чтобы предоставить более легкую альтернативу ThreadLocal, которая хорошо работает с виртуальными потоками, а также решает многочисленные недостатки, присущие API своего аналога двадцатипятилетней давности. В этой статье мы рассмотрим основные отличия ScopedValue, и за счет чего он может работать быстрее.

Читать далее

Новостной Telegram бот на Java

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

Долгое время изучаю Java (но работаю с Oracle) и всё время хочется написать что-то полезное и интересное. Так наткнулся на статьи о Телегам ботах, которые меня и надоумили соорудить своего бота Avandy News.

За идеей для функционала далеко ходить не пришлось, т.к. у меня имеется одна более менее успешная программа, которая попала в Реестр российского ПО (о ней и о том как попасть в Реестр я писал в этой статье).

Читать далее

CompletableFuture. Глубокое погружение

Уровень сложностиСложный
Время на прочтение20 мин
Охват и читатели99K

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

Мы в компании называем их "фьючи". На хабре было много материала по отдельным частям их функциональности, но я решил поставить перед собой более серьёзную задачу - постараться разобрать внутреннее устройство и многие неочевидные нюансы работы с этим классом.

Читать далее

Задача на собеседовании, её решение и его разбор

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

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


Часто там задают обычные, даже скучные вопросы вроде "расскажите о контракте между equals()и hashCode()", но иногда попадаются очень умные и приятные интервьюеры, проводящие собеседование вдумчиво, расспрашивающие о технологиях, используемых на целевом проекте (а не об абстрактном volatile), ставящие нестандартные вопросы и задачи. Сегодняшняя статья будет об одном из таких замечательных собеседований (вернее о задаче) и о вопросах, поднятых в ходе её обсуждения.

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

Project Valhalla: эпичный квест Java за перфомансом

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

Java продолжает наносить ответные удары. В Java 21 релизнулись виртуальные потоки. Теперь есть надежда, что в ближайших версиях двинется к релизу старый и очень ожидаемый JEP-401 aka Project Valhalla. Эта короткая статья описывает проблему, которую решает JEP, и содержит бенчмарк на основе превью фичи из Java 22.

Читать далее

Хабргорода

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

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

Для этого нужны данные статей Хабра, названия городов с координатами и поиск этих названий в текстах статей. Задача осложняется великим и могучим языком со склонениями и многозначностью слов. Создание списка статей с Хабра за 2023 год по городам мне чем-то напомнило работу первых поисковых движков в рунете. Теперь я понимаю как кусали себя за локти программисты тех дней!

Читать далее

Как мы начали использовать виртуальные потоки Java 21 и на раз-два получили дедлок в TPC-C для PostgreSQL

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

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

Читать далее

Плагин для анализа планов PostgreSQL в IDE JetBrains и его разработка

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

Для пользователей explain.tensor.ru - нашего сервиса визуализации PostgreSQL-планов, мы создали плагин "Explain PostgreSQL" для всех IDE от JetBrains, теперь есть возможность форматировать запросы и анализировать планы непосредственно в IDE.

Как использовать плагин и детали о его разработке читайте ниже.

Читать далее

Apache Flink. Как работает дедупликация данных в потоке Kafka-to-Kafka?

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

Всем привет, меня зовут Александр Бобряков. Я техлид в команде МТС Аналитики, занимаюсь Real-Time обработкой данных. Мы начали использовать фреймворк Apache Flink, и я решил поделиться на Хабре своим опытом внедрения этой технологии в цикле статей.

В предыдущей части «Как использовать Spring в качестве фреймворка для Flink-приложений» я рассказывал, как реализовать минимальное Flink-приложение с использованием фреймворка Spring. Мы запустили первую Flink-задачу в поднятом в docker-compose кластере, а также проверили корректность результата по соответствующим логам. В этой статье решим реальную бизнес-задачу дедупликации данных в пайплайне Kafka-to-Kafka.

Читать далее

Кодим 24/7: Прокачиваем продуктивность в условиях жесткого цейтнота

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

Привет! Меня зовут Михаил, я Senior Software Developer в YouHodler.

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

Читать далее

Простыми словами про обработку текстовых запросов пользователя в Телеграмм ботах на java

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

Тем, кто так или иначе уже сталкивался с разработкой Telegram-ботов на java, известно, что бот должен уметь отправлять запросы Telegram-серверу и получать от него обновления (updates). В настоящее время существует два способа получения обновлений:

- использование LongPolling (регулярную отправку запрос к серверу Telegram для получения обновлений. Все обновления обрабатываются последовательно, что делает бота очень простым для отладки, а все поведение - предсказуемым),

- использование Webhooks (Telegram сам отправляет запросы по нужному URL).

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

Итак, для того, чтобы класс, содержащий логику бота, реализовывал взаимодействие с сервисами Telegram, его необходимо унаследовать от класса TelegramLongPollingBot и реализовать следующие его базовые методы:

- public void onUpdateReceived(Update update);

- public String getBotUsername();

- public String getBotToken().

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

Читать далее

Project Loom. Не только виртуальные потоки

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

Начиная с Java 19 нам доступны виртуальные потоки, которые отличаются от обычных, тем что умеют освобождать поток операционной системы во время блокирующих I/O операций. Для этого на уровне JVM был реализован механизм сохранения в хипе и восстановления из хипа стека вызова. Проще говоря, были реализованы полноценные корутины на уровне JVM.

И это небольшая революция, на которую мало кто обратил внимание. Само API для таких нативных корутин непубличное, доступно через класс jdk.internal.vm.Continuation, в котором есть методы yield() и run() для сохранения и восстановления стека вызова соответственно. Но получить доступ до него несложно, нужно лишь добавить пару аргументов в строку запуска JVM (либо воспользоваться инструментом, который позволяет обходить ограничения JPMS).

Поэтому представляю свою небольшую библиотеку для доступа к нативным корутинам на Java: https://github.com/Anamorphosee/loomoroutines.

Читать далее

Применяем Java Sealed Classes на практике

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

В этой статье применим Sealed Classes для улучшения читаемости кода, используя пример из реальной разработки.
В статье используется Java 21 т.к. это первая LTS версия Java с релизным Pattern Matching. Также в примере используется Spring Boot, но этот подход можно использовать в любой похожей ситуации.

Читать далее

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

Java Digest #8

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

??Приветствуем в новогоднем Java Digest! ??

В этом выпуске с радостью представляем некоторые захватывающие статьи, связанные с миром Java и его новейшими разработками. Приготовьтесь узнать о главных моментах Java в 2023 году, улучшениях в сборщиках мусора в JDK 21, устаревших функциях в Java 18—21, применении CDS с Spring Framework 6.1 и многом другом.

Читать новогодний выпуск

Создание и использование BOM в Gradle

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

В каждой компании (а если она крупная, то, скорее всего, в каждом подразделении) должна быть выстроена культура использования BOM (bill of materials) для управления версиями зависимостей. В этой статье я хочу поделиться своим видением того, как это может быть организовано, а также рассмотреть более сложные случаи создания и использования BOM в Gradle-проектах.

Читать далее

JWT-аутентификация при помощи Spring Boot 3 и Spring Security 6

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

Переход от базовых приложений к более сложным требует использования Spring Security для обеспечения безопасности. Новая версия, Spring Security 6, изменяет некоторые базовые реализации, а русскоязычных материалов на эту тему очень мало. В этой статье мы рассмотрим JWT-аутентификацию и авторизацию с помощью Spring Boot 3 и Spring Security 6, чтобы помочь начинающем разработчикам разобраться и начать пользоваться базовым функционалом этой библиотеки. Цель данной статьи - показать, как использовать JWT-аутентификацию с API-интерфейсами.

Читать далее

Распределенное управление конкурентностью

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

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

Читать далее

Пример исследовательского реверс-инжиниринга приложения Zone Launcher

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

Друг порекомендовал приложение, но купить его не получилось с территории России. Статья о том, как поисследовать приложение до той степени, чтобы покупка потеряла свою актуальность. Может быть полезно почитать и разработчикам, чтобы понимать, что полную версию приложение включить достаточно легко.

Читать далее

Рассчитываем рейтинг товара на основе оценок пользователей с KafkaStreams и OpenSearch

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

Всем привет! Меня зовут Александр. Последний год тружусь фрилансером на проекте по созданию очередного маркетплейса. Мои задачи включают разработку скоринговой системы продуктов, которая бы позволяла формировать выборку товаров по популярности на основе нескольких показателей. Одним из показателей являются оценки пользователей по шкале от 1 до 5. Думаю, что не станет открытием Америки то, что расчет рейтинга товара по среднему арифметическому всех оценок приводит к насовсем корректным результатам выборки. Например, при таком подходе товар "А" с одной оценкой 5 в рейтинге будет выше товара "Б", у которого сотня оценок 5 и одна оценка 4. Решение данной проблемы давно найдено - для расчета следует применить доверительный интервал биномиального распределения по методу Уилсона (Wilson Score Confidence Interval).

Читать далее

Строим свой SSO. Часть 4: Vue.js, Регистрация, Сброс пароля

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

Всем привет!
Мы продолжаем строить собственный SSO Server. Сегодня мы детально разберем Vue.js приложение, а также спроектируем и реализуем долгожданные механизмы регистрации и сброса пароля. Как всегда, дополнительно мы разберём ряд интересных общесистемных решений, которые наверняка Вам пригодятся в дальнейшем.

Читать далее