Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
Показати більше📈 Аналітичний огляд Telegram-каналу Java Portal | Программирование
Канал Java Portal | Программирование (@java_iibrary) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 11 775 підписників, посідаючи 10 273 місце в категорії Технології та додатки та 54 502 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 11 775 підписників.
За останніми даними від 26 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -154, а за останні 24 години на -2, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 10.27%. Протягом перших 24 годин після публікації контент зазвичай збирає 5.76% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 1 209 переглядів. Протягом першої доби публікація в середньому набирає 678 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 4.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як boot, string, void, архитектура, resttemplate.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
Завдяки високій частоті оновлень (останні дані отримано 27 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
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