Обновить
128K+

Java *

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

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

Что последует за вебом?

Время на прочтение18 мин
Охват и читатели41K
В первой части я утверждал, что пришло время подумать, как заменить современную веб-платформу для приложений. Причины — её низкая производительность и в принципе нерешаемые проблемы безопасности.

Кое-кто решил, что я пишу слишком в негативном ключе и не обращаю внимания на положительные стороны веба. Так и есть: первая часть была в стиле «Обсудим факт, что мы попали в глубокую яму», а вторая часть — «Как разработать кое-что получше?» Это огромная тема, так что она на самом деле двумя частями не ограничится.

Назовём нашего конкурента вебу NewWeb (э, брендингом можно заняться потом). Для начала нужно понять, почему веб изначально стал успешным. Веб обошёл другие технологии создания приложений с лучшими инструментами для разработки GUI, так что у него явно есть какие-то качества, которые перевешивают недостатки. Если мы не будем соответствовать этим качествам, мы обречены.
Читать дальше →

Работа с ресурсами, или как я пропихивал @Cleanup

Время на прочтение15 мин
Охват и читатели7.6K
Это вымышленная история, и все совпадения случайны.

Наконец-то команда разработки компании Unknown Ltd. выпустила релиз вовремя. Руководитель отдела разработки Эндрю, системный архитектор Юг и простой рядовой разработчик Боб собрались на планирование.
Читать дальше →

Продолжение поста от школьников. Как Хабрахабр смог изменить нашу судьбу?

Время на прочтение3 мин
Охват и читатели24K
К публикации «Разработка прибыльной Android игры двумя школьниками».

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

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

Как запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году

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

Как запустить Java-приложение с несколькими версиями одной библиотеки в 2017 году


КДПВ, ничего интересного


Хочу поделиться решениями одной проблемы, с которой мне пришлось столкнуться, плюс исследование данного вопроса в контексте Java 9.


дисклеймер

Писатель из меня ещё тот (пишу в первый раз), поэтому закидывание вкусными помидорами с указанием причин только приветствуется.
Сразу договоримся, что статья не годится в качестве руководства по:


  • Java 9
  • Elasticsearch
  • Maven

Если по последним именам информации в сети полно, то по первому… со временем появится, по крайней мере здесь есть необходимая информация.


Представим себе простую ситуацию: разворачиваем кластер Elasticsearch и загружаем в него данные. Мы пишем приложение, которое занимается поиском в этом кластере. Поскольку постоянно выходят новые версии Elasticsearch, мы привносим в кластер новые проблемы фичи с помощью rolling upgrade. Но вот незадача — в какой-то момент у нас сменился формат хранимых данных (например, чтобы максимально эффективно использовать какую-то из новых фич) и делать reindex нецелесообразно. Нам подойдёт такой вариант: ставим новый кластер на этих же машинах — первый кластер со старой схемой данных остаётся на месте только для поиска, а поступающие данные загружаем во второй с новой схемой. Тогда нашему поисковому компоненту потребуется держать на связи уже 2 кластера.

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

Пять вещей, которые нужно знать о Spring Framework 5

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

На этой неделе, сразу за релизом Java 9 вышла новая мажорная версия одного из самых популярных фреймворков для разработки приложения на Java — Spring Framework версии 5. Под катом подробности и краткое описание, что же поменялось.

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

Apache® Ignite™ + Persistent Data Store — In-Memory проникает на диски. Часть I — Durable Memory

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


В Apache Ignite, начиная с версии 2.1 появилась собственная реализация Persistence.

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

Всё началось с фундаментальных проблем предыдущего механизма, который позволял интегрировать In-Memory Data Grid с внешними постоянными хранилищами, например, Cassandra или Postgres.

Такой подход накладывал определенные ограничения — например, было невозможно выполнять SQL или распределенные вычисления поверх данных, которые находятся не в памяти, а в таком внешнем хранилище, был невозможен холодный запуск и низкий RTO (Recovery Time Objective) без существенных дополнительных усложнений.

Если вы используете Apache Ignite Persistence, то оставляете себе все обычные возможности Apache Ignite — ACID, распределенные транзакции, распределенный SQL99, доступ через Java/.NET API или интерфейсы JDBC/ODBC, распределенные вычисления и так далее. Но теперь то, что вы используете, может работать как поверх памяти, так и поверх диска, который расширяет память, на инсталляциях от одного узла до нескольких тысяч узлов.

Давайте посмотрим, как устроен Apache Ignite Persistence внутри. Сегодня я рассмотрю его основу — Durable Memory, а в следующей публикации — сам дисковый компонент.
Читать дальше →

В поисках перформанса, часть 2: Профилирование Java под Linux

Время на прочтение11 мин
Охват и читатели21K
Бытует мнение, что бесконечно можно смотреть на огонь, воду и то, как другие работают, но есть и ещё кое-что! Мы уверены, что можно бесконечно говорить с Сашей goldshtn Гольдштейном о перформансе. Мы уже брали у Саши интервью перед JPoint 2017, но тогда разговор касался конкретно BPF, которому был посвящен доклад Саши.

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


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

