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

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

前往频道在 Telegram

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

显示更多

📈 Telegram 频道 Java Portal | Программирование 的分析概览

频道 Java Portal | Программирование (@java_iibrary) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 12 130 名订阅者,在 技术与应用 类别中位列第 10 402,并在 俄罗斯 地区排名第 54 525

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 12 130 名订阅者。

根据 07 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -138,过去 24 小时变化为 2,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 11.37%。内容发布后 24 小时内通常能获得 6.26% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 1 379 次浏览,首日通常累积 760 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 4
  • 主题关注点: 内容集中在 boot, string, void, архитектура, resttemplate 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

凭借高频更新(最新数据采集于 08 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

12 130
订阅者
+224 小时
-287
-13830
帖子存档
Java tip: для точных расчетов времени используй Duration и Instant. ✅Instant представляет конкретный момент времени в UTC с т
Java tip: для точных расчетов времени используй Duration и Instant. ✅Instant представляет конкретный момент времени в UTC с точностью до наносекунд. Получить можно так: Instant.now(). ✅Duration показывает временной интервал между двумя Instant (в секундах, миллисекундах, наносекундах). Вот пример:
Instant start = Instant.now();
...
Instant end = Instant.now();

Duration elapsed = Duration.between(start, end);
👉 Java Portal

HTTP/2 через TCP против HTTP/3 через QUIC ▪️HTTP/2 Мультиплексирование на уровне HTTP, сериализация на уровне TCP Общий поряд
HTTP/2 через TCP против HTTP/3 через QUIC ▪️HTTP/2
Мультиплексирование на уровне HTTP, сериализация на уровне TCP Общий порядок доставки и контроль перегрузки (TCP) Одна TCP-сессия HTTP/2 фреймы (мультиплексированные) * HEADERS (поток 1) * HEADERS (поток 3) * HEADERS (поток 2) * DATA (поток 1) * DATA (поток 3) * DATA (поток 2) TCP-пакеты: P1, P2, P3, P4, P5 TCP-пакеты смешивают данные из разных потоков HoL-блокировка в TCP (Head-of-Line): потеря одного пакета блокирует все потоки Клиент -> Сервер
▪️HTTP/3
Мультиплексирование на транспортном уровне (QUIC) * Независимые потоки * Независимый порядок доставки и восстановление QUIC-соединение (поверх UDP) QUIC Stream 1: QUIC Packet, QUIC Packet, QUIC Packet QUIC Stream 2: QUIC Packet, QUIC Packet QUIC Stream 3: QUIC Packet, QUIC Packet Нет HoL-блокировки: потеря пакета влияет только на один поток Клиент -> Сервер
👉 Java Portal

Spring Boot: не используй FetchType.EAGER, если реально нет необходимости. ✗ Помечая связь как EAGER, ты говоришь ORM подгруж
Spring Boot: не используй FetchType.EAGER, если реально нет необходимости. ✗ Помечая связь как EAGER, ты говоришь ORM подгружать её каждый раз вместе с сущностью, даже если ты вообще не обращаешься к этой связи (не вызываешь геттер/метод отношения). ✗ В этом примере каждый раз, когда ты загружаешь Order, ORM автоматически подтянет и Customer:
@Entity
class Order {
    @ManyToOne(fetch = FetchType.EAGER)
    private Customer customer;
}
✗ И ещё: если не делать явный fetch, получаешь классический эффект N+1: 1. Один запрос на все Orders 2. По одному запросу на каждый Order для Customers 👉 Java Portal

Совет для IntelliJ: Alt+Enter можно использовать, чтобы быстро чинить ошибки и предупреждения, но список вариантов там довольно ограничен. Вместо этого используй автодополнение команд (..), чтобы выполнять нужные действия прямо в редакторе. 👉 Java Portal

Rate limiting в системном дизайне: один пользователь или сервис не должен слишком часто дергать API и завалить его. В Spring
Rate limiting в системном дизайне: один пользователь или сервис не должен слишком часто дергать API и завалить его. В Spring Boot для этого можно использовать библиотеку Bucket4j и сделать Rate Limit Filter. Она умеет: ▪️защищать от примитивных DDoS-атак ▪️отсеивать кривых клиентов, которые шлют запросы в цикле ▪️ограничивать число запросов за единицу времени ▪️делать доступ чуть более честным: понемногу всем, а не все одному Очень просто, быстро и потокобезопасно. ▪️На каждый запрос проверяет, есть ли в кэше ключ клиента (например IP). Если нет, создает для него bucket с токенами. ▪️Каждый раз пытается забрать из bucket один токен, то есть право выполнить запрос. ▪️Если токен в bucket есть, проходишь. Если токены закончились, получаешь HTTP 429 и ждешь пополнения. Заметки: -> request.getRemoteAddr() ищет корректный способ получить IP клиента, возможно через request.getHeader("X-Forwarded-For") -> new ConcurrentHashMap<>() сам по себе не чистится, продумай, как долго хранить данные и как их вычищать, если запросов много -> лимит задается одинаковый для всех эндпоинтов. Часто у разных API разная нагрузка, поэтому логично ставить разные лимиты (по URL, HTTP-методу или типу операции) -> refillGreedy() это всего лишь один из вариантов пополнения токенов. Есть и другие стратегии (плавное пополнение, фиксированные интервалы), которые дают более точный контроль нагрузки -> вынеси все настройки в application.yaml, чтобы менять лимиты без правок кода Простая реализация, чтобы понять, как работает библиотека, приложена 👉 Java Portal

Как снизить хвостовые задержки в Java с помощью ZGC: читать Он заметно снижает хвостовые задержки (p999/p9999) по сравнению с
Как снизить хвостовые задержки в Java с помощью ZGC: читать Он заметно снижает хвостовые задержки (p999/p9999) по сравнению с G1 за счет микропауз, но платит за это повышенным CPU и при нехватке процессора может упираться в allocation stalls, поэтому включать его стоит только после замеров на своей нагрузке. 👉 Java Portal

👩‍💻 Всем программистам посвящается! Вот 14 авторских обучающих IT каналов по самым востребованным областям программирования
👩‍💻 Всем программистам посвящается! Вот 14 авторских обучающих IT каналов по самым востребованным областям программирования: Выбирай своё направление: 👩‍💻 Java — t.me/java_ready 👩‍💻 IT Новости — t.me/it_ready 👩‍💻 Python — t.me/python_ready 🤔 InfoSec & Хакинг — t.me/hacking_ready 🖥 SQL & Базы Данных — t.me/sql_ready 🤖 AI & MLt.me/neuro_ready 👩‍💻 Frontend — t.me/frontend_ready 👩‍💻 C/C++ — https://t.me/cpp_ready 👩‍💻 C# & Unity — t.me/csharp_ready 👩‍💻 Linux — t.me/linux_ready 📖 IT Книги — t.me/books_ready 📱 JavaScript — t.me/javascript_ready 🖼️ DevOpst.me/devops_ready 🖥 Design — t.me/design_ready 📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!

Spring Boot: держи контроллеры тонкими, логику выноси в сервисы. Главная задача контроллера, по сути, только разрулить HTTP-ч
Spring Boot: держи контроллеры тонкими, логику выноси в сервисы. Главная задача контроллера, по сути, только разрулить HTTP-часть. Плохой пример: бизнес-правила запихнуты в контроллер, типа проверки остатков и лимита заказа:
@RestController
@RequestMapping("/api/orders")
public class OrderController {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private ProductRepository productRepository;

    @PostMapping
    public ResponseEntity<?> createOrder(@RequestBody CreateOrderRequest request) {

        // Validation logic
        if (request.getProductId() == null || request.getQuantity() <= 0) {
            return ResponseEntity
                .badRequest()
                .body("Invalid request");
        }

        // Business logic
        Product product = productRepository.findById(request.getProductId())
            .orElse(null);

        if (product == null) {
            return ResponseEntity
                .status(HttpStatus.NOT_FOUND)
                .body("Product not found");
        }

        if (product.getStock() < request.getQuantity()) {
            return ResponseEntity
                .badRequest()
                .body("Not enough stock");
        }

        BigDecimal totalPrice = product.getPrice()
            .multiply(BigDecimal.valueOf(request.getQuantity()));

        if (totalPrice.compareTo(new BigDecimal("10000")) > 0) {
            return ResponseEntity
                .badRequest()
                .body("Order limit exceeded");
        }

        // Persistence + transaction logic
        product.setStock(product.getStock() - request.getQuantity());
        productRepository.save(product);

        Order order = new Order();
        order.setProduct(product);
        order.setQuantity(request.getQuantity());
        order.setTotalPrice(totalPrice);
        order.setCreatedAt(LocalDateTime.now());

        orderRepository.save(order);

        return ResponseEntity
            .status(HttpStatus.CREATED)
            .body(order.getId());
    }
}
👉 Java Portal

Защищаю своё Spring Boot Java-приложение, которое использует 64 ГБ оперативной памяти, чтобы вернуть { "status": "ok" } 👉 Java Portal

Java.hasChosen(you) 🥶😟 Почему Java всё ещё №1 в автотестах? Стас Васенков, основатель школы автотестировщиков @qa_guru, рас
Java.hasChosen(you) 
🥶😟 Почему Java всё ещё №1 в автотестах? Стас Васенков, основатель школы автотестировщиков @qa_guru, расскажет про свой мэтч с Java. Чем его зацепил этот язык и куда привёл. И куда Java может привести вас. Приходите на открытый эфир ➡ 27 января ➡ 13:00 (МСК) Что будет: — неочевидные карьерные сценарии — внутрянка: какой стек ждут, когда ищут автоматизатора — кому Java уже не поможет 🐹 Не откладываем в TODO ➡ webinar.join();

Project Panama: как Java научилась говорить на C! (Часть 1) Как безопасно и эффективно вызывать C-функции из Java? Благодаря Project Panama — новому API из OpenJDK — это стало возможно без использования JNI. 👉 Java Portal

Spring Boot: лучше не использовать wildcard-исключения для транзитивных зависимостей в POM-файлах, потому что они могут прята
Spring Boot: лучше не использовать wildcard-исключения для транзитивных зависимостей в POM-файлах, потому что они могут прятать проблемы. Wildcard-исключения просто убирают симптом и маскируют реальную причину: несовпадение версий.
<!-- Так лучше НЕ делать: wildcard-исключение (фактически “вырубаем всё”) -->
<exclusions>
  <exclusion>
    <!-- * = любой groupId -->
    <groupId>*</groupId>
    <!-- * = любой artifactId -->
    <artifactId>*</artifactId>
  </exclusion>
</exclusions>

<!-- Лучше: исключать конкретную транзитивную зависимость явно -->
<exclusion>
  <!-- точный groupId зависимости, которую исключаем -->
  <groupId>org.apache.tomcat.embed</groupId>
  <!-- точный artifactId зависимости, которую исключаем -->
  <artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
👉 Java Portal

Batch Processing vs Stream Processing: в чем разница? Batch processing (пакетная обработка) ▪️Обрабатывает данные большими порциями (батчами) по расписанию. ▪️Отлично подходит для исторических данных, хранилищ (DWH) и аналитики. ▪️Примеры: расчёт зарплаты, периодические отчёты, ETL/ELT джобы. Плюсы: эффективно на больших объёмах, дешевле по ресурсам, хорошо оптимизируется под throughput Минусы: высокая задержка (latency), не подходит для задач, где нужно “прямо сейчас” ⚙️Инструменты: Apache Hadoop, Apache Spark, AWS Glue Stream processing (потоковая обработка) ▪️Обрабатывает данные непрерывно, по мере поступления. ▪️Используется для real-time аналитики, антифрода, мониторинга “вживую”. ▪️Примеры: мониторинг биржи, рекомендации в реальном времени, IoT-датчики. Плюсы: низкая задержка, инсайты в реальном времени, реактивные системы Минусы: сложнее в реализации и поддержке, требует высокой доступности и масштабируемости ⚙️Инструменты: Apache Kafka, Apache Flink, Apache Storm, Spark Streaming Во многих современных системах делают гибрид: batch для хранения и аналитики, stream для реакций и real-time сигналов. 👉 Java Portal

Java-совет: начиная с Java 14 можно использовать switch-выражения, чтобы писать многоветвистую логику короче и чище. // Old w
Java-совет: начиная с Java 14 можно использовать switch-выражения, чтобы писать многоветвистую логику короче и чище.
// Old way:
String season;
switch (month) {
    case 12:
    case 1:
    case 2:
        season = "Winter";
        break;

    case 3:
    case 4:
    case 5:
        season = "Spring";
        break;

    default:
        season = "Invalid";
}
// New switch expression:
String season = switch (month) {
    case 12, 1, 2 -> "Winter";
    case 3, 4, 5 -> "Spring";
    default -> "Invalid";
};
👉 Java Portal

Если ты изучаешь Java или хочешь прокачать навыки, обрати внимание на JBook — это интерактивная книга по Java, доступная прямо на GitHub. Что внутри: 🔸Подробное объяснение основ языка Java; 🔸Примеры кода с пояснениями; 🔸Упражнения для закрепления знаний; 🔸Поддержка Jupyter Notebook + Java (IJava kernel) — можно запускать код прямо в браузере GitHub: https://github.com/qcha/JBook 👉 Java Portal

На Stepik вышел курс по Linux Этот курс закрывает всю обязательную Linux-базу для работы в IT: от установки Linux и работы с
+4
На Stepik вышел курс по Linux Этот курс закрывает всю обязательную Linux-базу для работы в IT: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой) Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами После прохождения вы получите сертификат, который можно добавить в резюме. Есть бесплатные демо-уроки для ознакомления. В ближайшие 48ч курс доступен со скидкой 25% по промокоду «POST25»: открыть курс на Stepik

