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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

📈 Telegram kanali Java Portal | Программирование analitikasi

Java Portal | Программирование (@java_iibrary) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 132 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 377-o'rinni va Rossiya mintaqasida 54 419-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 12 132 obunachiga ega bo‘ldi.

05 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -142 ga, so‘nggi 24 soatda esa -1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 11.75% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.20% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 426 marta ko‘riladi; birinchi sutkada odatda 753 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent boot, string, void, архитектура, resttemplate kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Yuqori yangilanish chastotasi (oxirgi ma’lumot 07 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

12 132
Obunachilar
-124 soatlar
-407 kunlar
-14230 kunlar
Postlar arxiv
Совет по Spring Boot: если тебе нужны интеграционные тесты для контроллеров Spring MVC, а всё остальное ты хочешь замокать, и
Совет по Spring Boot: если тебе нужны интеграционные тесты для контроллеров Spring MVC, а всё остальное ты хочешь замокать, используй @WebMvcTest — он поднимет только MVC-бины (контроллеры, конфиг MVC, конвертеры, валидацию и т.п.), без полного контекста приложения. ▪️Он грузит только MVC-бины, а не весь application context целиком. ▪️Интеграционные тесты медленнее юнитов, поэтому их стоит ускорять, выкидывая все лишнее, что не нужно конкретно для MVC. ▪️В этом примере мы мокaем бин HelloService и поднимаем только MVC-контекст и сам контроллер:
@WebMvcTest(HelloController.class)
class HelloControllerTest {

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private HelloService helloService; // замокано

  @Test
  void sayHello_returnsExpectedMessage() throws Exception {
    given(helloService.getMessage()).willReturn("Hello!");
    mockMvc.perform(get("/api/hello"))
      .andExpect(status().isOk())
      .andExpect(content().string("Hello!"));
  }
}
👉 Java Portal

java.evolved это подборка, где каждый старый паттерн из Java показан рядом с его современным заменителем, прямо бок о бок. 👍👍👍 👉 Java Portal

Spring Boot: используй @SpringBootApplication(exclude = …), чтобы отключить конкретные классы автоконфигурации. ✅ Одна из воз
Spring Boot: используй @SpringBootApplication(exclude = …), чтобы отключить конкретные классы автоконфигурации. ✅ Одна из возможных причин: кастомная конфигурация конфликтует с дефолтной. 👉 Java Portal

Какой SQL-запрос будет выполнен при вызове метода findByEmail()? 1. SELECT * FROM users WHERE email LIKE ? 2. SELECT id, name
Какой SQL-запрос будет выполнен при вызове метода findByEmail()? 1. SELECT * FROM users WHERE email LIKE ? 2. SELECT id, name, email FROM users WHERE email LIKE ? 3. SELECT * FROM users WHERE email = ? LIMIT 1 4. SELECT * FROM users WHERE email = ? 5. SELECT * FROM users WHERE email = email 👉 Java Portal

Java tip : старайся не шарить данные между потоками. ✅Используй иммутабельные объекты ✅Либо пусть потоки общаются через сообщ
Java tip : старайся не шарить данные между потоками. ✅Используй иммутабельные объекты ✅Либо пусть потоки общаются через сообщения, не трогая общий state напрямую и не мутируя shared-состояние
// С иммутабельными объектами:

record Book(String title, int price) {} // Иммутабельный

public class BookJob implements Runnable {
    private final Book book;
    .... // конструктор

    @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

Вопрос для собеседования по Spring Boot: Какой будет результат запуска, если активный профиль не указан? ❓ Spring по умолчани
Вопрос для собеседования по Spring Boot: Какой будет результат запуска, если активный профиль не указан? ❓ Spring по умолчанию выберет бин DevNotificationService ❓ Spring выберет первый бин в алфавитном порядке ❓ Приложение упадет с NoSuchBeanDefinitionException ❓ Бины не будут созданы, но приложение запустится ❓ Будут созданы оба бина - NoUniqueBeanDefinitionException 👉 Java Portal

Spring Boot: можно использовать @Retryable, чтобы переживать нестабильность внешних сервисов. @Service public class ExtServic
Spring Boot: можно использовать @Retryable, чтобы переживать нестабильность внешних сервисов.
@Service
public class ExtService {

    @Retryable(
        value = { HttpServerErrorException.class, ResourceAccessException.class },
        maxAttempts = 3,
        backoff = @Backoff(delay = 2000, multiplier = 2)
    )
    public ExtServiceResponse process(ExtServiceRequest request) {
        // Call external payment gateway
        return restTemplate.postForObject("https://ext-gateway/api/service", request,
            ExtServiceResponse.class);
    }

    @Recover
    public ExtServiceResponse recover(Exception e, ExtServiceRequest request) {
        // Fallback logic after retries are exhausted
        log.error("Failed after retries: {}", e.getMessage());
        return new ExtServiceResponse("FAILED");
    }
}
Что это делает: ▪️Делает 3 ретрая, если вылетают указанные исключения. ▪️Стартует с задержки 2 секунды и удваивает ее на каждой попытке (экспоненциальный backoff). ▪️Если все попытки провалились, вызывает recover(). 👉 Java Portal

Как прогревать кэши в Spring Boot? И вообще, как делать что-то на старте приложения? Обычно такие операции делают в @PostConstruct или ловят событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус. Если “прогрев” лежит в @PostConstruct, как его отключать в тестах? Можно завести флаг, сделать наследника и подменять бин в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль. Покажу более элегантный способ “прогрева кэшей”. В какой-то момент точно пригодится. Смотри: SpringApplication.run(...) возвращает полностью готовый контекст. Из него можно получить нужный компонент и вызвать метод “прогрева”. Код выглядит так:
@SpringBootApplication
public class MainApplication {
  public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(MainApplication.class, args);
    AccountService accService = ctx.getBean(AccountService.class);
    accService.loadDictionary();
  }
}
В чём плюс? В интеграционных тестах с @SpringBootTest метод main не запускается. Значит, код внутри не выполняется. Никаких костылей вокруг @PostConstruct, всё чисто и аккуратно. Когда всё-таки нужно, чтобы “прогрев” выполнялся и в тестах, добавь параметр “использовать main метод”:
@SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)
И всё. Если код должен выполняться после старта, но мешает тестам, клади его в main. Очень полезный приём. 👉 Java Portal

