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 12 130 suscriptores, ocupando la posición 10 402 en la categoría Tecnologías y Aplicaciones y el puesto 54 525 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 12 130 suscriptores.

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

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 11.37%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 6.26% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 379 visualizaciones. En el primer día suele acumular 760 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 08 junio, 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.

12 130
Suscriptores
+224 horas
-287 días
-13830 días
Archivo de publicaciones
Одна идея, на которой я люблю делать акцент, это автобоксинг и анбоксинг в Java. Java фактически дает нам два параллельных мира: Примитивы: int, long, double = быстрые, компактные, живут на стеке. Обертки: Integer, Long, Double = полноценные объекты в heap. Между этими мирами Java делает одно автоматическое преобразование: Автобоксинг - превращение примитива в объект Анбоксинг - обратное преобразование Работает удобно, пока в какой-то момент не начинает мешать. Почему это может быть проблемой? Потому что при каждой конверсии у Java появляется лишняя работа: Создаются новые объекты Увеличивается нагрузка на GC CPU делает больше операций Срываются JIT-оптимизации В циклах с высокой нагрузкой появляются скрытые задержки В большинстве приложений это незаметно, но если проявится, то обычно довольно резко. Типичный пример - коллекции:
List<Integer> numeros = new ArrayList<>();
for (int i = 0; i < 1_000_000; i++) {
numeros.add(i);
}
Очевидно, что пример синтетический, но суть в том, что в этом цикле i упаковывается в Integer миллион раз. Перенеси этот сценарий на реальные участки твоего кода. Каждая конверсия создает объект, нагружает GC и сбивает процессорный кеш. Из-за этого приложение начинает подвисать, когда GC активируется. Коллекции - не единственный источник проблем. Есть и сравнения:
Integer a = 1000;
Integer b = 1000;

if (a == b) { ... }
При работе с обертками оператор == сравнивает ссылки, а не значения. Если происходит неявный анбоксинг, оба значения сначала превращаются в int и только потом сравниваются. Такое смешение поведения местами непредсказуемо и приводит к трудноуловимым багам. Есть еще и лямбды:
Stream<Integer> s = IntStream.range(0, 1_000_000)
.boxed(); // миллион автобоксингов
Если работаете с числами, лучше брать примитивные стримы: IntStream LongStream DoubleStream Они экономят память, убирают боксинг и работают быстрее. Худший сценарий - структуры подсчета:
Map<String, Integer> counter = new HashMap<>();
counter.put(key, counter.getOrDefault(key, 0) + 1);
Каждая операция делает: Анбоксинг существующего значения Сложение как примитива Обратный автобоксинг результата Масштабируется это плохо и убивает производительность при высокой конкуренции. Хорошие варианты: - AtomicInteger - LongAdder - Хранить счетчик как примитив и конвертировать только при выдаче наружу Значит ли это, что обертки плохие? Нет. Проблема не в них, а в случайном использовании. Обертки используют, когда: Нужны null-значения API требует объектные типы Есть доменная логика, где важна идентичность или отсутствие значения Примитивы используют, когда: Есть большие циклы Много повторных вычислений Важно избегать лишнего GC Нужна стабильная производительность Автобоксинг удобен, но у него есть подводные камни. Обычно он не мешает, но когда все-таки мешает, его эффекты сложно отследить. Хорошая новость: исправляется это просто. Используй примитивы в вычислениях Используй примитивные стримы Не применяй обертки в счетчиках Проверь циклы, создающие лишние объекты Пара мелких правок может убрать тысячи лишних объектов и заметно снизить нагрузку на приложение. 👉 Java Portal

freeCodeCamp выкатили бесплатный курс по Git и GitHub для новичков. За 1 час разберёшь базу: ветки, слияния, pull request’ы и
freeCodeCamp выкатили бесплатный курс по Git и GitHub для новичков. За 1 час разберёшь базу: ветки, слияния, pull request’ы и базовую командную работу. Отличный быстрый вход для тех, кто откладывал Git «на потом». Git-курс тут 👉 Java Portal

Java-совет: ты можешь использовать LinkedHashMap, чтобы легко реализовать LRU-кеш (Least Recently Used). Тебе просто нужно за
Java-совет: ты можешь использовать LinkedHashMap, чтобы легко реализовать LRU-кеш (Least Recently Used). Тебе просто нужно заинстанцировать это вот так:
int capacity = 3;
Map<Integer, String> cache = new LinkedHashMap<>(capacity, 0.75f, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > capacity;
    }
};

cache.put(1, "one");
cache.put(2, "two");
cache.put(3, "three");
cache.get(1);
cache.put(4, "four"); // 2 удаляется (наименее недавно использованный)

