Библиотека Java разработчика
前往频道在 Telegram
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
显示更多📈 Telegram 频道 Библиотека Java разработчика 的分析概览
频道 Библиотека Java разработчика (@bookjava) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 10 101 名订阅者,在 技术与应用 类别中位列第 11 696,并在 俄罗斯 地区排名第 62 872 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 10 101 名订阅者。
根据 31 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -89,过去 24 小时变化为 -5,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 7.55%。内容发布后 24 小时内通常能获得 3.77% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 763 次浏览,首日通常累积 381 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 7。
- 主题关注点: 内容集中在 string, интерфейс, строка, boot, api 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.
По всем вопросам @evgenycarter
РКН clck.ru/3KoGeP”
凭借高频更新(最新数据采集于 01 九月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
10 101
订阅者
-524 小时
-297 天
-8930 天
帖子存档
Finding CPU Load with JFR. JDK Flight Recorder, в быту JFR
Среда наблюдения и мониторинга, встроенная в JDK! Начиная с JDK 11, JFR стал open-source и переименован в JDK Flight Recorder. Это делает JFR отличным выбором для отслеживания скрытых проблем, связанных с тем, почему приложение потребляет ресурсы, такие как CPU. В статье — о том, как работать с JFR.
https://inside.java/2023/11/27/sip090/
👉@BookJava
🌲Создайте интерактивную новогоднюю открытку на Java с нуля!
😳 Удивите близких, а заодно прокачайтесь в разработке на бесплатном практическом уроке от OTUS и Александра Фисунова – Senior Kotlin Developer в SSP Software на проекте ВТБ.
В результате урока вы:
✔️ Увидите, как пишется код и создаются программы на Java
✔️ Сможете повторить все шаги и делать подобные открытки на любую тематику
📢📢 Занятие пройдёт 20 декабря в 20:00 мск и будет приурочено к старту курса «Специализация Java-разработчик». На нем вы сможете освоить профессию с нуля до уверенного Middle.
👉 Для бесплатного участия и получения записи урока регистрируйтесь прямо сейчас: https://vk.cc/cta36k
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576Совет 💡
Установка
@Column в updateable=false приводит к тому, что реализация JPA будет игнорировать этот столбец при выполнении оператора обновления. При этом не будет выброшено исключение. Это никак не влияет на базу данных. Вы по-прежнему можете обновлять столбец вне Hibernate.
👉@BookJavaИз каких основных сущностей состоит Spring-приложение?
Bean – объект бизнес-логики в терминологии Spring Framework.
BeanDefinition – описание того, как создавать бин. Объект хранит его тип, метаинформацию, набор параметров для конструктора.
BeanFactory – главная точка входа в DI-контейнер. Хранит BeanDefinition-ы, умеет создавать по ним экземпляры бинов, или выдавать существующие, в зависимости от скоупа.
BeanPostProcessor – донастраивает только что созданные бины, перед тем как положить их в контейнер. Его методы уже упоминались в публикации про жизненный цикл. Типичное место, чтобы оборачивать бины в прокси. Также с помощью такого пост-процессора внедряются
@Autowired-зависимости. Пост-процессоры бинов живут внутри экземпляра BeanFactory.
BeanFactoryPostProcessor – тоже пост-обработчик, но для определений бинов (BeanDefinition). Обычно используется для модификации параметров или класса, из которых будут строиться бины.
Для создания определений бинов в основном применяются классы и интерфейсы *BeanDefinitionReader. Некоторые из них вызываются прямо из контекста приложения, другие реализуют BeanFactoryPostProcessor. Один такой пост-процессор, например, отвечает за добавление определений бинов по аннотациям @Component и @Configuration.
Реализация интерфейса ApplicationContext – основное хранилище конфигурации Spring-приложения (или его части). Контекст неизменяем, но может быть целиком перезагружен. Xml-файл конфигурации на старте приложения превращается в объект *XmlApplicationContext. Для конфигурации на аннотациях создастся AnnotationConfigApplicationContext. Контекст выполняет четыре разных обязанности:
1. DI-контейнер. ApplicationContext функционирует как специальная реализация BeanFactory. Он также производит и хранит бины, но, в отличие от обычных фабрик, контексты в приложении составляют иерархию. Определения бинов из дочерних контекстов перекрывают родительские.
2. Загрузка ресурсов. Под интерфейсом ResourceLoader контекст занимается загрузкой в память приложения файлов, как из classpath, так и из остальной файловой системы.
3. Публикация событий приложения. Контекст распространяет в приложении «события» – наследники ApplicationEvent. Любой бин, которому нужно получать уведомления об этих событиях, просто реализует интерфейс ApplicationListener. Таким образом реализуется паттерн наблюдатель.
4. Интернационализация. По коду, набору аргументов и локали, через интерфейс контекста MessageSource можно получать локализованные текстовые сообщения для пользователей.
👉@BookJava#вакансия #удалённо #parttime #koltin #преподаватель
Время делиться знаниями!
OTUS – образовательная платформа. У нас авторские курсы разной степени сложности, вступительное тестирование для студентов и преподаватели-практики из крупнейших компаний. 6 лет мы учимся друг у друга, советуемся, помогаем, делимся опытом и обсуждаем новости как в преподавании, так и в IT.
Вакансия: преподаватель на кастомный онлайн курс - "Kotlin backend"
Можно без опыта преподавания, мы поможем вам освоить практики преподавания
Преподаватель раскрывает тему с помощью теории и примеров из практики.
Занятия в zoom в дневное время. Можно выбрать удобную нагрузку и темы занятий.
С нами вы сможете ✅
-получать за проведение 1 вебинара - 10.000 рублей + за проверку 1 дз - 500 рублей
- структурировать свой опыт и знания;
- прокачать софт-скиллы;
Бонусы 🎁
- наши курсы со скидкой/бесплатно;
- можно приглашать лучших выпускников к себе на работу;
- воркшопы и конференции для наших преподавателей.
Обсудить подробнее @HR_Nikita
В каких случаях разумно использовать массив, а не ArrayList?
Использование обычных массивов вместо
ArrayList имеет смысл в следующих ситуациях:
— Нужен предсказуемый и строгий контроль размера массива. Массивы имеют фиксированный размер, в отличие от ArrayList.
— Требуется максимальная производительность при работе с примитивными типами данных (int, double и т. д.). Доступ к элементам массива быстрее, чем в ArrayList.
— Нужно создать структуру данных, которая должна быть неизменяемой.
— Требуется тесная интеграция с существующим кодом на основе обычных массивов. Переход на ArrayList может потребовать значительный рефакторинг.
— Не нужны динамические функции ArrayList, такие как автоматическое изменение размера, методы вставки/удаления и т. д.
— Ограничения на использование дополнительной памяти. Массивы компактнее ArrayList за счет фиксированного размера.
👉@BookJava@TransactionalEventListener
Используйте
@TransactionalEventListener для выполнения определенной логики после успешной фиксации транзакции.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/event/TransactionalEventListener.html
👉@BookJavaСтарт подготовительного курса по Java-разработке.
⏰ Когда: уже 12 декабря.
Даем: 62 урока с практикой в браузере, 3 онлайн вебинара и 1 сессию лайвкодинга с практикующим разработчиком.
Получаем: крепкие знания базы языка, умение понимать код и первую программу на Java, написанную вместе с наставником.
Всего 990 ₽ и ваше жгучее желание начать. Приходите с любым бэкграундом: нам не важны возраст, пол, образование и текущая профессия.
Запишитесь прямо сейчас!
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.
Команда Поиска и рекламных технологий Яндекса приглашает на митап для senior бэкенд-разработчиков в Екатеринбурге.
Поговорим про разработку, поиграем в квиз, понетворкаемся и просто хорошо проведем время.
12 декабря, 18:00.
Регистрируйтесь, количество мест в офлайне ограничено!
Немного о гигиене Java кода
Во время код-ревью или работы над новым проектом может раздражать многое: стиль, подходы, качество. Но больше всего расстраивает банальный недостаток гигиены кода. В связи с регулярностью проблемы хочется на неё обратить внимание и напомнить, как гигиену поддерживать.
Разумеется, все мы люди, живущие в несовершенном мире. Поэтому последнее, что мне хочется, это журить и так стеснённых обстоятельствами программистов. Тем более не хочется почём зря ругать разработчиков Open Source проектов. Но сейчас я предлагаю побыть перфекционистами и вспомнить все те случаи, когда с подобным кодом приходилось иметь дело вам.
https://habr.com/ru/companies/pvs-studio/articles/779300/
👉@BookJava
Советы по Java 💡
Как инициализировать
collections или map в Java? Конечно, вы можете использовать, например, статическую инициализацию фабрики (`List.of(...)` или `Map.of(...)`).
Но вы также можете воспользоваться функцией "инициализации двойной скобкой"
👉@BookJava📣 Новосибирск, готовы проверить свои знания в сфере IT?
Будет интересно как новичкам, так и профессионалам в области информационных технологий.
Обещаем много нетворкинга и интересных заданий: 5 раундов по 10 вопросов от простого к сложному.
Приходите сами и приглашайте коллег! ☺️
Если вы участвуете командой, регистрацию нужно пройти всем участникам команды. Если команды у вас нет — не страшно, мы найдём её для вас!
Максимальное количество участников команды — 10 человек.
Формат: очный
📅 13 декабря
⏰ 18:30
📍 Новосибирск, ул. Коммунистическая 14, лофт «Food Factory»
Зарегистрироваться ⚡️
Распространенные ошибки начинающих Java-разработчиков при работе с Hibernate
Hibernate - это мощный фреймворк объектно-реляционного отображения (ORM) для Java, который упрощает взаимодействие с базами данных. Это универсальный инструмент, но, как и любая другая технология, он может быть сложным, особенно для начинающих Java-разработчиков. В этой статье мы рассмотрим некоторые распространенные ошибки, которые часто допускают начинающие разработчики при работе с Hibernate, и узнаем, как их избежать.
https://dev.to/jackynote/common-mistakes-of-junior-java-developers-when-working-with-hibernate-3dl8
👉@BookJava
👩💻 Какие компетенции отличают востребованных Java-разработчиков?
➡️ Узнайте и освойте его на бесплатном практическом уроке «Разрабатываем appender для Logback».
На вебинаре разберём, как можно сделать самодельный appender для Logback, который будет отправлять логи в TCP-сервер логирования.
Также эксперт подробно ответит на любые возникающие вопросы.
📢📢 Занятие пройдёт 12 декабря в 20:00 мск и будет приурочено к старту курса «Java Developer. Professional». После урока вы сможете продолжить обучение в рассрочку.
👉 Для бесплатного участия и получения записи зарегистрируйтесь прямо сейчас: https://vk.cc/csXyJj
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruКак прочитать InputStream в строку?
Обычно строковые данные извне попадают в программу именно в виде потока. Потоком читаются файлы, сетевые данные из сокета, пользовательский ввод. Если есть такая возможность, лучше избегать сохранения потоковых данных в память, и обрабатывать их также в потоке. Например, когда из большого xml-файла необходимо достать один определенный элемент, имеет смысл выбрать потоковый xml-парсер.
В общем виде все решения выглядят так. Заводится буфер – массив символов. Поток направляется в этот буфер. По заполнению данные из массива присоединяются в хвост строки-результата.
Простой способ – использовать трюк со сканером. Вообще класс
Scanner читает из потока подстроки, разделенные указанным символом. Когда нужно прочитать всю строку сразу, в качестве разделителя устанавливается "\\A" – спецсимвол «начало строки». Это решение просто в реализации, но имеет проблемы. Размер внутреннего буфера фиксирован (1024 символа), а логика поиска разделителя плохо влияет на производительность.
Хорошее решение для продакшна – читать в собственный массив-буфер непосредственно методом InputStream.read, либо обернув поток в InputStreamReader. Данные из буфера затем переправляются в строку через StringBuilder или ByteArrayOutputStream. За готовой реализацией можно обратиться в библиотеки Apache Commons IO и Google Guava. Полный код реализации и сравнение производительности описаны на stackoverflow.
На интервью этот вопрос часто возникает как часть практической задачи, для консольного ввода-вывода. Поэтому, если вы идете на собеседование со своим компьютером, и неуверенно владеете классами работы с потоками, стоит заранее подготовить шпаргалку с кодом.
👉@BookJavaМодельно-Ориентированная Java, или Навстречу Дизайну ПО
Модельно-ориентированный метод (MDE) широко применяется во многих сферах современной инженерии; в программировании он позволяет разделить деятельность, направленную на создание универсального описания продукта, от деятельности по написанию кода, который бы эту модель воплощал в реальность. На практике, в мире Java эти деятельности по-сути совмещены воедино языком программирования, так как мы определяем интерфейсы на том же языке, на котором потом и пишем реализацию, поэтому грань между моделью и кодом может быть не так очевидна. Однако, она отчетливо проявляется, когда требуется интегрировать нашу программу в работу более сложных систем: например, я бы хотел запускать мою CLI утилиту как сервис, доступ к которому можно было бы получить через любой язык программирования по сокетам, сохранив при этом хороший Dev-X с автозаполнением полей и описанием опций. Сделаем это в 3 этапа под катом: во-первых, сконвертируем существующий Java-класс, который описывает флаги, в модельно-ориентированный XML, затем из него сгенерируем protobuf файлы для бинарного обмена данными и в завершение скомпилируем их для JavaScript и Java, обернув в приличный JSDoc. В конце обсудим все преимущества работы "на модель" и будущее роли дизайна при разработке ПО.
https://habr.com/ru/articles/761414/
👉@BookJava
Не трогайте, это на Новый год!
Профессия «Java-разработчик»
🎁 🎊 Получите скидку до 30 000 р. и кэшбек на карту до 25 000 р. при успешном прохождении обучения!
Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
Уже во время обучения вы вступите в программу «Карьерный трек», чтобы найти свою первую работу в IT.
Вы научитесь подбирать правильные структуры для хранения и обработки данных, познакомитесь с автоматизированным тестированием и напишите свои первые модульные тесты.
📌 Пройдите 5 бесплатных уроков и поймите, подходит ли вам профессия!
Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.
Расскажите про приведение типов. Что такое понижение и повышение типа?
Java является строго типизированным языком программирования, а это означает, то что каждое выражение и каждая переменная имеет строго определенный тип уже на момент компиляции. Однако определен механизм приведения типов (casting) - способ преобразования значения переменной одного типа в значение другого типа.
В Java существуют несколько разновидностей приведения:
• Тождественное (identity). Преобразование выражения любого типа к точно такому же типу всегда допустимо и происходит автоматически.
• Расширение (повышение, upcasting) примитивного типа (widening primitive). Означает, что осуществляется переход от менее емкого типа к более ёмкому. Например, от типа byte (длина 1 байт) к типу int (длина 4 байта). Такие преобразование безопасны в том смысле, что новый тип всегда гарантировано вмещает в себя все данные, которые хранились в старом типе и таким образом не происходит потери данных. Этот тип приведения всегда допустим и происходит автоматически.
• Сужение (понижение, downcasting) примитивного типа (narrowing primitive). Означает, что переход осуществляется от более емкого типа к менее емкому. При таком преобразовании есть риск потерять данные. Например, если число типа int было больше 127, то при приведении его к byte значения битов старше восьмого будут потеряны. В Java такое преобразование должно совершаться явным образом, при этом все старшие биты, не умещающиеся в новом типе, просто отбрасываются - никакого округления или других действий для получения более корректного результата не производится.
• Расширение объектного типа (widening reference). Означает неявное восходящее приведение типов или переход от более конкретного типа к менее конкретному, т.е. переход от потомка к предку. Разрешено всегда и происходит автоматически.
• Сужение объектного типа (narrowing reference). Означает нисходящее приведение, то есть приведение от предка к потомку (подтипу). Возможно только если исходная переменная является подтипом приводимого типа. При несоответствии типов в момент выполнения выбрасывается исключение ClassCastException. Требует явного указания типа.
• Преобразование к строке (to String). Любой тип может быть приведен к строке, т.е. к экземпляру класса String.
• Запрещенные преобразования (forbidden). Не все приведения между произвольными типами допустимы. Например, к запрещенным преобразованиям относятся приведения от любого ссылочного типа к примитивному и наоборот (кроме преобразования к строке). Кроме того, невозможно привести друг к другу классы, находящиеся на разных ветвях дерева наследования и т.п.
При приведении ссылочных типов с самим объектом ничего не происходит - меняется лишь тип ссылки, через которую происходит обращение к объекту.
Для проверки возможности приведения нужно воспользоваться оператором
instanceof:
Parent parent = new Child();
if (parent instanceof Child) {
Child child = (Child) parent;
}
👉@BookJavaКакие подходы применять в разработке микросервисов?
Узнайте на бесплатном практическом уроке «Основные паттерны использования GraphQL и gRPC» от OTUS. На вебинаре:
- рассмотрим основные паттерны и подходы к использованию GraphQL и gRPC;
- рассмотрим паттерн запрос-ответ;
- обсудим различия между GraphQL и gRPC и их преимущества и недостатки в различных сценариях;
- изучим паттерны запроса типа «одно на много» и «много на много», а также подходы к управлению версиями.
Занятие пройдёт 12 декабря в 17:00 мск и будет будет приурочено к старту курса «Microservice Architecture». После урока вы сможете продолжить обучение в рассрочку.
Для бесплатного участия и получения записи зарегистрируйтесь прямо сейчас: https://vk.cc/csVc8i
