Обновить
256K+

Java *

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

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

Как красиво избавиться от switch-case посредством перечисления

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

Привет, хабр! Применение switch-case в коде - давняя тема холиваров на форумах на предмет чистоты кода. Лично я склоняюсь к простому мнению: инструмент необходимо использовать по назначению.

Сегодня хотелось бы рассмотреть несколько простых кейсов, где switch-case является не лучшим выбором и предложить красивое и удобное решение проблемы.

Читать далее

Быстро сжимаем, быстро пишем и читаем! На Java

Время на прочтение7 мин
Охват и читатели15K
В ходе разработки IDE 1С:Enterprise Development Tools у нас возникла необходимость быстро оперировать с довольно большими (несколько гигабайтов) объемами данных. Если не вдаваться в детали: при интерактивной работе пользователя с IDE при переключении с одной ветки репозитория на другую нам нужно сохранить текущее состояние проекта и загрузить состояние проекта из новой ветки. Детали (и объяснение – почему счет идет на гигабайты) — в конце статьи, непосредственно к Java это отношения не имеет, кому интересно – прочтет. Ну а что касается Java, то задача выглядит так: быстро сохранить несколько гигабайт информации на диск и быстро считать несколько гигабайт информации с диска. Как мы решали эту задачу, с какими трудностями столкнулись и как их преодолели – под хабракатом.

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

Исследуем граф «мир тесен» при помощи Neo4j

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

Когда моя сестра переехала в другой город и познакомилась с соседями, оказалось, что дедушка и бабушка ее соседа и наши бабушка с дедушкой были хорошими друзьями и общались, живя рядом в другом городе – два поколения назад. Интересно, когда обнаруживаются такие неожиданные связи. Согласно теории сетей, пути, соединяющие узлы сети, зачастую короче, чем могло бы показаться.

Если каждый в сети знает k других людей, то можно упрощенно предположить, что, начав от этого человека и совершив n переходов от узла к узлу, мы найдем kⁿ человек. Учитывая экспоненциальный рост, потребуется совсем немного времени, чтобы построить путь от любого конкретного человека до любого другого в графе.

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

В главе 20 книги Networks Crowds and Markets ее авторы Дэвид Изли и Джон Клейнберг дают теоретический аппарат, описывающий, как в реальном мире могут возникать феномены, укладывающиеся в граф «мир тесен». В этой теории сочетается идея гомофилии, согласно которой схожие люди кучкуются вместе, и идея слабых связей, где отношения ветвятся в масштабах всей сети. Объяснение основано на работе Дункана Уоттса и Стива Строгаца. Давайте проследим эти примеры при помощи кода, написанного при помощи Neo4j.

Читать далее

Осенние конференции JUG Ru Group: онлайн и офлайн, Москва и Питер

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

Как проводить IT-конференции в 2022-м: в офлайне или онлайне? Одни люди ратуют за живое общение, а другие уже полюбили возможность подключиться из любой точки планеты. Мы решили пойти навстречу всем, и получился нестандартный конференционный формат:

— Первая пара дней проходит в онлайне, спикеры выступают удалённо. А позже ещё один день происходит старый добрый офлайн на конференционной площадке.

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

Впервые опробовали это весной, а теперь по такому принципу пройдут все конференции нашего осеннего сезона. У первой половины из них офлайн-часть пройдёт в Петербурге, у второй — в Москве. Представляем Хабру даты и подробности.


Читать далее

Как получать сущности со связями в Spring Rest контроллере

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

Туториал для начинающих разработчиков Spring, в котором рассказывается, почему в REST сервисе может не заработать самый обычный метод findById() и как это можно исправить.

Читать далее

Дюк, вынеси мусор! — 4. ZGC

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

С тех пор, как мы рассматривали принципы работы различных сборщиков мусора (раз, два, три), входящих в состав виртуальной машины Java HotSpot, прошел уже не один год. За это время было разработано еще несколько сборщиков, один из которых — ZGC — достаточно давно вышел из разряда экспериментальных и начиная с 15-й версии OpenJDK может похвастаться статусом production ready.

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

А давайте

Spring security: без фильтров по умолчанию, как и что из этого получится

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

Статья - краткое напоминание о:
- какие фильтры по-умолчанию уже встроены, и как их убрать или донастроить
- список прочих доступных уже готовых к использованию фильтров и полный их список с порядком
- даже слишком краткий обзор методов HttpSecurity
- пример, как писать фильры безопасности после Spring 5.7, когда класс настрое устареет,
- подчеркнул откда стоит начинать отладку, чтобы понять суть происходящего.

Коротко, статья как напоминание мне, а может и вам, как быстро начать настраивать цепочки безопасности, что уже висит подключенным и как выключить все, что не нужно, быстро с нуля начать писать без обвесок, больше контроля и понимания.

Читать далее

Статический анализ кода в современной Java-разработке

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели28K

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

Если вы идёте по пути подготовки развесистых страничек на wiki по стилям кодирования и правилам оформления кода, то это дурно пахнет. Есть другой более надёжный способ, как защитить вашу кодовую базу и добиться полного соблюдения всех принятых стандартов и соглашений. И это, конечно же, статический анализ кода.

Далее я покажу своё видение того, какие инструменты и в какой конфигурации должны применяться на Java проектах, а особенно в микросервисах.

Читать далее

Java, реактивное программирование, Reactor, Spring Cloud Function, Streams, etc…

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


Реактивное программирование в Java — полезный инструмент со множеством применений. Его суть в асинхронной обработке поступающих сообщений, и есть несколько вариантов реализации этого механизма.


