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

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

رفتن به کانال در Telegram

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

نمایش بیشتر

📈 تحلیل کانال تلگرام Java Portal | Программирование

کانال Java Portal | Программирование (@java_iibrary) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 12 115 مشترک است و جایگاه 10 397 را در دسته فناوری و برنامه‌ها و رتبه 54 492 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 12 115 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 08 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -138 و در ۲۴ ساعت گذشته برابر -5 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 11.21% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 6.34% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 1 360 بازدید دریافت می‌کند. در اولین روز معمولاً 769 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 4 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند boot, string, void, архитектура, resttemplate تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 09 ژوئن, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

12 115
مشترکین
-524 ساعت
-307 روز
-13830 روز
آرشیو پست ها
Если вам трудно дается java, это проблема навыков. 👉 Java Portal
Если вам трудно дается java, это проблема навыков. 👉 Java Portal

Аннотации в конструкторах Java . декларации и типы В языке программирования Java можно аннотировать конструкторы. Например, это часто используется в библиотеках для внедрения зависимостей :
@Inject
MyService(FooProcessor processor, BarLogger logger) {
  this.processor = processor;
  this.logger = logger;
}
В этом примере MyService — это конструктор некоего сервиса, и он помечен аннотацией @Inject. Эта аннотация сообщает DI-библиотеке, что нужно использовать именно этот конструктор для создания экземпляра сервиса. 🔸Аннотации деклараций и конструкторы В этом посте нас не интересуют сами DI-библиотеки — важно лишь то, что аннотацию @Inject можно ставить на уровне декларации конструктора. Если взглянуть на определение аннотации @Inject, то оно будет примерно таким:
@Target({METHOD, CONSTRUCTOR, FIELD})
@Retention(RUNTIME)
public @interface Inject {}
Здесь в @Target указано CONSTRUCTOR, что означает, что аннотацию можно применять к конструкторам. Так как @Inject применяется к декларациям, её называют аннотацией декларации 🔸Аннотации типов и конструкторы До недавнего времени я даже не знал, что конструкторы в Java можно аннотировать также и аннотациями типов. Я много раз просматривал конструкторы, но всё равно упускал, что тип конструктора тоже может быть аннотирован. Пример — создадим следующую аннотацию:
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface T {}
Это аннотация @T, которая применяется только к типам (TYPE_USE). Также указана политика RUNTIME, чтобы можно было получить доступ к аннотации во время выполнения. Теперь применим её к конструктору:
static class Subject {
  public @T Subject() {}
}
Код компилируется без ошибок. Обрати внимание: класс Subjectвложенный (static class), не inner, поэтому используется модификатор static. 🔸Извлечение аннотации во время выполнения Для полноты картины — пример, как извлечь аннотацию типа с конструктора во время выполнения:
void main() throws NoSuchMethodException {
  final Class<?> type = Subject.class;

  final Constructor<?> constructor = type.getDeclaredConstructor();

  final AnnotatedType annotatedType = constructor.getAnnotatedReturnType();

  final Annotation[] typeAnnotations = annotatedType.getDeclaredAnnotations();

  print("Type annotations are:", typeAnnotations);
}

private void print(String msg, Annotation[] annotations) {
  System.out.println(msg);
  for (Annotation annotation : annotations) {
    System.out.println(annotation);
  }
}
Пошагово: 1. Получаем объект Constructor для конструктора класса Subject 2. Через getAnnotatedReturnType() получаем AnnotatedType, представляющий тип возвращаемого значения конструктора 3. Из AnnotatedType извлекаем все аннотации типа 4. Печатаем аннотации Пример вывода:
Type annotations are:
@TypeAnnotations2.T()
То есть конструктор действительно аннотирован аннотацией типа @T. В языке программирования Java тело конструктора не должно содержать операторов return с возвращаемым значением. Однако, подобно методу, возвращающему, скажем, объект Foo, конструктор тоже возвращает значение. Результатом вызова конструктора (если он завершается без исключений) является новый экземпляр объекта, тип которого — это тип класса, в котором объявлен данный конструктор. Таким образом, в объявлении конструктора присутствует использование типа — типа создаваемого объекта. А в Java можно аннотировать любое использование типа. Такие аннотации называются аннотациями типа Исходный код, использованный в этом посте, можно найти в этом [Gist] 👉 Java Portal

