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

Java *

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

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

История одного OOM

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

В далекой-далекой галактике были времена стабильности и процветания. Сервис с шестнадцатью инстансами работал на благо человечества. Через Hibernate он ходил в PostgreSQL-базу, доставал необходимые данные и отдавал другим по REST-интерфейсу. Однако спокойные времена прошли. Внезапно один из инстансов упал с OutOfMemoryError. Лучшие программисты hh.ru пустились в погоню за heapdump-ом в поисках ценнейшей информации. 

Привет, меня зовут Артем, я — бэкенд-разработчик в hh.ru. В этой статье расскажу о том, как мы чинили одну из ошибок OutOfMemoryError, которая возникла при работе сервиса с базой данных. Сегодня говорим только на бэкендерском! 

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

JPoint 2022: что было, что будет и какие доклады уже открыты для всех

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

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

Причём несколько видеозаписей уже доступны всем желающим. Поэтому хотим этим текстом поймать трёх зайцев сразу:

— Порадовать Хабр этими Java-докладами без регистрации и смс 
— Написать, что ещё было в онлайновой части
— И рассказать, что будет в офлайне

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

Нормализация адресов, ГАР ФИАС и Адрессарий

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

Как известно, один и тот же адрес можно написать различными текстовыми способами, используя сокращения, перестановку, вариации наименований и т.п. Встаёт вопрос: существует ли процедура нормализации, отождествляющая реально одинаковые и по-разному записанные адреса?

Ответ положительный, чему и посвящена данная статья.

Какие средства в принципе есть для решения задачи? Их сейчас два: выделение именованных сущностей (NER) и объекты ГАР ФИАС. NER даёт разбиение на адресные элементы и их нормализацию, ГАР ФИАС может дать уникальные идентификаторы. Задача решается, если в качестве нормализации взять множество строк из возможных нормализаций наименований элементов, добавив к ним GUID-идентификаторы ГАР, если получится. Два адреса эквивалентны, если хотя бы одна строка из множеств таких их строк совпадает.

А одними объектами ГАР ФИАС можно обойтись, используя только их идентификаторы? Конечно, нет. Во-первых, это не полный классификатор, особенно в части помещений и строений, хотя и постоянно пополняемый. Во-вторых, в адресах бывают специфические элементы, которые в ГАР отсутствуют (например, Московская область, Можайский район, примерно в 0,1 км по направлению на юг от ориентира середина д.Бараново, или пересечение улиц).

Итак, утверждается, что невозможно обойтись для адреса только одной нормализованной строкой для отождествления в общем случае. Но если таких строк будет несколько, причём сформированных определённым образом, то отождествление будет с очень высокой вероятностью.

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

«Го, я создал». Учим Java и Kotlin в команде

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

Привет, дорогой читатель. Меня зовут Омар.

Данная инициатива - не реклама, пиар, прикол или что-либо, имеющее под собой плохой помысел. Это именно инициатива, цель которой собрать под одной "крышей" таких же маслят в Java, как я.

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

Истории

Параллельные тесты JUnitPlatform. Как победить в гонке?

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

Начиная с версии 5.3 JUnit Platform предоставило возможность параллельного запуска тестов, что может существенно увеличить скорость прохождения тестовых сценариев. Но в то же время, если сценарии используют какие-либо разделяемые ресурсы, общие для всех тестов, без использования механизмов синхронизации можно обнаружить неустойчивое выполнение тестов из-за возможного переключения потоков выполнения во время исполнения тестируемого кода ("состояние гонки"). В этой статье мы рассмотрим как настроить параллельное тестирование и как обнаружить (и преодолеть) потенциальные проблемы доступа к общим ресурсам.

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

Создание клона IMDB с Java бэкендом на SparkJava и Neo4j

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

Приложение представляет собой клон IMDB, основанный на наборе данных рекомендации MovieLens, дополненном данными о фильмах и ролях с themoviedb.org.

Внешний интерфейс написан на vue.js и выглядит довольно приятно.

Он вызывает несколько конечных точек REST API для вызова различных представлений и функций.

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

Подробный разбор цепочки эксплойтов Playstation 4 и 5

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

В статье представлена цепочка из пяти уязвимостей, позволяющая нападающему получить возможности JIT и исполнять произвольные полезные нагрузки. Передаваемая полезная нагрузка вызывает переполнение буфера, приводящее к kernel panic.
Читать дальше →
Всего голосов 11: ↑10 и ↓1+21
Комментарии6

Баг с псионическими сигнатурами в Java

Время на прочтение6 мин
Количество просмотров5.3K
В классическом научно-фантастическом сериале BBC Доктор Кто часто используется следующий сюжетный приём: Доктору удаётся избежать неприятностей, показав удостоверение личности, которое на самом деле совершенно пустое. Разумеется, удостоверение сделано из специальной «психобумаги», заставляющей смотрящего на неё человека видеть то, что удобно для Доктора: пропуск, ордер или что-то ещё.


Оказывается, некоторые новые релизы Java тоже были подвержены подобному трюку в реализации широко используемых сигнатур ECDSA. Если запустить одну из уязвимых версий, то нападающий легко сможет подделать некоторые типы сертификатов SSL и handshake (что позволяет вмешиваться в обмен данными и модифицировать их), подписанные JWT, декларации SAML или id-токены OIDC и даже сообщения аутентификации WebAuthn. И для всего этого достаточно цифрового аналога чистого листа бумаги.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии1

