Обновить
512K+

Java *

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

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

Андрей Когунь: зачем развивать IT-сообщество

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

23 июня DINS проводит бесплатную онлайн-конференцию Java Meeting Point. Наша цель — объединить инженеров из разных городов на одной площадке, дать возможность обсудить новые технологии, подходы в разработке и все, что с этим связано. Спикеры конференции — инженеры крупных IT-компаний.    

Мы решили познакомить вас с людьми, которые выступают на конференции в серии интервью. Наш первый герой — Андрей Когунь, ведущий Java Meeting Point, руководитель группы Java-разработчиков в  «КРОК» и основатель jug.msk.ru. Андрей рассказал, почему его вдохновляют митапы, как он успевает совмещать работу и конференции и сложно ли управлять московским сообществом из Кипра.

Читать далее

Optional.stream()

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

На этой неделе я узнал об одной интересной "новой" возможности Optional, о которой хочу рассказать в этом посте. Она доступна с Java 9, так что новизна ее относительна.

Давайте начнем со следующей последовательности для вычисления общей цены заказа:

Читать далее

Обзор модульного и интеграционного тестирования Spring Boot

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

Модульное и интеграционное тестирование - неотъемлемая часть вашей повседневной жизни как разработчика. Однако для новичков Spring Boot написание содержательных тестов для своих приложений оказывается проблемой:

- С чего начать мои усилия по тестированию?

- Как Spring Boot может помочь мне в написании эффективных тестов?

- Какие библиотеки мне использовать?

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

Читать далее

Способы хранения деревьев в реляционных базах данных c использованием ORM Hibernate

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели53K

Здравствуйте! В этой статье, я постараюсь кратко рассказать о четырёх достаточно известных способах хранения деревьев с указанием преимуществ и недостатков. На идею написать подобную статью подтолкнул не раз слышимый мною вопрос: "А как это будет в Hibernate?", то есть как реализовать какой-либо из способов хранения дерева с использованием ORM Hibernate. Сразу замечу, что данная статья не является каким-либо призывом использовать именно реляционные БД для решения задач связанных с деревьями, так как понятно что реляционные базы не заточены конкретно для целей хранения\обработки таких данных. Для иерархии подходят и используются графовые базы данных. Поэтому эта статья будет полезная тем, кому необходимо по каким-либо причинам реализовать хранение дерева именно в реляционной БД. Необходимо также отметить, что и ORM Hibernate также не содержит каких-либо готовых решений из коробки для хранения\обработки деревьев по крайней мере на данный момент, поэтому реализация таких решений практически полностью ложиться на плечи разработчика. В примерах далее для полной и целостной картины, кроме сущностей(entity), рассмотрим кратко и такие базовые операции, как получение всех потомков с уровнем вложенности, получение всех родителей с уровнем вложенности, а также операции добавления, удаления и перемещения узла в дереве. В качестве примера дерева послужит структура папок на файловой системе, которая будет отражена в таблицах(е) БД. На такие моменты, как инициализация сущности(entity) не будем акцентировать внимание, полагаю что рассматривать это не имеет смысла, так как алгоритмы обхода дерева известны и описаны во многих книгах и публикациях и будут мало кому интересны. В любом случае мои реализации обхода дерева представлены на GitHub и с ними при желании можно ознакомиться.

Читать далее

Java 15 и IntelliJ IDEA

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

В Java 15 появились sealed-классы и sealed-интерфейсы, с помощью которых стало возможным ограничивать иерархию классов и интерфейсов на уровне синтаксиса языка. Теперь возможные иерархии определяются декларативно. Этот функционал пока представлен в режиме превью (preview)

Также в Java 15 есть изменения в записях (Records), появившихся в Java 14. А сопоставление с образцом (pattern matching) для instanceof вошло в Java 15 как второе превью без изменений. Текстовые блоки (text block) из Java 13 включены в Java 15 как стандартная языковая конструкция. Изменений в них по сравнению с Java 14 нет. 

В этой статье я расскажу обо всех новых и обновленных языковых конструкциях Java 15, о том, как они вам могут пригодиться, и как их использовать в IntelliJ IDEA. Давайте начнем. 

Читать далее

Null safety of Kotlin. Мысль про киллер фичу

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

Познакомившись впервые с языком Котлин после продолжительной работы с Java меня воротило от одной мысли, что null-safety может быть полезен и вообще переменная без null - не примитив, но я сам этого не осознавал.

Читать далее

Как найти все битые ссылки на странице с помощью Selenium

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

Когда вам нужно проверить все ссылки в вашем проекте, вы можете сделать это с помощью Postman или любого другого инструмента тестирования API, но есть более простой способ. Когда вы используете инструменты тестирования API, вам нужно написать все соединения ссылок один за другим, а когда ссылки меняются, вам нужно снова редактировать все тесты один за другим.

Теперь с помощью этого java-кода вы можете проверить все ссылки. Эти ссылки могут быть ссылками pdf, изображения, видео или фотографии.

