Обновить
128K+

Java *

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

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

Учебник Thymeleaf: Глава 11. Комментарии и Блоки / Blocks

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

11 Комментарии и Блоки / Blocks


11.1. Стандартные HTML/XML комментарии


Стандартные HTML/XML комментарии <!--… --> можно использовать в любом месте шаблонов Thymeleaf. Все, что внутри этих комментариев, не будет обрабатываться Thymeleaf и будет скопировано дословно:
Читать дальше →

Ещё раз о JetBrains Open Day в Москве

Время на прочтение1 мин
Охват и читатели4.9K
Привет! Мы очень рады, что событие вызвало большой интерес. Зарегистрировалось очень много участников: в офис столько не поместится. Поэтому мы решили арендовать зал и провести мероприятие в один день: 19 апреля.

Итак: Банкетный зал Crystal Ballroom в Москва-Сити, 1-й красногвардейский проезд, дом 21 строение 2. Четвертый этаж.

Программа:
Читать дальше →

Полный перечень intrinsic-функций в HotSpot в JDK 7, 8, 9 и 10

Время на прочтение45 мин
Охват и читатели13K
Интринсик или intrinsic-функция — функция, которую JIT-компилятор может встроить вместо вызова Java- и JNI-кода с целью оптимизации. Важный вывод из этого — intrinsic-функции не доступны в режиме интерпретатора. По умолчанию в HotSpot используется два JIT-компилятора C1 и C2, таким образом, может быть доступна реализация intrinsic-функции для каждого из JIT-компиляторов. Различия в реализации intrinsic-функций для разных JIT-компиляторов обуславливаются различным внутренним представлением кода (intermediate representation — IR).

В HotSpot реализовано несколько сотен интринсиков (их количество растёт от релиза к релизу). Описание всех intrinsic-функций можно найти в исходниках OpenJDK в файле vmSymbols.hpp. Ниже приведены полные списки интринсиков для JDK 7 (vmSymbols.hpp), JDK 8 (vmSymbols.hpp), JDK 9 (vmSymbols.hpp) и JDK 10 (vmSymbols.hpp).
Читать дальше →

Повесть о том, как один инженер HTTP/2 Client разгонял

Время на прочтение26 мин
Охват и читатели16K
На примере «JEP 110: HTTP/2 Client» (который в будущем появится в JDK) Сергей Куксенко из Oracle показывает, как команда его запускала, где смотрела и что крутила, чтобы сделать его быстрее.

Предлагаем вам расшифровку его доклада с JPoint 2017. В целом речь тут пойдет не про HTTP/2. Хотя, конечно, без ряда деталей по нему обойтись не удастся.


Как создавали большую энциклопедию для сотрудника

Время на прочтение4 мин
Охват и читатели5.7K
Банковскими услугами в России активно пользуется более 50% населения. Вне зависимости от возраста, специальности и размера бюджета, клиенту важно получать полную и достоверную информацию о состоянии счетов и быстрые ответы на свои вопросы. Для этого банки оптимизируют телефонию, разрабатывают скрипты разговора, создают роботов для ответов на типовые запросы. Помимо технологии, внедряются прогрессивные методики обучения, проходит регулярное тестирование знаний сотрудников и оценка качества обслуживания, но все держать в голове невозможно. Особенно, если в продуктовой линейке банка десятки различных продуктов, проходят акции и действуют специальные предложения для клиентов.

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

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

Объект в футляре или Optional в Java 8 и Java 9: Часть 5: Недосказанное и постер в подарок

Время на прочтение9 мин
Охват и читатели9.1K
Объект в футляре

Это пятая и последняя статья серии, посвящённая использованию класса Optional при обработке объектов с динамической структурой. В первой статье было рассказано о способах избежания NullPointerException в ситуациях, когда вы не можете или не хотите использовать Optional. Вторая статья посвящена описанию методов класса Optional в том виде, как он появился в Java 8. Третья — методам, добавленным в класс в Java 9. В четвертой статье я представил класс, который расширяет возможности класса Optional на случай, когда при неудаче при обработке данных в методе нам необходимо обрабатывать информацию об этой неудаче.

В этой статье мы рассмотрим вопрос, стоит ли Optional использовать во всех тех местах, где могут появиться нулевые значения. Я приведу также мнение Brian Goetz, архитектора языка Java v Oracle об этом классе, и конечно, исполню данное в прошлой статье обещание — поощрю каждого читателя, прочитавшего все статьи серии, ценным подарком.
Читать дальше →