Сравнение объектов в Java

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

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

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

Как следить за здоровьем морских свинок с помощью Machine Learning и мобильного приложения

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

Всем привет! Меня зовут Андрей Нестеров, я занимаюсь компьютерным зрением в  применении к мобильным приложениям (ML на конечных устройствах) в компании Friflex и работаю продуктами по оцифровке спорта. Я стал замечать, что в обычной жизни не хватает технологий компьютерного зрения. Например, мне бы хотелось замерять, сколько времени я провожу за компьютером или трачу на сон. Но отслеживать эти действия можно и самостоятельно. С тех пор я начал думать о том, что действительно будет полезным, какую проблему можно было бы успешно решить с помощью технологий. Такая проблема вскоре нашлась.

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

Java. Решение практических задач

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

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

В книге все разбито на "задачи". Они тут нескольких типов:

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

Как обновить необновляемое: кастомная замена для @RabbitListener

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

Динамически обновляем конфигурацию клиента Spring Cloud Config Server и параметры слушателя RabbitMQ

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

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

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн

Apache Kafka для магазинов

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

Всем привет! Меня зовут Игорь, я работаю системным архитектором в CSI. Хочу поделиться историей появления в нашем стеке технологий надежного и универсального брокера сообщений. Расскажу, как и для чего мы его используем, поделюсь полезными нюансами и примером с сетью Fix Price. Статей про Apache Kafka уже более, чем достаточно, но наш кейс немного отличается от стандартного использования. Надеюсь, опыт пригодится кому-то ещё.

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

О чём расскажут на JPoint: от профайлеров до контейнеров

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

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

А вот с точки зрения программы таких разительных изменений нет. Нас по-прежнему интересуют доклады про инструменты, JVM, Spring, архитектуру, JVM-языки вроде Kotlin — в общем, про всё, что интересует опытных Java-разработчиков. Представляем Хабру описания докладов (и из онлайновой части, и из офлайновой).

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

Прокачиваем kotlin: используем AST лямбд в рантайме

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

История о том, как сделать свой LINQ для kotlin, и как сделать так, чтобы кода вида

data.filter { it.age > 30}.map { it.name }.toList()

мог и выполняться для данных в памяти, и превращаться в SQL запрос для базы данных.

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

А насколько Loom реактивный?

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

Проект Loom добавит в Java 19 виртуальные треды. Что это? Новые перспективы для рынка труда нарисовались в предыдущей части заметки. В аспекте внутренностей JVM про Loom рассказывает Иван Углянский: рекомендую его доклад «Thread Wars — проект Loom наносит ответный удар».

Здесь мы оценим, как добавка повлияет на современные подходы серверной разработки. Потеснит ли новинка Scala и Kotlin с их фреймворками? Заодно ответим на вопрос «а в какой мере Loom — реактивный»?

Читать далее
Всего голосов 17: ↑7 и ↓10-2
Комментарии11

Java — 27! Как язык программирования, предназначенный для бытовой техники, стал одним из самых популярных в мире

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

23 мая 1995 года — дата официального выпуска Java. Язык Java и сегодня остается одним из самых востребованных языков программирования в IT. По данным индекса TIOBE, ранжирующего языки программирования на основе поисковых запросов о них, Java стабильно занимает третье место по популярности в мире с момента запуска рейтинга.

Сегодня с помощью языка решаются тысячи задач — от написания мобильных игр и приложений до разработки в финтехе и работы с big data. Вместе с Даниилом Пилипенко, программным директором факультета backend-разработки направления «Программирование» Skillbox, директором центра подбора IT-специалистов SymbioWay рассказываем, зачем был создан Java, как он повлиял на развитие IT-отрасли и насколько востребовано владеть Java сегодня. Для затравки –– фрагмент кода, который выведет возраст языка в консоли :)

Читать далее
Всего голосов 22: ↑9 и ↓130
Комментарии18

Написание Paper/Bukkit плагина LiteSMT #1 — Основа понятий и окружение

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

Это моя первая публикация по созданию Bukkit/Paper плагина. Возможно данная статья поможет кому-то начать писать хоть какие-то плагины. Однако пока-что данный плагин не даёт неких интересных возможностей.

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

Добавляйте единицы измерения в имена

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

Есть одна ловушка читаемости кода, которой легко избежать, если вы о ней знаете; тем не менее она встречается постоянно: это отсутствующие единицы измерения. Рассмотрим три фрагмента кода на Python, Java и Haskell:

time.sleep(300)

Thread.sleep(300)

threadDelay 300

Сколько «спят» эти программы? Программа на Python выполняет задержку на пять минут, программа на Java — на 0,3 секунды, а программа на Haskell — на 0,3 миллисекунды.

Как это можно понять из кода? А никак. Вам просто нужно знать, что аргументом time.sleep являются секунды, а threadDelay — микросекунды. Если вы часто ищете эту информацию, то рано или поздно её запомните, но как сохранить читаемость кода для людей, никогда не встречавшихся с time.sleep?
Читать дальше →
Всего голосов 60: ↑52 и ↓8+60
Комментарии114

Вклад авторов

Работа

Java разработчик
347 вакансий