И Java в целом, и Spring Framework в частности подразумевают несколько аспектов реактивного программирования. Это касается Spring WebFlux в качестве замены Spring MVC. Также можно использовать Project Reactor в Java непосредственно, без Spring Framework. Однако Spring предоставляет средства декларативного определения функции Spring Cloud Function и средства интеграции приложений с использованием внешних очередей в рамках проекта Spring Cloud Stream. В комплексе эти средства позволяют широко использовать реактивное программирование, упрощая создание, размещение, масштабирование и обслуживание приложений.


Помимо создания новых приложений, Spring Cloud Function/Stream позволяют модифицировать и существующие приложения, облегчая жизнь разработчикам в реализации горизонально масштабируемых сервисов.


Статья является кратким обзором компонентов Spring Framework, позволяющих реализовывать программы в терминах функций асинхронной обработки сообщений. И ориентирована на разработчиков, уже знакомых со Spring Framework, но ещё не имеющих опыта построения реактивных приложений с декларативным управлением функциями-компонентами.

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

Пять навыков Java, которые точно проверят на собеседовании в 2022 году

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

По данным Хабр.Карьеры за июнь, чаще всего среди всех IT-специалистов российские компании искали backend-разработчиков. При этом самым популярным языков программирования, на которых реализуют backend, является Java. Так, доля вакансий Java-разработчиков среди всех вакансий на backend составляет более 35%.

Программный директор факультета backend-разработки направления «Программирование» Skillbox, директор центра подбора IT-специалистов SymbioWay Даниил Пилипенко рассказал, какие умения должен показать джуниор Java-разработчик, чтобы успешно пройти собеседование.

Читать далее

Vector API в Java: краткий обзор и тестирование

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

Некоторое время назад попалась на глаза статья про Vector API в Java.


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


Результаты немного неоднозначные.

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

Варианты использования Java ML библиотек совместно со Spring, Docker, Spark, Rapids, CUDA

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

В данной статье рассматривается способ использования GPU nVidia с технологией CUDA в Docker-контейнерах для распределенной тренировки моделей машинного обучения на нескольких машинах. Цель статьи - показать вариант использования Big Data Tool Apache Spark в Docker-контейнерах, совместно с акселератором GPU вычислений Rapids на устройствах nVidia CUDA, с применением библиотек DJL, Spark ML, XGBoost, в приложении Spring Boot на Java 8 (требование Rapids), на нескольких машинах под управлением ОС Windows 10 Pro для решения задачи тренировки моделей машинного обучения в распределенной системе.

Читать далее

Hibernate Best Practices для начинающих

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

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

Читать далее

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

К микросервисам через reverse engineering и кодогенерацию

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

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

Часто основная сложность заключается в том, что нужно одновременно поддерживать уже существующий код монолита и параллельно внедрять новые принципы и подходы.  В статье я расскажу, как мы в Wrike, используя reverse engineering и немного кодогенерации, реализовали первые шаги по выделению отдельных микросервисов и запустили первый «почти настоящий» BFF-сервис в рамках нашего монолита.

Читать далее

Считаем уникальные IPv4 адреса

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

Как создавать быстрые и эффективные алгоритмы? В статье, на примере задачи по подсчёту уникальных IPv4 адресов, рассматриваются приёмы и методы обработки больших объёмов данных. Вы узнаете, как написать код, работающий в десятки раз быстрее и использующий в несколько десятков раз меньше памяти, чем "наивные" алгоритмы.

Читать далее

Нормализуем логи OpenFeign

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

Стандартный логгер OpenFeign предоставляет весьма неудобный подход в логировании коммуникаций — он записывает запрос отдельно от ответа, причём каждый заголовок и тело - это отдельная строка логов.

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

Решение ‘Normalized Logger’ нацелено исправить этот изъян - этот логгер собирает в одну запись будущего лога запрос и ответ - теперь они не будут разбросаны.

Читать далее

Компиляторы против компиляторов

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

Давно хотел познакомиться с Rust. Язык с экосистемой сборки из коробки, компилятор в машинный код, но самое главное — автоматическое управление памятью, но без сборщика мусора. С учетом того, что управление памятью обещается как zero-cost в runtime — просто сказка! По ходу изучения и возник вопрос – а насколько код Rust быстрее/медленнее компилятора в машинный код давно известного, например, Delphi?

Посмотреть на финалистов

Нагрузочный клиент для тестирования Kafka в формате Avro на Java

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

Хочу поделиться приёмом, который не раз меня выручал. Есть консьюмер, который читает из Kafka сообщения в формате Avro. Его нужно нагрузочно протестировать. Но схемы Avro у меня нет, бизнес-логику сообщений я не знаю, а ждать, пока соседняя команда соберёт полноценный генератор тестовых данных, нельзя.

Решение оказалось простым: для replay-нагрузки не обязательно понимать Avro. Достаточно один раз сохранить реальное Kafka-сообщение в сыром байтовом виде и отправлять эти байты обратно в топик через ByteArraySerializer. Консьюмер получит ровно тот же wire-format, который получает в проде.

Читать далее

Как войти в блокчейн-разработку через Java и Kotlin: представляем JVM SDK смарт-контрактов

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

Всем привет! Меня зовут Степан Кашинцев, я руководитель группы разработки в Waves Enterprise, а конкретно — подразделения, отвечающего за создание децентрализованных приложений, реализующих процессы реального бизнеса на базе нашего блокчейна. В этом посте я хочу рассказать о нашем SDK для JVM-языков программирования, с помощью которого каждый Java/Kotlin-разработчик сможет попробовать себя в создании блокчейн-приложений.

Читать далее

Программирование JavaFX: использование SceneBuilder

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


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

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