Apache Ignite: распределенные вычисления в оперативной памяти

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


Привет, Хабр!

Мы продолжаем интересоваться новыми решениями от Apache. Рассчитываем выпустить в мае книгу «High Performance Spark» Холдена Карау (книга в верстке), а в августе — книгу «Kafka: The Definitive Guide» Нии Нархид (еще в переводе). Сегодня же хотим предложить краткую ознакомительную статью об Apache Ignite и оценить масштаб интереса к теме.

Приятного чтения!
Читать дальше →

Guava, Graal и Partial Escape Analysis

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

На прошлой неделе случился релиз десятки — и хотя Graal был доступен и раньше, теперь он стал ещё доступней — Congratulations, you're running #Graal! — просто добавьте


-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler


Что конкретно это может нам дать и где можно ожидать улучшений, и какие велосипеды надо начинать выпиливать?


Пример, который я буду рассматривать — частично надуманный, однако, основанный на реальных событиях.


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

NGINX и gRPC теперь настоящие друзья

Время на прочтение4 мин
Охват и читатели32K
Несколько дней назад зарелизилась новая версия Nginx — 1.13.10. Главная фича данного релиза — это нативная поддержка проксирования HTTP/2, и, как следствие, gRPC.
Читать дальше →

REST API Best Practices

Время на прочтение7 мин
Охват и читатели483K
Привет, Хабр! Представляю вашему вниманию перевод статьи "REST API Best Practices" автора Krishna Srinivasan.

REST становится общим подходом для представления сервисов окружающему миру. Причина его популярности заключается в его простоте, легкости использования, доступе через HTTP и другие. Существует неправильное представление о том, что все данные, доступные через сеть, считаются REST, но это не так. В этой статье я собираюсь объяснить вам некоторые best practices, которые вы должны всегда помнить при реализации собственного REST приложения. Я бы хотел услышать ваш опыт в REST приложениях, поэтому если вы знаете best practies, которые не упомянуты в этой статье, пожалуйста, поделитесь с нами в комментариях.

Disclamer: все best practies основаны на моем личном опыте. Если вы имеете другое мнение, не стесняйтесь отправлять его мне на email, и мы обсудим его.

Здесь представлен список best practices, которые будут обсуждаться в этой статье:

1. Конечные точки в URL – имя существительное, не глагол
2. Множественное число
3. Документация
4. Версия вашего приложения
5. Пагинация
6. Использование SSL
7. HTTP методы
8. Эффективное использование кодов ответов HTTP
Читать далее

Учебник Thymeleaf: Глава 10. Приоритет атрибутов

Время на прочтение1 мин
Охват и читатели3.3K
Оглавление

10 Приоритет атрибутов


Что происходит, когда вы пишете в одном теге более одного атрибута th:*? Например:
Читать дальше →

Учебник Thymeleaf: Глава 9. Локальные переменные

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

9 Локальные переменные


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

Учебник Thymeleaf: Глава 8. Макет шаблона

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

8 Макет шаблона / Template Layout


8.1 Включение фрагментов шаблонов


Определение и ссылка на фрагменты

В шаблоны мы часто включаем фрагменты из других шаблонов, такие как подвал, заголовок, меню…
Читать дальше →

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

Разбор перформансных задач с JBreak (часть 3)

Время на прочтение36 мин
Охват и читатели4.1K
Публикую предпоследнюю часть разбора с третьей задачей. До этого выходил разбор первой задачи и второй задачи.

Код к третьей задаче:

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        double x = y1 * z2 - z1 * y2;
        double y = z1 * x2 - x1 * z2;
        double z = x1 * y2 - y1 * x2;
        return x * x + y * y + z * z;
    }

    public static double compute(
            double x1, double y1, double z1,
            double x2, double y2, double z2) {
        Vector v1 = new Vector(x1, y1, z1);
        Vector v2 = new Vector(x2, y2, z2);
        return v1.crossProduct(v2).squared();
    }

    public final static class Vector {
        private final double x, y, z;

        public Vector(double x, double y, double z) {
            this.x = x; this.y = y; this.z = z;
        }

        public double squared() {
            return x * x + y * y + z * z;
        }

        public Vector crossProduct(Vector v) {
            return new Vector(
                    y * v.z - z * v.y,
                    z * v.x - x * v.z,
                    x * v.y - y * v.x);
        }
    }

Условие (упрощённо):
Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
Читать дальше →

Алгоритм Пинг-Понг или критика Обратной Польской Нотации