MBLTdev 2017: хардкорные доклады по Android-разработке

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

Остался месяц до MBLTdev 2017. 27 октября в пространстве Digital October уже в 4-й раз пройдёт ежегодная конференция мобильных разработчиков.

Под катом: описания докладов Android-трека (про iOS рассказали вчера), CodeLabs, небольшой опрос и подарки от JetBrains и Skyeng.
Читать дальше →

Stream API & ForkJoinPool

Время на прочтение7 мин
Охват и читатели43K
Продолжаем серию полезностей, которыми мы делимся с вами. Теперь уже вновь по Java.

Если вы уже знакомы со Stream API и использовали его, то знаете, что это удобный способ обработки данных. С помощью различных встроенных операций, таких как map, filter, sort и других можно преобразовать входящие данные и получить результат. До появления стримов разработчик был вынужден императивно описывать процесс обработки, то есть создавать цикл for по элементам, затем сравнивать, анализировать и сортировать при необходимости. Stream API позволяет декларативно описать, что требуется получить без необходимости описывать, как это делать. Чем-то это напоминает SQL при работе с базами данных.



Стримы сделали Java-код компактнее и читаемее. Еще одной идеей при создании Stream API было предоставить разработчику простой способ распараллеливания задач, чтобы можно было получить выигрыш в производительности на многоядерных машинах. При этом нужно было избежать сложности, присущей многопоточному программированию. И это удалось сделать, в Stream API есть методы BaseStream::parallel и Collection.parallelStream(), которые возвращают параллельный стрим.
Читать дальше →

Перформанс: что в имени тебе моём? — Алексей Шипилёв об оптимизации в крупных проектах

Время на прочтение26 мин
Охват и читатели37K
Оптимизация производительности издавна не даёт покоя разработчикам, представляясь своеобразным «золотым ключиком» к интересным решениям и хорошему послужном списку. Большую обзорную экскурсию по ключевым вехам оптимизации больших проектов  – от общих принципов до ловушек и противоречий —  на прошедшем JPoint 2017 провёл Алексей Шипилёв, эксперт по производительности.



Под катом — расшифровка его доклада.

Разработка прибыльной Android игры двумя школьниками

Время на прочтение6 мин
Охват и читатели198K
В данной статье хочу рассказать вам об опыте разработки одной простенькой игры под Android, которая многократно окупилась еще на стадии разработки!

image

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

5 правил работы с суммами

Время на прочтение8 мин
Охват и читатели86K
В современном программном обеспечении очень часто возникает необходимость выполнять различные операции с всевозможными суммами денег. Однако до сих пор мне нигде не попадалось документации, в которой были бы сведены воедино основные правила представления сумм и реализации финансовых вычислений. В этой статье я попробую сформулировать те правила, которые составил сам на основании личного опыта.


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

Мой опыт проведения курсов по Java для новых сотрудников

Время на прочтение5 мин
Охват и читатели9.9K
Всем привет!

Сегодня практика ведения курсов перед трудоустройством достаточно распространена во многих компаниях, я и сам когда-то начинал свою карьеру с прохождения обучения, но мне всегда было интересно попробовать себя в качестве преподавателя. И этой весной я узнал, что в нашей компании весной-летом пройдут курсы по итогам которых команды пополнятся бойцами по ряду направлений: Android, Java, Javascript и QA. По предложению руководителя отдела, мне и моим коллегам выпала возможность провести курсы по направлению Java. О деталях этого увлекательного мероприятия я и хотел бы рассказать дорогому Хабру.

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

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

Параллельный Hystrix. Повышаем производительность распределенных приложений

Время на прочтение11 мин
Охват и читатели19K
Около года назад наша команда переписала бэкенд одного малоизвестного приложения с 5 млн. пользователей с использованием «latency and fault tolerance» Hystrix. Это позволило значительно повысить надежность приложения при падении или задержках в нижестоящих системах (их около 10, что для серьезной системы не много), предоставило замечательный инструмент (Hystrix Dashboard) мониторинга нагрузки внешних систем (теперь мы знаем кто тормоз), позволило оптимизировать размеры различных пулов в приложении. Однако, осталась проблема длительной обработки отдельных тяжелых запросов, решению которой и посвящена эта статья.
Много букв и кода

Причуды Stream API

Время на прочтение23 мин
Охват и читатели59K
Stream – таинственный мир функциональщины, несвойственный староверцам в мире объектной Java. Одновременно интересен и чужд мир лямбд, позволяющий вытворять с наборами данных порой такие вещи, что иные, увидев такое, захотят вас сжечь на костре.

Сегодня мы поговорим об Stream API и попробуем приоткрыть завесу тайны в до сих пор до конца неизведанном мире. Несмотря на то, что Java 8 вышла достаточно давно, далеко не все используют полный набор ее возможностей в своих проектах. Открыть этот ящик Пандоры и узнать, что собственно скрывается внутри столь загадочного явления, нам поможет разработчик из JetBrains – Тагир lany Валеев, который давно изучил этого фантастического зверя и места его обитания вдоль и поперек (и совсем недавно написал очередной гайд о том, как правильно, и как неправильно писать стримы), да еще и написал свою библиотеку StreamEx, улучшающую работу с джавовыми стримами. Кому стало интересно, просим под кат!



