java_iibrary | Unsorted

Telegram-канал java_iibrary - Java Portal | Программирование

12073

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Subscribe to a channel

Java Portal | Программирование

🔥VPS + ISPmanager со скидкой до 100% на Waicore

Запускаете сайты на VPS? Сейчас самое время попробовать ISPmanager практически бесплатно.

➕ Наши акции:
— 100% скидка на первый месяц лицензии ISPmanager при заказе VPS из категории «Веб-хостинг»

— Скидка 60% на лицензии ISPmanager при отдельной покупке

Также доступны:
🛡 SSL-сертификаты
🛡 BitNinja для защиты серверов от атак, спама и вредоносного ПО.

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

⚡️Акция действует месяц.
Подробнее на сайте WAICORE.

Читать полностью…

Java Portal | Программирование

DBeaver уже 15 лет остаётся де-факто стандартом среди SQL-клиентов.

Инструмент мощный, но это ещё и тяжёлый Java-монолит, который может запускаться по 20 секунд.

Кто-то решил переписать его с нуля на Rust и добавить возможности, которых в DBeaver никогда не было.

Проект называется Tabularis. 2.5 тыс. звёзд. Лицензия Apache 2.0. Последняя активность — 17 часов назад.

Самое интересное:

Tabularis создал один разработчик — Debba — как эксперимент по AI-assisted разработке.

Цель была простой: проверить, насколько далеко AI-агенты способны зайти при создании реального продукта.

В итоге получилось 55 релизов, 1192 коммита и SQL-клиент, который уже конкурирует с продуктами компаний, где над подобными инструментами работают десятки инженеров.

Что есть в Tabularis, а в DBeaver нет:

✅ Встроенный MCP-сервер — Claude, Cursor и Windsurf могут читать схему БД и выполнять запросы прямо из чата
✅ SQL Notebooks с графиками внутри ячеек и общими переменными между ними
✅ Визуальный EXPLAIN с AI-анализом плана выполнения
✅ Визуальный конструктор запросов с drag-and-drop JOIN'ами
✅ Автоматическая генерация ER-диаграмм
✅ Поддержка PostgreSQL, MySQL/MariaDB, SQLite и ClickHouse через плагины
✅ Редактор на базе Monaco с интеллектуальным автодополнением
✅ Без телеметрии, аккаунтов и подписок

Чего пока нет в Tabularis, но есть в DBeaver:

❌ SQL Server
❌ Oracle

Если работаешь с ними, DBeaver пока остаётся более очевидным выбором.

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

https://github.com/TabularisDB/tabularis

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Совет по Java: не ловите Exception на всякий случай

Плохая практика:

catch (Exception e)


Такой код скрывает реальные проблемы. Для приложения одинаково начинают выглядеть ошибки бизнес-логики, NullPointerException, проблемы с памятью и другие сбои.
Ловите только те исключения, которые действительно можете обработать:

catch (IOException e) { ... }
catch (JsonProcessingException e) { ... }
catch (DuplicateKeyException e) { ... }


Тогда становится понятно:
что именно пошло не так;
какие ошибки ожидаемы;
какие нужно логировать;
какие должны прерывать выполнение.

И ещё одно правило:
catch (Throwable t)


Почти никогда не используйте. Так можно перехватить OutOfMemoryError, StackOverflowError и другие критические ошибки, после которых приложение зачастую уже не способно нормально продолжать работу.

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

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Наткнулся на хороший репозиторий со Skills для Spring Boot-агентов. Стоит посмотреть.

https://github.com/rrezartprebreza/spring-boot-skills

👉 Java Portal

Читать полностью…

Java Portal | Программирование

💡 Совет по Java: всегда закрывайте ресурсы вроде BufferedReader, InputStream и OutputStream через try-with-resources, чтобы избежать утечек памяти и ресурсов. #Java #BestPractices

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Circuit Breaker — это паттерн отказоустойчивости, который предотвращает постоянные попытки выполнить операцию, если она с высокой вероятностью завершится ошибкой.

