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

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

Відкрити в Telegram

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

Показати більше

📈 Аналітичний огляд Telegram-каналу Java Portal | Программирование

Канал Java Portal | Программирование (@java_iibrary) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 12 132 підписників, посідаючи 10 377 місце в категорії Технології та додатки та 54 419 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 12 132 підписників.

За останніми даними від 05 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -142, а за останні 24 години на -1, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 11.75%. Протягом перших 24 годин після публікації контент зазвичай збирає 6.20% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 426 переглядів. Протягом першої доби публікація в середньому набирає 753 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 4.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як boot, string, void, архитектура, resttemplate.

📝 Опис та контентна політика

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

Завдяки високій частоті оновлень (останні дані отримано 07 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

12 132
Підписники
-124 години
-407 днів
-14230 день
Архів дописів
Не используйте ELSE 0 вместе с COUNT и CASE Использование ELSE 0 - очень частая ошибка у новичков, когда они комбинируют функцию COUNT с выражением CASE. Обычно это происходит из-за непонимания того, как именно COUNT работает при применении к столбцу. Когда используется COUNT(column), функция считает все значения, которые не равны NULL, включая нули. Это значит, что если в выражении CASE указан ELSE 0, каждая строка, не попавшая под условие, превращается в значение 0. В результате такие строки тоже попадают в подсчёт. Вот наивный пример:
sql id="g4suvd"
SELECT
    Department,
    COUNT(CASE
              WHEN Status = 'Active' THEN EmployeeID
              ELSE 0
          END) AS ActiveEmployees
FROM Employees
GROUP BY Department;
В этом запросе каждая строка, которая не удовлетворяет условию, превращается в 0, а это валидное значение, поэтому оно тоже учитывается в COUNT. Из-за этого результат может получиться вводящим в заблуждение. Лучше всего вообще убрать ELSE. Когда ветка ELSE опущена, выражение CASE возвращает NULL для строк, которые не соответствуют условию. А так как COUNT() игнорирует NULL, будут посчитаны только строки, которые действительно удовлетворяют условию. Вот правильный вариант:
sql id="vxa5np"
SELECT
    Department,
    COUNT(CASE
              WHEN Status = 'Active' THEN EmployeeID
          END) AS ActiveEmployees
FROM Employees
GROUP BY Department;
В этой версии строки, не подходящие под условие, возвращают NULL, и COUNT() естественным образом исключает их из подсчёта. В итоге запрос получается чище, а подсчёт корректно отражает только те значения, которые реально соответствуют условию. 👉 Java Portal

API Gateway, если по-человечески: Клиент не должен ходить в 6 разных сервисов. Он должен ходить в одну точку. Gateway стоит перед всей системой и берёт на себя: - маршрутизацию входящих запросов в нужный сервис - валидацию токенов, например JWT и OAuth, ещё до того, как запрос вообще дойдёт до сервисов - rate limiting, чтобы API не абьюзили - логирование, чтобы наблюдаемость была в одном месте - балансировку нагрузки между инстансами сервисов Без gateway каждый сервис заново городит у себя аутентификацию, логирование и rate limiting. С gateway всё это решается один раз, централизованно. Вот и вся суть: одна точка входа и единый слой контроля. 👉 Java Portal

Совет по Spring Boot: ускорить приложение можно с помощью @EnableCaching и @Cacheable. 🟢Позволяет избежать повторных вызовов
Совет по Spring Boot: ускорить приложение можно с помощью @EnableCaching и @Cacheable. 🟢Позволяет избежать повторных вызовов к БД и API 🟢 Снижает задержки 🟢 По умолчанию Spring использует in-memory map, но в проде можно подключить внешний провайдер кеша 👉 Java Portal

Я побывал по обе стороны собеседований по system design. Ниже темы, которые нужно изучить, чтобы действительно хорошо в этом
Я побывал по обе стороны собеседований по system design. Ниже темы, которые нужно изучить, чтобы действительно хорошо в этом разбираться: 1. [Сервер] 2. [Задержка и пропускная способность] 3. [Масштабирование и его виды] – Вертикальное и горизонтальное масштабирование 4. [Автомасштабирование] 5. [Прикидочные расчеты] 6. [Теорема CAP] 7. [Масштабирование базы данных] – Индексы – Партиционирование – Архитектура master-slave – Multi-master – Шардирование базы данных – Недостатки шардирования 8. [SQL и NoSQL базы данных и когда что использовать] 9. [База данных] – SQL-база данных – NoSQL-база данных – Масштабирование в NoSQL и SQL – Когда какую базу использовать? 10. [Микросервисы] – Монолит vs микросервисы – Зачем вообще разбивать приложение на микросервисы? – Когда использовать микросервисы? – Как клиенты делают запросы в микросервисной архитектуре? 11. [Глубокое погружение в load balancer] – Зачем нужен load balancer? – Алгоритмы load balancing 12. [Кеширование] – Плюсы кеширования – Типы кешей – Redis 13. [Blob Storage] – Что такое blob и зачем нужно blob storage? – AWS S3 14. [CDN, Content Delivery Network] – Как работает CDN? 15. [Message Broker] – Асинхронное программирование – Зачем ставить message broker между сервисами? – Очередь сообщений – Поток сообщений – Когда использовать message broker 16. [Глубокое погружение в Apache Kafka] – Когда использовать Kafka – Внутреннее устройство Kafka 17. [Pub/sub в реальном времени] 18. [Event-Driven Architecture] – Зачем использовать EDA? – Простое уведомление о событии – Передача состояния через событие 19. [Распределенные системы] 20. [Самовосстанавливающаяся система с election лидера] 21. [Глубокое погружение в consistency] – Строгая согласованность – Когда выбирать strong consistency – Eventual consistency – Когда выбирать eventual consistency – Способы добиться strong consistency – Способы добиться eventual consistency 22. [Consistent hashing] 23. [Избыточность данных и восстановление данных] – Зачем делать базы данных избыточными? – Разные способы резервного копирования – Непрерывная избыточность 24. [Прокси] – Forward proxy vs reverse proxy 👉 Java Portal

9 000₽ за вечер. Без кода. Без офиса. Без опыта. Именно столько платят за одного чат-бота для бизнеса начинающим спецам. Берёшь шаблон → собираешь бота → сдаёшь клиенту. Первые деньги — в первую же неделю. Показываю, как новичку делать чат-ботов для бизнеса за дорого: 👉 @other_digital_bot

Java-совет: начиная с Java 9 можно использовать Stream.takeWhile() для удобной "нарезки" списков через стримы. List numbers =
Java-совет: начиная с Java 9 можно использовать Stream.takeWhile() для удобной "нарезки" списков через стримы.
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);

