Обновить
128K+

Java *

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

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

А вы уверены, что пользуетесь микросервисами?

Время на прочтение7 мин
Охват и читатели9.8K
Привет, Хабр!

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

Внутренности JVM, Часть 2 — Структура class-файлов

Время на прочтение5 мин
Охват и читатели16K
Всем привет! Перевод статьи подготовлен специально для студентов курса «Разработчик Java».




Продолжаем разговор о том, как Java Virtual Machine работает внутри. В предыдущей статье (оригинал на анг.) мы рассмотрели подсистему загрузки классов. В этой статье мы поговорим о структуре class-файлов.

Как мы уже знаем, весь исходный код, написанный на языке программирования Java, сначала компилируется в байт-код с помощью компилятора javac, входящего в состав Java Development Kit. Байт-код сохраняется в бинарный файл в специальный class-файл. Затем эти class-файлы динамически (при необходимости) загружаются в память загрузчиком классов (ClassLoader).
Читать дальше →

Reactor, WebFlux, Kotlin Coroutines, или Асинхронность на простом примере

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


Многие сервисы в современном мире, по большей части, «ничего не делают». Их задачи сводятся к запросам к другим базам/сервисам/кешам и агрегации всех этих данных по различным правилам и разнообразной бизнес-логике. Поэтому неудивительно, что появляются такие языки, как Golang, с удобной встроенной конкурентной системой, позволяющей легко организовывать неблокирующий код.


В JVM-мире всё немного сложнее. Есть огромное количество фреймворков и библиотек, блокирующих потоки при использовании. Так и сама stdlib может делать то же самое порой. Да и в Java нет аналогичного механизма, похожего на горутины в Golang.


Тем не менее, JVM активно развивается и появляются новые интересные возможности. Есть Kotlin с корутинами, которые по своему использованию очень похожи на горутины из Golang (хоть и реализованы совершенно по-другому). Есть JEP Loom, который в будущем привнесёт fibers в JVM. Один из самых популярных веб-фреймворков — Spring — не так давно добавил возможность создавать полностью неблокирующие сервисы на Webflux. А с недавним релизом Spring boot 2.2 интеграция с Kotlin стала ещё лучше.


Предлагаю на примере небольшого сервиса по переводу денег с одной карты на другую самим написать приложение на Spring boot 2.2 и Kotlin для интеграции с несколькими внешними сервисами.

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

JavaFX Weaver: интеграция JavaFX и Spring Boot приложения

Время на прочтение7 мин
Охват и читатели28K
Это заключительный пост в серии о JavaFX:

  1. Учебник по JavaFX: начало работы
  2. Учебник по JavaFX: Hello world!
  3. Учебник по JavaFX: FXML и SceneBuilder
  4. Учебник по JavaFX: основные макеты
  5. Учебник по JavaFX: расширенные макеты
  6. Учебник по JavaFX: CSS-стилизация
  7. JavaFX Weaver: интеграция JavaFX и Spring Boot приложения

JavaFX & Spring


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

Однако, когда вы разрабатываете приложения JavaFX, нет простого способа интегрировать его со Spring. Интеграция не работает «из коробки», так как приложения JavaFX имеют свой собственный жизненный цикл и обеспечивают создание экземпляров контроллеров.

Для этого поста есть репозиторий с примером, где вы можете посмотреть окончательный код проекта.
Читать дальше →

R2DBC Arabba-RELEASE — новый взгляд на реактивное программирование для SQL

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


Поздравляем Хабр с выходом R2DBC версии Arabba-RELEASE! Это самый первый стабильный релиз проекта.


R2DBC (Reactive Relational Database Connectivity) — открытый проект, посвященный реактивному программированию для SQL. Разработчики R2DBC готовили первую версию спецификации целых два года! В этом хабрапосте мы поговорим, зачем нужен R2DBC, и что происходит в проекте прямо сейчас.


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


