Обновить
512K+

Java *

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

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

Топ 6 оптимизаций для netty

Время на прочтение5 мин
Охват и читатели28K
Всем привет. Эта статья продолжение 10к на ядро с конкретными примерами оптимизаций, которые были проделаны для повышения производительности сервера. С написания первой части прошло уже 5 мес и за это время нагрузка на наш продакшн сервер выросла с 500 рек-сек до 2000 с пиками до 5000 рек-сек. Благодаря netty, мы даже не заметили это повышение (разве что место на диске уходит быстрее).

Blynk load
(Не обращайте внимание на пики, это баги при деплое)

Эта статья будет полезна всем тем кто работает с netty или только начинает. Итак, поехали.

Нативный Epoll транспорт для Linux


Одна из ключевых оптимизаций, которую стоит использовать всем — это подключение нативного Epoll транспорта вместо реализации на java. Тем более, что с netty это означает добавить лишь 1 зависимость:

<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-transport-native-epoll</artifactId>
   <version>${netty.version}</version>
   <classifier>linux-x86_64</classifier>
</dependency>

и автозаменой по коду осуществить замену следующих классов:

  • NioEventLoopGroup → EpollEventLoopGroup
  • NioEventLoop → EpollEventLoop
  • NioServerSocketChannel → EpollServerSocketChannel
  • NioSocketChannel → EpollSocketChannel

Дело в том, что java реализация для работы с не блокирующими сокетами реализуется через класс Selector, который позволяет вам эффективно работать с множеством соединений, но его реализация на java не самая оптимальная. Сразу по трем причинам:

  • Метод selectedKeys() на каждый вызов создает новый HashSet
  • Итерация по этому множеству создает iterator
  • И ко всему прочему внутри метода selectedKeys() огромное количество блоков синхронизации

В моем конкретном случае я получил прирост производительности около 30%. Конечно же, эта оптимизация возможна только для Linux серверов.
Читать дальше →

Немного о Kotlin

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

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

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

Kotlin 1.0. Задай вопрос команде

Время на прочтение2 мин
Охват и читатели26K
На этой неделе случилось важное для нас событие — вышла первая версия языка программирования Kotlin! Так как почти вся разработка Kotlin велась в Питерском офисе компании JetBrains, многие хабровчане уже знают, что такое Kotlin и пробовали его на практике, поэтому этот пост больше для комментариев: задавайте любые вопросы и команда Kotlin ответит. Мы онлайн!

image

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

Материал по работе с Apache Lucene и созданию простейшего нечёткого поиска

Время на прочтение4 мин
Охват и читатели51K
Пост расcчитан на начинающих, на людей незнакомых с технологией Apache Lucene. В нем нет материала о том, как устроен Apache Lucene внутри, какие алгоритмы, структуры данных и методы использовались для создания фреймворка. Пост является обучающим материалом-тизером, написанным для того, чтобы показать, как организовать простейший нечёткий поиск по тексту.

В качестве материала для обучения предоставлен код на github, сам пост в качестве документации и немного данных для тестирования поисковых запросов.
Подробности

Вышел первый релиз Kotlin 1.0

Время на прочтение5 мин
Охват и читатели31K
Вчера вышел первый релиз (1.0) языка программирования Kotlin от компании JetBrains.
Как пишет компания в своем вчерашнем пресс-релизе — «это был долгий путь но мы наконец выпустили первый релиз и вместе с тем представляем новое лого(иконку) языка»
It’s been a long and exciting road but we’ve finally reached the first big 1.0, and we’re celebrating the release by also presenting you with the new logo

image

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

java.net.URL или старый конь борозды не испортит

Время на прочтение3 мин
Охват и читатели13K
Первое, что мы сразу вспоминаем, когда видим класс java.net.URL — это то, что он такой же матерый, как и первая версия java (@since JDK1.0). Второе — он встречается почти во всех java программах. Третье — чаще всего в нем используют протоколы file, jar и http.



А можно ли с помощью java.net.URL получить данные по протоколу CIFS/SMB, SCP, из HDFS — файловой системы хадупа или из maven репозитария? А получить изображение с веб камеры одной строчкой new URL('camel:/webcam:spycam?resolution=HD720').openStream()?
Узнаем как работать с такими URL в java и groovy

Вот он, мутирующий алгоритм. Или чего не может «Lisp»

Время на прочтение4 мин
Охват и читатели8.1K
Полагаю, вам будет интересно взглянуть на настоящий мутирующий алгоритм, который только то и умеет делать, что мутировать. Всего пара функций написанных на проклятом языке «Автор».
В этой статье я:
  • — приведу алгоритм,
  • — расскажу, как его интерпретирует «Автор»,
  • — покажу, во что он превращается,
  • — немного расскажу про автоматическое самообучение и ИИ,
  • — посмеюсь над собой.

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

Грабли Java

