Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для 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 115 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 397-o'rinni va Rossiya mintaqasida 54 492-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 115 obunachiga ega bo‘ldi.
08 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -138 ga, so‘nggi 24 soatda esa -5 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 11.21% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.34% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 360 marta ko‘riladi; birinchi sutkada odatda 769 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 09 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.
Optional<T> или другой задокументированный способ, чтобы показать, что результат может отсутствовать.
● Если это действительно ошибка — выбрасывайте чётко определённое исключение.
👉 Java PortalGET /users
POST /users
PUT /users/{id}
DELETE /users/{id}
👍 Просто и предсказуемо
👎 Начинает хромать при действиях вне CRUD
2) Эндпоинты-действия
POST /users/{id}/deactivate
POST /orders/{id}/cancel
👍 Ясное указание на сайд-эффекты
👎 Нарушает REST-идеи (глаголы в URL)
3) Вложенные ресурсы
GET /users/{id}/orders
POST /users/{id}/addresses
👍 Удобно моделирует связи между сущностями
👎 Может вырасти в избыточную иерархию, тяжело поддерживать
4) Плоская структура + фильтры
GET /orders?userId=123 GET /products?category=books&page=2👍 Гибкие запросы 👎 Требует строгой валидации query-параметров 5) Версионирование API
GET /v1/users Accept: application/vnd.myapp.v2+json👍 Безопасное развитие API 👎 Увеличивает накладные расходы на поддержку 👉 Java Portal
if (obj != null) перед каждым вызовом метода.
❯ Используй, когда возврат null приводит к захламлению условными конструкциями.
2. Parameter Object Pattern (Объект параметров)
❯ Объединяет логически связанные параметры в один объект.
❯ Такой объект удобно прокидывать через разные уровни приложения, обеспечивая согласованность.
❯ Используй, когда у метода слишком много связанных аргументов.
3. Fluent Interface / Method Chaining (Флюент-интерфейс / Цепочка вызовов)
❯ Позволяет вызывать методы цепочкой, улучшая читаемость и выражая намерение кода (особенно в билдерах и конфигурациях).
❯ Используй в билдерах или для декларативной настройки.
4. Execute Around Method Pattern (Шаблон обёртки вокруг действия)
❯ Инкапсулирует логику подготовки и завершения вокруг основного действия.
❯ Гарантирует корректное освобождение ресурсов.
❯ Используй для управления ресурсами (файлы, БД и т.п.).
5. Initialization-on-Demand Holder (ленивый Singleton без synchronized)
❯ Безопасный, потокобезопасный и производительный способ ленивой инициализации Singleton'а без явной синхронизации.
❯ Используй, если нужен быстрый и потокобезопасный синглтон.
👉 Java PortalMap.ofEntries() для создания неизменяемых мап с несколькими парами
➣ Почему: короче, безопаснее, неизменяемо — снижает риск случайной мутации.
✓ Используйте Optional.map().orElse() вместо ручной обработки null
➣ Почему: устраняет проверки на null, читается лучше, легко комбинируется с другой логикой.
✓ Используйте Enum.valueOf() + name() для безопасного преобразования enum
➣ Почему: чище и удобнее для сериализации/десериализации enum'ов в API, БД или файлах.
✓ Используйте Comparator.comparing().thenComparing() вместо кастомной логики
➣ Почему: читаемо, понятно, без ошибок в условных сравнениях.
✓ Используйте Optional.ifPresentOrElse() вместо if-else с isPresent()
➣ Почему: выразительнее и чище — больше никаких ручных get() и нагромождений if-else
👉 Java Portal{
"event_type": "like",
"actor": "UserA",
"receiver": "UserB",
"object": "Post123"
}
Шаг 2: Добавление в очередь уведомлений
➣ API валидирует данные и помещает сообщение в очередь уведомлений (Kafka/RabbitMQ)
Шаг 3: Обработка воркером
✓ Воркер извлекает сообщение из очереди:
➣ Получает полную информацию о событии
➣ Обращается к сервису предпочтений:
- Подписан ли UserB на уведомления типа "like"?
- Хочет email или только in-app?
✓ Создает payload уведомления, например:
✓ "UserA лайкнул ваш пост 'How to scale systems'"
Шаг 4: Рассылка по каналам
✓ На основе предпочтений воркер запускает соответствующие каналы:
➣ In-App Writer → сохраняет в БД (для отображения иконки колокольчика)
➣ Push-сервис → отправляет push (мобильный/веб) через FCM/APNs
➣ Email-сервис → ставит email в очередь (через SES/SendGrid)
Шаг 5: Отправка и повторные попытки
✓ Сервисы каналов:
➣ Декуплированы для изоляции отказов
➣ Повторяют попытки при сбоях (3–5 раз с экспоненциальной задержкой)
➣ Логируют статус (отправлено, ошибка, пропущено)
Шаг 6: Отображение in-app уведомлений
✓ UI вызывает /notifications?user=UserB
✓ Возвращаются N последних уведомлений из БД:
[
{ "text": "UserA лайкнул ваш пост", "read": false, ... }
]
Функции надежности
✓ Гарантированная доставка хотя бы один раз с идемпотентной записью
✓ Повторные попытки с экспоненциальной задержкой
✓ DLQ (Dead Letter Queue) для сообщений с ошибками
✓ Метрики: успех/неудача на сообщение
✓ Алерты при переполнении очереди или всплесках ошибок
👉 Java Portalintern() класса String возвращает каноническое представление строки.
Используя intern(), можно гарантировать, что одна и та же строка будет представлена в памяти в виде единственного объекта, даже если она создаётся многократно.
String s1 = "hello";
String s2 = "hello".intern();
5. Используйте паттерн Flyweight для повторяющихся неизменяемых данных
– Экономит память за счёт разделения общих экземпляров (используется, например, в Integer.valueOf(), Boolean.TRUE и т.п.).
👉 Java Portalgit merge <feature> — укажи имя исходной ветки
Результаты:
🔸Создаётся новый merge-коммит в целевой ветке с ссылками на родительские коммиты
🔸История целевой ветки становится разветвлённой, отражая все слияния
🔸Это более безопасный вариант для командной работы — история изменений сохраняется
✔️ Git Rebase
Rebase переписывает историю ветки (обычно feature-ветки), как будто коммиты были сделаны поверх другой ветки (например, main).
Получается более линейная история без merge-коммитов.
Шаги:
1. Переключись на ветку, которую хочешь ребейзнуть (например, feature)
2. Выполни git rebase <main>
Результаты:
🔸Коммиты из feature будут повторно применены на вершину main, создаются новые коммиты с теми же изменениями
🔸Целевая ветка (main) при этом не изменяется
🔸История feature-ветки становится линейной, но её история будет переписана
Примечания:
После успешного rebase, финальное merge в main часто выполняется как fast-forward, т.к. история выглядит непрерывной
Rebase изменяет ветку, на которой ты находишься, а не целевую ветку
Итог:
merge сохраняет историю как есть → хорошо для командной работы
rebase делает историю аккуратной → хорошо для чистоты, но требует осторожности
👉 Java Portalsealed и ключевое слово permits, чтобы явно указать разрешённые подклассы или реализации.
🔹Все разрешённые подтипы должны находиться в одном модуле или пакете и обязаны быть помечены как final, sealed или non-sealed
Зачем использовать sealed-классы и интерфейсы?
👉 Более строгая инкапсуляция и контроль над публичным API
👉 Безопасный и предсказуемый код (отлично подходит для pattern matching в switch)
👉 Защита от нежелательного наследования или реализации
👉 Java Portal/api
• Для каждого пользователя создаётся бакет с лимитом 5 запросов в минуту. Если бакет позволяет — запрос проходит. Если нет — возвращается 429 статус.
• Заглушка для HttpServletResponse, нужна чтобы код можно было запускать без настоящего HTTP-сервера.
👉 Java PortalМеня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Помогаю устроиться на хорошие позиции в Bigtech и сопровождаю на испытательном сроке.В своем канале: 👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях 👉даю примеры по прохождению собеседований 👉разбираю резюме и докручиваю резюме подписчиков 👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать 🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки. Подписывайся и получай максимум пользы, а нас уже больше 2000 🤓: https://t.me/+p0ldgDr3Wp5iMWY6 Реклама, ИП Галактионов Тихон Витальевич, инн: 771618975809, erid: 2W5zFK1XXg4
setDaemon(true) до запуска потока
🔹Запускаете поток через start()
Как только основной (пользовательский) поток завершится — JVM выключится, даже если daemon-поток всё ещё активен.
Используйте daemon-потоки для фоновых сервисов, которые не должны блокировать завершение приложения. Всегда вызывайте setDaemon(true) до запуска
👉 Java Portalenum Status { PENDING, APPROVED, REJECTED } → Базовый Enum
• Это называется enum (сокращение от enumeration).
• Используется для задания фиксированного набора констант (например, состояния заказа, роли пользователя).
2. Status.valueOf("APPROVED") → Преобразование строки в Enum
• Бросает исключение, если строка некорректна.
• Используется при маппинге из БД, пользовательского ввода или JSON (например, парсинг статуса из запроса).
3. Status.APPROVED.name() → Получить имя как строку
• Возвращает имя enum-константы в точности как оно определено.
• Используется при логировании, сериализации и т. д. (например, отображение enum как строки в ответе).
4. Status.APPROVED.ordinal() → Получить индекс Enum
• Возвращает позицию (начиная с 0).
• Используется только если порядок важен (обычно избегается ради стабильности) — например, для ранжирования уровней.
5. for (Status s : Status.values()) → Перебор значений Enum
• Используется для итерации по всем константам.
• Удобно для UI-дропдаунов, фильтров, пакетной обработки.
6. enum Day { MON, TUE; boolean isWeekend() { return false; } } → Enum с методами
• Добавляет поведение к enum.
• Используется, если для каждой константы нужна логика (например, isHoliday() для Day).
7. enum Type { BASIC("B"), PREMIUM("P"); private String code; ... } → Enum с полями
• Используется для хранения дополнительных данных с каждой константой (например, код из БД, описание).
8. Enum с абстрактным методом
enum Mode {
ON { void act() { /* что-то делаем */ } },
OFF { void act() { /* ничего не делаем */ } };
abstract void act();
}
• Называется поведенческим enum'ом.
• Используется для логики, подобной конечному автомату (например, стратегии на константу).
9. EnumSet.of(Status.APPROVED) → EnumSet
• Высокопроизводительное множество для enum.
• Используйте вместо HashSet<Enum> (например, для фильтрации флагов или ролей).
10. EnumMap<Status, String> → EnumMap
• Эффективная key-value структура, использующая enum в качестве ключа.
• Быстрее и легче, чем HashMap<Enum, X> (например, для меток или конфигураций по статусу).
11. switch(status) → Enum в операторе switch
• Работает с enum'ами нативно.
• Используется для route-логики (например, обработки каждого статуса по-своему).
👉 Java Portal
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
