Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для 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 052 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 443-o'rinni va Rossiya mintaqasida 54 522-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 052 obunachiga ega bo‘ldi.
24 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -154 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.53% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.43% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 389 marta ko‘riladi; birinchi sutkada odatda 775 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 5 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 25 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.
createUser(firstName, lastName, street, city, zip, country);
✅ Лучше сгруппировать связанные данные в отдельный объект:
createUser(firstName, lastName,
new Address(street, city, zip, country));
Такой подход:
• делает сигнатуры методов компактнее
• упрощает расширение модели данных
• снижает вероятность ошибок при вызове
• делает код более понятным и самодокументируемым
Если несколько параметров всегда используются вместе — вероятно, им нужен собственный класс или record.
#Java #Refactoring #CleanCode
👉 Java PortalCOPY . .
RUN npm install
должно быть:
COPY package*.json ./
RUN npm install
COPY . .
почему это важно?
docker кэширует каждую инструкцию как отдельный слой
исходный код меняется с каждым коммитом
поэтому COPY . . ломает кэш, и всё после него (включая npm install) пересобирается с нуля при каждой сборке
если поменять порядок, слой с установкой зависимостей остаётся в кэше даже при изменении кода, потому что он зависит только от package.json
одна перестановка строк. экономит 40+ секунд на каждой пересборке. кэшируй зависимости, а не код.
👉 Java PortalList<String> names = users.stream()
.filter(User::isActive)
.map(User::getName)
.sorted()
.toList();
Пиши, что тебе нужно получить из данных. Не расписывай цикл вручную. Stream сделает это короче и чище.
👉 Java Portalnew Order("Mario", "Laptop", 2, true, "Leave at door");
Через несколько месяцев уже сложно понять, что означает true, а при добавлении новых параметров конструктор быстро становится неудобным.
Builder решает эту проблему:
Order order = Order.builder()
.customer("Mario")
.product("Laptop")
.quantity(2)
.express(true)
.note("Leave at door")
.build();
Преимущества:
✅ Именованные параметры делают код читаемее
✅ Можно задавать значения в любом порядке
✅ Удобно работать с необязательными полями
✅ Значения по умолчанию задаются в Builder
✅ Валидацию можно выполнять один раз в build()
✅ Нет путаницы с конструкторами из 5–10 аргументов
Builder особенно полезен для DTO, конфигураций, запросов к API и объектов с большим количеством параметров.
Поэтому его часто можно встретить в Java-проектах и библиотеках вроде Lombok, где достаточно добавить аннотацию @Builder.
👉 Java Portalspring.datasource.connection-fetch=lazyПо умолчанию методы с
@Transactional получают соединение с БД сразу при открытии транзакции, даже если запрос в итоге так и не выполняется.
Попадание в кэш, ранний return, долгий вызов внешнего API перед сохранением данных — во всех этих случаях соединение просто простаивает без дела.
Режим lazy откладывает получение соединения до момента, когда действительно выполняется SQL-запрос.
Dan Vega собрал демо, которое показывает это на метриках HikariCP.
Количество захватов соединений (acquire count) падает примерно со 100 до почти 0.
👉 Java Portalpublic class Balance {
private BigDecimal amount = BigDecimal.ZERO;
public void deposit(BigDecimal v) {
amount = amount.add(v);
}
public BigDecimal get() {
return amount;
}
}
Если два потока одновременно вызовут deposit(), возможны потерянные обновления (lost updates), гонки данных (race conditions) и чтение неконсистентного состояния.
✅ Неизменяемый объект — обновление через создание нового экземпляра
public record Balance(BigDecimal amount) {
public Balance deposit(BigDecimal v) {
return new Balance(amount.add(v));
}
}
Вместо изменения существующего объекта создаётся новый.
Потоки могут безопасно работать со своими снимками состояния (snapshot), а каждый вызов deposit() возвращает новый объект.
✅ Неизменяемые коллекции
List<String> roles = List.of("READ", "WRITE");
Map<String, Integer> limits =
Map.of("free", 10, "pro", 100);
Такие коллекции можно безопасно передавать между потоками без дополнительной синхронизации.
✅ Защитная копия (defensive copy)
Если исходная коллекция всё ещё изменяемая:
List<String> snapshot = List.copyOf(mutableRoles);
Создай неизменяемую копию перед публикацией другим частям приложения.
На практике immutable-подход позволяет существенно сократить количество synchronized, блокировок и ошибок многопоточности. Поэтому современные API Java (record, List.of(), Map.of(), Optional, LocalDateTime) активно используют неизменяемые объекты по умолчанию.
👉 Java Portalinstanceof.
Проверки типов часто приводят к разрастающимся if/else, нарушают принцип Open/Closed и заставляют изменять существующий код при добавлении новых сущностей.
❌ До:
public String describe(Animal animal) {
if (animal instanceof Dog) {
return "Woof";
} else if (animal instanceof Cat) {
return "Meow";
} else if (animal instanceof Cow) {
return "Moo";
}
throw new IllegalArgumentException("Unknown animal");
}
Каждый новый тип требует правки метода.
✅ После:
public interface Animal {
String sound();
}
public final class Dog implements Animal {
public String sound() {
return "Woof";
}
}
public final class Cat implements Animal {
public String sound() {
return "Meow";
}
}
public final class Cow implements Animal {
public String sound() {
return "Moo";
}
}
public String describe(Animal animal) {
return animal.sound();
}
Преимущества:
→ нет цепочек instanceof и приведения типов
→ меньше условной логики
→ проще расширять систему новыми типами
→ соблюдается принцип Open/Closed
→ поведение находится внутри самого объекта, а не размазано по коду
Добавить новое животное теперь можно без изменения существующей логики:
public final class Sheep implements Animal {
public String sound() {
return "Baa";
}
}
Клиентский код останется прежним:
describe(new Sheep());
Пусть объекты сами решают, как себя вести. Именно для этого и существует полиморфизм. #Java #OOP
👉 Java Portal@CircuitBreaker(name = "CircuitBreakerService")
String getInstance();
Circuit breaker временно «размыкает цепь», когда ошибок слишком много. Вместо бесконечных ретраев и просадки всего приложения ты отдаёшь fallback:
public String getAuthorServiceInstanceFallback(Exception ex) {
return "Fallback content";
}
В application.yml можно задать порог ошибок и время ожидания:
failure-rate-threshold: 50 wait-duration-in-open-state: 5sИдея простая: внешний сервис упал — твоё приложение деградирует контролируемо, а не валится следом. 👉 Java Portal
Exception на всякий случай
Плохая практика:
catch (Exception e)Такой код скрывает реальные проблемы. Для приложения одинаково начинают выглядеть ошибки бизнес-логики,
NullPointerException, проблемы с памятью и другие сбои.
Ловите только те исключения, которые действительно можете обработать:
catch (IOException e) { ... }
catch (JsonProcessingException e) { ... }
catch (DuplicateKeyException e) { ... }
Тогда становится понятно:
что именно пошло не так;
какие ошибки ожидаемы;
какие нужно логировать;
какие должны прерывать выполнение.
И ещё одно правило:
catch (Throwable t)Почти никогда не используйте. Так можно перехватить
OutOfMemoryError, StackOverflowError и другие критические ошибки, после которых приложение зачастую уже не способно нормально продолжать работу.
Лови только то, что умеешь исправить. Остальное пусть поднимается выше по стеку вызовов.
👉 Java Portalhello world.
Spring Boot 4.1 закрывает большую часть этой рутины.
Если ты умеешь писать REST-приложение, базовые шаги уже знакомы:
→ описать контракт
→ добавить bean с @GrpcService
→ заинжектить stub на клиенте
Полный сервер, клиент и in-memory тест с нуля 👇
https://github.com/danvega/hello-grpc
👉 Java Portal
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
