Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Java Portal | Программирование
تُعد قناة Java Portal | Программирование (@java_iibrary) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 11 768 مشتركاً، محتلاً المرتبة 10 256 في فئة التكنولوجيات والتطبيقات والمرتبة 54 543 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 11 768 مشتركاً.
بحسب آخر البيانات بتاريخ 29 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -144، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 10.09%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.78% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 188 مشاهدة. وخلال اليوم الأول يجمع عادةً 681 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 4.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل boot, string, void, архитектура, resttemplate.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Связь: @devmangx
РКН: https://clck.ru/3H4WUg”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 30 أغسطس, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
java.text.CompactNumberFormat. Она позволяет компактно отображать большие числа
Пример:
Locale.setDefault(Locale.US);
NumberFormat compact = NumberFormat.getCompactNumberInstance();
System.out.println(compact.format(1));
System.out.println(compact.format(999));
System.out.println(compact.format(2_000));
System.out.println(compact.format(55_555));
System.out.println(compact.format(3_777_999));
System.out.println(compact.format(Integer.MAX_VALUE));
Вывод:
1
999
2K
56K
4M
2B
Также доступен стиль LONG:
NumberFormat compact;
compact = NumberFormat.getCompactNumberInstance(Locale.US, Style.LONG);
Результат:
1
999
2 thousand
56 thousand
4 million
2 billion
Идеально для UI, отчетов и всего, где важна краткость 💖
👉 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 PortalPaymentService, поддерживающий оплату кредитной картой.
Вы пишете:
public void pay(String method) {
if (method.equals("creditcard")) {
// логика оплаты кредиткой
}
}
Потом добавляют PayPal, UPI, крипту, Apple Pay, кошельки, NetBanking и тд.. 😢
Теперь ваш метод выглядит вот так:
if (method.equals("creditcard")) {
// логика кредитки
} else if (method.equals("paypal")) {
// логика PayPal
} else if ...
Вы тонете в аду if-else. Каждый раз при добавлении нового способа оплаты:
> Вы трогаете старый код
> Рискуете сломать существующую логику
> Нельзя нормально протестировать стратегии
> Нарушается принцип OCP (Open/Closed)
В чём настоящая проблема?
1. Ваш код слишком жёстко связан с конкретными реализациями оплат
2. Добавление новых стратегий требует изменения существующего кода
3. Тестировать/переиспользовать отдельные стратегии — сложно
4. PaymentService теперь отвечает за слишком многое
Как Strategy Pattern вас спасает
1. Создаёшь интерфейс PaymentStrategy
2. Для каждой оплаты — свой класс: CreditCardPayment, PayPalPayment, UPIPayment
3. PaymentService просто вызывает .pay() на нужной стратегии
☑ Добавить новый способ? Просто пишешь новый класс
☑ Никаких if-else
☑ Стратегии изолированы и легко тестируются
interface PaymentStrategy {
void pay(int amount);
}
class CreditCardPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Плачу " + amount + " с помощью кредитки");
}
}
class PayPalPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Плачу " + amount + " через PayPal");
}
}
👉 Java PortalHashMap, TreeMap, ConcurrentHashMap — лови таблицу сравнения
> HashMap — быстрая, но не потокобезопасная. Подходит для общего использования
> LinkedHashMap — сохраняет порядок вставки
> TreeMap — сортирует по ключам.
> Hashtable — потокобезопасна, но старая и медленная
> ConcurrentHashMap — оптимальна для многопоточности
> EnumMap — супербыстрая для enum-ключей
> IdentityHashMap — использует == вместо .equals()
> WeakHashMap — ключи могут быть удалены GC. Полезно для кэшей
Не забывай про null-ключи, производительность, порядок —> всё это влияет на выбор структуры данных 💖
👉 Java Portal.antMatchers("/swagger-ui/", "/v3/api-docs/").permitAll()
Так разработчики смогут спокойно тестировать и изучать API без входа в систему
👉 Java PortaltoString и hashCode не были переопределены? Тогда метод Objects::toIdentityString — это то, что вам нужно:
void main() {
IO.println(this);
IO.println(Objects.toIdentityString(this));
}
@Override
public String toString() {
return "Hello, World!";
}
При выполнении на моей машине выводится:
Hello, World!
HelloWorld@275710fc
Метод был введён в JDK 19. Документация Javadoc не говорит много о возможных вариантах использования. В баге JDK-8280184 Стюарт Маркс пишет:
Это может быть полезно в логировании, например, когда нужно отслеживать операции, выполненные над каким-то конкретным объектом, например, перед сбоем. Идентичный хэшкод — полезный способ сделать это👉 Java Portal
• Знания Java, не на базовом уровне. • Опыт работы Figma • Умение писать грамотные тексты с доступным объяснением на разные темы.Если вам интересно и есть достаточно свободного времени, отпишите — @energy_it.
void main() {
var after = new Final(this::before);
IO.println("After value=" + after.value);
}
private void before(Final before){
IO.println("Before value=" + before.value);
}
class Final {
final int value;
Final(Consumer<? super Final> listener) {
listener.accept(this);
value = 123;
}
}
Результат выполнения будет таким:
Before value=0
After value=123
Это пример утечки this.
JEP 401 называет это larval object leakage — ситуация, когда объект, ещё не до конца инициализированный, "просачивается" из конструктора и используется раньше времени.
В JDK 24 в рамках JEP о гибких телах конструкторов (Flexible Constructor Bodies) эта проблема решается следующим образом:
Код в начале конструктора не должен использовать this, кроме как для инициализации полей, у которых нет своих инициализаторов.Иначе говоря, в начальной части конструктора теперь нельзя "утечь" наружу с
this, пока объект не готов
👉 Java Portal this. Например, следующий код выведет Hello, World!:
private Runnable runnable = () -> {
System.out.println(this);
};
@Override
public String toString() {
return "Hello, World!";
}
void main() {
runnable.run();
}
А если заменить лямбду на анонимный класс, результат будет вроде InnerClassThis$1@568bf312:
private Runnable runnable = new Runnable() {
@Override public void run() {
System.out.println(this);
}
};
@Override
public String toString() {
return "Hello, World!";
}
void main(String[] args) {
runnable.run();
}
То есть у лямбды нет собственного this — она использует this из внешнего контекста. Это чётко описано в спецификации Java:
Значение this в теле лямбды — то же самое, что и this во внешнем контексте.Если хочешь разобраться глубже, смотри официальный гайд 👉 Java Portal
@OneToMany и @ManyToOne помогают определить связи между сущностями в базе данных
Пример:
Пользователь может иметь много заказов →
@OneToMany(mappedBy = "user")
private List<Order> orders;
Каждый заказ принадлежит одному пользователю →
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
👉 Java Portal