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

Java *

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

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

LJV: Чему нас может научить визуализация структур данных в Java

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

Эта статья является пересказом моего доклада на Java-конференции SnowOne 2021 года. LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет визуализировать внутреннее устройство структур данных. В этом докладе я запускаю LJV на разных структурах (от String до ConcurrentSkipListMap) в разных версиях Java и разбираю, что там внутри, как оно менялось от версии к версии, и как это всё работает.


image

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

«Невозможный» параллельный алгоритм неотрицательной суммы

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

Рецепт параллельных вычислений Fork/Join или Map/Reduce:
- разбить задачу на куски;
- посчитать куски по-отдельности;
- склеить вместе.

Неотрицательная сумма (a, b) -> max(0, a + b) неассоциативна и результат зависит от порядка склейки. Она сломает Fork/Join и результат будет некорректен. Магией моноида починить на Java, SQL и Haskell за 5 минут, но

сломать мозг
Всего голосов 28: ↑27 и ↓1+26
Комментарии33

Создание Native Images со Spring Native и GraalVM

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

В этой статье я хочу исследовать возможности технологии Java Native Image, поделиться опытом взаимодействия с ней и со средствами Spring для генерации нативных образов.

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

Истории

Разрушаем и подтверждаем мифы о кадровых агентствах в ИТ

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

Всем привет! На связи Антон Чимин. Не так давно я стал ИТ рекрутером и сегодня решил написать небольшую статью о том, что на самом деле происходит внутри кадровых агентств и стоит ли с ними работать. Называть свое кадровое агентство я не буду, чтобы это не было рекламой :) Просто пройдемся по фактам, что здесь и как.

Сегодня будет необычный пост, в котором я буду разрушать или подтверждать мифы о кадровых агентствах (КА), как это когда-то делали Адам Сэвидж и Джэми Хайнеман в одном известном шоу :) Погнали!

Читать далее
Всего голосов 30: ↑6 и ↓24-18
Комментарии13

Тестирование GraphQL: подходы, инструменты, автоматизация

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

Несколько месяцев назад на моем пути возник GraphQL.

Это произошло, когда я присоединилась к одному из наших проектов, где был не только привычный REST, но и GraphQL API. Это было моё первое знакомство с ним. Я понятия не имела, что он собой представляет, в чем его особенности, а самое главное для меня, как QA инженера – не знала, как его тестировать. 

Ниже я расскажу, что делала я, с какими проблемами сталкивалась, с чего можно начать и что важного и особенного надо знать про GraphQL для успешного тестирования как руками, так и с помощью автотестов. Вполне вероятно, что это поможет и вам разобраться в данном вопросе.

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

Разбираем Log4j уязвимость в деталях… с примерами и кодом

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

Все о той же критической уязвимости в Log4j, но с примерами и кодом.

Читать далее
Всего голосов 75: ↑74 и ↓1+73
Комментарии55

Spring AOP: как работает проксирование

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

Четкое разделение бизнес логики с другими сквозными задачами является обязательным условием для создания чистого и читабельного кода. И говоря о сквозных задачах я имею ввиду управление транзакциями, безопасность и прочие важные задачи, которые хоть и не относятся к бизнес логике напрямую - но оказывают существенное влияние на работу приложения в целом. В случае "жесткого связывания" основной логики и подобных задач - мы можем получить кучу проблем в случае ошибки последних. АОП, собственно, и нацелено на решение подобных задач.

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

Spring имеет свою собственную структуру АОП, которая концептуально проста для понимания и является отличным решением большинства проблем в корпоративных Java-приложениях. В этой статье мы собираемся рассмотреть магию Spring АОП - со всеми его достоинствами и недостатками. Если у вас вообще нет никакого понимания за данную тему - рекомендую почитать данный материал.

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

Разбираемся с библиотекой лексического анализа ANTLR4

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

У нас в SberDevices разрабатывается платформа по управлению рекомендациями, которая взаимодействует с разными ML-движками. Со временем их станет много, и, когда пользователь умных устройств Sber будет запрашивать контент – искать фильмы, музыку, спрашивать о чём-то виртуальных ассистентов Салют, – запрос будет проходить через нашу платформу.

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

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

Для обработки правил, написанных на кастомном DSL, лучшая библиотека – ANTLR4. Я находил много статей, в которых описываются разные аспекты работы с ANTLR4, но ни в одной из них я не увидел, то, что изучил на пути создания production-ready кода. Поэтому, разобравшись, я решил собрать туториал. Ниже опишу пример парсинга SQL SELECT-запроса в объектную модель Java. Будем двигаться постепенно, в этот раз рассмотрим простейший случай. На нём мы разберём саму идею этого парсера, сделаем минимальную реализацию.

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

Миграция Spring Boot приложения на Java 17 — сложный путь: День 2

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

Добро пожаловать в статью о миграции приложения Spring Boot на Java 17.

В первый день мы пытались использовать Java 17 со Spring Boot и завершили день компиляцией нашего кода и зелеными юнит тестами.

В этом посте мы рассмотрим миграции: Spring Cloud, Spring Data, Spring Kafka

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

Распознаем простые фигуры по массиву точек

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

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

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

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

Создание нативных CLI приложений на Java с помощью Graalvm и Picocli

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

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

