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 11 775 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 273-o'rinni va Rossiya mintaqasida 54 502-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 11 775 obunachiga ega bo‘ldi.
26 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -154 ga, so‘nggi 24 soatda esa -2 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 10.27% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.76% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 209 marta ko‘riladi; birinchi sutkada odatda 678 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 27 Avgust, 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.
org.hibernate.SQL=DEBUG можно получить более детальный вывод Hibernate-запросов прямо в логах.
#SpringBoot #Hibernate
👉 Java Portal@Async только для небольших задач на оффлоадинг и только с явно заданным исполнителем.
#SpringBoot #SoftwareDevelopment
👉 Java Portalgrep, если в IDE уже есть семантический поиск, навигация по символам и рефакторинги?
Интересный момент: Codex, судя по наблюдениям, заметно лучше использует такие инструменты, чем Claude Code.
👉 Java Portalequals(), hashCode(), toString()
✅ по умолчанию неизменяемые
#JavaDev #Records
👉 Java Portalapplication.yml, конфигурация подтягивается из единого источника.
Сначала нужно сконфигурировать сервер конфигурации.
Поднимается отдельное приложение сервера конфигурации с аннотацией @EnableConfigServer и Git-репозиторий, где лежат все .yml файлы.
Сервер отдает конфигурацию по HTTP, клиенты подтягивают её при старте.
<!-- Setting Up the Config Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
// Enable it with @EnableConfigServer annotation
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
# Point it to your Git repository
spring:
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: main
clone-on-start: true
server:
port: 8888
Структура Git-репозитория следует соглашениям именования Spring Boot:
{application-name}-{profile}.yml
или
{application-name}/{profile}.yml
Клиентское приложение нужно настроить: добавить стартовую зависимость и минимальную конфигурацию.
<!-- Add the client dependency -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
# Configure the application to fetch config from the config server
spring:
application:
name: order-service
config:
import: "optional:configserver:http://localhost:8888"
cloud:
config:
profile: dev
server:
port: 8080
Динамическое обновление конфигурации без рестарта достигается через перезагружаемые бины с аннотацией @RefreshScope:
package ...;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Конфиденциальные данные должны быть зашифрованы в файлах конфигурации:
@Service
@RefreshScope
public class PricingService {
@Value("${pricing.discount.percentage:0}")
private int discountPercentage;
// This value updates when config changes, no restart needed
}
curl -X POST http://localhost:8080/actuator/refresh
👉 Java Portalstatic final ScopedValue<User> USER = ScopedValue.newInstance();
ScopedValue.where(USER, user)
.run(() -> UserService.updateUser());
👉 Java PortalList.of() и Set.of() для создания неизменяемых коллекций.
✅ Это быстрый способ создать немодифицируемые списки и множества без использования Collections.unmodifiableList().
#Java #Коллекции
👉 Java PortalLambdaMetaFactory
Следующий код на Java создаёт объект Function<String, String>
Function<String, String> f = s -> s.toUpperCase();
Во время выполнения объект создаётся с помощью кода, аналогичного следующему:
@SuppressWarnings("unchecked")
void main() throws Throwable {
MethodHandles.Lookup lookup;
lookup = MethodHandles.lookup();
CallSite callSite;
callSite = LambdaMetafactory.metafactory(
lookup,
"apply",
MethodType.methodType(Function.class),
MethodType.methodType(Object.class, Object.class),
lookup.findStatic(
getClass(),
"lambda",
MethodType.methodType(String.class, String.class)
),
MethodType.methodType(String.class, String.class)
);
MethodHandle target;
target = callSite.getTarget();
Function<String, String> f;
f = (Function<String, String>) target.invokeExact();
String msg;
msg = f.apply("Hello, World!");
IO.println(msg);
}
private static String lambda(String s) {
return s.toUpperCase();
}
При выполнении этот код выведет в консоль HELLO, WORLD! ❤️
👉 Java PortalString question; to: be: or: not: that: is: the: question = "What?"; out.println(question);> Код компилируется > Метки (
to:, be:, or: и т.д.) игнорируются, если не используются в break или continue
Вывод:
What?Иногда Java действительно говорит с нами стихами 🫢 👉 Java Portal
@OpenAPIDefinition.
✅ Её размещают на основном классе приложения Spring Boot или в отдельном конфигурационном классе.
#SpringBoot #JavaDev
👉 Java PortalString c = "a" + "b";
Что важно:
Строка в Java хранится как byte[] + флаг кодировки:
0 — LATIN1 (1 байт на символ, для ASCII экономия памяти)
1 — UTF-16 (2 байта на символ)
Строки размещаются в двух областях:
- куча
- пул строковых констант (SCP)
Пример:
String a = "hello", b = "hello";
a == b → true, обе переменные указывают на один объект из пула
Пример:
String a = "hello", b = new String("hello");
a == b → false, разные объекты в куче
При такой записи:
String c = "a" + "b";
компилятор Java выполняет константную свёртку и подставляет готовое значение:
String c = "ab";
Конкатенации на этапе выполнения нет — это вычисляется на этапе компиляции.
но это не работает со строковыми переменными:
java id="xq7v2m" String a = "a", b = "b", c = a + b;здесь компилятор Java уже не может сделать константную свёртку, поэтому генерируется вызов через
invokedynamic с StringConcatFactory
На уровне байткода это реализуется через механизм динамической конкатенации строк (JEP 280 / JEP 357), который выбирает оптимальную стратегию выполнения во время запуска.
В ранних версиях вместо этого использовался StringBuilder, где код фактически превращался в цепочку append() и финальный toString().
👉 Java Portal-Xms, -Xmx — размер heap.
-XX:NewRatio — соотношение поколений.
GC-логи анализируются для поиска пауз и аллокаций.
6. Утечки памяти
Причины: статические коллекции, кеши без очистки, listener’ы.
Инструменты: VisualVM, JConsole, Eclipse MAT.
7. OutOfMemoryError
Heap overflow, Metaspace overflow, Direct memory.
Решения: тюнинг heap, профилинг, оптимизация аллокаций.
8. Типы ссылок
Soft — для кешей.
Weak — сборка при следующем GC.
Phantom — для пост-очистки.
9. ThreadLocal
Утечки из-за хранения значений без remove().
Проблема усиливается в пуле потоков.
10. finalize()
Непредсказуемый вызов, влияет на GC.
Замена — Cleaner или try-with-resources.
11. Direct Memory
Off-heap через ByteBuffer.allocateDirect.
Контроль сложнее, GC не управляет напрямую.
12. JEP по GC
ZGC (JEP 307) — низкие паузы.
Shenandoah (JEP 189) — конкурентная очистка.
13. Архитектура JVM
ClassLoader, Runtime Data Areas, Execution Engine, JNI.
14. Загрузка классов
Loading → Linking → Initialization.
Загрузчики: Bootstrap, Platform (бывш. Extension), System.
15. Байткод
Инструкции JVM, стековая модель исполнения.
Интерпретируется и оптимизируется JIT.
16. JIT-компилятор
Горячий код компилируется в машинный.
Оптимизации: инлайнинг, удаление мертвого кода.
17. Структура .class
Magic number, constant pool, методы, атрибуты.
18. Жизненный цикл потоков
NEW → RUNNABLE → BLOCKED/WAITING → TERMINATED.
JVM управляет планированием через ОС.
19. JNI
Связка с нативным кодом (C/C++).
Используется для low-level операций.
20. Профилинг JVM
CPU, память, потоки.
Инструменты: VisualVM, JConsole.
21. HotSpot
Основная реализация JVM.
Использует адаптивную оптимизацию и JIT.
22. Манипуляция байткодом
ASM, BCEL, Javassist.
Применяется в прокси, AOP, фреймворках.
23. Инструменты диагностики
jstack — дамп потоков.
jmap — heap dump.
jstat — статистика GC.
24. Безопасность классов
Верификация байткода.
Security Manager (устаревший, но концепт важен).
25. Java Memory Model (JMM)
Правила видимости и happens-before.
Ключевые примитивы: volatile, synchronized.
👉 Java PortalFiles.isSameFile(path1, path2), чтобы проверить, указывают ли два пути на один и тот же файл. Метод также резолвит симлинки.
Проверяет, ссылаются ли два объекта Path на один и тот же реальный файл в файловой системе.
#Java #РазработкаПО
👉 Java Portal