В этом подробном руководстве Джессика показывает, как реализовать собственный Circuit Breaker в Spring Boot.

Из статьи ты узнаешь:

- зачем нужны Circuit Breaker;
- как обеспечиваются гарантии конкурентного доступа и переходов между состояниями;
- как отслеживать и учитывать ошибки;
- как устроена логика срабатывания Circuit Breaker;
- и многое другое.

Источник: https://freecodecamp.org/news/how-to-build-your-own-circuit-breaker-in-spring-boot-and-really-understand-resilience4j/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

💡 Java: Ловите ошибки ещё на этапе компиляции, помечая переопределённые методы аннотацией @Override. #Java #Annotations

// ❌ Опечатка в имени метода — код компилируется,
// но вы НЕ переопределили toString()

public class User {
private final String name;

public User(String name) {
this.name = name;
}

public String toStrng() { // хотели toString()
return name;
}
}

// Баг остаётся незамеченным — println(user)
// не будет использовать ваш метод



// ✅ @Override превращает опечатку в ошибку компиляции

public class User {
private final String name;

public User(String name) {
this.name = name;
}

@Override
public String toString() {
return "User(" + name + ")";
}
}

// @Override
// public String toStrng() { ... }
//
// Ошибка компиляции:
// method does not override or implement a method from a supertype


👉 Java Portal

Читать полностью…

Java Portal | Программирование

Твой бэкенд теперь умеет говорить.

Вышла open-source платформа: AI-агент подключается через MCP, сам находит ошибку и предлагает фикс, пока ты смотришь не на тот дашборд.

Неделю назад это был твой таск.

Называется Maple.

https://github.com/Makisuo/maple

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Вот забавный ресурс для изучения HTTP-кодов через мемы: 200, 404, 500 и компании. Отличный способ запомнить коды без скучных таблиц.

→ https://github.com/keijeizei/httpmemes

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Команда «docker run -it»

Когда контейнеру Docker необходимо запустить интерактивное приложение, такое как оболочка, языковая REPL или текстовый редактор, команде «docker run» требуются два дополнительных флага: -i и -t.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

В PostgreSQL 19 Beta 1 завезли ON CONFLICT DO SELECT.
Теперь можно попытаться вставить запись, а если она уже есть — сразу получить существующую.
Похоже, атомарный get-or-create наконец добрался до PostgreSQL.
#PostgreSQL #SQL

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Вышла статья о распространённых случаях, когда final-поля изменяются через рефлексию, и какие альтернативы можно использовать вместо этого.

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

Разбираются причины использования рефлексии для изменения final-полей, связанные проблемы и варианты миграции на более безопасные решения.

https://inside.java/2026/04/27/avoiding-final-field-mutation/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

🔴 Завтра тестовое собеседование с Java-разработчиком

10 июня(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Виктор Анохин, старший разработчик из WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Виктор будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Виктору

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама.
О рекламодателе.

Читать полностью…

Java Portal | Программирование

💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).

Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.

#Java #Interfaces

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Spring Boot 4.1 получит поддержку ленивого получения JDBC-соединений

DataSource будет оборачиваться в LazyConnectionDataSourceProxy, а физическое соединение из пула станет запрашиваться только в тот момент, когда приложению действительно потребуется выполнить JDBC-запрос. 🔥

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Java: используйте полиморфизм вместо цепочек instanceof.
Проверки типов часто приводят к разрастающимся if/else, нарушают принцип Open/Closed и заставляют изменять существующий код при добавлении новых сущностей.

❌ До:

public String describe(Animal animal) {
if (animal instanceof Dog) {
return "Woof";
} else if (animal instanceof Cat) {
return "Meow";
} else if (animal instanceof Cow) {
return "Moo";
}

throw new IllegalArgumentException("Unknown animal");
}


Каждый новый тип требует правки метода.

✅ После:

public interface Animal {
String sound();
}

public final class Dog implements Animal {
public String sound() {
return "Woof";
}
}

public final class Cat implements Animal {
public String sound() {
return "Meow";
}
}