Совет по Java: если нужна максимально хорошая производительность в общем случае, бери HashMap как реализацию Map. ✅HashMap внутри реализован как хеш-таблица, и в среднем put(), get() и remove() работают за O(1). 🪲Он не потокобезопасный (если нужна thread-safety, используй ConcurrentHashMap). Пример:
Map<String, Integer> ages = new HashMap<>();

// Добавляем данные
ages.put("Michael", 31);
ages.put("Lisa", 25);
ages.put("Alice", 42);

// Поиск
System.out.println("Возраст Lisa: " + ages.get("Lisa"));

// Удаление
ages.remove("Alice");

// Итерация
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}
👉 Java Portal

10 золотых правил чистого кода: 1. Избегай магических чисел и строк 2. Используй осмысленные, говорящие имена 3. Предпочитай
10 золотых правил чистого кода: 1. Избегай магических чисел и строк 2. Используй осмысленные, говорящие имена 3. Предпочитай ранние return вместо глубокой вложенности 4. Избегай длинных списков параметров 5. Делай функции маленькими и сфокусированными 6. Соблюдай DRY (Don’t Repeat Yourself) — не дублируй код 7. Применяй принцип KISS (Keep It Simple, Stupid) — делай проще 8. Отдавай предпочтение композиции, а не наследованию 9. Комментируй только там, где это действительно необходимо 10. Пиши хорошие сообщения к коммитам Какие еще правила чистого кода ты бы добавил в этот список? 👉 Java Portal

Java tip : старайся не шарить данные между потоками. ✅Используй immutable-объекты ✅Или пусть потоки общаются сообщениями, не
Java tip : старайся не шарить данные между потоками. ✅Используй immutable-объекты ✅Или пусть потоки общаются сообщениями, не лезя напрямую в общий state и не мутируя его
// With immutable objects:

record Book(String title, int price) {} //Immutable

public class BookJob implements Runnable {
    private final Book book;
    ....//constructor

    @Override
    public void run() {
        System.out.println(book.title() + " " + book.price());
    }
}

// Exchanging messages:
...
new Thread(() -> {
    try {
        queue.put("mess1");
    } catch (InterruptedException e) {}
}).start();
...
new Thread(() -> {
    try {
        String mess = queue.take();
    } catch (InterruptedException e) {}
}).start();
👉 Java Portal

Сommand completion (..) расширяет обычный code completion. Помимо автодополнения API и postfix completion, автодополнение кода теперь включает и команды. Чтобы отфильтровать список только до команд, используйте .. Список поддерживает поиск, чтобы быстрее находить нужное. 👉 Java Portal