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
На Stepik добавили курс «Linux с нуля» Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для: - разра
+4
На Stepik добавили курс «Linux с нуля» Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для:
- разработчиков - девопсов и админов - специалистов по данным и ML - специалистов поддержки и сопровождения - тестировщиков и безопасников
Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой) Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами После прохождения вы получите сертификат, который можно добавить в резюме. В ближайшие 48ч курс доступен со скидкой 30% по промокоду «PORTAL30»: открыть курс на Stepik

Пессимистическая vs оптимистическая блокировка Частый вопрос на собеседованиях по backend. [Пессимистическая блокировка]: - -
Пессимистическая vs оптимистическая блокировка Частый вопрос на собеседованиях по backend. [Пессимистическая блокировка]: - - Запись недоступна другим потокам, пока текущий поток не закончит с ней работу. - Даже чтение данных другими потоками невозможно, пока блокировка не снята. - Пример: EntityManager.lock(entity, LockModeType.PESSIMISTIC_WRITE) в JPA. - Минусы: снижает производительность при высоком уровне конкуренции. - Когда использовать: когда критически важна точность данных. [Оптимистическая блокировка]: - - Не блокирует данные при чтении, но при сохранении проверяет версию записи. - Пример: аннотация @Version в JPA (колонка для хранения версии). - Если версия изменилась другим потоком, выбрасывается OptimisticLockException. - Минусы: нужно разруливать конфликты. - Когда использовать: когда чтений много, а вероятность конфликтов низкая. Какой подход ты чаще используешь в своих проектах? 👉 Java Portal

Совет по Java: используйте Collectors.groupingBy(...), чтобы группировать результаты стрима по классификатору. 👉 Java Portal
Совет по Java: используйте Collectors.groupingBy(...), чтобы группировать результаты стрима по классификатору. 👉 Java Portal

Совет: держите код рядом. Следите, чтобы вычисление было как можно ближе к месту, где используется это значение. Это улучшает
Совет: держите код рядом. Следите, чтобы вычисление было как можно ближе к месту, где используется это значение. Это улучшает читаемость и удобство рефакторинга, снижает вероятность багов и делает код более устойчивым к ошибкам. 👉 Java Portal

Твоя база данных не медленная. Медленный у тебя цикл обратной связи. Один сеньор написал практический гайд, где показано, как разработчику на Java анализировать производительность PostgreSQL из Quarkus-приложения с помощью pg_stat_statements, hypopg и PostgreSQL MCP-сервера через IBM Bob. 👉 Java Portal

Spring Boot: можно использовать spring.jpa.hibernate.ddl-auto=validate, чтобы проверять случайные изменения схемы в продакшен
Spring Boot: можно использовать spring.jpa.hibernate.ddl-auto=validate, чтобы проверять случайные изменения схемы в продакшене. ✅Если что-то не совпадает, приложение не запустится ✅Это можно комбинировать с инструментами миграций, например Flyway или Liquibase 👉 Java Portal

Развенчиваем распространенный миф про Java Garbage Collector Миф: мне НЕ нужно заниматься управлением памятью в Java, потому что GC все делает за меня Garbage Collector (GC) действительно очищает неиспользуемые объекты, на которые больше нет активных ссылок. Благодаря этому в Java не нужно вручную освобождать память, как в C++. Несколько предпосылок, из которых обычно рождается этот тезис: - В языках с ручным управлением памятью (C, C++) утечки очевидны: если забыл вызвать free(), память потеряна навсегда. - В Java GC работает автоматически, поэтому кажется, что он сам решает все проблемы. - «Ну раз есть GC, значит о памяти можно больше не думать» - типичная ошибка. GC удаляет только те объекты, на которые больше нет активных ссылок. Если объект остается доступным, но фактически уже не используется, он будет занимать память до завершения приложения. * Несколько случаев утечек памяти [1] Статические коллекции (заполняем, но не очищаем) Если создать static List и постоянно добавлять в него объекты, GC их никогда не освободит, потому что статические поля живут в течение всего времени работы приложения.
public class MemoryLeak {
    private static final List<byte[]> cache = new ArrayList<>();
    public static void main(String[] args) {
        while (true) {
            cache.add(new byte[10 * 1024 * 1024]);
            System.out.println("Added 10MB to the cache. Used memory: " +
                    (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024) + "MB");
        }
    }
}
Через пару минут - OutOfMemoryError. [2] Переменные потока (ThreadLocal) Объекты, сохраненные в ThreadLocal, привязаны к потоку, а в пуле потоков могут жить дольше, чем нужно.
public class ThreadLocalLeak {

