Рубрика «java» - 50

JVM TI: как сделать плагин для виртуальной машины - 1

Хотели бы вы добавить в JVM какую-нибудь полезную фичу? Теоретически каждый разработчик может внести свой вклад в OpenJDK, однако на практике любые нетривиальные изменения в HotSpot принимают со стороны не очень-то охотно, и даже с текущим укороченным релизным циклом могут пройти годы, прежде чем вашу фичу увидят пользователи JDK.

Тем не менее, в ряде случаев расширить функциональность виртуальной машины реально, даже не трогая её код. В этом помогает JVM Tool Interface — стандартный API для взаимодействия с JVM.

В статье я на конкретных примерах покажу, что можно сделать с его помощью, расскажу, что изменилось в Java 9 и 11, и честно предупрежу о сложностях (спойлер: придётся иметь дело с C++).

Этот материал я также рассказывал на JPoint. Если вам удобнее видео, то можете посмотреть видеозапись доклада.
Читать полностью »

Здравствуйте,

сегодня постараюсь рассказать о том, как можно отправить запрос и прочитать ответ от HTTP сервера, используя URLConnection из библиотеки JRE.

Сейчас изучаем Java в онлайн режиме. Вся наша команда использует Slack для работы и общения. Заинтересовала возможность получения информации о пользователях, используя Slack API. Чтобы долго не рассказывать про сам API (это тема для отдельной статьи), скажу коротко: для получения информации о пользователях, нужно было отправить HTTP запрос с URI который обозначает имя метода из API (то есть, обозначает что именно мы хотим получить – в нашем случае нужен был полный список юзеров) и токеном аутентификации slack-приложения. По документации, для получения списка юзеров нужно использовать GET-запрос с URL slack.com/api/users.list, в теле запроса должен быть токен аутентификации в форме application/x-www-form-urlencoded, то есть запрос должен выглядеть примерно так (но есть один нюанс который будет ниже):

GET /users.list HTTP/1.1
Content-Type: application/x-www-form-urlencoded

token=xoxp-1234567890-098765-4321-a1b2c3d4e5&limit=100

(где limit=100 это ограничение на максимальное количество юзеров, которое нужно получить)

Я знал про библиотеку Apache HttpComponents, но решил попробовать не использовать внешних зависимостей. И, так как я уже сталкивался из HttpUrlConnection, решил попробовать в этот раз.
Читать полностью »

На встрече московского сообщества Java-разработчиков jug.msk.ru, состоявшейся 28 июня 2019 года традиционно в офисе компании КРОК, Кирилл Толкачёв и Максим Гореликов представили свой доклад о Spring Boot: какие задачи можно решить с помощью него, какие сложности могут при этом возникнуть и как с ними бороться.

Кирилл Толкачёв и Максим Гореликов про Spring Boot на jug.msk.ru - 1
Читать полностью »

В данной статье будет подробно рассмотрен алгоритм блочного шифрования, определенный в ГОСТ Р 34.12-2015 как «Кузнечик». На чем он основывается, какова математика блочных криптоалгоритмов, а так же как реализуется данный алгоритм в java.

Кто, как, когда и зачем разработал данный алгоритм останется за рамками статьи, так как в данном случае нас это мало интересует, разве что:

КУЗНЕЧИК = КУЗнецов, НЕЧаев И Компания.

Криптографический алгоритм «Кузнечик»: просто о сложном - 1

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

«Проще ответить, чем продолжать молчать» — большое интервью с отцом транзакционной памяти, Морисом Херлихи - 1

Морис Херлихи — обладатель целых двух премий Дейкстры. Первая — за работу по «Wait-Free Synchronization» (Brown University) и вторая, более свежая, — «Transactional Memory: Architectural Support for Lock-Free Data Structures» (Virginia Tech University). Премию Дейкстры дают за работы, значимость и влияние которых были заметны на протяжении не менее десяти лет и, очевидно, Морис — один из самых известных специалистов в области. На данный момент он работает профессором в Брауновском университете и имеет множество достижений на целый абзац длиной. Сейчас он занимается исследованиями блокчейна в контексте классических распределенных вычислений.

Ранее Морис уже приезжал в Россию на SPTCC (видеозапись) и cделал отличную встречу сообщества Java-разработчиков JUG.ru в Питере (видеозапись).

Этот хабрапост  — большое интервью с Морисом Херлихи. В нем обсуждаются следующие темы:

  • Взаимодействие академической сферы и индустрии;
  • Фундамент для исследований блокчейна;
  • Откуда берутся прорывные идеи. Влияние популярности;
  • PhD под руководством Барбары Лисков;
  • Мир в ожидании многоядерности;
  • Новому миру – новые проблемы. NVM, NUMA и взлом архитектуры;
  • Компиляторы против процессоров, RISC vs CISC, shared memory vs message passing;
  • Искусство написания хрупкого многопоточного кода;
  • Как обучить студентов написанию сложного многопоточного кода;
  • Новое издание книги «The Art of Multiprocessor Programming»;
  • Как изобреталась транзакционная память;   
  • Почему стоит проводить исследования в области распределенных вычислений;
  • Остановилось ли развитие алгоритмов, и как жить дальше;
  • Работа в Брауновском Университете;
  • Разница между исследованиями в университете и внутри корпорации;
  • Hydra и SPTDC.Читать полностью »