System.out.println(cache);
👉 Java Portal

Нужна API, чтобы попрактиковаться в программировании? Это, пожалуй, лучший вариант для приложений с прогнозом погоды. ✓ Полно
Нужна API, чтобы попрактиковаться в программировании? Это, пожалуй, лучший вариант для приложений с прогнозом погоды. ✓ Полностью бесплатная ✓ Без регистрации и без API-ключа ✓ Работает по HTTPS и с включённым CORS Можно тренироваться с JavaScript, Python, Java и чем угодно ещё: → open-meteo.com 👉 Java Portal

+3
⚡️ ВАЙБ-КОДИНГ теперь в Telegram! Ребята сделали крутейший канал, где на наглядных примерах и понятном языке рассказывают как войти в новую эру разработки с ИИ, делятся полезными фишками и инструментами Подписывайтесь: @vibecoding_tg

Совет по Java: начиная с Java 19 можно потрогать фичу под названием virtual threads. Virtual threads это лёгкие потоки, которые управляются JVM, а не операционной системой. JVM умеет приостанавливать и возобновлять выполнение без лишней траты ресурсов ОС. IO-вызовы не блокируют потоки ОС. Виртуальные потоки работают поверх небольшого пула платформенных потоков. Пример:
try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i < 10000; i++) {
        executor.submit(() -> {
            Thread.sleep(1000);
        });
    }
}
👉 Java Portal

Знали, что у EnableWebSecurity есть параметр debug, который включает отладку безопасности? 🤯 Это помогает разобраться, что вообще происходит во время разработки. Но в проде такое включать нельзя. 👉 Java Portal

GitHub теперь в Telegram! Самый прогерский канал, где за 10 минут ты научишься: / Пробив по фото и номеру в ТГ // Как взломат
GitHub теперь в Telegram! Самый прогерский канал, где за 10 минут ты научишься: / Пробив по фото и номеру в ТГ // Как взломать вебку подруги /// Мануал по OSINT разведке Подписывайся, нас уже сотни тысяч: >@GitHub

Совет по Java: старайся не шарить данные между потоками. Используй неизменяемые объекты Или строй взаимодействие потоков чере
Совет по Java: старайся не шарить данные между потоками. Используй неизменяемые объекты Или строй взаимодействие потоков через сообщения, без прямой модификации общего состояния С неизменяемыми объектами:
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());
    }
}
Обмен сообщениями:
...
new Thread(() -> {
    try {
        queue.put("mess1");
    } catch (InterruptedException e) {}
}).start();

...

new Thread(() -> {
    try {
        String mess = queue.take();
    } catch (InterruptedException e) {}
}).start();
👉 Java Portal

Одна из самых опасных проблем в распределенных системах это двойная запись: сохранить что-то в своей базе и параллельно опубл
Одна из самых опасных проблем в распределенных системах это двойная запись: сохранить что-то в своей базе и параллельно опубликовать событие в другой системе, рассчитывая что оба шага пройдут вместе. А что если нет? Представь классический поток: 1️⃣Сохраняешь заказ в базе. 2️⃣Отправляешь событие в Kafka или делаешь запрос в другую API, чтобы сообщить что заказ создан. Где проблема? 👉Если шаг 1 прошел, а шаг 2 упал: База говорит заказ создан, но внешний сервис об этом не знает. 👉Если шаг 2 прошел, а шаг 1 упал: Ты опубликовал фантомное событие о том, чего нет. Это и есть двойная запись. И если думаешь что это тебя не коснется, просто подожди пока прод покажет тебе реальность. Тут и появляется Transactional Outbox Pattern. Что именно делает этот паттерн? 🤔 Избавляет от необходимости писать в два места одновременно. Превращает внешнюю запись в надежный процесс. Идея простая, вот минимальный способ это реализовать: 1. Когда сохраняешь данные в базе (INSERT/UPDATE), ты параллельно пишешь событие в отдельную таблицу, например outbox. 2. Оба INSERT выполняются в одной транзакции. Если что-то падает, падает все. Так достигается гарантированное консистентное состояние. 3. Затем отдельный процесс (poller или scheduler) читает эту таблицу и публикует реальное событие в Kafka, RabbitMQ или куда нужно. 4. Если публикация упала, ничего страшного. Событие остается в таблице пока его не получится отправить. С этим достаточно простым потоком ты получаешь консистентность без двойной записи. Почему это так хорошо работает? Потому что принимает неприятную правду: Нельзя рассчитывать что два разных системы корректно обработают одну и ту же транзакцию. ❌База умеет в транзакции. ❌Kafka — нет. ❌Rabbit — нет. ❌Webhook тем более. Поэтому решение не в том чтобы это «продавить», а в том чтобы адаптировать архитектуру к реальности: Единственная запись, которой реально можно доверять — запись в твою базу. Все внешнее (то что не хранится в твоей базе) должно выполняться позже, с ретраями, логами и прочим. Но да, это не бесплатно. Нужно: —> Создать таблицу outbox. —> Настроить ретраи. —> Удалять обработанные события. —> Мониторить poller (или любую другую реализацию). —> Не допустить двойные вставки в outbox чтобы избежать дублей. И ключевая мысль: Цена Transactional Outbox намного ниже цены ручной починки рассинхрона между сервисами и системами. А это в проде дороже золота. 👉 Java Portal

