Обновить
151.56

Java *

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

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

Javarush, так ли полезно спустя 9.5 лет?

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

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

Читать далее

Spring Data JDBC и генерация ID

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

Каждый раз, когда необходимо сделать сервис на Java, работающий с реляционной базой, я не могу определиться, прямо как та обезъяна, которая хотела быть и умной, и красивой. Хочется делать запросы на обычном SQL, по-минимуму обкладываясь различными "магическими" аннотациями, но при этом лень самому писать RowMapper'ы, готовить PreparedStatement'ы или JdbcTemplate, и тому подобное, за что любят обзывать Java многословной. И каждый раз руки тянутся к Spring Data JDBC, который, вроде как, и был задуман как нечто среднее. Но с ним тоже, зачастую, можно вляпаться в какую-то ерунду на ровном месте.

Потребовалось мне сохранять новые записи в таблицу. Казалось бы, в чем вопрос - берешь CrudRepository и все у тебя работает из коробки. Но на практике возникло несколько нюансов, например:

Читать далее

Интеграция Primefaces в приложение на Spring Boot. Часть 1 — настройка зависимостей и базовый проект

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

В данной статье описывается пример интеграции библиотеки компонентов пользовательского интерфейса Primefaces, построенной на основе фреймворка JavaServer Faces (JSF), в MVC приложение на Spring Boot.

Читать далее

Моя первая книга по Java

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

Статья о том, как я написал и полностью довёл до издания мою первую книгу по Java, про что эта книга, какие у неё особенности и где можно её купить. Приводится список глав с кратким описанием их содержания.

Читать далее

Теория категорий в API для консистентности Apache Cassandra

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

Для Apache Cassandra проектирование структуры таблиц выполняется для нужд одного конкретного приложения, а перед программистом встают проблемы дублирования данных (один запрос читает одну таблицу, в которой есть все нужные поля) и контроля инициализации значений для колонок, входящих в первичный ключ

В статье предлагается вариант организации клиентского API для решения проблем с консистентностью данных и инициализации требуемых полей на базе комбинации паттернов проектирования Factory Method, Builder и Finite State Machine

TLDR: Если представить паттерн Factory Method как предел в терминах теории категорий, т.е. кортеж с проекциями, и инициализировать фабрику при помощи паттерна Builder, то можно получить удобный API для создания объектов с дублирующимся данными

Читать далее

Мессенджеры на работе — это не прокрастинация, или как мы сделали сервис для автотестирования. Часть 1

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

Однажды у нас появилась идея отправлять отчёты о выполнении автотестов в мессенджер Telegram. Постепенно эта идея переросла в сервис, который позволяет запускать тесты, оповещать об ошибках и получать отчёты в любом мессенджере, где есть возможность интегрировать бота. Помимо доступа к результатам автотестов, бот получил интеграцию с Jira и другими инструментами, которые мы используем в РТЛабс.

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

Читать далее

Использование Postgres в качестве очереди сообщений

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

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

Поэтому в этой статье рассматривается упрощенный механизм уведомлений Postgres и обсуждается, как его можно использовать для реализации простой, но эффективной очереди сообщений на основе push-уведомлений. В ней также рассматривается использование этой очереди для взаимодействия между репликами в развертывании Kubernetes и реализация библиотеки для универсальной обработки задач.

Читать далее

Абстрактные классы и интерфейсы в Java

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

В каких случаях стоит использовать абстрактный класс, а в каких — интерфейс? Давайте разбираться, в чем между ними разница.

Читать далее

Spring Data Specification: наложение фронтенд-фильтров на репозитории spring data

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

Коллеги, добрый день. Во многих проектах для работы с данными на бекенде используется Spring Data со всеми плюшками использования декларативного подхода описания запросов к данным на основе интерфейсов. Также очень часто бекенду нужно быть очень универсальным, чтобы обрабатывать произвольные запросы от фронтенда.