public final class Cow implements Animal {
public String sound() {
return "Moo";
}
}

public String describe(Animal animal) {
return animal.sound();
}


Преимущества:
→ нет цепочек instanceof и приведения типов
→ меньше условной логики
→ проще расширять систему новыми типами
→ соблюдается принцип Open/Closed
→ поведение находится внутри самого объекта, а не размазано по коду

Добавить новое животное теперь можно без изменения существующей логики:
public final class Sheep implements Animal {
public String sound() {
return "Baa";
}
}


Клиентский код останется прежним:
describe(new Sheep());


Пусть объекты сами решают, как себя вести. Именно для этого и существует полиморфизм. #Java #OOP

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Совет по Spring: ставь circuit breaker на удалённые вызовы

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

@CircuitBreaker(name = "CircuitBreakerService")
String getInstance();


Circuit breaker временно «размыкает цепь», когда ошибок слишком много. Вместо бесконечных ретраев и просадки всего приложения ты отдаёшь fallback:
public String getAuthorServiceInstanceFallback(Exception ex) {
return "Fallback content";
}


В application.yml можно задать порог ошибок и время ожидания:
failure-rate-threshold: 50
wait-duration-in-open-state: 5s


Идея простая: внешний сервис упал — твоё приложение деградирует контролируемо, а не валится следом.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

gRPC в Java раньше означал proto-файлы, codegen, build-плагины, настройку сервера и client channels. Куча возни ещё до первого hello world.

Spring Boot 4.1 закрывает большую часть этой рутины.
Если ты умеешь писать REST-приложение, базовые шаги уже знакомы:
→ описать контракт
→ добавить bean с @GrpcService
→ заинжектить stub на клиенте

Полный сервер, клиент и in-memory тест с нуля 👇

https://github.com/danvega/hello-grpc

👉 Java Portal

Читать полностью…

Java Portal | Программирование

В чем разница между балансировщиками нагрузки, обратными прокси и API-шлюзами?

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

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

Это увеличивает пропускную способность, снижает задержки и оптимизирует использование ресурсов.

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

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

Дополнительно, они могут кэшировать контент для уменьшения нагрузки на сервер, сжимать данные для ускорения передачи и управлять SSL/TLS-шифрованием, разгружая веб-серверы.

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

Они упрощают взаимодействие клиентов с разными сервисами, добавляют защиту, применяют правила, переводят между веб-протоколами и агрегируют данные.

Идеально подходят для работы с микросервисной архитектурой.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

До сих пор вручную собираешь шаблон проекта каждый раз, когда начинаешь что-то новое?

Я недавно наткнулся на Better-Fullstack — генератор, который помогает быстро поднять основу приложения и не тратить время на однотипную настройку.

Что умеет:

1️⃣ Поддерживает четыре основных экосистемы: TypeScript, Rust, Python и Go.

2️⃣ Более 270 комбинаций технологий, которые можно свободно комбинировать.

3️⃣ Позволяет выбрать фронтенд, бэкенд, базу данных, аутентификацию, платежи, AI-интеграции и DevOps-компоненты в одном месте.

4️⃣ Автоматически генерирует готовый каркас проекта, который можно использовать сразу после создания.

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

Подойдёт для соло-разработчиков, команд с типовыми стек-требованиями и проектов с жёсткими сроками.

GitHub: https://github.com/Marve10s/Better-Fullstack

👉 Java Portal

Читать полностью…

Java Portal | Программирование

🤖 Как создать B2B CRM с ИИ на Джеймикс и не потерять контроль над разработкой?

➡️ 2023 — попробуй ChatGPT
➡️ 2024 — генерируй код
➡️ 2025 — используй агентов
➡️ 2026 — пора разобраться, как встроить ИИ в управляемый процесс разработки

16 июня в 16:00 МСК — практический воркшоп от Джеймикс (Java-платформа с ИИ для разработки корпоративных систем), Kodacode и OpenIDE.

Покажем, как пройти путь от постановки задачи до рабочего контура корпоративной CRM. Не в теории — в коде.

