uz
Feedback
Java Learning

Java Learning

Kanalga Telegram’da o‘tish

№ 5079899194 Обучающий канал по Java Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6 По всем вопросам @mascarov_valentin Реклама на бирже - https://telega.in/c/Java_per_month

Ko'proq ko'rsatish

📈 Telegram kanali Java Learning analitikasi

Java Learning (@java_per_month) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 16 862 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 7 849-o'rinni va Rossiya mintaqasida 39 982-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 16 862 obunachiga ega bo‘ldi.

10 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -148 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 9.24% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.62% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 558 marta ko‘riladi; birinchi sutkada odatda 780 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent learning, строка, map, static, интерфейс kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
№ 5079899194 Обучающий канал по Java Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6 По всем вопросам @mascarov_valentin Реклама на бирже - https://telega.in/c/Java_per_month

Yuqori yangilanish chastotasi (oxirgi ma’lumot 11 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.

16 862
Obunachilar
+224 soatlar
-297 kunlar
-14830 kunlar
Postlar arxiv
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса Несмотря на критику функции клонирования объектов в Ja
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод 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() в цикле Когда я только начинал писать код для межпоточной коммуникации с использованием методов
👀 Проверка состояния wait() в цикле Когда я только начинал писать код для межпоточной коммуникации с использованием методов 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 👩‍💻

👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я ин
👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я инициализировал коллекцию так:
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 👩‍💻

👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я ин
👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я инициализировал коллекцию так:
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 👩‍💻

👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я ин
👀 Использование Arrays.asList() для инициализации коллекций или List.of(), Set.of() Раньше, даже зная элементы заранее, я инициализировал коллекцию так:
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 👩‍💻

⁉️ Kafka vs RabbitMQ — что выбрать? Наш открытый урок — ваш шанс раз и навсегда понять, какая система лучше подходит для ваши
⁉️ Kafka vs RabbitMQ — что выбрать? Наш открытый урок — ваш шанс раз и навсегда понять, какая система лучше подходит для ваших задач. Мы разберем ключевые различия между RabbitMQ и Apache Kafka, включая их архитектуру, производительность, способы хранения сообщений и внутреннюю организацию. Вы увидите демонстрацию работы брокеров сообщений и получите сравнительный анализ, который поможет вам сделать осознанный выбор. 25 июля в 20:00 мск, ждем вас на открытом уроке, который пройдет в рамках онлайн-курса «Java Developer. Professional» в OTUS. Занятие предназначено для разработчиков и архитекторов ПО. 👉 Записывайтесь на бесплатный вебинар «Kafka vs RabbitMQ: выбор правильной системы сообщений» прямо сейчас: https://otus.ru/lessons/java-professional/?utm_source=telegram&utm_medium=cpm&utm_campaign=java&utm_term=Java_per_month&utm_content=lesson_25-07-2025_usp-universal_java_text_no-headline_aida_short_aibanner_lesson-banner_blue_standart&erid=LjN8K78jd#event-4503 🎫 Начните обучение со скидкой в 10%, действует до конца июля. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

⚙️ Использование Enum как Singleton Жаль, что я не знал раньше, что можно написать Singleton в Java всего одной строкой: publ
⚙️ Использование Enum как Singleton Жаль, что я не знал раньше, что можно написать Singleton в Java всего одной строкой:
public enum Singleton {
    INSTANCE;
}
✔️ Это потокобезопасно, надежно, и Java гарантирует наличие только одного экземпляра, даже в случае сериализации и десериализации. ➡️ Использование перечислений (enum) для реализации паттерна Singleton является отличным подходом в Java. Enum обеспечивает множество преимуществ: Потокобезопасность: Перечисления в Java создаются с использованием потокобезопасного механизма. Это означает, что вы не столкнетесь с проблемами, связанными с многопоточностью. Гарантия единственности экземпляра: Java гарантирует, что в системе будет только один экземпляр перечисления, даже при использовании различных потоков или классов загрузчиков. Сериализация и десериализация: При использовании enum Java автоматически обрабатывает сериализацию и десериализацию таким образом, чтобы сохранить единственность экземпляра. Это означает, что при десериализации вы не получите новый экземпляр, а вернется тот же самый экземпляр. Java Learning 👩‍💻

ℹ️ Использование entrySet для итерации по HashMap Раньше я использовал keySet для итерации по HashMap, как показано ниже: Set
ℹ️ Использование entrySet для итерации по HashMap Раньше я использовал keySet для итерации по HashMap, как показано ниже:
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 👩‍💻

🤝 Не дай себя завязнуть в рутинных задачах! 🦾 Осваивай Spring и выходи на новый профессиональный уровень Пройди тест по Jav
🤝 Не дай себя завязнуть в рутинных задачах! 🦾 Осваивай Spring и выходи на новый профессиональный уровень Пройди тест по Java от OTUS Проверь насколько хорошо ты знаешь Java и готов освоить Spring! Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене. 👉 ПРОЙТИ ТЕСТ: https://otus.ru/lessons/javaspring/assessment/?utm_source=telegram&utm_medium=cpm&utm_campaign=java_spring&utm_term=Java_per_month&utm_content=headline_17-07-2024_usp-universal_java_text_no-headline_aida_short_aibanner_banner-hl1_green_standart&erid=LjN8K55LP 🎫 Начни обучение со скидкой в 10%, действует до конца июля. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

⚙️ LongAccumulator/LongAdder Два класса, которые представляют собой более производительные замены для AtomicLong. Класс LongA
⚙️ LongAccumulator/LongAdder Два класса, которые представляют собой более производительные замены для AtomicLong. Класс LongAdder позволяет выполнять атомарные арифметические операции над типом long. LongAccumulator принимает произвольную функцию аккумуляции результатов. 🗣️ Эта функция принимает текущее значение, аргумент переданный в метод accumulate() и возвращает результат логического объединения (accumulate) двух значений.
При получении результата все элементы редуцируются в один общий результат. Вся эта кухня намекает нам, что функция аккумуляции должна быть коммутативна и ассоциативна. В противном случае результат будет зависеть от физического порядка выполнения операций, который данный класс не гарантирует.
Java Learning 👩‍💻

Ответ:
Anonymous voting

⌛ Что будет выведено при выполнении кода? Java Learning 👩‍💻
Что будет выведено при выполнении кода? Java Learning 👩‍💻

👀 Datafaker Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более
👀 Datafaker Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных. 🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости. 🔗 Ссылочка на доку Java Learning 👩‍💻

⚙️ Instancio Как вы генерируете тестовые данные в ваших модульных тестах? Instancio поможет нам в этом. Ее цель — сократить в
⚙️ Instancio Как вы генерируете тестовые данные в ваших модульных тестах? Instancio поможет нам в этом. Ее цель — сократить время и количество строк кода, затрачиваемых на ручную настройку данных в модульных тестах. Она создает объекты и заполняет их случайными данными, делая наши тесты более динамичными. ✔️ С помощью Instancio мы можем генерировать случайные данные, но в то же время мы можем установить пользовательские данные в определенном поле. 🔗 Ссылочка на доку Java Learning 👩‍💻

❓ Парадокс Comparator’а Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так: pu
Парадокс Comparator’а Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:
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 👩‍💻

❓ Парадокс Comparator’а Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так: pu
Парадокс Comparator’а Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:
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 👩‍💻

♨️ Хотите добиться максимальной производительности от своих Java-проектов? Научитесь искусству измерения производительности и
♨️ Хотите добиться максимальной производительности от своих Java-проектов? Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке. Забудьте о гадании и предположениях! На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов. Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании. Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук. Готовы стать мастером производительности в Java? ➡️ Регистрируйтесь прямо сейчас и откройте новый уровень эффективности в своих проектах: https://clck.ru/3BquQj Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

♨️ Хотите добиться максимальной производительности от своих Java-проектов? Научитесь искусству измерения производительности и
♨️ Хотите добиться максимальной производительности от своих Java-проектов? Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке. Забудьте о гадании и предположениях! На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов. Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании. Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук. Готовы стать мастером производительности в Java? ➡️ Регистрируйтесь прямо сейчас и откройте новый уровень эффективности в своих проектах: https://clck.ru/3BquQj Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

⚙️ Files.lines()/readAllLines()/BufferedReader.lines() В Java 8 стало возможным гораздо проще выполнить такую простую задачу
⚙️ Files.lines()/readAllLines()/BufferedReader.lines() В Java 8 стало возможным гораздо проще выполнить такую простую задачу как прочитать построчно файл. Это ещё одна задача, которая раньше требовала довольно много кода. 🗣️ Аналогичный метод был добавлен в класс BufferedReader, поэтому теперь Stream’ы доступны поверх любого InputStream‘а. Java Learning 👩‍💻

➡️ ThreadLocal.withInitial() Тех, кто плотно работает с многопоточностью, ничем не пронять. Они как ветераны Вьетнама, и даже
➡️ ThreadLocal.withInitial() Тех, кто плотно работает с многопоточностью, ничем не пронять. Они как ветераны Вьетнама, и даже флешбеки по ночам так же мучают. И этой конструкцией их не напугаешь:
// Java 7 и ранее
ThreadLocal<ObjectMapper> mapper = new ThreadLocal<>() {
  @Override
  protected ObjectMapper initialValue() {
    return new ObjectMapper();
  }
};
✔️ Но теперь, за счёт замыканий, стало проще:
// Java 8
ThreadLocal<ObjectMapper> mapper = withInitial(() -> new ObjectMapper());
Java Learning 👩‍💻