Ключевой «ингредиент» реактивных потоков — неблокирующее исполнение. При этом, используя блокирующие компоненты внутри реактивной системы, можно легко все сломать, ведь в реактивном рантайме используется очень ограниченное количество потоков.

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

Retrofit — библиотека для обмена с интернетом (Часть 1)

Время на прочтение3 мин
Охват и читатели14K
Содержание

  1. Описание API Retrofit
  2. HTTP метода
  3. Подключение Retrofit

Описание API Retrofit


По описанию на сайте разработчика библиотеки это типизированный http клиент для Android. Официальная документация доступна тут. Для простоты восприятия необходимо описать некоторые понятия.
Читать дальше →

Прагматическое функциональное программирование

Время на прочтение6 мин
Охват и читатели6.6K
Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Pragmatic Functional Programming» автора Robert C. Martin (Uncle Bob).

Переход к функциональному программированию всерьез развился только около десяти лет назад. Мы видим, что такие языки, как Scala, Clojure и F# привлекают внимание. На самом деле это был большой шаг в программировании: “О, круто, новый язык!” — энтузиазм… Видимо там было что-то особенное — ну или это мы так думали.  

Закон Мура гласит нам, что скорость компьютеров будет удваиваться каждые 18 месяцев. Данный закон действовал с 1960-х до 2000 годов. Затем он прекратился. Частота достигла 3 ГГц, а затем и вовсе поднялась на плато. Мы достигли скорости света! Сигналы не могут распространяться по поверхности чипа достаточно быстро, чтобы обеспечить более высокие скорости. 

Это привело к тому, что инженеры оборудования изменили свою стратегию. В попытках увеличить пропускную способность, они добавили больше процессоров (ядер). А чтобы освободить место для этих ядер, они удалили большую часть оборудования для кэширования и конвейеризации из чипов. Из-за этого процессоры стали намного медленнее, чем раньше; однако их стало больше. В итоге увеличилась пропускная способность. 
Читать дальше →

Учебник по JavaFX: CSS-стилизация

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

Объекты против структур данных

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

В статье, перевод которой предложен ниже, Роберт Мартин вроде как начинает с мыслей, очень похожих на те, что можно увидеть в рассуждениях Егора Бугаенко про ORM, но выводы делает другие. Лично мне подход Егора импонирует, но я считаю, что Мартин подробнее раскрывает тему. Мне кажется, с его мнением стоит познакомиться всем, кто когда-либо задумывался о том, какое место должен занимать ORM и вообще, зачем нужны объекты у которых все поля открыты. Статья написана в жанре "Диалог", где более опытный программист обсуждает проблему с тем, у кого опыта меньше.


Что такое класс

Класс это спецификация множества сходных объектов


Что такое объект?

Объект это набор функций которые производят действия с инкапсулированными данными.


Или лучше сказать, что объект это набор функций, которые производят действия с данными, существование которых подразумевается

В смысле "подразумевается"?

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

Опыт использования ZGC и Shenandoah GC в продакшене

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

Но, есть одно «но»: наша CRM — SalesMax — написана на java, а, следовательно, периодически возникают паузы, связанных с работой сборщика мусора. До последнего времени, это было тем неизбежным злом, с которым нужно было просто смириться.

И вот, Oracle анонсировали новый сборщик мусора — ZGC. По предварительным анонсам, он должен был решить проблему подвисаний java приложений — заявленные паузы не должны превышать 100 мс даже на многогигабайтных кучах. С нашими 6Гб максимального использования памяти, все, и подавно, должно быть хорошо.
Читать дальше →

Пробуем улучшенный оператор instanceof в Java 14

Время на прочтение6 мин
Охват и читатели30K
Не за горами новая, 14-я версия Java, а значит самое время посмотреть, какие новые синтаксические возможности будет содержать эта версия Java. Одной из таких синтаксических возможностей является паттерн-матчинг по типу, который будет осуществляться посредством улучшенного (расширенного) оператора instanceof.