Java-совет: чтобы не ловить оверхед на boxing/unboxing, используй стримы примитивов (IntStream/LongStream/DoubleStream) вмест
Java-совет: чтобы не ловить оверхед на boxing/unboxing, используй стримы примитивов (IntStream/LongStream/DoubleStream) вместо Stream<Integer>/Stream<Long>/Stream<Double>. ❌Создаём объекты Integer для каждого значения:
Stream<Integer> boxed = Stream.of(1, 2, 3, 4, 5);
int sumBoxed = boxed.reduce(0, Integer::sum);
✅Работаем напрямую с int:
int sumPrimitive = IntStream.of(1, 2, 3, 4, 5).sum();
✅Другие примитивные стримы: LongStream, DoubleStream 👉 Java Portal

...Script 👉 Java Portal
...Script 👉 Java Portal

Большинство разработчиков в Spring знают, как доставать query-параметры и path variables. Но часто забывают, что HTTP-хедеры
Большинство разработчиков в Spring знают, как доставать query-параметры и path variables. Но часто забывают, что HTTP-хедеры можно вытаскивать так же просто. В Spring для этого есть аккуратный @RequestHeader. Можно в одну строку получить User-Agent, Authorization или любой кастомный хедер. И не нужно лезть в HttpServletRequest. Пример: ▪️Добавляешь в метод контроллера @RequestHeader("User-Agent") String userAgent ▪️Spring сам подхватывает значение из заголовка ▪️Ты получаешь его сразу параметром метода Нужно сделать опциональным? Просто добавь required = false. Нужен дефолт? ▪️Используй defaultValue = "unknown". ▪️Очень полезно для логирования, аналитики, A/B тестов или фичефлагов, завязанных на заголовки. ▪️Выручает при работе с API-клиентами, которые шлют кастомные заголовки. ▪️Чище, короче и легче тестируется. ▪️Чем меньше зависимостей от servlet API, тем лучше. 👉 Java Portal

Spring Boot: отдавай предпочтение статическим utility-классам вместо Spring-бинов только если они не хранят состояние, у них
Spring Boot: отдавай предпочтение статическим utility-классам вместо Spring-бинов только если они не хранят состояние, у них нет зависимостей и их не нужно мокать или оборачивать в AOP.
public class CacheUtils {
    private static Map<String, String> cache = new HashMap<>();