Что разберём:
🔹 как сформировать спецификацию для разработки с ИИ
🔹 как удержать агента в рамках проекта
🔹 как создать модель данных, экраны и бизнес-логику
🔹 типичные ошибки агентного режима и как их исправлять
🔹 чем управляемая ИИ-разработка отличается от вайб-кодинга

Заберёте с собой:готовый код open-source B2B CRM на Java со встроенным ИИ-ассистентом — можно сразу брать за основу в своих проектах.

👉 Регистрируйтесь
#реклама
О рекламодателе

Читать полностью…

Java Portal | Программирование

Сегодняшняя концепция: Consistent Hashing (согласованное хеширование)

Обычное хеширование:
Добавили 1 сервер
↓
Почти все ключи перераспределяются

Согласованное хеширование:
Добавили 1 сервер
↓
Перемещаются только ключи, находящиеся рядом с ним

Эта простая идея лежит в основе таких систем, как:
• Redis Cluster
• Apache Cassandra
• Amazon DynamoDB
• Memcached

Одна из самых важных концепций, на которых строятся масштабируемые распределённые системы.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Почему многопоточность — это сложно?
Многопоточность объединяет сразу несколько непростых концепций.

▪️Concurrency (конкурентное выполнение)
Несколько задач выполняются одновременно или создают видимость одновременного выполнения. Из-за этого порядок выполнения становится непредсказуемым.
▪️Synchronization (синхронизация)
Нужна для защиты общих данных от одновременного изменения несколькими потоками. Без неё возникают race condition, повреждение данных и трудноуловимые баги.
▪️Coordination (координация)
Потоки часто зависят друг от друга. Нужно управлять порядком выполнения задач, ожиданием результатов и обменом данными между потоками.
▪️Visibility (видимость изменений)
Один поток должен видеть изменения, которые внесли другие потоки. Из-за кэшей процессора, оптимизаций компилятора и переупорядочивания инструкций это происходит не всегда автоматически.

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

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Java: Не делай поля публичными. Держи их private и используй геттеры/сеттеры для инкапсуляции. #Java #OOP

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Stream Gatherers официально стали финальной частью Java 24 (JEP 485).

Stream API существует ещё со времён Java 8, но набор промежуточных операций всегда был ограничен методами вроде filter(), map() и sorted().

Вместо того чтобы постоянно расширять стандартный API новыми операциями, Java теперь позволяет разработчикам создавать собственные.

Что дают Stream Gatherers:
• Используются через метод gather() для любого стрима
• Позволяют реализовать собственную логику через интерфейс Gatherer
• Работают как обычные промежуточные операции Stream API
• Были доступны в Preview в Java 22 и Java 23
• Стали финальными в Java 24 без изменений API

Например, теперь можно написать собственный gatherer для фильтрации строк по длине, оконной обработки данных, дедупликации или других сценариев, которые раньше требовали сложных цепочек операций или кастомных решений вне Stream API.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Java: Используйте блоки try-catch только там, где это действительно необходимо. Не применяйте исключения для управления логикой выполнения программы. #Java #BestPractices

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.

#Java #JavaDev

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Список сетевых протоколов и портов, которые встречаются чаще всего:

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Лучшие практики Spring Boot REST API

Часть 1
: Реализация API Get Collection

Часть 2: Реализация API Create и Update

Часть 3: Реализация FindById и DeleteById API

Часть 4: Обработка исключений в REST API

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Два backend-разработчика решали одну и ту же задачу.

Вариант A:

SELECT *
FROM users
WHERE email = ?


Вариант B:
SELECT *
FROM users
WHERE LOWER(email) = LOWER(?)


Какой запрос отправится в прод?

Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести John@Example.com, а в базе лежит john@example.com.

Но есть нюанс.

В большинстве СУБД вызов LOWER() над колонкой ломает использование обычного индекса. Вместо быстрого Index Seek база часто уходит в полный скан таблицы.
На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.

Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на LOWER(email).

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

👉 Java Portal

Читать полностью…
Subscribe to a channel