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

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

Ir al canal en Telegram

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

Mostrar más

📈 Análisis del canal de Telegram Java Portal | Программирование

El canal Java Portal | Программирование (@java_iibrary) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 11 770 suscriptores, ocupando la posición 10 256 en la categoría Tecnologías y Aplicaciones y el puesto 54 543 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 11 770 suscriptores.

Según los últimos datos del 29 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -144, y en las últimas 24 horas de -1, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 10.09%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 5.78% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 188 visualizaciones. En el primer día suele acumular 681 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
  • Intereses temáticos: El contenido se centra en temas clave como boot, string, void, архитектура, resttemplate.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 30 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

11 770
Suscriptores
-124 horas
-237 días
-14430 días
Archivo de publicaciones
Что такое Fat JAR в Java? Fat JAR (он же Uber JAR) — это единый исполняемый .jar-файл, который содержит как классы вашего при
+5
Что такое Fat JAR в Java? Fat JAR (он же Uber JAR) — это единый исполняемый .jar-файл, который содержит как классы вашего приложения, так и все его зависимости. Такое приложение полностью самодостаточно — не нужно отдельно подключать внешние библиотеки во время выполнения. Просто запускается командой:
java -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

Коллекция диаграмм по софту и программированию от ByteByteGo ✓ Архитектуры и системный дизайн ✓ Объяснение API: REST, SOAP, g
Коллекция диаграмм по софту и программированию от ByteByteGo ✓ Архитектуры и системный дизайн ✓ Объяснение API: REST, SOAP, gRPC, WebSockets ✓ Понимание Git, CI/CD, HTTP и не только → https://github.com/ByteByteGoHq/system-design-101 Идеально для подготовки к техническим интервью 😳 👉 Java Portal

Учись алгоритмам программирования с этим ресурсом - код, пошаговое выполнение и наглядное представление. Более 70 алгоритмов на JavaScript, Java и C++ - идеально для практики и понимания логики. → http://algorithm-visualizer.org 👉 Java Portal

Лучшие способы логировать SQL-запросы в Spring Boot ⏩Читать подробнее 👉 Java Portal | #cтатья
Лучшие способы логировать SQL-запросы в Spring Boot ⏩Читать подробнее 👉 Java Portal | #cтатья

Термины, которые действительно должен знать каждый разработчик • Иммутабельность. Данные, которые нельзя изменить после создания — вместо этого при обновлении создаются новые копии. • Чистые функции. Функции, которые при одинаковом входе всегда возвращают одинаковый результат и не имеют побочных эффектов. • Побочные эффекты. Любое внешнее воздействие вне функции (например, логгирование, вызов API, изменение внешнего состояния). • Референциальная прозрачность. Выражение можно заменить его значением без изменения поведения программы. • Мутация состояния. Изменение значения переменной или объекта со временем — часто не приветствуется в функциональном программировании. • Идемпотентность . Операция, которую можно выполнять многократно без изменения результата после первого применения. • Декларативное программирование. Описание того, что нужно сделать, а не как это сделать (например, SQL, React, HTML). • Императивное программирование. Пошаговые инструкции для выполнения задачи (например, циклы, условные операторы). • Мемоизация. Кеширование результата функции, чтобы при повторных вызовах с теми же аргументами результат возвращался мгновенно. • Когезия. Насколько чётко и логично связаны обязанности класса — высокая когезия = лучше дизайн. • Тесная связанность. Классы чрезмерно зависят от внутренней реализации друг друга — изменения становятся рискованными. • Утиная типизация. «Если выглядит как утка и крякает как утка — значит, это утка» — тип проверяется по поведению, а не по наследованию. • Срезка объекта. При присваивании объекта производного класса объекту базового типа теряются дополнительные поля/методы — типичная ловушка в C++. 👉 Java Portal

Как работает HashMap в Java? 1. Внутреннее устройство – https://javarevisited.blogspot.com/2010/02/how-hashmap-works-in-java.
Как работает HashMap в Java? 1. Внутреннее устройство – https://javarevisited.blogspot.com/2010/02/how-hashmap-works-in-java.html 2. Механика методов get и put – https://java67.com/2013/06/how-get-method-of-hashmap-or-hashtable-works-internally.html 👉 Java Portal