Шаг 1: В HTML мы связываем ссылки с помощью этого кода: <a href="Adress"></a> это означает, что мы должны собрать все ссылки на веб-странице на основе <a>. Для этого мы используем этот код:

Читать далее

Как я выбирал между .NET и Java

Время на прочтение9 мин
Охват и читатели44K
С .NET я познакомился на первом официальном месте работы: небольшой IT-компании, сотрудничающей с нефтянкой. Это продолжение истории, начало можно почитать здесь. 


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

Применение интерфейса Collector для работы с потоками в реальных Java-проектах

Время на прочтение5 мин
Охват и читатели17K
Автор статьи, перевод которой мы публикуем сегодня, хочет рассказать о том, как интерфейс Collector и сопутствующие механизмы используются в реальных проектах.

В Java-программировании при работе с потоками широкое применение находят методы класса Collectors. Эти методы позволяют возвращать либо объекты, в основе которых лежит базовый класс Collection, либо — скалярные значения. В первом случае, то есть — для возврата коллекций, применяют один из методов, имя которого выглядит как toXXX(), а во втором случае используется, например, метод reducing().

Представим себе интернет-магазин, в котором есть корзина. Модель корзины выглядит так, как показано ниже.


Модель корзины

Если перевести эту диаграмму классов в код, опустив некоторые детали, то получится следующее.
Читать дальше →

Как выбрать 1 млн. записей из бд, записать в Excel и не упасть с OutOfMemoryError

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

Совсем недавно мне была поставлена задача, написать сервис, который будет заниматься всего лишь одной, но очень емкой задачей – собирать большой объем данных из базы, агрегировать и заполнять все это в Excel по определенному шаблону. В процессе поиска лучшего решения было опробовано несколько подходов, решены проблемы, связанные с памятью и производительностью. В этой статье я хочу поделиться с вами основными моментами и этапами реализации данной задачи.

Читать далее

Простое ускорение Java с помощью Quarkus и JHipster

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

К старту курса о разработке на Java делимся переводом вводной статьи о Quarkus — "родной" для Kubernetes Java-платформе для создания высокопроизводительных веб-, бессерверных (serverless) и нативных приложений (оптимизированных для используемых микропроцессоров). В ней используются предварительная компиляция AOT и агрессивная оптимизация, например сканирование путей к классам, перезагрузка конфигурации и предварительная конфигурация самозагрузки приложения в процессе сборки. Результатом становится впечатляющая скорость загрузки. Другими словами, приложения, созданные с Quarkus, запускаются не просто быстро, а очень быстро!

Читать далее

Microsoft представила собственный бесплатный дистрибутив OpenJDK, пообещав длительную поддержку

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

Корпорация Microsoft на днях начала распространять свой дистрибутив Java на основе OpenJDK. Проект бесплатный, он распространяется под лицензией GPLv2. В его состав входят исполняемые файлы для Java 11 и Java 16, базирующиеся на OpenJDK 11.0.11 и OpenJDK 16.0.1. Новый релиз Java 16 уже используется миллионами геймеров, играющих в Minecraft, вместе с Minecraft Java Edition Snapshot version 21W19A.

Компания подготовила сборки для всех популярных операционных систем, включая Linux, Windows и macOS — для архитектуры x86_64. Есть еще и OpenJDK 16.0.1 для систем ARM, работающий под Linux и Windows. Загрузить и использовать новинку может любой пользователь, на полностью бесплатной основе.
Читать дальше →

Способы логирования Hibernate

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

Приветствую, дорогие друзья! Меня зовут Алексей, и я backend java developer. На одном из моих проектов была задача -  предоставлять по требованию SQL запросы уходящие в БД, для этого их решили логировать.  В этой статье я постараюсь поделиться несколькими способами, которыми можно достичь данной задачи.

Проект был написан на Spring, поэтому все примеры будут на нём. Запросы были написаны с использованием JPA или сгенерированны через Spring Repository.

Читать далее

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

Путь казахстанского разработчика: как я пришел к Java

Время на прочтение4 мин
Охват и читатели7.5K
Привет! Меня зовут Бинали, я руководитель отдела разработки в Beeline Казахстан, работаю в компании почти год. Пришёл в Beeline 1-го июня 2020-го года на позицию Java-разработчика, сейчас я менеджер отдела по разработке ESB. Менеджмент начинает занимать много времени, но пока ещё есть время, чтобы иногда взять задачу в разработку, дабы не потерять навыки программирования.

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


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

C# vs Kotlin

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

Когда речь заходит о сахаре и модных фичах в языках программирования, среди первых вариантов в уме всплывают C# и Kotlin. Поскольку эти два языка занимают схожие ниши, то есть, строго типизированы, обладают сборкой мусора, кроссплатформенны, применяются как на бекенде, так и в мобильной разработке, то сегодня мы попытаемся сравнить их синтаксические возможности. Чтобы сравнение прошло честно, будем рассматривать последние версии обоих языков, а в конце нас ждет небольшой опрос, который и определит победителя. Оговорюсь о своей непредвзятости: мне одинаково нравятся оба языка, они находятся в непрерывном развитии и не отстают друг от друга. Эта статья является сравнительной, а не обучающей, поэтому некоторые заурядные синтаксические возможности могут быть опущены.