Совет по Java: в JPA можно использовать native query не только для SELECT, но и для UPDATE, DELETE и INSERT. Учти, что в этом
Совет по Java: в JPA можно использовать native query не только для SELECT, но и для UPDATE, DELETE и INSERT. Учти, что в этом случае всё проходит мимо EntityManager и PersistenceContext. 👉 Java Portal

Кандидаты часто путаются, когда спрашивают:
в чем разница между rate limiting и throttling?
На самом деле всё очень просто. * Rate limiting Задаёт фиксированный максимум запросов. Если превысил лимит — лишние запросы просто блокируются. Пример: 100 запросов в минуту разрешено. 101-й — отклоняется. * Throttling Не блокирует. Он замедляет обработку запросов, когда ты начинаешь спамить. Пример: после 100 запросов каждый следующий обрабатывается с задержкой, но всё равно проходит. Запомнить легко: Rate limiting — стоп сверхлимита. Throttling — замедление сверхлимита. 👉 Java Portal

Java даёт много вариантов по части синтаксиса, но функциональные интерфейсы — одна из самых аккуратных и приятных фишек языка ☕️ Сегодня разберём 4 штуки, которые встречаются чаще всего. Если поймёшь их, писать код станет современнее, местами чище Идея простая 👇 Функциональный интерфейс — это интерфейс с одним абстрактным методом. Благодаря этому его можно реализовать через лямбды. В Java их много, но вот четыре, которые ты будешь видеть постоянно: 👉 Consumer — делает что-то Consumer принимает значение и ничего не возвращает. Отлично подходит для побочных эффектов: логирование, вывод в консоль, сохранение, отправка и так далее.
Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("Hola");
Проще говоря: "получи это и сделай с этим что-то". 👉 Supplier — дай что-то Supplier ничего не принимает и возвращает значение. Часто используется для получения конфигураций, генерации ID, ленивого создания объектов и прочего.
Supplier<Double> supplier = () -> Math.random();
supplier.get();
То есть: "выдай нужную штуку, когда я попрошу". 👉 Function<T, R> — преобразуй что-то Принимает значение типа T и возвращает значение типа R. На практике эта штука — самая распространённая.
Function<Integer, String> function = number -> "N° " + number;
function.apply(5);
По смыслу: "получаю T, возвращаю R". 👉Predicate — реши что-то (true/false) Принимает значение и возвращает boolean. Часто нужен для фильтрации списков, простых проверок, валидаций, правил.
Predicate<String> predicate = s -> s.length() > 5;
predicate.test("Java");
То есть: "подходит или не подходит под условие". Важно: Эти интерфейсы существуют не ради компактного кода. Они нужны, чтобы ты думал через операции, а не через классы. Они идеально заходят в Streams, в коллбеки, в валидации, в композицию логики — везде, где есть простая операция, для которой не нужна отдельная сущность. Это не замена всему на свете. Речь не про то, чтобы переписать всю систему в функциональном стиле. Но они реально помогают во множестве сценариев. Если научишься читать Function, Consumer, Supplier и Predicate, то спокойно разберёшь и напишешь современный Java-код без лишних страданий. И это уже хороший шаг вперёд. 😁 👉 Java Portal

Разработчик выложил проект ShadowStream, систему отслеживания изменений в базе данных (CDC), построенную на PostgreSQL logical replication. Цель проекта — ловить любые изменения в реальном времени и передавать их в потоковую инфраструктуру. Как это работает: - изменения в базе (INSERT, UPDATE, DELETE) сразу перехватываются через logical replication - события сериализуются в Protobuf и отправляются в Redis Streams для быстрого доступа - параллельно те же данные архивируются в Kafka для надежного хранения - Kafka использует grouped consumer'ов: два обработчика работают параллельно, плюс резервная группа с отдельным offset - поверх всего в Django Admin добавлена визуализация gRPC-вызовов Исходники открыты на GitHub Проект может пригодиться тем, кто работает с потоковой обработкой данных, аналитикой, репликацией или интеграцией микросервисов. 🙂 👉 Java Portal