✗ Вместо:

List<Integer> result = new ArrayList<>();

for (Integer n : numbers) {
    if (n < 5) {
        result.add(n);
    } else {
        break;
    }
}
System.out.println(result); // [1, 2, 3, 4]

✓ Можно так:

result = numbers.stream().takeWhile(n -> n < 5).toList();
System.out.println(result); // [1, 2, 3, 4]
👉 Java Portal

Что такое BeanPostProcessor в Java Spring Boot? Это интерфейс, который позволяет вмешиваться в процесс создания и инициализац
Что такое BeanPostProcessor в Java Spring Boot? Это интерфейс, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring-контейнере. Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина: 1. postProcessBeforeInitialization(Object bean, String beanName) Вызывается до инициализации бина (до вызова метода с @PostConstruct или InitializingBean#afterPropertiesSet). 2. postProcessAfterInitialization(Object bean, String beanName) Вызывается после инициализации бина (после того, как все методы инициализации завершились). Зачем нужен BeanPostProcessor? Он используется для дополнительной обработки и кастомизации бинов после их создания, но до того, как они будут переданы клиентскому коду. Примеры: - Добавление проксирования бинов (например, для AOP или транзакций) - Валидация или изменение свойств бина - Логирование жизненного цикла - Добавление кастомных аннотаций - Обработка marker-интерфейсов Как это работает? 1. Spring сканирует контекст на наличие бинов, которые реализуют интерфейс BeanPostProcessor. 2. Если такие бины найдены, они применяются ко всем бинам в приложении. 3. Методы postProcessBeforeInitialization и postProcessAfterInitialization вызываются для каждого бина, который создаёт Spring. 👉 Java Portal

Java: используй ReentrantReadWriteLock, если у тебя частые чтения и мало записей. ReentrantReadWriteLock это утилита конкурентности в Java, которая дает два типа локов: 1. Read lock (лок на чтение): позволяет нескольким потокам читать одновременно, пока ни один поток не пишет. 2. Write lock (лок на запись): позволяет писать только одному потоку и блокирует всех остальных читателей и писателей, пока лок не будет освобожден. Используй ReentrantReadWriteLock, когда: 1. Твой код часто читает разделяемые данные. 2. Записи происходят редко. 3. Ты хочешь выжать максимум параллелизма: разрешить нескольким читателям работать одновременно, но гарантировать, что запись идет строго эксклюзивно. Пример:
public class SharedValue {
    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    private int value = 0;

    public int readValue() {
        lock.readLock().lock();
        try {
            return value;
        } finally {
            lock.readLock().unlock();
        }
    }

    public void writeValue(int newValue) {
        lock.writeLock().lock();
        try {
            value = newValue;
        } finally {
            lock.writeLock().unlock();
        }
    }
}
👉 Java Portal

Как прогреть кэши в Spring Boot? Или вообще как выполнить что-то на старте Spring Boot приложения? Обычно такие операции дела
Как прогреть кэши в Spring Boot? Или вообще как выполнить что-то на старте Spring Boot приложения? Обычно такие операции делают в @PostConstruct или подписываются на событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус. Если “прогрев” находится в @PostConstruct, как отключить его в тестах? Можно добавить флаг, сделать сабкласс и подменить его в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль. Более элегантный способ “прогреть кэши” Смотри: SpringApplication.run(...) возвращает полностью готовый контекст. Можно достать из него компонент и вызвать нужный метод “прогрева”. Код выглядит как на картинке: Плюс: В интеграционных тестах с @SpringBootTest метод main не запускается. Соответственно, код внутри него не выполняется. Никаких костылей вокруг @PostConstruct, все чисто и красиво. Когда “прогрев” все-таки нужен в тестах, добавляем параметр use main method:
@SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)
👉 Java Portal

