Java Learning
№ 5079899194 Обучающий канал по Java Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6 По всем вопросам @mascarov_valentin Реклама на бирже - https://telega.in/c/Java_per_month
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Java Learning
تُعد قناة Java Learning (@java_per_month) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 16 862 مشتركاً، محتلاً المرتبة 7 849 في فئة التكنولوجيات والتطبيقات والمرتبة 39 982 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 16 862 مشتركاً.
بحسب آخر البيانات بتاريخ 10 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -148، وفي آخر 24 ساعة بمقدار 2، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 9.24%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 4.62% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 558 مشاهدة. وخلال اليوم الأول يجمع عادةً 780 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 2.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل learning, строка, map, static, интерфейс.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“№ 5079899194
Обучающий канал по Java
Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6
По всем вопросам @mascarov_valentin
Реклама на бирже - https://telega.in/c/Java_per_month”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 11 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
clone(), вот несколько лучших практик для упрощения задачи:
public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет
return c;
}
🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:
Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();
Ранее, например, с классом Date, нужно было явно приводить результат метода clone():
Date d = new Date();
Date clone = (Date) d.clone();
Java Learning 👩💻wait(), notify() и notifyAll(), я использовал if для проверки условия ожидания перед вызовом wait() и notify():
synchronized(queue) {
if(queue.isFull()){
queue.wait();
}
}
🗣️ К счастью, проблем не возникло, но я понял свою ошибку, прочитав раздел из книги Effective Java. Там сказано, что условие ожидания следует проверять в цикле, потому что потоки могут получать ложные уведомления, и до того, как вы что-то сделаете, условие может снова стать истинным. Поэтому правильный способ использования wait() и notify() выглядит так:
synchronized(queue) {
while(queue.isFull()){
queue.wait();
}
}
Java Learning 👩💻List<String> listOfCurrencies = new ArrayList<>();
listOfCurrencies.add("USD/AUD");
listOfCurrencies.add("USD/JPY");
listOfCurrencies.add("USD/INR");
🗣️ Хотя Arrays.asList() возвращает List, его нужно передать конструктору ArrayList, потому что возвращаемый список имеет фиксированную длину, и вы не можете добавлять или удалять элементы.
✔️ Начиная с Java 9, можно использовать методы List.of() и Set.of() для создания списка и множества с элементами. Это предпочтительнее, так как они возвращают неизменяемые списки и множества.
Java Learning 👩💻List<String> listOfCurrencies = new ArrayList<>();
listOfCurrencies.add("USD/AUD");
listOfCurrencies.add("USD/JPY");
listOfCurrencies.add("USD/INR");
🗣️ Хотя Arrays.asList() возвращает List, его нужно передать конструктору ArrayList, потому что возвращаемый список имеет фиксированную длину, и вы не можете добавлять или удалять элементы.
✔️ Начиная с Java 9, можно использовать методы List.of() и Set.of() для создания списка и множества с элементами. Это предпочтительнее, так как они возвращают неизменяемые списки и множества.
Java Learning 👩💻List<String> listOfCurrencies = new ArrayList<>();
listOfCurrencies.add("USD/AUD");
listOfCurrencies.add("USD/JPY");
listOfCurrencies.add("USD/INR");
🗣️ Хотя Arrays.asList() возвращает List, его нужно передать конструктору ArrayList, потому что возвращаемый список имеет фиксированную длину, и вы не можете добавлять или удалять элементы.
✔️ Начиная с Java 9, можно использовать методы List.of() и Set.of() для создания списка и множества с элементами. Это предпочтительнее, так как они возвращают неизменяемые списки и множества.
Java Learning 👩💻Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.rupublic enum Singleton {
INSTANCE;
}
✔️ Это потокобезопасно, надежно, и Java гарантирует наличие только одного экземпляра, даже в случае сериализации и десериализации.
➡️ Использование перечислений (enum) для реализации паттерна Singleton является отличным подходом в Java. Enum обеспечивает множество преимуществ:
• Потокобезопасность: Перечисления в Java создаются с использованием потокобезопасного механизма. Это означает, что вы не столкнетесь с проблемами, связанными с многопоточностью.
• Гарантия единственности экземпляра: Java гарантирует, что в системе будет только один экземпляр перечисления, даже при использовании различных потоков или классов загрузчиков.
• Сериализация и десериализация: При использовании enum Java автоматически обрабатывает сериализацию и десериализацию таким образом, чтобы сохранить единственность экземпляра. Это означает, что при десериализации вы не получите новый экземпляр, а вернется тот же самый экземпляр.
Java Learning 👩💻Set<Key> keySet = map.keySet();
for (Key k : keySet) {
Value v = map.get(k);
print(k, v);
}
➡️ Это выполняет дополнительный поиск для получения значения из Map, что в худшем случае может быть O(n). Если вам нужны и ключ, и значение, то лучше итерировать по entrySet, а не по keySet.
Set<Map.Entry<Key, Value>> entrySet = map.entrySet();
for (Map.Entry<Key, Value> e : entrySet) {
Key k = e.getKey();
Value v = e.getValue();
}
✔️ Это более эффективно, потому что вы получаете значение напрямую из объекта, что всегда занимает O(1).
Java Learning 👩💻Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruAtomicLong. Класс LongAdder позволяет выполнять атомарные арифметические операции над типом long. LongAccumulator принимает произвольную функцию аккумуляции результатов.
🗣️ Эта функция принимает текущее значение, аргумент переданный в метод accumulate() и возвращает результат логического объединения (accumulate) двух значений.
При получении результата все элементы редуцируются в один общий результат. Вся эта кухня намекает нам, что функция аккумуляции должна быть коммутативна и ассоциативна. В противном случае результат будет зависеть от физического порядка выполнения операций, который данный класс не гарантирует.Java Learning 👩💻
public class ByScoreComparator implements Comparator<User> {
@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}
➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.
Теперь это не нужно. Можно использовать ссылки на методы:
Comparator<User> comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List<User> hList = ...;
hList.sort(comparator);
🗣️ Такой подход упрощает создание компараторов.
Java Learning 👩💻public class ByScoreComparator implements Comparator<User> {
@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}
➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.
Теперь это не нужно. Можно использовать ссылки на методы:
Comparator<User> comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List<User> hList = ...;
hList.sort(comparator);
🗣️ Такой подход упрощает создание компараторов.
Java Learning 👩💻Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruBufferedReader, поэтому теперь Stream’ы доступны поверх любого InputStream‘а.
Java Learning 👩💻// Java 7 и ранее
ThreadLocal<ObjectMapper> mapper = new ThreadLocal<>() {
@Override
protected ObjectMapper initialValue() {
return new ObjectMapper();
}
};
✔️ Но теперь, за счёт замыканий, стало проще:
// Java 8
ThreadLocal<ObjectMapper> mapper = withInitial(() -> new ObjectMapper());
Java Learning 👩💻
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