Как обработать 1 миллион API-запросов в минуту 1. Балансировка нагрузки Проблема: Один сервер не выдерживает 1M запросов/мин: перегрузка CPU и памяти, начинается дроп запросов. Решение: - Использовать балансировщик нагрузки (NGINX, HAProxy, AWS ELB) для распределения трафика между множеством серверов - Добавить проверки состояния , чтобы не направлять трафик на нерабочие инстансы - Настроить авто-масштабирование, чтобы запускать новые инстансы при всплеске трафика 2. Кеширование Проблема: Каждый запрос бьет по базе → база становится узким местом (исчерпание соединений, медленные запросы). Решение: Добавить уровни кеширования: - CDN для статических ресурсов (изображения, CSS, JS) - Redis/Memcached для повторяющихся запросов - Настроить правила инвалидации кеша, чтобы данные оставались актуальными > Вместо 1M запросов к базе, возможно, только 100K дойдут после кеширования. 3. Ограничение частоты запросов Проблема: Всплеск активности (например, от ботов или злоумышленников) перегружает инфраструктуру → хорошие пользователи получают 503. Решение: - Алгоритмы Token Bucket / Leaky Bucket: позволяют короткие всплески, но сохраняют стабильный поток - Разные лимиты для аутентифицированных и анонимных пользователей - Возвращать 429 Too Many Requests — корректно и информативно > Защищает инфраструктуру: один плохой пользователь не портит всё остальным. 4. Асинхронная обработка Проблема: Некоторые запросы тяжелые (обработка файлов, аналитика, отправка писем). Если делать их синхронно — ответ замедляется. Решение: - Выносить тяжёлые задачи в очередь (Kafka, RabbitMQ, SQS) - Отвечать сразу с кодом 202 Accepted, обработку запускать в фоне - Воркеры обрабатывают очередь и выполняют задачи > Пользователи получают быстрый ответ, тяжёлая работа происходит «за кулисами». 5. Мониторинг и обратное давление Проблема: Даже при использовании балансировки, кешей и очередей, резкие всплески могут вызвать каскадные сбои. Решение: - Мониторить глубину очередей, задержки при доступе к БД, hit rate кеша - Применять backpressure: замедлять запросы или отбрасывать нагрузку при приближении к лимитам - Настроить алерты: Prometheus/Grafana, Datadog, New Relic 👉 Java Portal

Привет. Вот тебе самые топовые каналы по IT! ⚙️ Free Znanija (IT) — Самая огромная коллекция платных курсов, которые можно скачать бесплатно; 👩‍💻 IT Books — Самая огромная библиотека книг; 💻 Hacking & InfoSec Base — Крутой блог белого хакера; 🛡 CyberGuard — Всё про ИБ; 🤔 ИБ Вакансии— Всё, чтобы найти работу в ИБ; 👩‍💻 linux administration — Всё про Линукс; 👩‍💻 Программистика — Python, python и ещё раз python; 👩‍💻 GameDev Base — Всё про GameDev; 🖥 Coding Base — Мемы, полезные репозитории и инструменты, а так же софт: 😆 //code — Самые топовые мемы по IT: А так же крутой блог админа: Rahol Jey | тг вайб

Карточки про синхронизаторы Java Синхронизаторы позволяют управлять потоками более гибко, мощно и безопасно, чем низкоуровнев
+9
Карточки про синхронизаторы Java Синхронизаторы позволяют управлять потоками более гибко, мощно и безопасно, чем низкоуровневые и примитивные synchronized, wait, notify и join Примеры использования: 🔸Ограничить количество одновременных действий 🔸Дождаться завершения нескольких потоков 🔸Запустить все потоки одновременно 🔸Обменяться данными между потоками 👉 Java Portal

Алгоритмы Bloom Filter - быстрый поиск при минимальном потреблении памяти 🔸Во многих системах поиска, хранения и обеспечения
Алгоритмы Bloom Filter - быстрый поиск при минимальном потреблении памяти 🔸Во многих системах поиска, хранения и обеспечения безопасности данных проверка принадлежности элемента к большому множеству это серьёзная задача. Алгоритм Bloom Filter предлагает эффективное решение этой проблемы: он использует компактные структуры данных и позволяет быстро проверять наличие элемента без необходимости хранить всё множество целиком. 🔸В основе Bloom Filter - битовый массив и несколько хеш-функций. При добавлении нового значения хеш-функции определяют позиции в массиве и устанавливают соответствующие биты в 1. При проверке, если все указанные позиции уже установлены в 1, существует высокая вероятность того, что элемент присутствует во множестве. Этот подход применяется в поисковых системах, кэшах вроде Redis, системах фильтрации спама и сетевых фильтрах. 🔸Если вам нужен эффективный способ для быстрой проверки принадлежности к большим наборам данных, Bloom Filter это лёгкое и высокопроизводительное решение. 👉 Java Portal