Совет по Spring Boot: со Spring Boot и Spring Security ты можешь легко защитить эндпоинты. ✅ Чтобы защитить следующий REST-эндпоинт:
@RestController
public class MyController {

  @GetMapping
  ("/admin")
  public String admin() {
    ...
  }
  ...
}
✅ Можно написать такую конфигурацию:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
        .antMatchers("/admin").authenticated()
        .anyRequest().permitAll()
      .and()
      .httpBasic();
  }
}
- authorizeRequests(): начинает описание эндпоинтов, которым нужна защита. - antMatchers("/admin").authenticated(): требует аутентификацию для /admin. - anyRequest().permitAll(): все остальные эндпоинты публичные. - httpBasic(): включает HTTP Basic Auth. 👉 Java Portal

5 часто задаваемых вопросов на собеседованиях по Java Generics. На сколько из них ты сможешь ответить? 1. В чем разница между Object<?> и Object в Java? 2. В чем разница между List<?> и List<Object>? 3. В чем разница между List<? extends Number> и List<? super Number>? 4. Можно ли добавлять элементы в List<?>? 5. Чем T отличается от ? в дженериках? 👉 Java Portal

Скачал Java, написал код, запустил - работает. Можно выдохнуть? 😎 Спойлер: нет. Потому что завтра нужно будет написать что-то свое, без туториала. И тут выяснится, что public static void main - это для тебя просто магический ритуал, а не код. ❌ Копировать с экрана - не значит понимать. ❌ Выучить 10 уроков на YouTube - не значит стать разработчиком. ❇️ Ребята из Merion Academy (того самого YouTube-канала про IT) на бесплатных вводных уроках по Java разбирают код построчно, чтобы ты не просто копировал, а понимал, что пишешь. Что внутри: ✔️ Что такое Java и с чем ее едят ✔️ Как настроить среду без боли (чтобы все взлетело с первого раза) ✔️ Разбор синтаксиса построчно - никакой магии ✔️ Как написать свое первое REST API (да, сразу) ➡️ Запишись на бесплатные вводные уроки Разберись, как Java работает на самом деле.

Java tip: Начиная с Java 12 можно использовать String.indent(n), чтобы красиво форматировать многострочные строки, добавляя нужный отступ. n > 0: добавляет n пробелов в начале каждой строки. n < 0: удаляет до n ведущих пробелов из каждой строки. ✅ Добавление пробелов:
String text = "Text\ncontent";
System.out.println(text.indent(0));
System.out.println(text.indent(4));
System.out.println(text.indent(0));
Удаление пробелов:
String text = "    Text\n    content";
System.out.println(text.indent(-4));
👉 Java Portal

Видел интересное видео от CTO Zerodha про то, как они масштабировали Postgres с 7+ млн таблиц. Технология просто выносит мозг
Видел интересное видео от CTO Zerodha про то, как они масштабировали Postgres с 7+ млн таблиц. Технология просто выносит мозг, а если копнуть глубже, становится еще веселее: - синхронщина? не масштабируется, значит выкидываем. - все в async. тяжелую генерацию отчетов ставим в очередь. - независимый middleware, которому все равно на базу и на приложение. - собрали “DungBeetle” на Go: обобщенные, независимые от СУБД HTTP API, чтобы тянуть отчеты из любой базы. - результаты сливаем в отдельную Results DB, а приложение читает уже оттуда. Вот так выглядит настоящий масштаб. Смотреть видео 👉 Java Portal

