В апреле в Москве прошла JPoint 2016 – крупнейшая Java-конференция в России. Напомню, что на конференции было 50 докладов, которые шли в 4 треках в течение двух дней. В сентябре мы открыли доступ к видео для наших читателей, однако руки всё никак не доходили до публикации топ-10 докладов на Хабре.

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

Конечно, какие-то доклады оказываются лучше, какие хуже. Но в этом посте речь пойдет о 10 жемчужинах, лучших докладах, оценка каждого из которых оказалась выше 4.6 по пятибалльной шкале. Ссылка на остальные доклады по катом, так что вам будет чем заняться до Нового Года:)



Евгений EvgenyBorisov Борисов — Мифы о Spark или может ли пользоваться Spark обычный Java-разработчик

Доклад о том, каково это – работать на Scala-фреймворке под Java, – и почему стоит это делать, в свое время вызвавший бугурт в комментариях. В докладе рассмотрены структура и принципы работы Spark, преимущества Java 8, которые делают работу со Spark удобной и лакончиной.

Захватывающий доклад, начинающийся с философии и наполненный демками является редким исключением, заслуженно занявшим первую строчку. Если вы пишете на Java и работаете с BigData – must see:




Тагир lany Валеев — Странности Stream API

Доклад для тех, кто уже работает со Stream API и кого не пугает слово spliterator. Основное внимание уделено странному поведению стримов в области производительности, жора памяти и параллелизма. Тагир постарался не заострять внимания на микроэффектах, а поговорить о проблемах, решение которых позволяет ускорить ваш код в 2-10 раз.

В докладе подробно разбирается, какие баги есть в Java 8 Stream API и что будет исправлено в Java 9. Также даются решения некоторых нетривиальных задач, в том числе при помощи библиотеки StreamEx (автором которой по невероятному стечению обстоятельств является сам Тагир).




Алексей Шипилёв — The Lord of the Strings: Two Scours

Доклад, вошедший в ТОП-3 всех наших Java-конференций (Joker/JPoint/JBreak). Доклад помогает понять, насколько сильно отличается разработка JDK от обычных проектов. В рамках выступления Алексей показывает две фичи во все еще грядущем JDK 9, направленные на оптимизацию строк: Compact Strings, сжимающие строки с однобайтовыми символами, что улучшает футпринт и даже общую производительность; и Indify String Concat, использующий магию invokedynamic для конкатенации строк, позволяющий подкручивать реализацию конкатенации без рекомпиляции программ.




Максим Дорофеев — Воспитай свою обезьяну

Единственный нетехнический доклад, получивший высокую оценку аудитории. Впрочем, это же JPoint, у нас даже нетехнические доклады оказываются низкоуровневыми. Вы узнаете, что за «обезьяна» живет в мозгу каждого из нас и каким образом она заставляет нас смотреть еще одну серию « Stranger Things» вместо того, чтобы работать или читать полезную книгу.

Этот доклад о том, как приспособиться к себе и окружающим нас людям, чтобы успевать выполнять возложенные на вас задачи и при этом уходить с работы вовремя. Возможно, залог его успеха в том, что многие разработчики – недисциплинированные энтузиасты, работающие по ночам и постоянно испытывающие нехватку часов в сутках.




Сергей Walrus Куксенко — Quantum Performance Effects II: Beyond the Core

JPoint и Joker – конференции, которые пробуждают в обычных, казалось бы, разработчиках тягу к «железным» оптимизациям. Именно доклады Сергея позволяют утолить жажду крови и хардкора: ниже видеозапись второй части доклада, в котором речь идет о том, как «маленькие-маленькие хреновинки внутри архитектуры современных процессоров влияют на производительность ваших приложений». Первая часть, посвященная тому что происходит в ядре процессора.

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




Алексей Шипилёв — Если не Unsafe, то кто: восход VarHandles

Как известно, Java-разработчики любят sun.misc.unsafe, а разработчики JDK не любят, когда люди пишут unsafe код. Почему? Потому что «Java is exceptionally safe. Except Unsafe which is unsafe. But it is an exception».