JMH для микробенчмаркинга производительности: JMH (Java Microbenchmark Harness) — это инструмент для измерения производительн
JMH для микробенчмаркинга производительности: JMH (Java Microbenchmark Harness) — это инструмент для измерения производительности небольших фрагментов кода, идеально подходит для оптимизации алгоритмов. В этом примере сравнивается простая цикл-реализация и использование Stream API. → JMH гарантирует точные и воспроизводимые тесты производительности → Используется для оптимизации критичных участков кода в продакшен-приложениях 👉 Java Portal

Чувак сделал минималистичный лаунчер для Minecraft для личного использования. Теперь, когда кто-то из друзей спрашивает, како
Чувак сделал минималистичный лаунчер для Minecraft для личного использования.
Теперь, когда кто-то из друзей спрашивает, какой лаунчер посоветуешь без вирусов — просто кидаю им свой :P
Ссылку на скачивание и исходники (если интересно, как такой написать): 🔹Скачать: https://github.com/sammwyy/MiniLaunch/releases (Жми на ссылку с именем minilaunch.jar) 🔹Исходный код лаунчера на Java: https://github.com/sammwyy/MiniLaunch После скачивания просто дважды кликни по .jar, и всё готово 👉 Java Portal

🎁Подарок, после которого родные скажут: "Это лучше, чем внуки! Конфеты «Мерси» — это мило. А вот как сказать «Спасибо» по-вз
+4
🎁Подарок, после которого родные скажут: "Это лучше, чем внуки! Конфеты «Мерси» — это мило. А вот как сказать «Спасибо» по-взрослому Как вернуть родителям интерес к жизни? Воркбук "Жизнь прекрасна" — это лучший способ сказать позаботиться по-настоящему: ✅ 🧠 Тренирует мозг без усилий: 30 разнообразных упражнений на память, логику и внимание — всего 10 минут в день. ✅ 💖 Дарит радость и уверенность: Мотивирующие задания напоминают: жизнь прекрасна, а они — важны и нужны. Каждый день! ✅ ✨ Просто и эффективно: Никакой рутины — только легкие, интересные задания. ✅ 💌 Ежедневная порция позитива для души и разума. 😙Воркбук — Ваше "спасибо" за детство. Напоминание, что в 50+ жизнь только расцветает! Хотите увидеть их искреннюю улыбку и услышать "Как здорово жить!"? 😎 Закажите "Жизнь прекрасна" сейчас: 😊 OZON 😊 Wildberries

HashSet в Java HashSet — это коллекция для хранения уникальных элементов без гарантии порядка. Относится к пакету java.util и
+1
HashSet в Java HashSet — это коллекция для хранения уникальных элементов без гарантии порядка. Относится к пакету java.util и реализует интерфейс Set, внутренне опираясь на HashMap. Основные особенности Java HashSet: 🔹Дубликаты игнорируются. Если добавить элемент, который уже есть в множестве — ничего не произойдёт. 🔹Элементы не упорядочены ни по добавлению, ни по значению. 🔹Допускается один null-элемент. Производительность: Базовые операции add, remove, contains выполняются за константное время O(1), при условии качественной хеш-функции.
Даже если дважды добавить строку "BMW" — в сете она появится только один раз.
Часто используемые операции: — add(E e) — добавляет элемент, если его ещё нет — remove(Object o) — удаляет элемент, если он есть — contains(Object o) — проверяет наличие элемента — size() — возвращает количество элементов — clear() — очищает сет Как работает внутри HashSet использует внутренний HashMap, где элементы сета хранятся как ключи, а значением выступает фиктивный объект. Это позволяет обеспечить уникальность и быстрый доступ. При выводе содержимого HashSet — элементы отображаются в произвольном порядке. 👉 Java Portal

Профилирование JDBC с помощью VisualVM ⏩Читать подробнее 👉 Java Portal | #cтатья
Профилирование JDBC с помощью VisualVM ⏩Читать подробнее 👉 Java Portal | #cтатья

В чем разница между SLEEP и WAIT в java? Принадлежность 🔸sleep() — относится к классу Thread 🔸wait() — относится к классу O
В чем разница между SLEEP и WAIT в java? Принадлежность 🔸sleep() — относится к классу 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 Portal