    private static final ThreadLocal<byte[]> threadLocalData = new ThreadLocal<>();
    public static void main(String[] args) {

        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {

            executor.execute(() -> {
                threadLocalData.set(new byte[10 * 1024 * 1024]); // 10MB per thread
                System.out.println("Memory occupied by the thread!");
            });
        }
        executor.shutdown();

    }
}
Поток завершится, но память останется занятой, потому что ThreadLocal не очищается автоматически. [3] Внутренние классы и «утекшие» ссылки Если анонимный класс или lambda-ссылка захватывает внешний объект, это может мешать GC освободить его.
public class InnerClassLeak {

    private String data = "Very important data";
    public void createAnonymousClass() {

        Runnable task = new Runnable() {
            
@Override

            public void run() {
                System.out.println("Using: " + data);
            }
        };
        new Thread(task).start();
    }
}
task держит ссылку на data, и даже если InnerClassLeak больше не используется, GC не сможет очистить объект. Миф развенчан. GC не всесилен, и даже с ним придется учиться правильно работать с памятью в Java. 👉 Java Portal

В Spring Boot можно включить асинхронное логирование, настроив Logback (logback-spring.xml). ✅Лог-сообщения отправляются в очередь и обрабатываются отдельным фоновым потоком. ✅Это снижает узкие места на I/O (ввод-вывод). Положи конфиг Logback в папку resources: src/main/resources/logback-spring.xml Пример:
<configuration>

    <!-- Консольный appender, обернутый в async -->
    <appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="CONSOLE" />
        <queueSize>5000</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>false</includeCallerData>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="ASYNC_CONSOLE" />
    </root>

</configuration>
👉 Java Portal

Java: Records не ограничены ролью просто контейнера данных, в них можно добавлять кастомные конструкторы и методы для валидац
Java: Records не ограничены ролью просто контейнера данных, в них можно добавлять кастомные конструкторы и методы для валидации. ✅ В records можно иметь конструкторы, статические методы и методы экземпляра:
public record Email(String address) {