Этот любовный треугольник привел к тому, что в Java 9 доступа к ансейф не будет, а на смену ему придет VarHandles – новый API, сравнимый по скорости с Unsafe, но более безопасный. В докладе Алексей живо с примерами и бенчмарками рассказывает о причинах появления нового API, о его возможностях, ограничениях и скорости работы (которая иногда даже выше, чем unsafe):




Барух jbaruch Садогурский, Евгений Борисов, Тагир Валеев — Java 8 Puzzlers

Ну, вы знаете. Puzzlers + Java 8 = win. Кортеж из трех Java-звезд не мог не войти в ТОП, особенно с паззлерами. Часовая подборка из смешных и весьма непростых загадок по Java 8: идеально подходит для проверки остроты ума, а также для того, чтобы понять, при чем здесь яйца.

Смотреть можно дома, с кружкой чая/кофе/пива заходит лучше сериалов:




Руслан cheremin Черемин — Escape Analysis и скаляризация

Окей, back to hardcore с Русланом Череминым о тонкостях работы Escape Analysis, позволяющем понять, можно ли без последствий произвести Scalar Replacement (аллоцировать объект прямо на стеке и не тратить время на работу со ссылками и сборку мусора). Доклад начинается с азов, но возможно перед просмотром вы захотите ознакомиться с блогом Руслана, в котором на эту тему есть много интересного.

В докладе на примерах рассматриваются сильные и слабые стороны алгоритмов escape analysis применяемые в Java JIT:




Роман Гребенников — Страх и ненависть в распределённых системах

Бывало у вас такое, что ваш кластер внезапно теряет и портит данные, страдает раздвоением мозга и живет своей насыщенной жизнью против вашей воли? Этот доклад проясняет:
  • Какие проблемы встречаются при создании распределенных систем;
  • Как можно налажать и допустить типичные ошибки при проектировании;
  • Матчасть о целостности, CAP-теореме, линеаризации, консенсусе и CRDT;
  • Как все эти знания применять на практике и какие бывают инструменты для облегчения нелегкой жизни разработчика распределенных систем.

Доклад о том, как сделать распределенную систему, не прострелив себе ногу: типичные ошибки и способы их решения, а также немного лайв-кодинга на Scala с Docker'ом с потерей данных в прямом эфире:




Олег m0nstermind Анастасьев — Распределенные системы в Одноклассниках

Доклад о том, как работает одна из наиболее высконагруженных систем в России, обрабатывающая до 500 000 (полумиллиона, да) запросов в секунду на 8000 серверов в трех датацентрах. Олег прочитал этот доклад на трех наших Java-конференциях (Joker, JPoint, JBreak) и вошел в список лучших на каждой – это, как говорится, неспроста.

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




Остальные видео смотрите на нашем YouTube-канале.

А в тот момент, когда вы поймете, что интересные видео уже кончились — обратите внимание, что регистрация на JPoint 2017 уже открыта.
Поделиться с друзьями
-->

Комментарии (3)


  1. moxnoryl
    19.12.2016 12:05
    +7

    Спасибо!


  1. KeLsTaR
    23.12.2016 14:10

    Правильный вопрос задавали во время доклада, ответа на который я так и не услышал. В докладе про Compact Strings там сначала ставится проблема, что мол когда грузится String нет еще ни Unsafe, ничего, а потом решение такой раз и используем new Boolean(true). А сам булеан то откуда взялся? При чем этот вопрос судя по видео не у одного меня возник…


    1. Maccimo
      24.12.2016 13:24

      Судя по исходникам, обошлись инициализацией финального поля в блоке static {}:


          /**
           ...
           * @implNote
           * The actual value for this field is injected by JVM. The static
           * initialization block is used to set the value here to communicate
           * that this static final field is not statically foldable, and to
           * avoid any possible circular dependency during vm initialization.
           */
      
          static final boolean COMPACT_STRINGS;
      
          static {
              COMPACT_STRINGS = true;
          }