Сегодня я хотел бы поиграться с этим новым оператором и рассмотреть особенности его работы более детально. Так как паттерн-матчинг по типу ещё не вошёл в главный репозиторий JDK, мне пришлось скачать репозиторий проекта Amber, в котором ведётся разработка новых синтаксических конструкций Java, и собрать JDK из этого репозитория.
Читать дальше →

Учебник по JavaFX: расширенные макеты

Время на прочтение6 мин
Охват и читатели24K
Как организовать и разместить GUI компоненты в приложении JavaFX, используя расширенные макеты.

В предыдущей статье мы рассмотрели некоторые основные макеты JavaFX. Теперь пришло время рассмотреть остальные имеющийся макеты.

  1. Учебник по JavaFX: начало работы
  2. Учебник по JavaFX: Hello world!
  3. Учебник по JavaFX: FXML и SceneBuilder
  4. Учебник по JavaFX: основные макеты
  5. Учебник по JavaFX: расширенные макеты
  6. Учебник по JavaFX: CSS стилизация
  7. JavaFX Weaver: интеграция JavaFX и Spring Boot приложения
Читать дальше →

Huawei Cloud: в PVS-Studio сегодня облачно

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

Picture 2

В нынешний век каждый уже слышал об облачных сервисах. Многие компании освоили этот сегмент рынка и создали свои облачные сервисы самых различных направлений. Наша команда также в последнее время интересуется этими сервисами с точки зрения интеграции с ними анализатора кода PVS-Studio. Думаем, наши постоянные читатели уже догадываются, проект какого типа мы проверим в этот раз. Выбор пал на код облачных сервисов компании Huawei.
Читать дальше →

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

Модель приложения (Avalanche — application framework for Java)

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

Модель приложения (Avalanche — application framework for Java)


«Avalanche — application framework for Java» — реализация технологии стирающей различия
между вызовами локального и удаленного кода. Отказоустойчивость, масштабируемость,
модифицируемость, непрерывная доступность идут в комплекте приятными бонусами.


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

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

Потребность интеграции возникает не только в специальном программном обеспечении собственной или заказной разработки, но и в «коробочных» решениях. Стоимость реализации может превосходить ожидаемое сокращение эксплуатационных издержек.
Читать дальше →

Теория программирования: Вариантность

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

Здравствуйте, меня зовут Дмитрий Карловский и я… хочу поведать вам о фундаментальной особенности систем типов, которую зачастую или вообще не понимают или понимают не правильно через призму реализации конкретного языка, который ввиду эволюционного развития имеет много атавизмов. Поэтому, даже если вы думаете, что знаете, что такое "вариантность", постарайтесь взглянуть на проблематику свежим взглядом. Начнём мы с самых основ, так что даже новичок всё поймёт. А продолжим без воды, чтобы даже профи было полезно для структурирования своих знаний. Примеры кода будут на псевдоязыке похожем на TypeScript. Потом будут разобраны подходы уже нескольких реальных языков. А если же вы разрабатываете свой язык, то данная статья поможет вам не наступить на чужие грабли.


а вдруг там лис?

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

Как написать простой калькулятор клиент-сервер (JavaFX+EJB+WildFly)

Время на прочтение8 мин
Охват и читатели9.6K
Итак, допустим, мы хотим реализовать клиент-серверное приложение, где на стороне клиента будут формироваться нужные данные, а на стороне сервера будет производится расчет и возвращаться клиенту в виде результата. Если брать в расчет простой калькулятор (давайте сделаем его еще проще, 4 оператора, операнды без дробей и работа по схеме [операнд1] [оператор] [операнд2] [результат]) и, допустим, реализовать его на каком-нибудь ЯП (язык программирования), например, Java, с использование сервера приложения (допустим WildFly/JBoss)+клиента (можно взять на вооружение JavaFX), то можно это сделать следующим способом:

