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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

📈 Telegram kanali Java Portal | Программирование analitikasi

Java Portal | Программирование (@java_iibrary) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 132 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 377-o'rinni va Rossiya mintaqasida 54 419-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 12 132 obunachiga ega bo‘ldi.

05 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -142 ga, so‘nggi 24 soatda esa -1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 11.75% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.20% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 426 marta ko‘riladi; birinchi sutkada odatda 753 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent boot, string, void, архитектура, resttemplate kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Yuqori yangilanish chastotasi (oxirgi ma’lumot 07 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

12 132
Obunachilar
-124 soatlar
-407 kunlar
-14230 kunlar
Postlar arxiv
На 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