Время на прочтение3 мин
Охват и читатели40K
Недавно в нашей компании среди разработчиков прошел конкурс на знание подводных камней языка Java. Победители получили почет и призы, все получили много позитива, а также поводов для раздумий и дискуссий. По горячим следам спешим поделиться с хабраобщественостью самыми интересными вопросами, прозвучавшими на викторине. Если вы новичок в Java или профессионал, но хотите освежить в памяти темные стороны языка, добро пожаловать под кат. Там вас ждут 4 каверзных вопроса с ответами, обоснованиями и выводами.
Читать дальше →

Реализация функциональности многоуровневого undo/redo на примере прототипа электронной таблицы

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

Введение


Кнопки «Undo» и «Redo», позволяющие отменить и вернуть обратно любые пользовательские действия, а также посмотреть в списке перечень всех выполненных действий, являются стандартом де-факто для таких приложений, как текстовые процессоры и среды разработки, редакторы графики и САПР, системы редактирования и монтажа звука и видео. Они настолько привычны для пользователя, что последний воспринимает их наличие как данность, всего лишь одну функциональную возможность наряду с десятками других. Но с точки зрения разработчика требование к наличию undo является одним из факторов, влияющих на всю архитектуру проекта, определяемую на самых ранних стадиях проекта разработки.

Функции undo в приложениях LibreOffice и GIMP

В открытых источниках существует довольно мало информации о том, как практически реализовывать функциональность undo/redo. Классическая книга Э. Гаммы и др. «Приёмы объектно-ориентированного программирования. Паттерны проектирования» коротко упоминает о пригодности для этой цели паттерна «команда», в интернете на эту тему много общей информации, но нам не удалось найти достаточно полного, проработанного примера реализации. В нашей статье мы попытаемся восполнить этот пробел и, основываясь на опыте автора, продемонстрировать подробный пример архитектуры приложения, поддерживающей undo/redo, который может быть взят за основу других проектов.
Читать дальше →

Отличные типы данных в языке «Автор»

Время на прочтение4 мин
Охват и читатели3.8K
В интерпретаторе «Автор» существует три отличных от других, классических, языков типа данных, про которых я хочу рассказать в этой статье, а именно «digit», «graf» и «program». Они отвечают, соответственно, за астрономические числа без плавающей точки, универсальный граф и дерево операторов и вызовов функций с переменными и константами.

Следующий пример демонстрирует основное отличие типа «digit» от типа «int».
Читать дальше →

Обнаружение + Zabbix API под Java

Время на прочтение7 мин
Охват и читатели15K
По мере развития проекта разрастается и инфраструктура, обслуживающая этот проект. Со временем появляется множество элементов сети, параметры которых важно отслеживать в онлайн-режиме. Для решения этой задачи элементы сети необходимо добавить в систему мониторинга.
Добавить новый узел в Zabbix можно несколькими способами:

  • вручную через интерфейс Zabbix;
  • используя «Обнаружение» Zabbix;
  • используя API Zabbix.

Добавление множества новых узлов вручную – рутинная задача, на решение которой уходит уйма времени. Хорошо, если новых узлов будет 5 – 10. А если 50 – 100 и больше? В этом случае вам поможет «Обнаружение». Настроив правила обнаружения и действия для обнаруженных узлов, Zabbix сам создаст новые обнаруженные узлы, подключит необходимые шаблоны, переместит созданный узел в нужную группу. Данный способ имеет недостаток.


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

Список технических и IT конференций 2016. Часть #2

Время на прочтение2 мин
Охват и читатели14K
image

Продолжая предыдущий пост (т.к. по результатам голосования победили те, кто хотел продолжения), собрал список интересных конференций за Июнь-Август 2016 + внес ваши пожелания.

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

Новая Java-конференция от JUG.ru в Новосибирске

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


В субботу, 19 марта, мы впервые проведем Java-конференцию в Новосибирске. Называться она будет JBreak. Вот её сайт.

Доклады будут проходить параллельно в трех залах, так что скучать будет некогда. Всего будет около 20 докладов продолжительностью по 50-60 минут каждый.

Почему Новосибирск?


Как многие из вас знают, за плечами у JUG.ru уже аж 6 Java-конференций — по 3 раза мы провели Joker и JPoint. Сначала это был Питер, а с 2014 года — и Москва.

Наши спикеры и участники давно говорили нам, чтобы мы сделали что-нибудь в Сибири. Мол, ехать в Питер или Москву из Сибири далеко и дорого, а Java-хардкора хотят не только в этих ваших столицах.Впервые этот разговор зашел за спикерским ужином после JPoint 2014, когда эту идею в явном виде озвучили нам Лёша Шипилев и Никита pjBooms Липский. Мол, Новосибирск — огромный город, в нем много джавистов, в нем сильная компиляторная школа, а главное, много людей, которым нужна сильная Java-конференция.