Сборка мусора в JVM — всё, что нужно знать 1. Сборка мусора (GC) → Автоматическая очистка памяти 🔸JVM автоматически освобождает память от недостижимых объектов. 🔸Используется для избегания ручного управления памятью (например, неиспользуемые объекты List очищаются автоматически). 2. Heap → Основная область памяти для объектов 🔸Здесь хранятся все объекты Java. 🔸Делится на области: Young, Old и иногда Metaspace. 3. Молодое поколение (Young Generation) → Новые объекты (краткоживущие) 🔸Большинство новых объектов создаются здесь. 🔸Пример использования: String s = "abc" сначала попадает в эту область. 4. Старое поколение (Old Generation / Tenured) → Долгоживущие объекты 🔸Объекты, пережившие несколько сборок мусора, перемещаются сюда. 🔸Пример использования: кэшированные конфигурации, бины, живущие на протяжении всей жизни приложения. 5. Metaspace → Хранение метаданных классов (начиная с Java 8+) 🔸Заменяет PermGen. 🔸Хранит структуру классов, информацию о методах (например, User.class, List.class). 6. Minor GC → Очистка молодого поколения 🔸Быстрая и частая. 🔸Срабатывает, когда заполняется пространство Eden (например, при множестве краткоживущих запросов). 7. Major (Full) GC → Очистка старого поколения и Metaspace 🔸Медленнее и реже. 🔸Срабатывает, когда почти заполнено старое поколение (например, при больших графах объектов или утечках памяти). 8. Stop-the-World (STW) → Приостановка приложения во время GC 🔸JVM замораживает все потоки на время GC. 🔸Может вызывать задержки (например, при большой полной сборке мусора). 9. GC Roots → Точки отсчета для достижимости объектов 🔸Включает ссылки из регистров, стэков потоков, загрузчиков классов. 🔸GC отслеживает от них «живые» объекты (например, локальные переменные в методе main()). Основные типы сборщиков мусора 10. Serial GC → Однопоточный сборщик 🔸Простой, но останавливает всё приложение. 🔸Используется для малых heaps (например, CLI-инструменты или тестовые приложения). 11. Parallel GC → Многопоточный сборщик 🔸Ускоряет GC за счёт многопоточности. 🔸Используется в приложениях с приоритетом на производительность (например, batch-задачи, нагруженные серверы). 12. CMS (Concurrent Mark Sweep) → Сборщик с низкими паузами (УСТАРЕЛ) 🔸Работает в фоновом режиме с короткими паузами. 🔸Использовался в приложениях, чувствительных к задержкам (например, веб-серверы). 13. G1 GC → Сбалансированный сборщик с низкими паузами (по умолчанию с Java 9+) 🔸Делит heap на регионы; работает параллельно и конкурентно. 🔸Отличный универсальный сборщик (например, для микросервисов, real-time API). 14. ZGC → Сборщик с ультранизкими паузами 🔸Разработан для пауз в пределах миллисекунды. 🔸Используется в системах реального времени с большим heap (например, финтех, игры). 15. Shenandoah → Сборщик с низкими паузами (RedHat/OpenJDK) 🔸Конкурирует с ZGC. 🔸Применяется в больших heaps с постоянными требованиями к задержкам. 👉 Java Portal

Креативные (нетрадиционные) способы использования интерфейсов в Java 1) Конфигурация на основе интерфейсов (расширение паттер
+3
Креативные (нетрадиционные) способы использования интерфейсов в Java 1) Конфигурация на основе интерфейсов (расширение паттерна Strategy) Вместо использования конфигурационных файлов или enum для выбора поведения на лету (что считается классическим подходом), можно использовать интерфейсы для инкапсуляции различных конфигураций. 🔸Инкапсулируется поведение, а не просто значения. 🔸Позволяет менять поведение динамически в рантайме, подставляя разные реализации. 2) Интерфейсы для method chaining с условным выполнением Интерфейсы могут быть использованы для построения цепочек вызовов методов с возможностью условного выполнения. Это позволяет динамически пропускать определённые вызовы. Используется при создании fluent API, где некоторые методы должны выполняться только при выполнении условий. Это: 🔸Делает код более читаемым и выразительным. 🔸Избегает ненужных вызовов, если условие не выполнено. Традиционный аналог:
if (conditionMet) {
    obj.doSomething();
    obj.doAnotherThing();
}
3) Маркировочные (tagging/marker) интерфейсы с проверкой по типу Пустые интерфейсы можно использовать для "тегирования" классов и принятия решений во время выполнения или компиляции. Это позволяет выполнять определённые действия, если класс реализует конкретный marker-интерфейс. 🔸Чистое разделение ролей без добавления логики 🔸Хорошо сочетается с reflection и generics 4) Наследование интерфейсов для реализации поведения по умолчанию Интерфейсы с default-методами можно использовать для композиции переиспользуемой логики. Применяется, когда нужно разделить общее поведение между разными классами, не прибегая к наследованию от общего базового класса. 👉 Java Portal

