Библиотека Java разработчика
前往频道在 Telegram
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
显示更多📈 Telegram 频道 Библиотека Java разработчика 的分析概览
频道 Библиотека Java разработчика (@bookjava) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 10 265 名订阅者,在 技术与应用 类别中位列第 12 016,并在 俄罗斯 地区排名第 63 847 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 10 265 名订阅者。
根据 13 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 13,过去 24 小时变化为 3,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 8.59%。内容发布后 24 小时内通常能获得 4.32% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 882 次浏览,首日通常累积 443 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 7。
- 主题关注点: 内容集中在 string, интерфейс, строка, boot, api 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.
По всем вопросам @evgenycarter
РКН clck.ru/3KoGeP”
凭借高频更新(最新数据采集于 14 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
10 265
订阅者
+324 小时
-157 天
+1330 天
帖子存档
🟢 Для новичков, обучение с нуля
🎯 Начать карьеру в этой области с нуля поможет специализация «Android Developer». Вас ждет 10 месяцев освоения трендов Android-разработки на Kotlin от экспертов-практиков из ведущих IT-компаний.
Вы шаг за шагом получите все необходимые для работы навыки: от синтаксиса Kotlin и принципов создания приложений до технологии и инструментов Middle+ уровня.
👉 Оставьте заявку и забронируйте место со скидкой
🔴 Для опытных Android-разработчиков
🦾 Как Android-разработчику перейти на новый уровень? Для этого нужно уметь проектировать архитектуру приложений, глубоко разбираться в Android SDK, выстраивать инфраструктуры с нуля, тестировать приложения и знать современные библиотеки и фреймворки.
Именно этим навыкам обучают на онлайн-курсе «Android Developer. Professional». На протяжении 5 месяцев вы будете работать над собственным проектом — тонким клиентом к сервису с публичным API, которое усилит ваше портфолио
👉 Пройдите вступительный тест и занимайте место на курсе по спец.цене
JPoint 2022 — Java-конференция от JUG Ru Group.
Она пройдет 13–15 июня, на 80% online, а 24 июня в Санкт-Петербурге будет offline-день.
Вас ждут 27 докладов от Java Champions и разработчиков из Huawei, МТС, Tinkoff, Одноклассников и других компаний. Поговорим об инструментах, внутренностях VM, базах данных, архитектуре, процессах, а также обсудим работу с Kotlin и Spring.
Среди докладов:
✔ «Becoming a More Effective Developer: Tips and Experiences»;
✔ «Thread Wars: проект Loom наносит ответный удар»;
✔ «Непрерывное профилирование в облаке с помощью eBPF»;
✔ «Индексы в PostgreSQL. Как понять, что создавать».
Подробности и полная программа — на сайте конференции.
При покупке билета на конференцию из категории «для частных лиц» используйте промокод:
bookjava2022JRGpcRepost from Академия Кода
Как получить ip адрес компьютера на java?
Используйте InetAddress чтобы получить IP адрес компьютера на Java, ниже пример кода как пример:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main {
public static void main(String args[]) {
try {
String ip = InetAddress.getLocalHost().getHostAddress();
// Вывод: 127.0.0.1
System.out.println(ip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
#java
Подписывайтесь на канал 👉@coddy_academyКакие бывают строковые классы?
Кроме очевидного класса
String, в стандарте Java существует еще StringBuffer и StringBuilder. Класс String иммутабелен, а эти два вспомогательных класса реализуют для него паттерн Builder и служат способом редактирования строки без относительно дорогого пересоздания объекта.
Все методы StringBuffer синхронны. В Java 1.5 ему на замену пришел несинхронизированный вариант StringBuilder. Эта ситуация аналогична HashMap и Hashtable. В остальном эти два класса почти ничем не отличаются, имеют одинаковый набор методов и конструкторов.
Для буфера и билдера не работает синтаксический сахар строк:
🔘 Их нельзя создать литералом, вместо этого используется обычный конструктор;
🔘 Нельзя конкатенировать оператором +, вместо этого используются обычные методы insert и append.
Сам оператор конкатенации константных выражений, компилируется в интернированную строку, но для не-констант неявно использует StringBuilder.
#Строки⁉️Хочешь открыть новые подходы к разработке на Java ?
🔥 Приходи на открытый урок OTUS «Как сбросить оковы NullPointerException» 2 июня в 20:00. Мы посмотрим на Optional в Java, насколько он нам помогает творить, а также построим безумный пример, который поможет почувствовать силу данного шаблона.
🗣Занятие проведет Виталий Куценко, Java Lead в RND подразделении Ростсельмаша. После вебинара вас ждет еще больше инструментов бэкенд-разработки на онлайн-курсе «Java Developer. Professional».
📌Пройдите вступительный тест, чтобы зарегистрироваться на занятие: https://otus.pw/e8eu/
Как работает вывод типов?
Для начала разберемся, что такое вывод типов. Type inference – это способность компилятора догадаться, какой тип нужно подставить, и сделать это за вас. На обычном интервью никто не спросит детали алгоритма вывода типов, достаточно будет сказать, что вывод происходит статически, только на основании типов аргументов и ожидаемого типа результата. По сути, вопрос заключается не в «как работает?», а «что это и когда возникает?».
Первое, что многим приходит в голову при фразе «вывод типов» – diamond operator
<>. Он появился в Java с версии 7. Его применяют к конструкторам дженерик классов, чтобы отличать требование автоматического вывода типа от raw type.
С Java 9 diamond operator заработал и для анонимных классов.
Для дженерик методов можно указывать параметр явно, но diamond синтаксически недопустим – вывод и так сработает по умолчанию.
В Java 10 для вывода типа локальной переменной добавлено ключевое слово var. Работает это так же, как в большинстве современных языков – ключевое слово ставится вместо типа при объявлении.
Типы выводимых параметров лямбда-выражения также можно не указывать. С Java 11 вместо типа указывается ключевое слово var. Такой синтаксис дает возможность добавлять параметру модификаторы и аннотации.
#Язык #Дженерики💎 Интересен язык Scala?
️️❇️ Начните осваивать его уже 7 июня в 20:00! Ждем вас на открытом уроке «Эффекты в Scala» в OTUS. Занятие проведет Алексей Воронец, руководитель разработки в NAUMEN.
📕 На открытом уроке мы рассмотрим понятие эффекта и сложности, которые могут возникать при наличии эффектов, введем понятие функционального эффекта, рассмотрим его свойства и реализуем свой небольшой функциональный эффект.
⚠️ Этот урок — часть онлайн-курса «Scala Developer». Программа рассчитана на специалистов с опытом в Java от 1 года ли на других ООП от 3-х лет.
👉 Для участия пройдите вступительный тест
Which JVM Version Is the Fastest?
Какая версия JVM самая быстрая?
https://dzone.com/articles/which-jvm-version-is-the-fastest
Что такое heap pollution?
Как было сказано ранее, массивы в Java ковариантны. А значит, можно обратиться к объекту типа
String[] через переменную типа Object[], и положить туда например Integer. Такой код скомпилируется, но в момент записи произойдет ArrayStoreException.
Дженерики защищены инвариантностью. Если попытаться положить List<Object> в List<String>, эта же по сути ошибка произойдет уже на этапе компиляции.
Heap pollution – ситуация, когда эта защита не срабатывает, и переменная параметризованного типа хранит в себе объект, параметризованный другим типом. Простейший пример:
List<String> strings = (List) new ArrayList<Integer>();
Документация гарантирует, что при компиляции всего кода целиком, heap pollution не может возникнуть без варнинга этапа компиляции.
Heap pollution может произойти в двух случаях: при использовании массивов дженериков и при смешивании параметризованных и raw-типов.
Raw types – это параметризованные типы без указания параметра. Пример с raw types, приводящий к heap pollution, уже был описан выше:
List<String> strings = (List) new ArrayList<Integer>();
Использовать raw types не надо вообще, причины подробно изложены в главе 26 Effective Java. Если информация о дженериках не нужна, используется символ wildcard (<?>).
Компилятор не даст создать массив параметризованного типа, это приведет к ошибке generic array creation. Картинка ниже иллюстрирует, к чему это могло бы привести.
Параметризованный тип varargs-аргумента метода вызывает ту же проблему, т.к. varargs – не что иное как параметр-массив. Вот почему он так же приводит к предупреждению компилятора «possible heap pollution». Если вы уверены что риска нет, с Java 7 это предупреждение заглушается аннотацией @SafeVarargs.🔥 Чем отличаются объектно-ориентированное и функциональное программирование?
⚡️ Приглашаем 1 июня в 20:00 мск на бесплатный вебинар «Объектно-ориентированное и функциональное программирование»!
📚 Вместе с практикующим экспертом Сергеем Петрелевичем мы на максимально простом уровне разберем отличия объектно-ориентированного и функционального подходов в программировании, а также рассмотрим примеры на языке Java.
Урок рассчитан на новичков в IT и пройдет в рамках онлайн-курса «Специализация Java-разработчик», об особенностях которого мы подробно расскажем во второй части занятия.
📌 Регистрация на бесплатный вебинар: https://otus.pw/LnqV/
Что такое bridge method?
В Java отсутствует ковариантность переопределенных методов по параметрам – их типы должны совпадать с типами параметров метода в родительском классе. Когда дженерик параметр конкретизируется в наследнике, методы с аргументами этого дженерик типа больше не совпадают в байткоде – в наследнике тип конкретный, а в родителе стертый до верхней границы.
Проблема решается простым и безопасным кастом. Компилятор генерирует новый метод, который совпадает по сигнатуре с родительским. В его теле параметр кастуется и вызов делегируется в пользовательский метод. Это и называется bridge методом.
Bridge method можно увидеть с помощью рефлекшна. Его имя совпадает с оригинальным методом, но параметр имеет тип, в который сотрется дженерик родителя. Этот метод будет помечен флагом
synthetic, что значит, что он написан не программистом а компилятором.
Попытка написать такой же метод вручную приведет к ошибке компиляции.
👉 @BookJava #ДженерикиЧто такое ковариантность и контравариантность?
Формально, ковариантность/контравариантность типов – это сохранение/обращение порядка наследования для производных типов. Проще говоря, когда у ковариантных сущностей типами-параметрами являются родитель и наследник, они сами становятся как бы родителем и наследником. Контравариантные наоборот, становятся наследником и родителем.
Легче всего осознать эти понятия на примерах:
🔘 Ковариантность:
List<Integer> можно присвоить в переменную типа List<? extends Number> (как будто он наследник List<Number>).
🔘 Контравариантность: в качестве параметра метода List<Number>#sort типа Comparator<? super Number> может быть передан Comparator<Object> (как будто он родитель Comparator<Number>)
Отношение типов «можно присвоить» – не совсем наследование, такие типы называются совместимыми (отношение «is a»).
Существует еще одно связанное понятие – инвариантность. Инвариантность – это отсутствие свойств ковариантности и контрвариантности. Дженерики без вайлдкардов инвариантны: List<Number> нельзя положить ни в переменную типа List<Double>, ни в List<Object>.
Массивы ковариантны: в переменную Object[] можно присвоить значение типа String[].
Переопределение методов начиная с Java 5 ковариантно относительно типа результата и типов исключений.👨🏼💻 Теперь official. Сегодня начала действовать IT-ипотека. И в Банке ДОМ.PФ одни из самых выгодных условий!
✅ ставка — от 4,3%,
✅ первоначальный взнос — от 15%,
✅ MAX сумма кредита в регионах-миллионниках — 18 млн рублей, в остальных — до 9 млн рублей.
Кстати, за счет ипотеки можно купить не только строящуюся квартиру, но и готовую от юрлица, а еще построить дом или купить готовый жилой дом с земельным участком 🔥
Подробности можно чекнуть здесь
Как ограничивается тип generic параметра?
В объявлении дженерик-параметра класса или метода может быть указана его верхняя граница (bound):
class Foo<T extends Number>
Ключевое слово extends применяется как для классов, так и для интерфейсов. Фактическим параметром такого класса Foo может быть или сам Number, или его наследники.
Помимо ограничения возможных применяемых типов, bounded-параметр дает право использовать в реализации методы и поля типа-ограничителя – он будет как минимум предком фактического типа. Это достигается стиранием типа-параметра до верхней границы.
Тип-параметр может иметь несколько верхних границ, то есть границу-пересечение типов: <T extends Comparable & Serializable>. Стирание произойдет до первой из границ, остальные послужат только ограничением вариантов фактического типа. Поэтому граница-класс, при наличии, должна быть указана раньше границ-интерфейсов.
При указании значения дженерик-параметра переменной может быть использован вайлдкард – символ ?. Вайлдкард значит, что мы не собираемся использовать информацию о конкретном типе, этот тип может быть любым. Это не то же самое, что не указать дженерик параметр совсем.
Для вайлдкарда также как и для объявления типа-параметра можно обозначить верхнюю границу. Но в отличие от объявления, здесь нельзя использовать пересечение типов, по крайней мере пока.
Кроме того, в случае вайлдкарда можно задать нижнюю границу:
Foo<? super Number> foo;
Означает, что мы не будем использовать информацию о конкретном типе, но будем знать что это предок класса Number. То есть или сам Number, или Object.
В объявлении класса или метода использование super запрещено, так как не имеет смысла.
Лучше разобраться в механике использования ограниченных вайлдкардов поможет это видео.
Хороший API должен уметь эффективно работать с классами-наследниками, то есть быть ко- или контравариантным где это необходимо. При этом без bounded вайлдкардов не обойтись. Чтобы запомнить, какая граница нужна в каких случаях, Joshua Bloch предложил мнемонику PECS: Producer-extends, Consumer-super.
#Дженерики🤖Решаешь однотипные задачи на Java?
🚀Не стой на месте, джавист! Расширь возможности использования языка Java и открой для себя подходы к написанию чистого кода. Вырасти до мидл-разработчика на онлайн-курсе «Java Developer. Professional» в OTUS.
Полгода ты будешь практиковаться решать сложные задачи на Java, а опытные разработчики проведут для тебя подробное код-ревью.
🗣Тебя ждут живые вебинары, обмен опытом, интересные домашние задания и создание своего серверного приложения в качестве выпускного проекта.
📌Пройди вступительный тест, чтобы присоединиться к закрытому сообществу и занять место по спец.цене: https://otus.pw/13QP/
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