Поначалу мы отреагировали на это предложение без особого энтузиазма. Команда у нас была небольшая (я, real_ales и jetliner) и сил делать конференцию в далеком для нас городе мы в себе тогда не видели. А нынче погляди в окно многое изменилось. Наша команда выросла, укрепилась и наконец созрела. В какой-то момент мы смотрели гугловую аналитику на сайтах JUG.ru, Joker и JPoint и обнаружили, что в Новосибирске интерес к нашей деятельности действительно довольно велик: Top 5 городов выглядел так: Москва, Питер, Киев, Минск, Новосибирск. Стало понятно: нужно делать конфу в Новосибе!

В чем же особенности новой конференции?
Читать дальше →

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

Знакомьтесь: Jack и Jill на платформе x86

Время на прочтение3 мин
Охват и читатели13K
Jack (Java Android Compiler Kit) – это компилятор, преобразующий исходный код на Java в DEX-файлы Android. Jack – это набор инструментов, среди его возможностей – переупаковка, сжатие, обфускация и поддержка множественных DEX-файлов.

В Jack используются промежуточные библиотеки в формате .jack. Преобразованием существующих .aar/.jar файлов в этот формат занимается Jill (Jack Intermediate Library Linker).



Если для сборки используется Jack, то сначала Jill конвертирует внешние библиотеки, используемые в проекте, в .jack-файлы. Это подготавливает библиотеки к быстрому слиянию с другими .jack-файлами на следующем этапе, когда Jack и плагин Android Gradle, используя подготовленные ранее.jack-файлы и исходный Java-код, компилируют DEX-файл (или файлы). В ходе этого процесса Jack может выполнить минификацию кода (сжатие, обфускацию, или и то и другое вместе). На выходе получается APK-файл Android-приложения.
Читать дальше →

Записывайтесь на новые онлайн-курсы от Mail.Ru Group на Stepic

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


В конце прошлого года мы в партнерстве со Stepic запустили бесплатные онлайн-курсы по дисциплинам из программ Технопарка, Техносферы и Технотрека. А сегодня мы спешим порадовать вас запуском ещё двух:

  • Разработка веб-сервиса на Java (часть 2) — запуск 12 февраля.
  • Веб-технологии — запуск 18 февраля.
Читать дальше →

Пишем чат на Vert.x 3

Время на прочтение23 мин
Охват и читатели30K
На Хабре не так уж много статей, посвященных Vert.x, раз, два и обчёлся. Поэтому решил внести свой вклад и опубликовать небольшой урок, в котором рассказано, как написать простой чат с помощью Vert.x 3.


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

Как в Spring logger получить

Время на прочтение3 мин
Охват и читатели22K
Разрабатывая приложения используя IoC-контейнер Spring думаю каждый задумывался, а как же «правильнее и красивее» создать логгер. В данной публикации хочу привести несколько примеров решения данной задачи.

Решение 1


Получаем логгер напрямую через LoggerFactory:
@Component
public class MyBean {
    private static final Logger log = LoggerFactory.getLogger("application");
    ...
}

Данное решение является классическим, безусловно работающим, но нарушает саму идеологию IoC, ведь нам хочется, что бы работу по созданию логгера выполнил сам контейнер.
Читать дальше →

Список технических и IT конференций 2016. Часть #1

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

Прошло уже почти полтора месяца 2016 года Думаю, что это время, вы точно так же, как и автор данной заметки, провели в ратных трудах. Не смотря на колоссальную загрузку, не хотелось бы, пойти путем Булата Окуджавы, и оторвавшись в очередной раз от монитора, увидеть на календаре 1е Январь 2017. Возникает закономерный вопрос — как с максимальной пользой, не только проработать, оставшиеся 10,5 месяцев года Обезьяны, но и по максимуму узнать о новейших тенденциях, попутно познакомившись с интересными людьми.

Выполняя эту задачу и было проведено небольшое исследование, посвященное самым, на мой взгляд, интересным конференциям, на которые стоит обратить внимание и, при возможности, посетить c Марта по Май 2016.
Читать дальше →

Построение стакана котировок (FullOrderBook) по историческим данным

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


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

Про биржевую торговлю, инфраструктуру и тестирование алгоритмов на исторических данных много писал и пишет IT Invest, спасибо ему. От себя добавлю, что на данных OrderLogs мы анализируем глубину рынка, ликвидность, спреды и еще много чего. Результаты используем в наших торговых алгоритмах.

Специально выбрал Фондовый рынок, так как тут больше всего вопросов. Валютный и Срочный рынок имеют свои особенности, но там проще. Реализация алгоритма на Java, код на GitHub.

Цель: Получить стакан котировок на любой момент времени.
Читать дальше →

Анализ Android малвари-матрешки

Время на прочтение10 мин
Охват и читатели17K
После написания статьи про анализ малвари с avito, несколько моих twitter-читателей откликнулись и прислали SMS, которые получили после публикации объявлений на avito.


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