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

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

الذهاب إلى القناة على Telegram

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

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Java Portal | Программирование

تُعد قناة Java Portal | Программирование (@java_iibrary) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 12 132 مشتركاً، محتلاً المرتبة 10 377 في فئة التكنولوجيات والتطبيقات والمرتبة 54 419 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 12 132 مشتركاً.

بحسب آخر البيانات بتاريخ 05 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -142، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 11.75‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 6.20‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 1 426 مشاهدة. وخلال اليوم الأول يجمع عادةً 753 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 4.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل boot, string, void, архитектура, resttemplate.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 07 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

12 132
المشتركون
-124 ساعات
-407 أيام
-14230 أيام
أرشيف المشاركات
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