Уроки по ИБ, белый хакинг, вирусы, социальная инженерия, безопасность ИБ Книга — Более 1660 русскоязычных книг по ИБ и Социал
Уроки по ИБ, белый хакинг, вирусы, социальная инженерия, безопасность ИБ Книга Более 1660 русскоязычных книг по ИБ и Социальной Инженерии можно найти на канале. no system is safe // cybersec — один из древнейших ресурсов по информационной безопасности в рунете. Книги, курсы, полезные тулсы, уроки по Linux, новости клирнета и даркнета. Python и 1000 программ уроки по Python. Python мы будем использовать для создания хакерского софта. Этичный Хакер — один из крупнейших ресурсов по информационной безопасности в СНГ. Бэкап — канал с исходниками популярных проектов. Здесь вы найдёте исходные коды нейросетей, ботов, сайтов и других интересных проектов, которые дадут дополнительные знания Весь материал на каналах в общем доступе. Ничего лишнего.

Можно использовать асинхронный логгинг в Spring Boot, настроив logback (logback-spring.xml). Лог-сообщения отправляются в очередь и обрабатываются отдельным фоновым потоком. Это уменьшает задержки, связанные с вводом-выводом. Положи файл конфигурации logback в папку resources:
src/main/resources/logback-spring.xml
Вот пример:
<configuration>

    <!-- Console appender, обёрнутый в асинхронный -->
    <appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="CONSOLE" />
        <queueSize>5000</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>false</includeCallerData>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="ASYNC_CONSOLE" />
    </root>

</configuration>
👉 Java Portal

Какой будет вывод и почему?
class Person {
    String name;
}

public class Test {
    static void modify(Person obj) {
        obj.name = "Rahul";         
        obj = new Person();         
        obj.name = "Amit";
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Sumit";

        modify(p);

        System.out.println(p.name);
    }
}
Если ты не можешь ответить на это, значит ты пока не готов к интервью. 👉 Java Portal

Как Яндекс кошмарит вас на собеседованиях ❤️ Успешно пройти секцию по профильным хардам, но смачно опозориться на логической
Как Яндекс кошмарит вас на собеседованиях ❤️ Успешно пройти секцию по профильным хардам, но смачно опозориться на логической задаче с часами? В этом вся суть интервью в Яндексе 😆 Автор этой истории побывал на собесе в Яндексе и рассказал всю правду о клоунаде, которая там происходила. Готовьте попкорн! Вита Заебумба | Путь корпората — топовый канал про IT, сферу найма, трешовые собесы и работу в корпорациях. Просто кладезь кулстори не только от автора, но и от подписчиков Атмосфера 12/10: авторская подача, юмор и топ комменты от аудитории, состоящей из бизнес/системных, дата аналитиков, разрабов, продактов и других айтишников 🔥Истории, которые уже успели стать бестселлером: 🟡Поймала дешёвок за руку на собесе в Ягодках 🛍 🟡Мое мнение, что будет с рынком найма в 2026 году + полезные материалы 🟡Эффект Писюхи, или как я столкнулась с эйджизмом в найме 🟡Aston, разлогинься, или как продать свою жопу в рабство 🟡Если твой руководитель ведет себя так, беги оттуда Но тут не только про веселье и треш. Подписывайтесь, если хотите: 🟢Узнать лайфхаки продающего резюме 🟢Быть в курсе актуальной ситуации на рынке 🟢Обойти 90% кандидатов 🟢Не продешевить на собесе и выгодно себя продать ➡️ @vitazaebymba

Совет по Spring Boot Когда пишешь REST API на Spring Boot, обычно используют префикс /api Чтобы не лепить @RequestMapping("/a
Совет по Spring Boot Когда пишешь REST API на Spring Boot, обычно используют префикс /api Чтобы не лепить @RequestMapping("/api") в каждом контроллере, можно настроить это один раз вот так:
@Configuration
class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("/api",
                aClass -> aClass.getPackage().getName().startsWith("com.sivalabs.bookstore"));
    }
}
👉 Java Portal

Spring Modulith добавили поддержку Application-Module Aware миграций в Flyway. Посмотреть, как это работает, можно тут👇 http
+1
Spring Modulith добавили поддержку Application-Module Aware миграций в Flyway. Посмотреть, как это работает, можно тут👇 https://github.com/sivaprasadreddy/spring-modular-monolith 👉 Java Portal