10 интересных нововведений в JUnit 5

Время на прочтение7 мин
Охват и читатели77K
В минувшее воскресенье Sam Brannen анонсировал выход JUnit 5! Ура!


Поздравляю всех участников @JUnitTeam а также всех, кто использует JUnit в своей работе! Давайте посмотрим, что же нам приготовили в этом релизе.
Посмотрим

Яндекс.Блиц. Почему и какие алгоритмические задачи нужно уметь решать, работая в поиске

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

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



Для Блица мы выбрали исключительно алгоритмические задачи. Хотя для оценки раундов и применяется система ACM, в отличие от спортивного программирования все задания максимально приближены к тем, которые постоянно решают в продакшене Поиска. Те, кто решит успешно хотя бы четыре задачи из шести, могут считать, что прошли первый этап отбора в Яндекс. Почему алгоритмы? В процессе работы часто меняются задачи, проекты, языки программирования, платформы — те, кто владеет алгоритмами, всегда смогут перестроиться и быстро научиться новому. Типичная задача на собеседовании — составить алгоритм, доказать его корректность, предложить пути оптимизации.


Квалификацию можно пройти с 18 по 24 сентября включительно. В этом раунде вам нужно будет написать программы для решения шести задач. Можете использовать Java, C++, C# или Python. На всё про всё у вас будет четыре часа. В решающем раунде будут соревноваться те, кто справится как минимум с четырьмя квалификационными задачами. Финал пройдёт одновременно для всех участников — 30 сентября, с 12:00 до 16:00 по московскому времени. Итоги будут подведены 4 октября. Чтобы всем желающим было понятно, с чем они столкнутся на Блице, мы решили разобрать пару похожих задач на Хабре.

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

Анатомия аналитики от Google

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

Всем привет!
Мы — разработчики (гордо звучит, не правда ли?), и мы активно пилим новые фичи, правим баги и стараемся сделать наш продукт лучше. Но чтобы понять, а как именно пользователь использует наш продукт, какие фишки продукта ему по душе, а какие — не очень, мы используем аналитику. Есть много разных средств, но в этой статье я бы хотел поговорить именно об аналитике от Google, которая активно развивается и меняется. Старого часового по имени Google Analytics сменяет новый боец — Google Analytics for Firebase (в девичестве — Firebase Analytics).
Уже даже в названиях вы можете уловить этот ветер перемен. А ветер перемен всегда порождает некоторый информационный вакуум, в который попадают разного рода слухи, далеко не всегда достоверные при этом.
Поэтому давайте попробуем разобраться подробно, а что сейчас с этой аналитикой, чем пользоваться-то в итоге. И как вообще дальше жить.
Если про Google Analytics информации довольно много, и она систематизирована (чего только стоит этот ресурс, идеальная справка), то у Google Analytics for Firebase типичная болезнь молодого и активно развивающегося продукта — информации мало, она разрознена и иногда даже противоречива. И я в свое время потратил немало сил и времени, чтобы разобраться, что к чему.
Собственно главная цель данной статьи — это систематизация знаний и нынешнего состояния Google Analytics for Firebase. Некоторая «дорожная карта» Google Analytics for Firebase.
Уверен, данная «карта» сэкономит вам прилично времени и нервов =)

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

Moving Java forward faster

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

От переводчика


Недавно в мире Java случилось пара важных событий: Марк Рейнхольд опубликовал письмо, в котором предложил перейти на полугодовой график релизов Java, а за этим последовало сообщение от Oracle, где они предлагают ряд серьезных измненеий в работе над OpenJDK:


  • Начиная с JDK 9 GA, Oracle будет выпускать OpenJDK билды под GPL лицензией
  • Java SE перейдет на постоянный график релизов (письмо Марка)
  • Oracle внесет ранее коммерческие фичи (как Java Flight Recorder) в OpenJDK
  • Oracle будет сотрудничать с другими разработчиками OpenJDK чтобы обеспечить современню, полную и доступную среду

Несмотря на то, что коммерческая версия Oracle JDK останется, целью компании станет сделать ее полностью совместимой и взаимозаменяемой с OpenJDK (до конца 2018).


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

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

Как на Java c помощью КриптоПро подписать документ PDF

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


Привет! Я сотрудник Альфа-Банка и занимаюсь разработкой программного обеспечения со встроенными средствами криптографической защиты информации.

В данной статье хочу рассказать о следующих вещах:

  • преимуществах формата PDF в качестве документа с электронной подписью;
  • платформе Java, библиотеке itextpdf и СКЗИ КриптоПро CSP, как инструментах подписи;
  • о том, с какими трудностями пришлось столкнуться, о доработке itextpdf;
  • привести пример кода, выполняющего несколько подписей;
  • поговорить о целесообразности использования формата PDF в качестве документа с подписью.
Читать дальше →