Поехали

Инициализация Rx цепочки

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

Всем привет, меня зовут Иван, я Android-разработчик. Сегодня хочу поделится своим опытом работы с RxJava2 и рассказать, как происходит инициализация цепочки. Почему я вообще решил поднять эту тему? Пообщавшись со знакомыми разработчиками, я понял, что не каждый кто использует этот инструмент понимает, как он работает. И тогда я решил разобраться как же устроены подписки в RxJava2 и в какой последовательности вся работа инициализируется. Я не нашел ни одной статьи, поясняющей это. В свете этого я полез в исходники, чтобы посмотреть, как же все работает и набросал для себя небольшую шпаргалку, которая выросла в данную статью.

В этой статье я не буду описывать что такое Observable, Observer и все остальные сущности, которые используются в RxJava2. Если вы решили прочитать данную статью, то я предполагаю, что вы уже знакомы с этой информацией. А если вы всё же не знакомы с этими понятия, то я рекомендую перед началом чтения ознакомиться с ними.

Вот с чего можно начать:

Грокаем* RxJava

Исследуем RxJava 2 для Android

Давайте посмотрим, как работает простейшая цепочка.

Читать далее

Развеиваем мифы об управлении памятью в JVM

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

В серии статей я хочу опровергнуть заблуждения, связанные с управлением памятью, и глубже рассмотреть её устройство в некоторых современных языках программирования — Java, Kotlin, Scala, Groovy и Clojure. Надеюсь, эта статья поможет вам разобраться, что происходит под капотом этих языков. Сначала мы рассмотрим управление памятью в виртуальной машине Java (JVM), которая используется в Java, Kotlin, Scala, Clojure, Groovy и других языках. В первой статье я рассказал и разнице между стеком и кучей, что полезно для понимания этой статьи.
Читать дальше →

Новые функции языка, начиная с Java 8 до 16

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

Улучшения языка Java, которые вам следует знать

Последнее обновление 30.03.2021, чтобы включать изменения до JDK 16.

Когда в Java 8 были представлены Streams и Lambdas, это было большим изменением, позволившим использовать функциональный стиль программирования с гораздо меньшим количеством шаблонного кода.

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

Читать далее

Язык определения интентов NlpCraft IDL

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

Данная статья является продолжением заметки “Проектируем интенты с Apache NlpCraft” и содержит детальное описание возможностей языка определения интентов NlpCraft IDL, созданного для использования в NLP проектах основанных на системе Apache NlpCraft. Поддержка NlpCraft IDL добавлена в систему начиная с версии 0.7.5.   

Новая версия декларативного языка определения интентов, получившая название NlpCraft IDL (NlpCraft Intents Definition Language), значительно упростила процесс работы с интентами в диалоговых и поисковых системах, построенных на базе проекта Apache NlpCraft и вместе с тем расширила возможности системы.  

Читать далее

MastermindCMS – что это такое? Система управления контентом? Фреймворк?

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

Вот и пришло время подвести итоги нашей разработки. Эта статья станет заключительной в описании истории развития нашего проекта. Я постараюсь подробно рассказать о полученном опыте создания нового инструмента для построения веб-сайтов.

Миллионы web-проектов увидели свет, но изо дня в день программисты все еще пишут тонны исходного кода, решая похожие задачи на разных инструментах. Речь в этой статье пойдет о технологии, которую мы разрабатываем на протяжении 4-х лет. Я уже ранее рассказывал о том, какой была моя задумка и цель в создании данного продукта и чего именно я хотел добиться, программируя инструмент для повседневной рутинной разработки веб-приложений. Мне пришлось пройти свой путь от презентаций моего продукта на стартап-pitch'ах и хакатонах и до получения первого реального проекта в сети, где я смог успешно применить мою разработку.

Все началось в далеком 2017 году, когда мне пришла идея написать для себя сайт. Я, недолго думая, взял Drupal и настроил его как headless-cms. Мне хотелось написать отдельно фронтэнд и не копаться с темами от Drupal. Но что-то пошло не так! Я столкнулся с множеством ограничений в проектировании сущностей в административном интерфейсе. Тогда я решил попробовать это сделать на WordPress. Но я совсем не ожидал, что мне придется создавать отдельные контроллеры под каждый тип сущности. Но честно признаться - меня это расстроило. В Drupal хотя бы есть Views, которые относительно легко сконфигурировать в административной консоли и создать endpoint'ы для доступа через REST API, но тем не менее там есть свои ограничения. После этого я провел небольшой анализ существующих CMS и понял, что придется писать все под себя.

Читать далее