    ...
}

// Кэш как выше разделяется между всеми потоками и может случайно изменяться

@Component
@Scope("request")
public class CacheService {
    private Map<String, String> cache = new HashMap<>();

    ...
}

// Если оформить это как бин, можно задать ему конкретный scope.

// Spring лучше управляет объектами с состоянием.
👉 Java Portal

Реальный event-driven проект на Core Java 21, Apache Kafka (KRaft mode) и PostgreSQL (в Docker). Проект показывает, как современные распределенные системы обрабатывают заказы асинхронно через Kafka, без блокировок и ожидания между сервисами. https://github.com/FlexiDriod/kafka-order-processing-system 👉 Java Portal

Spring Boot: можно реализовать оптимистическую блокировку через аннотацию @Version. ✅Идеально подходит, когда: - чтения проис
Spring Boot: можно реализовать оптимистическую блокировку через аннотацию @Version. ✅Идеально подходит, когда: - чтения происходят часто - записи сравнительно редкие - конфликты случаются нечасто ❌Не лучший вариант, когда: - конфликты происходят часто - нужна строгая сериализация
public class Account {

    @Id
    private Long id;

    private BigDecimal balance;

    @Version
    private Long version;
}
Когда читаем, Entity загружается с текущей версией. Допустим, version = 2. Когда делаем update, учитывается запись с version = 2. Если за это время другая транзакция уже успела её обновить, version уже не 2, апдейт не затронет ни одной строки, и Hibernate кинет OptimisticLockException. То есть конфликт ловится без блокировки строки. 👉 Java Portal

Совет: в REST-сервисах ты часто получаешь только ID сущностей. И не всегда нужно тащить их из БД. Чтобы проставить связь (по
Совет: в REST-сервисах ты часто получаешь только ID сущностей. И не всегда нужно тащить их из БД. Чтобы проставить связь (по сути, foreign key в базе), можно “создать” ссылку на сущность через getReferenceById(id) без SELECT и использовать её, чтобы задать relation.
@Service
public SomeService {

    @Autowired
    private ProductRepository productRepository;

    @Autowired
    private CategoryRepository featureRepository;

    public void setCategory(long productId, long categoryId) {
        Product product = productRepository.findById(productId).orElseThrow();  // executes SELECT
        Category category = categoryRepository.getReferenceById(categoryId);    // does not execute a SELECT
        product.setCategory(category);
        productRepository.save(product);
    }

}
👉 Java Portal

🔴 Завтра тестовое собеседование с Java-разработчиком 11 февраля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собес
🔴 Завтра тестовое собеседование с Java-разработчиком 11 февраля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Сергею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

Тонкие Docker-образы для Java: в этой статье вы узнаете, как собирать тонкие Docker-образы для ваших Java-приложений с использованием Alpine Linux и инструмента jlink. Мы будем опираться на свежие базовые образы Java 21 от Eclipse Temurin и BellSoft Liberica. Также мы сравним этих провайдеров с Alpaquita Linux, который тоже поставляется BellSoft. В сравнение также войдет оценка безопасности на основе количества уязвимостей. В качестве примера мы возьмем простое Spring Boot-приложение, которое поднимает несколько REST-эндпоинтов. Если вам интересна Java в контексте контейнеризации, на моем блоге вы можете найти несколько похожих статей. Например, можно почитать, как ускорить старт Java на Kubernetes с помощью CRaC в том посте. Еще есть статья, где сравниваются разные провайдеры JDK, которые используются для запуска Java-приложений в Paketo Buildpacks. 👉 Java Portal

Java-совет: используй ThreadLocal.withInitial(...), чтобы каждому потоку задавать своё безопасное значение по умолчанию. Знач
Java-совет: используй ThreadLocal.withInitial(...), чтобы каждому потоку задавать своё безопасное значение по умолчанию. Значение создаётся лениво (только при первом обращении). 👉 Java Portal

бэкенд-разработчики после написания 4 строк CSS. 👉 Java Portal
бэкенд-разработчики после написания 4 строк CSS. 👉 Java Portal

CodingBat Java: это сайт с интерактивными задачами по Java 👉 Java Portal
CodingBat Java: это сайт с интерактивными задачами по Java 👉 Java Portal