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

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

Open in Telegram

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

Show more

📈 Analytical overview of Telegram channel Java Portal | Программирование

Channel Java Portal | Программирование (@java_iibrary) in the Russian language segment is an active participant. Currently, the community unites 12 132 subscribers, ranking 10 377 in the Technologies & Applications category and 54 419 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 132 subscribers.

According to the latest data from 05 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -142 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 11.75%. Within the first 24 hours after publication, content typically collects 6.20% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 426 views. Within the first day, a publication typically gains 753 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as boot, string, void, архитектура, resttemplate.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Thanks to the high frequency of updates (latest data received on 07 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

12 132
Subscribers
-124 hours
-407 days
-14230 days
Posts Archive
Аккуратная идея из превью JDK 24: JEP 487, Scoped Values. Scoped Values направлены на то, чтобы сделать общий неизменяемый ко
Аккуратная идея из превью JDK 24: JEP 487, Scoped Values. Scoped Values направлены на то, чтобы сделать общий неизменяемый контекст более предсказуемым по сравнению с ThreadLocal, особенно в современном конкурентном коде. Небольшой пример 👇

Polling vs Long Polling vs Webhooks vs SSE Четыре способа получать обновления от сервера. Каждый даёт свой баланс между прост
Polling vs Long Polling vs Webhooks vs SSE Четыре способа получать обновления от сервера. Каждый даёт свой баланс между простотой, эффективностью и «почти реалтайм» доставкой. Вот как они отличаются: — Polling Клиент каждые несколько секунд отправляет запрос: «есть что-то новое?». Сервер отвечает сразу — независимо от наличия данных. Большинство ответов пустые, что тратит ресурсы клиента и сервера. Подходит для сценариев вроде статуса заказа, где допустима задержка и важна простота реализации. — Long Polling Клиент отправляет запрос, а сервер держит HTTP-соединение открытым до появления данных или таймаута. Пустых ответов значительно меньше, чем в обычном polling. Использовался, например, в чатах для приближения к реалтайм-доставке сообщений. — SSE (Server-Sent Events) Клиент открывает постоянное HTTP-соединение, сервер стримит события по мере появления. Односторонний канал, лёгкий, работает поверх обычного HTTP. Многие AI-интерфейсы стримят ответы токен за токеном именно через SSE. — Webhooks Вместо опроса клиентом, сервис сам отправляет HTTP POST на заранее зарегистрированный callback URL при наступлении события. Stripe использует для подтверждения платежей, GitHub — для событий push. Клиент не держит соединение и не делает запросы, просто принимает вызовы. Часто используется комбинация: polling для простых статусов, SSE для стриминга, webhooks для событий. 👉 Java Portal

В Java можно использовать Optional.orElseThrow() для реализации так называемого fail-fast поведения. ✅ Fail-fast означает, чт
В Java можно использовать Optional.orElseThrow() для реализации так называемого fail-fast поведения. ✅ Fail-fast означает, что ошибки фиксируются ближе к месту возникновения, за счёт чего стек вызовов проще читать и анализировать #Java #РазработкаПО 👉 Java Portal

Реальная сила Stream Gatherers в Java 24: кастомная stateful-магия с ранним завершением Java 24 добавляет Stream Gatherers (J
Реальная сила Stream Gatherers в Java 24: кастомная stateful-магия с ранним завершением Java 24 добавляет Stream Gatherers (JEP 485) — серьёзное расширение Stream API. Они позволяют создавать кастомные промежуточные операции с поддержкой stateful-преобразований, m-to-n отображений, раннего завершения и параллельного выполнения. В отличие от коллекторов (которые терминальные), Gatherers работают прямо внутри конвейера стримов. Это убирает необходимость в костылях вроде сбора во временные списки или ручных циклов для сложной логики — скользящие окна, накопительные суммы, дедупликация, батчинг. С Gatherers код на стримах остаётся ленивым, читаемым, композиционным и переиспользуемым. Теперь Stream API выглядит завершённым для реальных сценариев обработки данных. 👉 Java Portal

Совет по Java: можно избежать чрезмерного количества параметров метода, сгруппировав связанные значения в объекты. #Java #Раз
Совет по Java: можно избежать чрезмерного количества параметров метода, сгруппировав связанные значения в объекты. #Java #РазработкаПО 👉 Java Portal

Подключения к базе данных — дорогая операция. Открывать и закрывать их на каждый запрос? Ещё хуже. Я нашёл простой разбор тог
Подключения к базе данных — дорогая операция. Открывать и закрывать их на каждый запрос? Ещё хуже. Я нашёл простой разбор того, как на самом деле работает пул соединений и почему это важно. Ссылка: https://sagarshiroya.dev/posts/database-connection-and-pooling #Database #SystemDesign 👉 Java Portal

Spring Boot: избегай FetchType.EAGER, если в этом нет реальной необходимости. ❌ Пометка связи как EAGER заставляет ORM загруж
Spring Boot: избегай FetchType.EAGER, если в этом нет реальной необходимости. ❌ Пометка связи как EAGER заставляет ORM загружать её при каждой загрузке сущности, независимо от того, вызываешь ли ты метод этой связи на самом деле. #Springboot #РазработкаПО 👉 Java Portal

В Java, если нужно интегрировать полноценного агента, который умеет вызывать инструменты, запускать циклы, хранить контекст и поднимать веб-интерфейс для отладки, не стоит каждый раз собирать это с нуля — здесь уже есть готовый встраиваемый движок. Встраиваемый движок AI-агента для любого Java-приложения — CLI · REST API · веб Playground Базовая логика максимально простая: когда модели нужно вызвать инструмент, она выполняет его, записывает результат обратно в контекст и продолжает выполнение. Весь этот цикл упакован в Java-библиотеку и слой приложения на Spring Boot, поэтому его можно напрямую встроить в бизнес-систему или использовать как CLI, REST-сервис или веб Playground. 👉 Java Portal

Java: Если нужно читать небольшие файлы, можно использовать Files.readAllLines() — это более прямой и простой способ. #Spring
Java: Если нужно читать небольшие файлы, можно использовать Files.readAllLines() — это более прямой и простой способ. #SpringBoot #JavaDev 👉 Java Portal

Для тех кто просил, наш канал с мемами для программистов и айтишников 👇 https://t.me/+VS5COdLqY_s4OTYy

Java Generics — всё, что нужно знать 1. Box<T> → Обобщённый класс • Используй, когда класс работает с любым типом (например, обёртка вокруг любого объекта, как Box<User>, Box<Integer>). 2. <T> void print(T val) → Обобщённый метод • Используй, когда метод должен принимать любой тип (например, для печати любого объекта, логирования, сравнения и т.п.). 3. <T extends Number> → Ограниченный тип • Называется верхней границей. • Используй, когда тип должен быть подклассом чего-то (например, утилита для работы с int, double, float). 4. <T extends A & B> → Несколько ограничений • Заставляет T реализовывать и A, и B. • Используй, когда нужны обе особенности (например, сортировка объекта, который также требует валидации). 5. <?> → Неограниченный подстановочный тип • Это означает неизвестный тип. • Используй, когда не важен тип, нужно только читать (например, печать элементов из любого списка). 6. <? extends T> → Верхняя граница подстановочного типа • Означает некоторый подкласс T. • Используй при чтении из коллекции (например, чтение чисел из List<? extends Number> без модификации). 7. <? super T> → Нижняя граница подстановочного типа • Означает некоторый суперкласс T. • Используй при записи в коллекцию (например, добавление Integer в List<? super Integer>). 8. Правило PECS • Producer Extends, Consumer Super. • Используй extends для чтения, super для записи (например, API-вход против обработки ответа). 9. List list = new ArrayList(); → Сырой тип • Это сырой тип. • Избегай — тк теряется типовая безопасность (например, компилятор не поймает, если добавишь неверные типы). 10. Стирание типов • Java удаляет всю информацию об обобщениях во время выполнения. • Поэтому нельзя использовать T.class, new T(), или instanceof T (например, нельзя делать проверки или создавать объекты на основе T). 11. Обобщённый конструктор
<T> MyClass(T val) { }
• Используй, когда конструктору нужен обобщённый параметр, даже если сам класс не обобщённый (например, инициализация с динамическими типами). 12. Обобщённый интерфейс
interface Mapper<F, T> { T map(F input); }
• Используй при преобразовании одного типа в другой (например, DTO → сущность). 13. Нельзя использовать примитивы • Нельзя List<int> — только List<Integer>. • Используй обёртки (коллекции могут хранить только объекты, не примитивы). 14. Нельзя создавать массивы с обобщением • new T[] не работает. • Используй List<T> вместо (например, динамические коллекции). 15. Нельзя использовать подстановочные типы для вставки • Нельзя вставлять в List<? extends Number>. • Используй <? super Number>, если нужна вставка (например, для пакетной обработки или модификации коллекции). 👉 Java Portal

Вы предпочитаете аккуратно отформатированные текстовые блоки для аннотаций запросов при использовании Spring Data? https://spring.io/tools теперь умеет генерировать именно такие при преобразовании AOT-метаданных репозитория в аннотации запросов 👉 Java Portal

JavaDoc получил реальное улучшение удобства использования в Java 24. Парень написал практический туториал, который показывает, как использовать JavaDoc с Markdown через комментарии /// в небольшой библиотеке на Maven + JUnit, включая документацию пакетов, записи, запечатанные типы, генерацию JavaDoc и всплывающие подсказки в IDE. http://buff.ly/RmaVWSt #Java #Java24 #Javadoc #Maven 👉 Java Portal

Поставлено в JDK 22: JEP 454 добавил в Java стандартный API для работы с внешними функциями и памятью. Вызов нативного кода б
Поставлено в JDK 22: JEP 454 добавил в Java стандартный API для работы с внешними функциями и памятью. Вызов нативного кода больше не обязан начинаться с шаблонного кода JNI. Небольшой пример 👇

Совет по Java Spring Boot Если в JSON-запросе приходят лишние поля, приложение может упасть с ошибкой UnrecognizedPropertyExc
Совет по Java Spring Boot Если в JSON-запросе приходят лишние поля, приложение может упасть с ошибкой UnrecognizedPropertyException. Чтобы этого избежать и не ломать API, добавь аннотацию:
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserDTO {
    private String name;
    private int age;
}
👉 Java Portal

Java-Инженеры, наблюдающие, как все остальные вайбкодят приложения 👉 Java Portal

🇷🇺Разбираешься в радиочипах, оптике и связи? Забери до 2 000 000 рублей за свои инженерные навыки на турнире «Дронкон»🇷🇺
🇷🇺Разбираешься в радиочипах, оптике и связи? Забери до 2 000 000 рублей за свои инженерные навыки на турнире «Дронкон»🇷🇺 «Сталинские Соколы» открывают регистрацию на 3-й Всероссийский турнир «Дронкон», который пройдет с 8 по 14 мая. 2 направления для победы: - Инженерное дело: беспроводная связь, радиочипы и оптические системы + стратегия «Битва Дронов»; - Пилотирование: War Thunder, GeoGuessr и FPV-гонки + стратегия «Битва Дронов». Призовой фонд для победителей одной дисциплины: 🥇место – 2 000 000 рублей 🥈место – 1 500 000 рублей 🥉место – 1 000 000 рублей Награда за 4-8 места - 150 000 рублей Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан! Перелет, питание, проживание - за счет организаторов. 🇷🇺 Подать заявку и узнать подробности 🇷🇺

Java: используйте WeakHashMap для кэширования, когда ключи без ссылок должны удаляться сборщиком мусора. ❌В HashMap, пока существует сама мапа, ключи и связанные с ними значения не будут удаляться сборщиком мусора. ✅В WeakHashMap ключи хранятся через слабые ссылки, и если на ключ больше нет сильных ссылок в программе, сборщик мусора может его удалить, и он автоматически исчезнет из мапы. ✅Пример:
Map<User, String> map = new WeakHashMap<>();

User u1 = new User("Mick");
map.put(u1, "Cached data");
...
u1 = null;

// С этого момента ключ u1 доступен для сборки мусора.
#Java #JavaDev 👉 Java Portal

Spring Boot: есть возможность использовать стриминг (Stream<T>) для запросов с большими наборами данных. Результаты подтягиваются чанками, при этом в памяти одновременно находится только небольшая часть данных В следующем примере есть приложение с CommandLineRunner, которое сохраняет большой набор пользователей в базу данных, а затем обрабатывает данные через стрим:
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    CommandLineRunner run(UserRepository repo, UserService service) {
        return args -> {
            // Генерация тестовых данных
            for (int i = 1; i <= 10000; i++) {
                repo.save(new User("User_" + i));
            }

            // Обработка через стрим
            service.processUsers();
        };
    }
}
Метод processUsers работает в транзакции и использует метод репозитория streamAllUsers, который возвращает стрим:
@Service
public class UserService {

    private final UserRepository repository;

    @PersistenceContext
    private EntityManager em;

    public UserService(UserRepository repository) {
        this.repository = repository;
    }

    @Transactional(readOnly = true)
    public void processUsers() {
        AtomicInteger counter = new AtomicInteger();

        try (Stream<User> stream = repository.streamAllUsers()) {
            stream.forEach(user -> {
                System.out.println(user.getName());

                if (counter.incrementAndGet() % 100 == 0) {
                    em.clear();
                }
            });
        }
    }
}
public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u")
    Stream<User> streamAllUsers();
}
Важные моменты: - Нужно использовать транзакцию, иначе соединение может закрыться раньше времени и стрим оборвётся - Рекомендуется задать размер выборки через spring.jpa.properties.hibernate.jdbc.fetch_size=100, так как некоторые драйверы могут загрузить всё сразу - Стрим удерживает ресурсы базы данных, его обязательно нужно закрывать (через try-блок, как в примере) #SpringBoot #JavaDev 👉 Java Portal

Освой Java с нуля Этот бесплатный курс охватывает широкий спектр тем, начиная от базовых концепций, таких как переменные, массивы, условные операторы и циклы, до более сложных аспектов, включая ООП, работу с файлами, двумерные массивы и работу с базами данных. Материалы включают теоретические объяснения, практические примеры кода, и иногда задачи для самостоятельного выполнения ⛓Ссылка: тык 👉 Java Portal