Время на прочтение5 мин
Охват и читатели16K
Данная статья написана в силу возмущения тем, что в наших ВУЗах студентов простому разбору математических выражений обучают на основе как раз Обратной Польской Нотации (ОПН), что является откровенным извращением нормальной человеческой логики.

Источником описания ОПН будет описание из Лафоре Р.: Л29 Структуры данных и алгоритмы в Java. Классика Computers Science. 2-е изд. — СПб.: Питер, 2013. — 704 с, рекомендованное как наиболее популярное и адекватное по этому вопросу, впрочем как и по другим часто применяемым алгоритмам.

Ну то есть сравниваем разные алгоритмы с разной идеологией.
Читать дальше →

Описание прототипа моего игрового мультиплеерного сервера

Время на прочтение6 мин
Охват и читатели6.2K
Привет, Хабр. Рад представить свою первую статью: описание прототипа игрового мультиплеерного сервера.

Исходный код (под лицензией Apache 2.0)

Содержание:

  • Архитектура обработки входящих запросов
  • Краткое описание прочих моментов
    • Модули и взаимодействия основных классов
    • Разные виды тестов
    • Кэширование при работе с БД

Архитектура обработки входящих действий от пользователя


Входной точкой является websocket-контроллер, принимающий всевозможные реквесты от пользователей: начиная от логина и заявок на игру до игровых ходов и написания сообщений в чат. Этот контроллер обслуживает thread-pool (около 20 потоков).

Одной из самых важных вещей в игре — является быстрая обработка игровых действий (приоритетный безнес-кейз). То есть в идеале игра должна мгновенно реагировать на действия пользователя и не «зависать». В то время как для множества других не игровых действий, таких например, как аутентификация, написание сообщений в чат или матчинг игроков (для совместной игры) — большая или меньшая задержка вполне приемлема для пользователя.

Поэтому архитектуру я постарался спроектировать также и в соответствии с этим требованием (см. картинку):
Читать дальше →

Java 10 General Availability

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

Ссылка для скачивания

Последнюю половину года мы подробно обсуждали здесь новшества Java 10 и знаем их наизусть.

Но было бы странно, если самая главная Java-новость за полгода не появилась бы в этом хабе.


Как говорится, просто оставлю это здесь. Вперёд к приключениям!

Graal: как использовать новый JIT-компилятор JVM в реальной жизни

Время на прочтение6 мин
Охват и читатели10K
На главной сибирской Java-конференции JBreak-2018, проходившей в Новосибирске, Christian Thalinger из Twitter поделился практическим опытом использования Graal. На конференцию компания («Петер-Сервис») отправила всю нашу рабочую группу, и этот доклад мы пришли слушать полным составом. Вполне объяснимо, если учесть тот факт, что Graal по-прежнему считается смелым и потенциально опасным экспериментом (хотя очень похоже, что он войдёт в JDK 10). Было очень интересно узнать, как эта новинка проявляет себя в бою — да не где-нибудь, а в разработке такого уровня.



Кристиан Талингер десяток с лишним лет работает с виртуальными машинами Java, причём ключевой навык в его экспертизе — как раз JIT-компиляторы. Именно Кристиан внедрил Graal и стал инициатором его нынешнего (весьма, по словам Криса, активного) использования в продакшн-среде Twitter. И, если верить Талингеру, это нововведение сохраняет компании приличные деньги за счёт экономии железных ресурсов.
Читать дальше →

Ускоряем время сборки и доставки java web приложения

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

TLTD


  1. удалил jar из сборки проекта
  2. заменил его таском, который быстрее в 7 раз


Детали и результат под катом.

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

Масштабирование Selenium

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

Представьте, что у вас есть всего один тест с использованием Selenium. Что может сделать его нестабильным? Как его ускорить? Теперь представьте, что тестов стало два. Теперь представьте сотню. Как заставить быстро отработать такую кучу тестов? Что произойдет, если количество тестов продолжит расти?


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



Прототипом этой статьи является доклад Саймона Стюарта на Heisenbug 2017 Moscow. Саймон — создатель WebDriver, технологии, которой сейчас почти 11 лет. Он стал руководителем проекта Selenium около 9 лет назад. В Google занимался масштабированием Selenium, от нескольких десятков тысяч до нескольких миллионов тестов каждый день, на их инфраструктуре. Затем перешел в Facebook. В данный момент занимается разработкой спецификации WebDriver для W3C, которая входит в группу тестирования и тулинга в W3C. Можно сказать, что на основе WebDriver и создается стандарт.

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