14 советов для высокопроизводительной персистентности в Java ⏩Читать подробнее 👉 Java Portal | #cтатья
14 советов для высокопроизводительной персистентности в Java ⏩Читать подробнее 👉 Java Portal | #cтатья

Советы по Java Stream API: Ленивое вычисление с использованием Supplier&gt; Когда возникает необходимость повторно использова
Советы по Java Stream API: Ленивое вычисление с использованием Supplier<Stream<T>> Когда возникает необходимость повторно использовать потоковую обработку, можно воспользоваться Supplier. В обычных случаях поток (Stream) нельзя использовать повторно после его обработки. 👉 Java Portal

Пакетная обработка JDBC через StatelessSession в Hibernate Статья объясняет, как использовать StatelessSession в Hibernate 6
Пакетная обработка JDBC через StatelessSession в Hibernate Статья объясняет, как использовать StatelessSession в Hibernate 6 для быстрой пакетной вставки, обновления и удаления данных с помощью JDBC Batching — без лишнего кеша и с высокой производительностью. ⏩Читать подробнее 👉 Java Portal | #cтатья

Плохие практики в коде, которые кажутся безобидными (но это не так) 1) Чрезмерное использование private-методов, скрывающее с
+4
Плохие практики в коде, которые кажутся безобидными (но это не так) 1) Чрезмерное использование private-методов, скрывающее сложность Когда private-методов слишком много, это ломает читаемость и разносит логику по коду. Визуально всё выглядит «чисто», но важные логические шаги оказываются скрытыми. Когда это плохо: Вы выносите код в private-методы просто ради самого факта выноса, а не потому что они переиспользуемы или несут отдельный смысл. Как лучше: Выделяйте разные зоны ответственности в отдельные классы или сервисы, которые сотрудничают между собой. 2) Автоматическое добавление private + геттеров/сеттеров по умолчанию Бездумное добавление геттеров и сеттеров превращает ООП в просто «структуры с методами». Это нарушает инкапсуляцию, а не сохраняет её. Вместо этого: ● Открывайте только те геттеры/сеттеры, которые реально нужны для бизнес-логики. ● Вместо сеттеров лучше использовать методы, которые выполняют осмысленные действия с валидацией. 3) Чрезмерное использование static-методов и переменных static-методы кажутся удобными, но убивают тестируемость и гибкость. Они привязывают код к жёсткому глобальному состоянию. Как лучше: Используйте внедрение зависимостей или передавайте нужную конфигурацию явно туда, где она требуется. 4) Слишком большой класс (“God Object”) Огромный класс, который делает всё подряд, превращается в чёрный ящик — его сложно тестировать, менять и понимать. Как лучше: ● Применяйте принцип единственной ответственности (Single Responsibility Principle): у класса должна быть только одна причина для изменения. ● Разделяйте обязанности между меньшими по размеру классами или модулями. 5) Скрытие семантики null / Optional Возврат null или скрытое использование Optional приводит к неожиданным ошибкам во время выполнения. Отсутствие или наличие значения должно быть выражено явно. Как лучше: ● Используйте Optional<T> или другой задокументированный способ, чтобы показать, что результат может отсутствовать. ● Если это действительно ошибка — выбрасывайте чётко определённое исключение. 👉 Java Portal

Разные подходы к структуре REST API: 1) Чистый CRUD-стиль
GET /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

Некоторые редкие, но ценные паттерны в Java 1. Null Object Pattern (Объект-Заглушка вместо null) ❯ Позволяет избежать проверо
+4
Некоторые редкие, но ценные паттерны в Java 1. Null Object Pattern (Объект-Заглушка вместо null) ❯ Позволяет избежать проверок на null, возвращая объект с "пустым" поведением, реализующий ожидаемый интерфейс. ❯ Помогает держать код чистым, без множества 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 Portal