    // Конструктор с валидацией
    public Email {
        if (address == null || !address.matches("^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) {
            throw new IllegalArgumentException("Некорректный email-адрес: " + address);
        }
    }

    // Метод экземпляра
    public String domain() {
        return address.substring(address.indexOf('@') + 1);
    }

    // Статический метод
    public static Email from(String raw) {
        return new Email(raw.trim().toLowerCase());
    }
}
👉 Java Portal

Java 25: апгрейд, который экономит до 30% RAM (без правок кода) В JDK 25 добавили одну из самых заметных оптимизаций за долго
Java 25: апгрейд, который экономит до 30% RAM (без правок кода) В JDK 25 добавили одну из самых заметных оптимизаций за долгое время: Compact Object Headers (JEP 519). Что меняется: - размер заголовка объекта уменьшается примерно с ~12 байт до 8 байт - меньше памяти на объект -> меньше heap - меньше heap -> меньше давление на GC - меньше GC -> сервис быстрее + облако дешевле Где профит максимальный: Spring Boot, микросервисы, DTO, records, кэши, в общем всё, где много мелких объектов. Включается одной опцией: -XX:+UseCompactObjectHeaders По отзывам из реальных систем: снижение heap на 15–30% встречается довольно часто. Просто протестируй на своих сервисах и забирай “бесплатную” экономию. 👉 Java Portal

Брейкпоинты в IDEA (IntelliJ и другие) для разработчиков Иногда смотрю, как люди дебажат, и чуть ли не ловлю инсульт 🍺 Больш
Брейкпоинты в IDEA (IntelliJ и другие) для разработчиков Иногда смотрю, как люди дебажат, и чуть ли не ловлю инсульт 🍺 Большинство разработчиков умеют только ставить и удалять брейкпоинты. А в IDEA есть куча полезных фич для отладки. Ниже самые годные: [1] Условие остановки Если метод вызывается часто или брейкпоинт стоит в цикле, не трать время, ожидая нужных значений: ▪️ПКМ по брейкпоинту ▪️В Condition добавь условие остановки. Можно использовать все доступные переменные, объекты и методы [2] Динамически смотреть значения параметров Вариант для новичков: добавить в код System.out.println с нужным полем/выражением. Вариант для продвинутых: ▪️Зажми Shift и поставь брейкпоинт ▪️Отметь чекбокс Evaluate and log ▪️Введи нужное выражение Дебаггер не будет останавливать выполнение, но будет писать значение выражения в консоль. Супер полезно для многопоточки, кода сторонних библиотек и remote debugging. [3] Отключение брейкпоинта Ненужный брейкпоинт можно не удалять, а просто выключить: ▪️Нажми на шестеренку у брейкпоинта ИЛИ ▪️ПКМ по брейкпоинту → снимай галочку Enabled [4] Массовая чистка Когда в проекте много брейкпоинтов, IDE может чуть тормозить во время дебага. Чтобы убрать лишние, открой полный список: ▪️ПКМ по любому брейкпоинту ▪️Link More ▪️Слева будет список брейкпоинтов ▪️Удаляй ненужные Обязательно попробуй. Пусть дебаг будет как по маслу 👍 👉 Java Portal

Знания по базам данных на техсобесах игнорировать нельзя. Честно, многие реально боятся DB. И когда бэкендер не может сходу н
Знания по базам данных на техсобесах игнорировать нельзя. Честно, многие реально боятся DB. И когда бэкендер не может сходу написать обычный, часто используемый запрос, его шансы пройти начинают заметно проседать. Один из ключевых концептов тут это JOIN. Я собрал понятную шпаргалку по SQL JOIN: с примерами и визуализацией, чтобы быстро уложить в голове. 👉 Java Portal

Java Collections Framework 👉 Java Portal
Java Collections Framework 👉 Java Portal

Продвинутый Map в Java (надо знать) Если ты хоть раз делал Map&gt;, этот пост для тебя. Признайся, все когда-то писали так: M
Продвинутый Map в Java (надо знать) Если ты хоть раз делал Map<String, List<String>>, этот пост для тебя. Признайся, все когда-то писали так:
Map<String, List<String>> userTags = new HashMap<>();
userTags.computeIfAbsent("user123", k -> new ArrayList<>()).add("premium");
userTags.computeIfAbsent("user123", k -> new ArrayList<>()).add("verified");
Или вообще вот так:
if (!userTags.containsKey("user123")) {
  userTags.put("user123", new ArrayList<>());
}
userTags.get("user123").add("premium");
==> В Apache Commons Collections уже давно есть готовая штука: MultiValuedMap. Что это такое MultiValuedMap<K, V> это структура данных, которая позволяет хранить несколько значений на один ключ. По сути это Map<K, Collection<V>>, но с нормальным, удобным API.
MultiValuedMap<String, String> userTags = new ArrayListValuedHashMap<>();

userTags.put("user123", "premium");
userTags.put("user123", "verified");
userTags.put("user123", "early-adopter");

// Забрать все теги сразу
Collection<String> tags = userTags.get("user123");
// [premium, verified, early-adopter]
Никаких computeIfAbsent, никаких проверок на null. Просто работает. Что умеет - Добавление без боли:
multiMap.put("key", "value1");
multiMap.put("key", "value2"); // не затирает предыдущее значение
- Массовые операции:
multiMap.putAll("user456", Arrays.asList("admin", "moderator"));
- Проверка существования конкретной пары:
multiMap.containsMapping("user123", "premium"); // true/false
- Удаление конкретного значения у ключа:
multiMap.removeMapping("user123", "premium");
- Получить вообще все значения:
Collection<String> allTags = multiMap.values();
// все значения со всех ключей
Реализации - ArrayListValuedHashMap<K, V> — значения хранятся в ArrayList, порядок сохраняется, дубликаты возможны - HashSetValuedHashMap<K, V> — значения хранятся в HashSet, без дублей 👉 Java Portal

Какой будет результат выполнения кода? → {"name":"Laptop"} → {"name":"Laptop","price":50000} → {"price":50000} → {} → Ошибка
Какой будет результат выполнения кода? → {"name":"Laptop"}{"name":"Laptop","price":50000}{"price":50000}{} → Ошибка компиляции Примечание: по умолчанию при сериализации/десериализации Jackson опирается на спецификацию JavaBeans, то есть учитываются только методы getter и setter. 👉 Java Portal

Тестируете JBoss или другие Java application servers? 🧐 JexBoss это Python-инструмент для проверки серверов JBoss на известн
Тестируете JBoss или другие Java application servers? 🧐 JexBoss это Python-инструмент для проверки серверов JBoss на известные уязвимости, включая проблемы с Java deserialization в ряде фреймворков (JSF, Seam, Jenkins, Struts2 и др.). Есть режим автопроверки сетей (скан диапазонов CIDR) для инвентаризации и поиска потенциально уязвимых узлов. https://github.com/joaomatosf/jexboss 👉 Java Portal

Java Stream API Evolution (с Java 8 до Java 21). 👉 Java Portal
Java Stream API Evolution (с Java 8 до Java 21). 👉 Java Portal

Вопрос для интервью по Spring Boot: Когда ты делаешь REST API в Spring Boot, часто используют префикс /api для всех контролле
Вопрос для интервью по Spring Boot: Когда ты делаешь REST API в Spring Boot, часто используют префикс /api для всех контроллеров. Но добавлять @RequestMapping("/api") в каждый контроллер неудобно и захламляет код. Есть ли способ проще, чтобы не писать это на каждом контроллере? Да: можно задать единый префикс через конфигурацию.
@Configuration
class WebMvcConfig implements WebMvcConfigurer {