Рассмотрим ситуацию: мы реализуем интернет-магазин. Со стороны UI пользователь имеет возможность осуществлять поиск товаров, задавания произвольное количество фильтров. Например, он может указать в качестве фильтров для поиска:

Читать далее

Не верьте ChatGPT и используйте KotUniL

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

В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей. 

Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок. 

Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.

Что же, почитаем...

Используем аннотацию @Transactional like a pro

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

Привет, Хабр! Меня зовут Никита Летов, я тимлид бэкенд-разработки мобильного приложения Росбанка для физических лиц. Этот пост входит в серию постов по разработке бэкенд-микросервисов на Java и Spring и является адаптацией моего доклада с JPoint 2022

Также хочу предупредить, что данный пост не cookbook и не предоставляет идеально приготовленное решение какой-либо бизнес-проблемы. Это разбор одной технологии, которая при правильном использовании может помочь вам в решении реальной проблемы. А может и не помочь — всё зависит от ее природы.

Читать далее

Моя любимая функция Kotlin

Время на прочтение6 мин
Охват и читатели14K
За последние несколько лет я видел много дискуссий о функциях Kotlin. Среди обсуждаемых тем обнуляемость всегда в первых рядах. Мне она нравится, но это определенно не моя любимая функция.

Больше всего в Kotlin мне нравятся некоторые мелкие особенности, благодаря которым язык становится очень элегантным. Например, смарт-кастинг (контракты), приостановка, функции приемника/расширения и делегирование.

Но на данный момент моей любимой особенностью является сочетание функций inline и suspend.
Читать дальше →

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

Как Java мусорит за пределами кучи: часть 1, реляционные базы данных

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

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

Однако история не заканчивается на Java куче. На самом деле, это только начало.

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

Примечание переводчика. В статье речь идет о Java-приложении. Поэтому название не совсем точное. Но так было в оригинале. :(

Читать далее

Yolo на мобильном без постобработки

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

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

Читать далее

Как мы обновили старый кластер Elasticsearch на 3 ПБ без простоев. Часть 5 — два клиента Elasticsearch на одной JVM

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

Прим. переводчика: автор статьи рассказывает, как его команде удалось запустить два клиента Elasticsearch разных версий на одной JVM путем написания специальной библиотеки-обертки для работы с нужной версией.

Это пятая часть серии статей об обновлении кластера Elasticsearch без простоев и с минимальным воздействием на пользователей.

Глобальный характер обновления с самого начала намекал, что оно займет минимум год (а то и больше). В этой части пойдет речь об изменении подхода к разработке и о том, как удалось поддерживать параллельную работу нескольких клиентских библиотек Elasticsearch в кодовых базах Java в течение длительного времени.

Читать далее

Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO

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

Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.

Как это сделать? Поискать готовое решение (плагин).

А если его нет? Тогда – написать плагин.

А если не умеешь? Стоит хотя бы начать :)

Читать далее

Декомпозиция систем по ограниченным контекстам DDD — глубокое погружение

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

"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.

Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.

Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.

Читать далее

Может ли Java-приложение использовать больше памяти, чем размер кучи

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

Возможно, вы замечали, что Java-приложение может превышать лимит памяти, указанный в параметре -Xmx (максимальный размер кучи). Дело в том, что JVM помимо кучи использует и другие области памяти. 

Давайте начнем со структуры памяти Java-приложения и источников потребления памяти.

Читать далее

GraphQL: сложность запросов

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

Всем привет! Меня зовут Олег Негрозов, я бэкенд-разработчик из команды Talantix. В мире GraphQL есть один минус, который одновременно является и плюсом — пользователь ограничен лишь описанной схемой. Он может попросить у сервера все данные, доступные ему, или написать такой сложный запрос, который будет выполняться целую вечность. О том, как защититься от этого и ограничить свои API, я расскажу в сегодняшней статье.

Читать далее

Вклад авторов