Программы Java традиционно было трудно распространять, потому что они требовали, чтобы на целевой машине была установлена ​​виртуальная машина Java. Можно связать с приложением последнюю JVM, но это увеличивает размер пакета примерно на 200 МБ.

Все движется в правильном направлении: система модулей Java (JPMS), представленная в Java 9, включает утилиту jlink, позволяющую приложению создавать настраиваемую, минимизированную JRE, размер которой может составлять всего 30-40 МБ, и Java. 14 включает jpackage, которая может создать установщик, содержащий этот минимальный JRE с вашим приложением.

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

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

Утечка памяти: цена одной маленькой ошибки

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

Всем привет, меня зовут Алена Коваленко, я Java-разработчица одной из команд направления Warehouse Management System (WMS) компании Lamoda. Наша команда занимается автоматизацией складской системы и реализацией новых фич для улучшения работы сотрудников склада. В том числе мы занимаемся техническими импрувментами системы, такими как вынесение из монолита функциональности, связанной с идентификацией товара и приемкой возвратов, в отдельный сервис — Inbound Service.

После релиза Inbound Service на проде склад заметил долгий отклик системы. В процессе исследования проблемы мы обнаружили утечку памяти, связанную с конфигурацией приложения, в том числе внутренних очередей в ActiveMQ Artemis.

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

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

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

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург

Миграция Spring Boot приложения на Java 17 — сложный путь

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

Недавно была выпущена Java 17, и я очень рад появлению множества улучшений и новых функций. Вместо того, чтобы начинать с нового или недавнего проекта (где в этом азарт?), Мы собираемся обновить существующее приложение Spring Boot, пока мы не сможем разработать новый код с использованием Java 17.

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

Современная разработка на Java: update, фичи, API и Copilot

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

Летом этого года мы в *instinctools организовали и провели серию онлайн-дискуссий с разработчиками и экспертами в области IТ. В рамках проекта «Техпора» нам хотелось услышать разные точки зрения на события и проблемы, которые волнуют разработчиков. Одна из этих серий касалась проблем современной разработки на Java. Дискуссия оказалась настолько информативной, что мы решили собрать самые интересные моменты  и опубликовать их здесь, на «Хабре». 

В разговоре приняли участие Developer JetBrains Тагир Валеев, организатор конференции RigaDevDays, основатель латвийского JUG Дмитрий Буздин, Developer Advocate проекта GraalVM, OracleLabs Олег Шелаев и Java Developer *instinctools Денис Лешенюк. Сразу хотим сказать, что мы не задавали тон беседе и не ставили экспертов в какие-то рамки. Это был достаточно свободный разговор, который касался наиболее важных тем для разработчиков. Если вы хотите поделиться своим взглядом на обсуждаемые вопросы – пишите в комментариях.

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

Чай СБЕРгамотом: хакатон глазами участника

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

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

Рад поделиться своим опытом участия в мероприятии в качестве капитана команды "чай СБЕРгамотом".

Про хакатон
Всего голосов 15: ↑10 и ↓5+5
Комментарии5

Как проверить, зависит ли Java проект от уязвимой версии Log4j

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

Если ваше приложение использует Log4j с версии 2.0-alpha1 до 2.14.1, вам следует как можно скорее выполнить обновление до последней версии (2.16.0 на момент написания этой статьи - 20 декабря).

Log4j уязвимость отслеживаться как CVE-2021-44228 (также известный как Log4Shell) позволяет злоумышленнику выполнить произвольный код в системе. 

В заметке описаны инструменты для проверки зависимости Java проекта от уязвимой версии Log4j.

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

Just Do It! Или интеграция JDI + SauceLabs – это просто

Время на прочтение5 мин
Количество просмотров1.1K
Если вы когда-либо занимались автоматизацией тестирования веб приложений, то скорее всего у вас возникал вопрос: какой же он – идеальный фреймворк? И как выбрать наиболее удобный инструмент позволяющий быстро и качественно оценить результаты работы автотестов?

Ответ прост, как и на вопрос «сколько будет дважды два?». Кто ответил «5», «7» или «2» смело продолжайте читать этот пост. А кто ответил «4» тем более может найти здесь для себя что-то полезное. В этой статье вы не увидите ни строчки кода, только мои впечатления от знакомства с JDI фреймворком и облачной платформой для запуска тестов SauceLabs. Вот она интрига, итак, поехали…
Читать дальше →
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Уникальные элементы для автотестов: где они обитают и как их искать

Время на прочтение8 мин
Количество просмотров3.1K
Привет, Хабр! Меня зовут Вера Соколова, я Android-разработчик в команде автотестирования проекта Мой МТС.

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



Но автотесты нужно еще написать и первостепенная задача — поиск элементов. Чтобы кликнуть на кнопочку, ее нужно сначала найти. С какими трудностями при этом можно столкнуться и как эти трудности преодолеть я расскажу ниже, добро пожаловать под кат!
Читать дальше →
Всего голосов 1: ↑1 и ↓0+1
Комментарии4

Экономим свое время. Ускоряем создание отложенных постов в Telegram с помощью бота

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

Представьте, что вы всю жизнь собирали коллекцию фотографий кошачьих носов и в один из дней появляется стойкое желание поделиться ею с миром. Для этой цели вы решаете завести канал в Telegram и регулярно постить туда новые фотографии. Но тут вас встречает она – рутина.

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

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

Работа

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