Инструменты для проектирования архитектуры ПО Лучшие бесплатные и платные инструменты для моделирования и создания архитектур
Инструменты для проектирования архитектуры ПО Лучшие бесплатные и платные инструменты для моделирования и создания архитектурных диаграмм.
➖ Инструменты моделирования: • Enterprise Architect • Archi • Structurizr • Carbide • StarUML • Aplas • GenMyModel • Gaphor • Archipeg • Astah • Mood ➖ Code-based инструменты • PlantUML • Structurizr • Ilograph • Graphviz • Mermaid • Diagrams ➖ Автоматизированные инструменты: • Brainboard • Hyperglance • Hava • Archium ➖ Инструменты для создания диаграмм: • Visio • Lucidchart • [Draw.io](http://draw.io) • Cloudcraft • isoflow • Visual Paradigm • Cacoo • Cloudviz • Excalidraw • CloudSkew • Figma • Whimsical • Miro • Mural • Sketch
Полный список: softwarearchitecture.tools 👉 Java Portal

Учись проектировать через объектно-ориентированные паттерны на Java. Интерактивный курс от профессора Computer Science Марка
Учись проектировать через объектно-ориентированные паттерны на Java. Интерактивный курс от профессора Computer Science Марка Махони. Освоишь: Composite Pattern, Observer Pattern, Visitor Pattern и другие. Интерактивный формат, всё по делу: Курс → https://freecodecamp.org/news/object-oriented-design-patterns-with-java/ 👉 Java Portal

Пишем асинхронный Java-код как синхронный Разрабатываешь на Java и устал от коллбэков, .thenApply(), .handle() и всей этой це
+1
Пишем асинхронный Java-код как синхронный Разрабатываешь на Java и устал от коллбэков, .thenApply(), .handle() и всей этой цепочки с CompletableFuture? Загляни в ea-async от Electronic Arts ea-async — это библиотека, которая позволяет писать асинхронный код в стиле обычного синхронного Java-кода, используя await() прямо как в JavaScript/TypeScript. Под капотом — bytecode instrumentation и CompletableFuture 👉 Java Portal

Вредные советы Java Автор показывает соблазн простого распараллеливания задач на Java через Stream API и .parallel() вместо я
Вредные советы Java Автор показывает соблазн простого распараллеливания задач на Java через Stream API и .parallel() вместо явных ExecutorService, Future, invokeAll и ручной обработки InterruptedException Однако такой подход использует common ForkJoinPool, и его поведение не всегда предсказуемо, результаты могут отличаться между запусками, особенно при исключениях в задачах (callsCounter может сильно варьироваться) Если в процессе одна из задач выбрасывает Exception, выполнение остальных может продолжаться даже после возврата ошибки. Параллельные стримы группируют задачи по частям коллекции, и минимальной единицей может быть блок из нескольких элементов, это может привести к «неравномерной» нагрузке и даже ухудшению производительности по сравнению с ручным управлением через ExecutorService. Блокирующие операции внутри задач могут полностью "забить" common ForkJoinPool, что повлияет и на выполнение CompletableFuture.thenApplyAsync(), если вы не указали свой Executor Читать подробнее<...> 👉 Java Portal

Загрузка Java-модуля во время выполнения Можно загрузить Java-модуль во время выполнения, создав экземпляр ModuleLayer:
// /tmp/ModuleLoad.java
void main() throws Exception {
    Path h2 = Path.of("/tmp/h2-2.3.232.jar");
    ModuleFinder before = ModuleFinder.of(h2);
    ModuleFinder after = ModuleFinder.of();
    Set<String> roots = Set.of("com.h2database");

    ModuleLayer parentLayer = ModuleLayer.boot();
    Configuration parentConf = parentLayer.configuration();
    Configuration conf = parentConf.resolve(before, after, roots);
    ClassLoader scl = ClassLoader.getSystemClassLoader();
    ModuleLayer layer = parentLayer.defineModulesWithOneLoader(conf, scl);

    ClassLoader cl = layer.findLoader("com.h2database");
    Class<?> c = cl.loadClass("org.h2.tools.Shell");
    Method main = c.getMethod("main", String[].class);
    Object args = new String[0];
    main.invoke(null, args);
}
Один из возможных кейсов — реализация плагин-системы в приложении. Другой кейс — запуск всего приложения через начальный загрузчик, выполняя:
java Way.java
Иными словами, файл Way.java выступает в роли скрипта, который: 🔸Загружает все необходимые JAR-файлы приложения. 🔸Загружает основной модуль приложения и запускает само приложение. Это базовая идея, лежащая в основе Objectos Start. 👉 Java Portal

Стратегии ветвления в Git При управлении кодом в разработке ПО выбор правильной стратегии ветвления напрямую влияет на команд
Стратегии ветвления в Git При управлении кодом в разработке ПО выбор правильной стратегии ветвления напрямую влияет на командную работу, интеграцию и процесс деплоя. Вот основные стратегии ветвления в Git: 1. Feature Branching (ветки под фичи) Создаётся отдельная ветка для каждой фичи или багфикса. Разработчики работают с этими ветками независимо, а после завершения и ревью — вливают изменения в основную ветку (обычно main или develop). Подходит для команд, где важен строгий код-ревью и фичи разрабатываются изолированно. 2. Gitflow Модель ветвления с чётким процессом управления релизами. Используются ветки develop, release, hotfix, feature — каждая со своей ролью в процессе разработки. Лучше всего подходит для крупных проектов с запланированными циклами релизов. 3. GitLab Flow Комбинирует идеи Feature Branching и Gitflow, но делает их проще. С акцентом на деплой и интеграцию с issue-трекингом и CI/CD. Стратегия включает основную ветку (main), которая отражает продакшен-код, и при необходимости — отдельные ветки под окружения (например, staging, production и т.д.). Подходит для команд, использующих GitLab и практики непрерывной поставки (CD). 4. GitHub Flow Лёгкий и понятный процесс на основе веток, отлично подходит под continuous deployment. Ветка main всегда должна быть в деплойном состоянии. Фичи разрабатываются в отдельных ветках от main, изменения проходят через pull request. Хороший выбор для небольших команд и проектов с постоянными поставками. 5. Trunk-Based Development Все разработчики коммитят напрямую в основную ветку (trunk). Фичевые ветки либо очень короткоживущие, либо не используются вовсе. Подходит для команд, практикующих CI/CD, и проектов, где приоритет — скорость разработки. Если ты только начинаешь работать с Git — начни с простой стратегии вроде GitHub Flow и эволюционируй по мере роста команды и сложности проекта. Для больших команд или сложных процессов лучше использовать более структурированные подходы, такие как Gitflow или GitLab Flow. Независимо от выбранной стратегии ветвления, важно: - Настроить автоматическое тестирование, чтобы быстрее ловить баги. - Согласовать стандарты по commit-сообщениям, нейминг веток и процессам слияния. 👉 Java Portal

Российский программист OpenAI Олег Миллер создал канал «Доктор GPT» о последних разработках в сфере ИИ. ❖ Инструменты для раб
Российский программист OpenAI Олег Миллер создал канал «Доктор GPT» о последних разработках в сфере ИИ. ❖ Инструменты для работы, творчества и развлеченийНейросети без ограничений и цензуры [18+]Проекты, которые изменят жизнь всего человечества Подпишись, ничего интереснее про ИИ в Telegram просто нет: https://t.me/+kcFCzv8uRQBkYWUy

Модель памяти в Java Java управляет памятью в двух основных областях: - Stack (стековая память) — хранит фреймы вызова методо
Модель памяти в Java Java управляет памятью в двух основных областях: - Stack (стековая память) — хранит фреймы вызова методов и локальные переменные. Работает быстро и автоматически очищается при выходе из метода. - Heap (куча) — используется для хранения объектов, созданных через new. Управляется сборщиком мусора (Garbage Collector), работает медленнее, но даёт больше гибкости. ➡️Объекты всегда размещаются в куче (heap). ➡️Ссылки на эти объекты (например, локальные переменные) хранятся в стеке (stack). ➡️Неправильное управление созданием объектов или удержание ссылок дольше, чем нужно, может привести к утечкам памяти (memory leaks).
public class MemoryDemo {
    public static void main(String[] args) {
        int x = 10; // Хранится в стеке
        Person p = new Person("Alice"); // 'p' находится в стеке, объект — в куче

        p.sayHello(); // Вызов метода создаёт новый стек-фрейм
    }
}

class Person {
    String name; // Поле хранится в куче вместе с объектом

    Person(String name) {
        this.name = name;
    }

    void sayHello() {
        System.out.println("Hello, " + name);
    }
}
👉 Java Portal

Топ 20 команд Git, которые нужно знать 1. git init — Создать новый репозиторий в текущей директории. 🔸Пример: git init my-ne
Топ 20 команд Git, которые нужно знать 1. git init — Создать новый репозиторий в текущей директории. 🔸Пример: git init my-new-project 2. git branch — Создать локальную ветку. 🔸Пример: git branch feature/login 3. git checkout — Переключиться на другую ветку. 🔸Пример: git checkout feature/login 4. git add — Добавить файлы в индекс (staging area) для коммита. 🔸Пример: git add file.js 5. git commit — Зафиксировать добавленные изменения. 🔸Пример: git commit -m "Fix navigation bug" 6. git pull — Обновить локальную ветку с удалённого репозитория. 🔸Пример: git pull origin main 7. git push — Отправить локальные коммиты в удалённый репозиторий. 🔸Пример: git push origin main 8. git status — Показать состояние файлов (изменённые, добавленные, удалённые и т.д.). 🔸Пример: git status 9. git diff — Показать разницу между версиями. 🔸Пример: git diff HEAD~1 HEAD 10. git log — Посмотреть историю коммитов. 🔸 Пример: git log --oneline --graph 11. git clone — Скопировать удалённый репозиторий локально. 🔸 Пример: git clone https://github.com/user/repo.git 12. git merge — Объединить ветки. 🔸Пример: git merge feature/login 13. git rebase — Перенести коммиты на другую базу (ветку). 🔸Пример: git rebase main 14. git stash — Временно сохранить изменения, не готовые к коммиту. 🔸Пример: git stash push -m "WIP login" 15. git fetch — Скачивать объекты из удалённого репозитория без слияния. 🔸Пример: git fetch origin 16. git reset — Переместить HEAD или убрать файлы из индекса. 🔸Пример: git reset --hard HEAD~1 17. git revert — Создать новый коммит, отменяющий предыдущие изменения. 🔸Пример: git revert 1a2b3c4 18. git cherry-pick — Применить конкретный коммит на текущую ветку. 🔸Пример: git cherry-pick 1a2b3c4 19. git remote — Управление удалёнными репозиториями. 🔸Пример: git remote add origin git@github.com:user/repo.git 20. git tag — Пометить контрольные точки релизов. 🔸Пример: git tag -a v1.0 -m "Initial release" 👉 Java Portal

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

Java API (не из Spring Boot), которые стоит знать 1. Java Streams API 🔸API для функциональной работы с коллекциями — фильтрация, преобразование, агрегация и пр. 2. Files & NIO.2 (java.nio.file) 🔸Мощное и современное API для работы с файлами и директориями. 3. java.time (Date and Time API) 🔸Новая система работы с датой и временем (введена в Java 8) — безопаснее и удобнее, чем Date/Calendar. 4. JUnit 5 Фреймворк для модульного тестирования с расширенными возможностями и гибкой архитектурой. 5. java.util.concurrent (Concurrency API) 🔸API для реализации многопоточности, синхронизации и конкурентных структур данных. 6. java.net.http (HTTP Client API) 🔸Стандартный HTTP-клиент для отправки запросов и получения ответов (введён в Java 11). 7. Process API (java.lang.ProcessHandle) 🔸Позволяет управлять и отслеживать системные процессы: получать PID, статус, время запуска и пр. 👉 Java Portal

Слышал когда-нибудь про объект, который отказывается умирать? В Java можно «воскресить» объект во время сборки мусора с помощ
Слышал когда-нибудь про объект, который отказывается умирать? В Java можно «воскресить» объект во время сборки мусора с помощью метода finalize(). Но это — рискованная практика, и сам метод уже помечен как устаревший. Этот код демонстрирует поведение метода finalize() в Java — он вызывается только один раз перед удалением объекта сборщиком мусора. В первой попытке объект «воскрешается» внутри finalize, но при повторной попытке finalize уже не вызывается, и объект действительно удаляется. 👉 Java Portal

Объяснение 8 популярных сетевых протоколов в одной диаграмме. 👉 Java Portal
Объяснение 8 популярных сетевых протоколов в одной диаграмме. 👉 Java Portal

Сохраняем себе: Jimmer это иммутабельный ORM, заточенный под работу с графами объектов, а не отдельными сущностями. 🔹Авто-ге
Сохраняем себе: Jimmer это иммутабельный ORM, заточенный под работу с графами объектов, а не отдельными сущностями. 🔹Авто-генерация DTO 🔹Без N+1 (batch fetch из коробки) 🔹Умные SQL без лишних JOIN'ов 🔹DSL с type-safety 🔹GraphQL + TypeScript-генерация 🔹Кеширование (включая Redis) 🔹Работает через APT/KSP ⇢ https://github.com/babyfish-ct/jimmer 👉 Java Portal