Java Learning
前往频道在 Telegram
№ 5079899194 Обучающий канал по Java Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6 По всем вопросам @mascarov_valentin Реклама на бирже - https://telega.in/c/Java_per_month
显示更多📈 Telegram 频道 Java Learning 的分析概览
频道 Java Learning (@java_per_month) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 16 598 名订阅者,在 技术与应用 类别中位列第 7 607,并在 俄罗斯 地区排名第 39 541 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 16 598 名订阅者。
根据 30 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -32,过去 24 小时变化为 5,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 12.90%。内容发布后 24 小时内通常能获得 4.60% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 140 次浏览,首日通常累积 763 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 6。
- 主题关注点: 内容集中在 learning, строка, map, static, интерфейс 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“№ 5079899194
Обучающий канал по Java
Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6
По всем вопросам @mascarov_valentin
Реклама на бирже - https://telega.in/c/Java_per_month”
凭借高频更新(最新数据采集于 31 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
16 598
订阅者
+524 小时
-37 天
-3230 天
帖子存档
16 598
⚙️ Использование Enum как Singleton
Жаль, что я не знал раньше, что можно написать Singleton в Java всего одной строкой:
public enum Singleton {
INSTANCE;
}
✔️ Это потокобезопасно, надежно, и Java гарантирует наличие только одного экземпляра, даже в случае сериализации и десериализации.
➡️ Использование перечислений (enum) для реализации паттерна Singleton является отличным подходом в Java. Enum обеспечивает множество преимуществ:
• Потокобезопасность: Перечисления в Java создаются с использованием потокобезопасного механизма. Это означает, что вы не столкнетесь с проблемами, связанными с многопоточностью.
• Гарантия единственности экземпляра: Java гарантирует, что в системе будет только один экземпляр перечисления, даже при использовании различных потоков или классов загрузчиков.
• Сериализация и десериализация: При использовании enum Java автоматически обрабатывает сериализацию и десериализацию таким образом, чтобы сохранить единственность экземпляра. Это означает, что при десериализации вы не получите новый экземпляр, а вернется тот же самый экземпляр.
Java Learning 👩💻16 598
ℹ️ Использование 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 👩💻16 598
🤝 Не дай себя завязнуть в рутинных задачах!
🦾 Осваивай 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.ru16 598
⚙️ LongAccumulator/LongAdder
Два класса, которые представляют собой более производительные замены для
AtomicLong. Класс LongAdder позволяет выполнять атомарные арифметические операции над типом long. LongAccumulator принимает произвольную функцию аккумуляции результатов.
🗣️ Эта функция принимает текущее значение, аргумент переданный в метод accumulate() и возвращает результат логического объединения (accumulate) двух значений.
При получении результата все элементы редуцируются в один общий результат. Вся эта кухня намекает нам, что функция аккумуляции должна быть коммутативна и ассоциативна. В противном случае результат будет зависеть от физического порядка выполнения операций, который данный класс не гарантирует.Java Learning 👩💻
16 598
👀 Datafaker
Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.
🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.
🔗 Ссылочка на доку
Java Learning 👩💻
16 598
⚙️ Instancio
Как вы генерируете тестовые данные в ваших модульных тестах? Instancio поможет нам в этом.
Ее цель — сократить время и количество строк кода, затрачиваемых на ручную настройку данных в модульных тестах. Она создает объекты и заполняет их случайными данными, делая наши тесты более динамичными.
✔️ С помощью Instancio мы можем генерировать случайные данные, но в то же время мы можем установить пользовательские данные в определенном поле.
🔗 Ссылочка на доку
Java Learning 👩💻
16 598
❓ Парадокс 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 👩💻16 598
❓ Парадокс 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 👩💻16 598
♨️ Хотите добиться максимальной производительности от своих Java-проектов?
Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке.
Забудьте о гадании и предположениях!
На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов.
Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании.
Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук.
Готовы стать мастером производительности в Java?
➡️ Регистрируйтесь прямо сейчас и откройте новый уровень эффективности в своих проектах: https://clck.ru/3BquQj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru16 598
♨️ Хотите добиться максимальной производительности от своих Java-проектов?
Научитесь искусству измерения производительности и оптимизации кода на нашем увлекательном онлайн-уроке.
Забудьте о гадании и предположениях!
На этом вебинаре мы расскажем вам о мощном инструменте Java Microbenchmark Harness (JMH) и его области применения. Вместе мы разберем работу с производительными тестами и сравнением различных алгоритмов.
Вебинар будет полезен как Java-разработчикам, которые ищут лучшие практики для оптимизации кода, так и тестировщикам, специализирующимся на нагрузочном тестировании.
Спикер — Tech Lead в одном из крупнейших российских банков и кандидат технических наук.
Готовы стать мастером производительности в Java?
➡️ Регистрируйтесь прямо сейчас и откройте новый уровень эффективности в своих проектах: https://clck.ru/3BquQj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru16 598
⚙️ Files.lines()/readAllLines()/BufferedReader.lines()
В Java 8 стало возможным гораздо проще выполнить такую простую задачу как прочитать построчно файл. Это ещё одна задача, которая раньше требовала довольно много кода.
🗣️ Аналогичный метод был добавлен в класс
BufferedReader, поэтому теперь Stream’ы доступны поверх любого InputStream‘а.
Java Learning 👩💻16 598
➡️ 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 👩💻16 598
👩💻 Интеграционные тесты контроллеров, интеграций с внешними API и безопасности.
Ждём вас на третьем занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS, где мы:
- рассмотрим специфику тестирования классических и REST-контроллеров и интеграций с внешними API;
- уделим внимание тому, как проверить, что все конечные точки нашего приложения действительно защищены;
- ответим на все возникающие вопросы.
Спикер — Senior Software Engineer, опытный преподаватель и руководитель курса.
Встречаемся 16 июля в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок и получить записи предыдущих вебинаров серии: https://clck.ru/3BpWPN
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru16 598
👀 Map.computeIfAbsent()/getOrDefault()/merge()/putIfAbsent()
Возможно, если вы пишете на Java, то у вас в проекте есть код похожий на этот:
Map<String, Integer> data = ...;
for (String s : strings) {
if (!data.containsKey(key))
data.put(key, 0);
data.put(key, data.get(key) + 1);
}
Суть проста. Есть отображение из строки в счетчик, сколько раз мы встретили эту строку. Надо только не забывать инициализировать позиции Map‘а нулем, а то виртуальная машина в вас NullPointerException кинет.
➡️ В Java 8 эта же задача решается проще:
for (String s : strings) data.merge(s, 1, (a, b) -> a + b);Meтод merge принимает ключ, значение и функцию которая объединяет заданное значение и уже существующее в отображении, если таковое имеется. Если в отображении под заданным ключем значения нет, то кладет туда указанное значение. ✔️ Аналогичную функциональность, но в другом контексте, дают методы: •
computeIfAbsent() – возвращает или значение из отображения по ключу, или создает его, если его не было;
• cputIfAbsent() – добавляет значение в отображение, только если его там не было. Этот метод ранее имелся только у ConcurrentMap, теперь появился и у Map‘а;
• cgetOrDefault() – название довольно красноречиво. Возвращает значение из отображения или переданное значение по-умолчанию. На мой взгляд, метод довольно не идиоматичен. Для работы с отсутствующими значениями был добавлен тип Optional, его и следовало использовать. Поэтому, я бы добавил метод: Optional<V> getOptional(K key).
Java Learning 👩💻16 598
One Day Offer для Центра робототехники 🤖
13 июля вы сможете пройти все этапы отбора, познакомиться с инновационной командой Сбера и получить оффер Middle/Senior Robotics или Backend Developer.
Наш Центр проводит исследования, создаёт роботов, применяя искусственный интеллект, и работает по направлениям: манипуляция, роботизация логистики и мобильные роботы.
Сейчас перед нами стоит по-настоящему амбициозная задача – разработать антропоморфного робота общего назначения.
В работе мы используем: ROS/ROS2, DDS, Python, PyTorch, JAX, Model-transformers, SOTA, C++, Isaac Sim / MuJoCo / PyBullet.
Какие задачи будут в вашем планере 👇
▪️ разработка алгоритмов и систем управления роботами (core, body, brain) и драйверов для различных устройств в виде ROS2 узлов
▪️ создание алгоритмов внутренней и внешней калибровки сенсоров (лидары, камеры, IMU), робототехнических сервисов на Behavior Trees / State Machines
▪️ работа с симуляторами на базе Isaac Sim / MuJoCo / PyBullet
▪️ проектирование архитектуры системы
Масштабные проекты и работа мечты ждут вас. Регистрируйтесь на One Day Offer 13 июля 😉
16 598
Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳
Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы.
Тебя ждет всего три шага:
1️⃣ Пройди тест
После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний!
2️⃣ Реши кейс
Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей.
3️⃣ Стань победителем
Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством.
Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow
Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8JvdKw
