Java Portal | Программирование
12.1K subscribers
1.39K photos
109 videos
42 files
1.41K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
💡 Java: Удаляйте неиспользуемые импорты и переменные для повышения читаемости кода.

Лишние импорты и неиспользуемые переменные создают визуальный шум, усложняют навигацию по коду и затрудняют поддержку. Большинство IDE умеют автоматически находить и удалять такой код.

#Java #CleanCode

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Наткнулся на GitHub-репозиторий для изучения System Design - - - https://github.com/systemdesign42/system-design-academy

Внутри собраны материалы как для подготовки к собеседованиям, так и для понимания того, как устроены реальные системы.

Что есть:

• Основы System Design
• Базовые концепции AI Engineering
• Вопросы по System Design для собеседований
• Разборы архитектур реальных сервисов
• Упрощённые инженерные кейсы с визуализациями и схемами

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

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Java-совет: старайтесь избегать статических переменных, если они не хранят действительно глобальные значения.

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Совет по Java: используйте StringBuilder вместо String для конкатенации строк в циклах.

String является неизменяемым (immutable), поэтому его использование в циклах, особенно больших, работает неэффективно.
StringBuilder является изменяемым (mutable) и оптимизирован для многократного добавления строк.

#SoftwareDevelopment

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Большинство команд, которые делают data-агентов, городят целый зоопарк из роутеров, fine-tune моделей и RAG-пайплайнов поверх нескольких LLM.

OpenAI сделала иначе.

Их data-агент работает на одной модели и всего с 13 инструментами, при этом умеет ориентироваться в 1,5 эксабайта данных и 90 000 таблиц.

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

Недавно OpenAI рассказала, как всё устроено под капотом:

• архитектура data-агента
• 6 уровней контекста, которые позволяют одной LLM уверенно работать с 90 000 таблиц
• 3 реальных сценария использования Codex внутри OpenAI
• 5 практических выводов для тех, кто строит собственных агентов под конкретную предметную область
• куда будет развиваться дата-платформа OpenAI дальше

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Паттерн Circuit Breaker не пытается бесконечно достучаться до упавшего сервиса. Он понимает, когда пора остановиться.

Closed → Open → Half-Open → Closed

Как работает:
Closed — запросы проходят нормально, ошибки отслеживаются.
Open — после достижения порога ошибок новые запросы сразу отклоняются без попытки обратиться к сервису.
Half-Open — через некоторое время пропускается несколько тестовых запросов.
Closed — если сервис восстановился, трафик возвращается в штатный режим.

Что это даёт:
• защищает систему от каскадных сбоев;
• снижает нагрузку на проблемный сервис;
• уменьшает задержки для клиентов;
• ускоряет восстановление после инцидентов.

Защищай. Быстро отказывай. Восстанавливайся. Повторяй.

#SystemDesign #SoftwareArchitecture #Microservices #DevOps #BackendDevelopment

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Многие пишут SQL-запросы сверху вниз и думают, что СУБД выполняет их в том же порядке.

Но SQL работает иначе.

Фактический порядок выполнения выглядит так:

1. FROM
2. JOIN
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. ORDER BY
8. LIMIT

Именно поэтому алиасы из SELECT нельзя использовать в WHERE, а ошибки в агрегатах часто оказываются не там, где их ищут.

Понимание порядка выполнения помогает:

• быстрее отлаживать запросы;
• правильно использовать агрегации;
• избегать логических ошибок;
• писать более предсказуемый SQL.

Если запрос ведёт себя странно, проверь не то, как он написан, а то, как его выполняет движок базы данных.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4
В Docker можно поднять полноценный Android-эмулятор одной командой.

Без установки Android Studio, ручной настройки AVD и прочей возни.

Что есть из коробки:

• аппаратное ускорение через GPU
• поддержка KVM для более высокой производительности
• headless-режим для CI/CD и автоматизации
• запуск полностью внутри Docker-контейнера

Удобная штука для тестирования Android-приложений, мобильной автоматизации и агентных сценариев.

Бесплатно и с открытым исходным кодом

https://github.com/HQarroum/docker-android

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Два 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4
💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).

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

#Java #Interfaces

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
Список сетевых протоколов и портов, которые встречаются чаще всего:

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🔴 Завтра тестовое собеседование с Java-разработчиком

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

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

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

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

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.

#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Вышла статья о распространённых случаях, когда final-поля изменяются через рефлексию, и какие альтернативы можно использовать вместо этого.

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

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

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Java: Используйте блоки try-catch только там, где это действительно необходимо. Не применяйте исключения для управления логикой выполнения программы. #Java #BestPractices

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
В PostgreSQL 19 Beta 1 завезли ON CONFLICT DO SELECT.
Теперь можно попытаться вставить запись, а если она уже есть — сразу получить существующую.
Похоже, атомарный get-or-create наконец добрался до PostgreSQL.
#PostgreSQL #SQL

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1
🛠 От BPMN до контейнера: собираем Java-приложение с OpenBPM и Axiom JDK

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

Покажем, как собрать Spring Boot-приложение в OpenIDE с плагином от OpenBPM: описать BPMN-схему, связать ее с Java-логикой, запустить на Axiom JDK и аккуратно упаковать все это в контейнеры.

Отдельно обсудим ИИ в разработке (а куда сейчас без него?). Обещать «заменить команду с помощью Claude» не будем, но точно расскажем, как искусственный интеллект помогает оптимизировать рутину, сохранив контроль и зоны ответственности.

📅 16 июня, онлайн, 11:00.

👥 Спикеры:
— Никита Щиенко, Tech Lead, OpenBPM
— Максим Сафронов, Технологический консультант Axiom JDK

Все подробности — на странице вебинара. И не забудьте зарегистрироваться!
#реклама
О рекламодателе
2
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5