Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
Show more📈 Analytical overview of Telegram channel Java Portal | Программирование
Channel Java Portal | Программирование (@java_iibrary) in the Russian language segment is an active participant. Currently, the community unites 12 115 subscribers, ranking 10 397 in the Technologies & Applications category and 54 492 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 115 subscribers.
According to the latest data from 08 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -138 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 11.21%. Within the first 24 hours after publication, content typically collects 6.34% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 360 views. Within the first day, a publication typically gains 769 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
- Thematic interests: Content is focused on key topics such as boot, string, void, архитектура, resttemplate.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
Thanks to the high frequency of updates (latest data received on 09 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
@ConditionalOnProperty`?
- Включение или отключение бинов и конфигураций на основе значений в `application.properties` без изменения кода
- Загрузка разных бинов для разных сред с помощью конфигурационных параметров
- Исключение лишних бинов снижает потребление памяти и упрощает логику
🔸Включить бин, если свойство существует:
Используется аннотация @ConditionalOnProperty(name="my.prop").
Бин будет создан, если свойство my.prop существует и его значение не "false".
🔸Включить бин, если свойство равно определённому значению:
Добавляется параметр havingValue="yes".
Бин будет создан только в том случае, если значение свойства строго равно "yes".
🔸Включить бин, если свойство отсутствует:
Используется параметр matchIfMissing=true.
Бин будет создан даже в случае, если соответствующее свойство вообще не определено в конфигурации.
🔸Переключение реализаций в зависимости от значения свойства:
Определяются несколько бинов с разными значениями havingValue.
Будет создан только тот бин, значение которого соответствует текущему значению свойства.
👉 Java Portaljava -jar myapp-fat.jar
Зачем использовать Fat JAR?
🔹Портируемость — удобно распространять и развёртывать
🔹Простота — не нужно возиться с classpath и отлавливать ClassNotFoundException
🔹Отлично подходит для микросервисов и Docker — один артефакт, одна команда запуска
Как собрать Fat JAR
👉 С помощью Maven (maven-assembly-plugin)
Добавьте в pom.xml:
<!-- пример конфигурации (на 2 фото) -->Соберите:
mvn clean package
Готовый JAR будет лежать в:
target/myapp-jar-with-dependencies.jar👉 С помощью Maven (maven-shade-plugin) Если нужен контроль над пересборкой пакетов и теневыми зависимостями — используйте Shade:
<!-- пример конфигурации на 3 фото -->Сборка аналогично — итоговый файл будет в:
target/myapp-shaded.jar👉 С помощью Gradle В
build.gradle добавьте:
// пример конфигурации на 4 фотоЗапуск сборки:
./gradlew fatJar
Пример: Минимальное Java-приложение
// 5 фото
С учётом вышеописанных конфигураций Maven или Gradle, все зависимости будут включены в .jar — достаточно java -jar.
Некоторые команды не используют fat JAR для крупных приложений, чтобы:
> Ускорить сборку
> Снизить использование диска
> Упростить обновление отдельных зависимостей без пересборки всего артефакта
Fat JAR упаковывает всё необходимое для простого и портируемого деплоя Java-приложений
Собирается через Maven (плагины assembly или shade) или Gradle
Альтернативы: thin JAR, WAR/EAR, Spring Boot plugin, контейнеры
Выбирайте fat JAR, если важны простота и переносимость, особенно в микросервисной архитектуре и для деплоя в облаке.
👉 Java PortalТеперь, когда кто-то из друзей спрашивает, какой лаунчер посоветуешь без вирусов — просто кидаю им свой :PСсылку на скачивание и исходники (если интересно, как такой написать): 🔹Скачать: https://github.com/sammwyy/MiniLaunch/releases (Жми на ссылку с именем
minilaunch.jar)
🔹Исходный код лаунчера на Java:
https://github.com/sammwyy/MiniLaunch
После скачивания просто дважды кликни по .jar, и всё готово
👉 Java Portaladd, remove, contains выполняются за константное время O(1), при условии качественной хеш-функции.
Даже если дважды добавить строку "BMW" — в сете она появится только один раз.Часто используемые операции: —
add(E e) — добавляет элемент, если его ещё нет
— remove(Object o) — удаляет элемент, если он есть
— contains(Object o) — проверяет наличие элемента
— size() — возвращает количество элементов
— clear() — очищает сет
Как работает внутри
HashSet использует внутренний HashMap, где элементы сета хранятся как ключи, а значением выступает фиктивный объект. Это позволяет обеспечить уникальность и быстрый доступ.
При выводе содержимого HashSet — элементы отображаются в произвольном порядке.
👉 Java Portalsleep() — относится к классу Thread
🔸wait() — относится к классу Object
Назначение
🔸sleep() используется для приостановки потока на фиксированное время
🔸wait() используется для взаимодействия между потоками (межпоточная сигнализация)
Блокировка
🔸sleep() не освобождает монитор (lock остаётся удержанным)
🔸wait() освобождает монитор (lock)
Когда использовать
🔸sleep() — когда нужно просто отложить выполнение потока
🔸wait() — когда один поток должен ожидать сигнал от другого потока
Нужен ли synchronized-блок?
🔸sleep() — нет
🔸wait() — да, должен вызываться внутри synchronized-блока или метода
Может быть прерван?
🔸sleep() — да, выбрасывает InterruptedException
🔸wait() — да, выбрасывает InterruptedException
Когда возобновляется
🔸sleep() — после указанного времени
🔸wait() — после вызова notify()/notifyAll() или при прерывании
Статический или экземплярный метод?
🔸sleep() — статический метод, вызывается как Thread.sleep()
🔸wait() — метод экземпляра, вызывается на объекте: obj.wait()
👉 Java Portalenum для выбора поведения на лету (что считается классическим подходом), можно использовать интерфейсы для инкапсуляции различных конфигураций.
🔸Инкапсулируется поведение, а не просто значения.
🔸Позволяет менять поведение динамически в рантайме, подставляя разные реализации.
2) Интерфейсы для method chaining с условным выполнением
Интерфейсы могут быть использованы для построения цепочек вызовов методов с возможностью условного выполнения. Это позволяет динамически пропускать определённые вызовы.
Используется при создании fluent API, где некоторые методы должны выполняться только при выполнении условий.
Это:
🔸Делает код более читаемым и выразительным.
🔸Избегает ненужных вызовов, если условие не выполнено.
Традиционный аналог:
if (conditionMet) {
obj.doSomething();
obj.doAnotherThing();
}
3) Маркировочные (tagging/marker) интерфейсы с проверкой по типу
Пустые интерфейсы можно использовать для "тегирования" классов и принятия решений во время выполнения или компиляции.
Это позволяет выполнять определённые действия, если класс реализует конкретный marker-интерфейс.
🔸Чистое разделение ролей без добавления логики
🔸Хорошо сочетается с reflection и generics
4) Наследование интерфейсов для реализации поведения по умолчанию
Интерфейсы с default-методами можно использовать для композиции переиспользуемой логики.
Применяется, когда нужно разделить общее поведение между разными классами, не прибегая к наследованию от общего базового класса.
👉 Java PortalSupplier<Stream<T>>
Когда возникает необходимость повторно использовать потоковую обработку, можно воспользоваться Supplier. В обычных случаях поток (Stream) нельзя использовать повторно после его обработки.
👉 Java Portal
Available now! Telegram Research 2025 — the year's key insights 