У вас когда-нибудь было такое состояние?

image

Хочу показать вам, как TDD может улучшить качество кода на конкретном примере.
Потому что всё то, что я встречал при изучении вопроса, было довольно-таки теоретическим.
Так получилось, что мне довелось написать два практически идентичных приложения: одно писалось в классическом стиле, так как я ещё не знал тогда TDD, в второе — как раз с использованием TDD.

Ниже я покажу, где были самые большие различия.

Лично мне это было важно, потому что каждый раз, когда кто-то находил баг в моём коде, я ловил увесистый минус на самооценку. Да, я понимал, что баги — это нормально, их пишут все, но ощущение неполноценности никуда не уходило. Также, в процессе эволюции сервиса, я иногда понимал, что сам понаписал такого, что чешутся руки всё выкинуть и переписать заново. И как это получилось — непонятно. Как-то всё было хорошо в начале, но вот пару фич и через некоторое время уже на архитектуру без слёз не взглянешь. Хотя вроде каждый шаг изменения был логичный. Ощущение того, что мне не нравится продукт собственного труда, плавно перетекало в ощущение, что программист из меня, простите, как из говна пуля.

Оказалось, я не один такой и схожие ощущения возникают у многих моих коллег. И тогда я решил, что либо научусь писать нормально, либо пора менять профессию. Я попробовал test-driven development в попытке что-то изменить в своём подходе к программированию.

Забегая вперёд, по результату нескольких проектов, могу сказать, что TDD даёт более чистую архитектуру, но при этом замедляет разработку. И подходит не всегда и не всем.
Читать полностью »

ИллюстрацияДобрый день, уважаемыее. В этом цикле статей я попытаюсь рассказать Вам о Java Virtual Machine и запуске Java программ на микроконтроллерах. Тема достаточно спорная: Зачем Java на микроконтроллерах, где и так мало ресурсов? Лучше нативного кода написаного на чистом С, ничего нет, даже на плюсах мало кто пишет! И т.д. Сразу скажу, сам задавал себе эти вопросы и не один раз. Мой ответ такой: Кто хочет попробовать, на что способно железо; понять, как работает JVM; увидеть интересный подход к построению мультиплатформенного проекта; внести свой вклад в Open Source; или просто побаловаться — все на борт, корабль по имени uJVM отправляется в плавание! Те кто уже настроился критиковать, смотрите как «Титаник» отправился в путь, надеюсь на Вашу лояльность!

Читать полностью »

Большое интервью с Клиффом Кликом — отцом JIT-компиляции в Java - 1Клифф Клик — CTO компании Cratus (IoT сенсоры для улучшения процессов), основатель и сооснователь нескольких стартапов (включая Rocket Realtime School, Neurensic и H2O.ai) с несколькими успешными экзитами. Клифф написал свой первый компилятор в 15 лет (Pascal для TRS Z-80)! Наиболее известен за работу над С2 в Java (the Sea of Nodes IR). Этот компилятор показал миру, что JIT может производить качественный код, что стало одним из факторов становления Java как одной из основных современных программных платформ. Потом Клифф помог компании Azul Systems построить 864-ядерный мейнфрейм с софтом на чистой Java, который поддерживал паузы GC на 500-гигабайтной куче в пределах 10 миллисекунд. Вообще, Клифф успел поработать над всеми аспектами JVM.
 
Этот хабрапост — большое интервью с Клиффом. Мы поговорим на следующие темы:

  • Переход к низкоуровневым оптимизациям
  • Как делать большой рефакторинг
  • Модель стоимости
  • Обучение низкоуровневым оптимизациям
  • Практические примеры улучшения производительности
  • Зачем создавать свой язык программирования
  • Карьера перформанс-инженера
  • Технические челленжи
  • Немного про аллокацию регистров и многоядерность
  • Самый большой челленж в жизни

Интервью ведут:

  • Андрей Сатарин из Amazon Web Services. В своей карьере успел поработать в совершенно разных проектах: тестировал распределенную базу данных NewSQL в Яндексе, систему облачного детектирования в Лаборатории Касперского, многопользовательскую игру в Mail.ru и сервис расчёта валютных цен в Deutsche Bank. Интересуется тестированием крупномасштабных backend- и распределённых систем.
  • Владимир Ситников из Netcracker. Десять лет работает над производительностью и масштабируемостью NetCracker OS — ПО, используемого операторами связи для автоматизации процессов управления сетью и сетевым оборудованием. Увлекается вопросами производительности Java и Oracle Database. Автор более десятка улучшений производительности в официальном PostgreSQL JDBC-драйвере.Читать полностью »

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

Читать полностью »

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

В одной Enterprise системе жила-была компонента. Эта компонента собирала данные от пользователей о неком продукте и записывала их в банк данных. И состояла она из трёх стандартных частей: пользовательского интерфейса, бизнес-логики на сервере и таблицы в банке данных.
Работала компонента хорошо, и несколько лет к её коду никто не притрагивался.
Но вот однажды, ни с того ни с сего, начали твориться с компонентой странные дела.
Работая с некоторыми пользователями, компонента посреди сеанса вдруг начинала выбрасывать ошибки. Происходило это нечасто, но как водится, в самый неподходящий момент. И что самое непонятное, первые ошибки появились в стабильной версии системы в production. В версии, в которой несколько месяцев вообще никакие компоненты не менялись.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js