  @Override
  public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.addPathPrefix("/api",
      aClass -> aClass.getPackage().getName()
        .startsWith("com.sivalabs.bookstore"));
  }
}
Так ты автоматически добавляешь /api ко всем контроллерам из нужного пакета, а код контроллеров остается чистым. 👉 Java Portal

Spring Boot: Используй ResponseEntity, чтобы получить тонкий контроль над HTTP-ответом. Можно явно задать status, headers и b
Spring Boot: Используй ResponseEntity<T>, чтобы получить тонкий контроль над HTTP-ответом. Можно явно задать status, headers и body. 👉 Java Portal

🔥 Пожизненная PRO-подписка на easyoffer по цене одного года. Беспрецедентная акция на PRO-тариф сайта для подготовки к собес
🔥 Пожизненная PRO-подписка на easyoffer по цене одного года. Беспрецедентная акция на PRO-тариф сайта для подготовки к собеседованию на программиста, тестировщика, проектного менеджера и другие IT-профессии. ⚙️ Доступные функции сейчас: 1. База вопросов из реальных технических собеседований с вероятностью встречи и примерами ответов. 2. База задач с этапа live-coding. 3. База 1100+ реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.) на позиции Junior/Middle/Senior. 4. База 400+ тестовых заданий от компаний. 5. Аналитика ТОП-требований из вакансий для лучшего написания резюме по ключевым словам. 6. Тренажеры для подготовки к собеседованию. В том числе тренажер «Реальное собеседование» со сценарием вопросов под конкретную компанию. ⌛️ Функции, которые появятся в ближайшие полгода: 1. Агрегатор вакансий из Telegram, сайтов компаний и джоббордов. 2. Улучшение и оптимизация резюме, чтобы проходить ATS-системы. 3. Генерация уникального резюме и сопроводительного письма под вакансию. Акция до 20 февраля (включительно) на PRO-тариф. Покупаешь сейчас один раз — пользуешься всю жизнь без лимита, включая все будущие функции. 👉 Смотри подробности тарифа и покупай на easyoffer