Spring Boot: @AutoConfigureMockMvc позволяет тестировать контроллеры, не поднимая сервер. Она говорит Spring Boot автоматически сконфигурировать экземпляр MockMvc в тестовом контексте.
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnUser() throws Exception {
        mockMvc.perform(get("/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.id").value(1));
    }
}
1. @SpringBootTest поднимает полный application context. 2. @AutoConfigureMockMvc настраивает MockMvc. 3. Никакого Tomcat (и других встроенных серверов). 4. Запросы выполняются внутри через DispatcherServlet от Spring. 👉 Java Portal

Ищу хороший репозиторий с Claude skills для Java, Spring Boot и т.п. Нашёл вот этот: https://github.com/decebals/claude-code-java. 👉 Java Portal

Вопрос для интервью по Java Spring Boot: @Transactional + @EventListener С тех пор как AI начал активно залезать в мир разраб
Вопрос для интервью по Java Spring Boot: @Transactional + @EventListener С тех пор как AI начал активно залезать в мир разработки, паттерны на собеседованиях меняются. Тренд, который я недавно наблюдал: дают сниппет кода, и ты должен его проревьюить и отрефакторить логику под прод. [Дано]: Команда написала логику отправки письма после регистрации пользователя. На проде иногда бывает ситуация: письма приходят, а пользователя в базе нет. Найди проблему и почини: [Задачи]: - Объясни, в каком сценарии письмо будет отправлено, но пользователь не сохранится - Исправь код так, чтобы событие обрабатывалось только после того, как пользователь сохранён Код:
@Service

@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;
    private final ApplicationEventPublisher eventPublisher;

    
@Transactional

    public void register(UserDto dto) {
        User user = new User(http://dto.email());
        http://userRepository.save(user);

        eventPublisher.publishEvent(new UserRegisteredEvent(user));
    }
}

@Component

@RequiredArgsConstructor
public class EmailListener {

    private final EmailSender emailSender;
    private final SomeOtherService someOtherService;

    
@EventListener
 
    public void onUserRegistered(UserRegisteredEvent event) {
        emailSender.sendWelcome(event.user().getEmail());
        someOtherService.doSomething();
    }
}
👉 Java Portal

Совет по Java: Stream.toArray(Type[]::new) это аккуратный и типобезопасный способ получить массив из стрима. Избавляет от Obj
Совет по Java: Stream.toArray(Type[]::new) это аккуратный и типобезопасный способ получить массив из стрима. Избавляет от Object[] и ручных кастов. 👉 Java Portal

Почему твой бэкенд начинает тупить на 10k юзеров, хотя на 100 всё летало Обычно причина одна из этих: 1️⃣N+1 запросы → один запрос незаметно триггерит сотню походов в БД 2️⃣Нет индексов → на каждом поиске полный проход по таблице 3️⃣Тяжелая работа синхронно → письма, обработка картинок прямо внутри request cycle 4️⃣Нет стратегии кеширования → один и тот же запрос в БД выполняется 1000 раз 5️⃣Единая точка отказа → один инстанс БД тащит на себе вообще всё Приложение не стало внезапно медленным. Оно просто доросло до момента, когда плохие решения стали заметны. 👉 Java Portal

Задумывался, как работают ActiveMQ и RabbitMQ? В основе у них producer/consumer паттерн. Как его реализовать? Это базовая схе
Задумывался, как работают ActiveMQ и RabbitMQ? В основе у них producer/consumer паттерн. Как его реализовать? Это базовая схема обмена данными между несколькими потоками. Поток-продюсер отправляет объекты на условную обработку, а потоки-консьюмеры асинхронно их получают и обрабатывают. Общий вид решения такой: продюсер кладет объекты в специальную коллекцию, буфер. Когда консьюмер освобождается, он запрашивает из буфера один объект. Если буфер пустой, консьюмер блокируется и ждёт; если буфер переполнен, ждёт продюсер. Реализовать этот паттерн можно по-разному. Самый правильный способ для продакшена: брать готовую реализацию из стандартной библиотеки, например BlockingQueue. На собеседованиях обычно просят написать реализацию с нуля. На картинке показан один из вариантов. Модификатор synchronized гарантирует, что в один момент времени выполняется только один из методов и только одним потоком. Этого достаточно для корректной работы, пока буфер не пуст и не переполнен. Когда буфер пустой или полный, управление явно передаётся продюсеру или консьюмеру соответственно через notify() и wait(). 👉 Java Portal