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

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

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

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

Для Apache Cassandra проектирование структуры таблиц выполняется для нужд одного конкретного приложения, а перед программистом встают проблемы дублирования данных (один запрос читает одну таблицу, в которой есть все нужные поля) и контроля инициализации значений для колонок, входящих в первичный ключ
В статье предлагается вариант организации клиентского API для решения проблем с консистентностью данных и инициализации требуемых полей на базе комбинации паттернов проектирования Factory Method, Builder и Finite State Machine
TLDR: Если представить паттерн Factory Method как предел в терминах теории категорий, т.е. кортеж с проекциями, и инициализировать фабрику при помощи паттерна Builder, то можно получить удобный API для создания объектов с дублирующимся данными

Однажды у нас появилась идея отправлять отчёты о выполнении автотестов в мессенджер Telegram. Постепенно эта идея переросла в сервис, который позволяет запускать тесты, оповещать об ошибках и получать отчёты в любом мессенджере, где есть возможность интегрировать бота. Помимо доступа к результатам автотестов, бот получил интеграцию с Jira и другими инструментами, которые мы используем в РТЛабс.
В данной серии статей мы хотим рассказать нашу историю о том, с чего все начиналось, какие у нас были идеи, какие ошибки мы совершали и как мы их решили в итоговой реализации.
Базы данных не являются очередями сообщений — это устоявшееся утверждение, которое обсуждалось во многих статьях в блогах и презентациях на конференциях. Но с развитием реляционных баз данных выдерживает ли это утверждение проверку? Если посмотреть на современные версии Postgres, то ответ часто оказывается отрицательным.
Поэтому в этой статье рассматривается упрощенный механизм уведомлений Postgres и обсуждается, как его можно использовать для реализации простой, но эффективной очереди сообщений на основе push-уведомлений. В ней также рассматривается использование этой очереди для взаимодействия между репликами в развертывании Kubernetes и реализация библиотеки для универсальной обработки задач.

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

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

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

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

Как Java разработчики, мы знакомы с концепцией сборки мусора. Наши приложения постоянно генерируют мусор, и этот мусор тщательно очищается сборщиками CMS, G1, Azul C4 и другими типами сборщиков.
Однако история не заканчивается на Java куче. На самом деле, это только начало.
В этой статье мы создадим простое Java-приложение, которое использует реляционную базу данных для пользовательских данных и твердотельные накопители (SSD) в качестве устройства хранения. Далее мы рассмотрим, как приложение генерирует мусор на уровне базы данных и SSD при выполнении логики приложения.
Примечание переводчика. В статье речь идет о Java-приложении. Поэтому название не совсем точное. Но так было в оригинале. :(

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

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

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

"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.
Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.
Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.

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

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


Общее
Умер Фредерик Брукс, отец 8-битного байта, автор "Мифического человеко-месяца", "Design of Design" и "Серебряной пули не существует".
Java, язык и платформа
SlashData провели опрос по состоянию экосистемы разработки и по нему видно, что использование Java выросло со времен 2020 года процентов на 10.
Новые JEP для Java 20:

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