Этот же вариант можно решить с использованием RMI (Remote Method Invocation) без сервера, клиента GUI и EJB, в консоли, но этот вариант рассматривать не будем, а приступим к более интересной реализации.

1. Нам понадобятся следующие ингредиенты:
1.1. JDK,
1.2. IDE (с поддержкой Java EE),
1.3. WildFly (или другой сервер приложений для Java),
1.4. SceneBuilder (для удобства и быстрого создания GUI).

Для связи клиента с сервером будем использовать JNDI (служба именования и каталогов), используя EJB (фреймворк для построения бизнес-логики).

2. Создаем реализацию серверной части:
2.1. Удаленный интерфейс, посредством которого будет происходить связь между клиентов и сервером (используем аннотацию Remote — компонент EJB будет использовать RMI).
Читать дальше →

Как стать Java-разработчиком? А может быть, выбрать Python?

Время на прочтение5 мин
Охват и читатели15K
Здравствуй, Habr!

Недавно нашел хорошую статью про то, как стать Java-разработчиком «How to Become A Successful Java Developer?» автора AakashSingh_17. И вот хочу поделиться с вами переводом. Однако я вижу, сколько молодых разработчиков выбирают Python как первый язык — по причине объективных преимуществ и связанных с этим языком мифов. Поэтому я добавил анализ этого языка, чтобы новички могли сравнить и сориентироваться — а что лучше выбрать в 2019 году (на самом деле, уже в 2020).

А может быть и Java?


Сегодня существует множество языков программирования, которые будут формировать наше будущее. Однако, большинство людей, начинающих изучать программирование, начинают с языка C, а затем переходят к C++ или одному из многих других языков программирования. Но сегодня мы рассмотрим самый популярный язык программирования — Java. Популярность Java можно объяснить его универсальностью, поскольку он может быть использован для разработки индивидуальных приложений, которые являются легкими и быстрыми и служат для различных целей.
Читать дальше →

Первое приложение (Avalanche — application framework for Java)

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

Первое приложение (Avalanche — application framework for Java)


"Avalanche — application framework for Java" — реализация технологии стирающей различия между
вызовами локального и удаленного кода. Отказоустойчивость, масштабируемость,
модифицируемость, непрерывная доступность идут в комплекте приятными бонусами.


Все языки программирования предлагают для начала написать простую программу вывода
сообщения "Hello world". Этот пример не подходит для демонстрации функциональных
возможностей "Avalanche — application framework for Java", так как вызов этого примера всегда
возвращает одну и ту же строку и не позволяет идентифицировать источник, возвративший этот
результат.


Для первого приложения потребуется реализовать два класса (функцию и приложение), один
интерфейс (адаптер функции) и одну JSP страницу для отображения результата. Разработанное
приложение будет выполняться под управлением Tomcat.


Реализация класса функции — DemoFunction


В классе реализации функции нет ничего особенного, это обычный класс Java. В качестве
класса функции может быть использован любой класс. Пусть демонстрационный класс функции
возвращает следующую информацию из операционной системы: PID процесса и имя сервера;
версия операционной системы; название операционной системы.

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

Является ли Java лучшим языком программирования для начинающих?

Время на прочтение5 мин
Охват и читатели46K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Is Java The Best Programming language to Learn First?» автора Javin Paul.

image

Часто получаю вопросы, вроде: «Какой язык программирования изучить первым?», «Java-тот самый язык программирования, на котором стоит начать писать?», «Насколько Java хорош в качестве первого языка программирования?», «Который из языков программирования самый подходящий для начинающих?» или «Начать с Java или Python?».

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

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

Вкалывают роботы — счастлив человек

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

Позабыты хлопоты,
Остановлен бег,
Вкалывают роботы,
Счастлив человек!


Из фильма "Детство Терминатора" "Приключения Электроника"


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


Я расскажу о том, как средствами "Идеи" прокачать этот навык. Надеюсь, мои советы пригодятся вам, замечания и улучшения приветствуются. Поехали!

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