uz
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Kanalga Telegram’da o‘tish

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Ko'proq ko'rsatish

📈 Telegram kanali Библиотека Java разработчика analitikasi

Библиотека Java разработчика (@bookjava) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 10 101 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 11 696-o'rinni va Rossiya mintaqasida 62 872-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

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

31 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -89 ga, so‘nggi 24 soatda esa -5 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 7.55% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 3.77% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 763 marta ko‘riladi; birinchi sutkada odatda 381 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 7 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent string, интерфейс, строка, boot, api kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

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

10 101
Obunachilar
-524 soatlar
-297 kunlar
-8930 kunlar
Postlar arxiv
Finding CPU Load with JFR. JDK Flight Recorder, в быту JFR Среда наблюдения и мониторинга, встроенная в JDK! Начиная с JDK 11
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 с нуля! 😳 Удивите близких, а заодно прокачайтесь в разработке на беспла
🌲Создайте интерактивную новогоднюю открытку на Java с нуля! 😳 Удивите близких, а заодно прокачайтесь в разработке на бесплатном практическом уроке от OTUS и Александра Фисунова – Senior Kotlin Developer в SSP Software на проекте ВТБ. В результате урока вы: ✔️ Увидите, как пишется код и создаются программы на Java ✔️ Сможете повторить все шаги и делать подобные открытки на любую тематику 📢📢 Занятие пройдёт 20 декабря в 20:00 мск и будет приурочено к старту курса «Специализация Java-разработчик». На нем вы сможете освоить профессию с нуля до уверенного Middle. 👉 Для бесплатного участия и получения записи урока регистрируйтесь прямо сейчас: https://vk.cc/cta36k Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Совет 💡 Установка @Column в updateable=false приводит к тому, что реализация JPA будет игнорировать этот столбец при выполне
Совет 💡 Установка @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 онлайн ве
Старт подготовительного курса по Java-разработке. ⏰ Когда: уже 12 декабря. Даем: 62 урока с практикой в браузере, 3 онлайн вебинара и 1 сессию лайвкодинга с практикующим разработчиком. Получаем: крепкие знания базы языка, умение понимать код и первую программу на Java, написанную вместе с наставником. Всего 990 ₽ и ваше жгучее желание начать. Приходите с любым бэкграундом: нам не важны возраст, пол, образование и текущая профессия. Запишитесь прямо сейчас! Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.

Команда Поиска и рекламных технологий Яндекса приглашает на митап для senior бэкенд-разработчиков в Екатеринбурге. Поговорим
Команда Поиска и рекламных технологий Яндекса приглашает на митап для senior бэкенд-разработчиков в Екатеринбурге. Поговорим про разработку, поиграем в квиз, понетворкаемся и просто хорошо проведем время. 12 декабря, 18:00. Регистрируйтесь, количество мест в офлайне ограничено!

Немного о гигиене Java кода Во время код-ревью или работы над новым проектом может раздражать многое: стиль, подходы, качеств
Немного о гигиене Java кода Во время код-ревью или работы над новым проектом может раздражать многое: стиль, подходы, качество. Но больше всего расстраивает банальный недостаток гигиены кода. В связи с регулярностью проблемы хочется на неё обратить внимание и напомнить, как гигиену поддерживать. Разумеется, все мы люди, живущие в несовершенном мире. Поэтому последнее, что мне хочется, это журить и так стеснённых обстоятельствами программистов. Тем более не хочется почём зря ругать разработчиков Open Source проектов. Но сейчас я предлагаю побыть перфекционистами и вспомнить все те случаи, когда с подобным кодом приходилось иметь дело вам. https://habr.com/ru/companies/pvs-studio/articles/779300/ 👉@BookJava

Советы по Java 💡 Как инициализировать collections или map в Java? Конечно, вы можете использовать, например, статическую ини
Советы по Java 💡 Как инициализировать collections или map в Java? Конечно, вы можете использовать, например, статическую инициализацию фабрики (`List.of(...)` или `Map.of(...)`). Но вы также можете воспользоваться функцией "инициализации двойной скобкой" 👉@BookJava

📣 Новосибирск, готовы проверить свои знания в сфере IT? Будет интересно как новичкам, так и профессионалам в области информа
📣 Новосибирск, готовы проверить свои знания в сфере IT? Будет интересно как новичкам, так и профессионалам в области информационных технологий. Обещаем много нетворкинга и интересных заданий: 5 раундов по 10 вопросов от простого к сложному. Приходите сами и приглашайте коллег! ☺️ Если вы участвуете командой, регистрацию нужно пройти всем участникам команды. Если команды у вас нет — не страшно, мы найдём её для вас! Максимальное количество участников команды — 10 человек. Формат: очный 📅 13 декабря ⏰ 18:30 📍 Новосибирск, ул. Коммунистическая 14, лофт «Food Factory» Зарегистрироваться ⚡️

Шпаргалка по паттернам проектирования 👉@BookJava
+1
Шпаргалка по паттернам проектирования 👉@BookJava

Распространенные ошибки начинающих Java-разработчиков при работе с Hibernate Hibernate - это мощный фреймворк объектно-реляци
Распространенные ошибки начинающих Java-разработчиков при работе с Hibernate Hibernate - это мощный фреймворк объектно-реляционного отображения (ORM) для Java, который упрощает взаимодействие с базами данных. Это универсальный инструмент, но, как и любая другая технология, он может быть сложным, особенно для начинающих Java-разработчиков. В этой статье мы рассмотрим некоторые распространенные ошибки, которые часто допускают начинающие разработчики при работе с Hibernate, и узнаем, как их избежать. https://dev.to/jackynote/common-mistakes-of-junior-java-developers-when-working-with-hibernate-3dl8 👉@BookJava

👩‍💻 Какие компетенции отличают востребованных Java-разработчиков? ➡️ Узнайте и освойте его на бесплатном практическом уроке
👩‍💻 Какие компетенции отличают востребованных 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, или Навстречу Дизайну ПО Модельно-ориентированный метод (MDE) широко применяется во многих сферах современной инженерии; в программировании он позволяет разделить деятельность, направленную на создание универсального описания продукта, от деятельности по написанию кода, который бы эту модель воплощал в реальность. На практике, в мире Java эти деятельности по-сути совмещены воедино языком программирования, так как мы определяем интерфейсы на том же языке, на котором потом и пишем реализацию, поэтому грань между моделью и кодом может быть не так очевидна. Однако, она отчетливо проявляется, когда требуется интегрировать нашу программу в работу более сложных систем: например, я бы хотел запускать мою CLI утилиту как сервис, доступ к которому можно было бы получить через любой язык программирования по сокетам, сохранив при этом хороший Dev-X с автозаполнением полей и описанием опций. Сделаем это в 3 этапа под катом: во-первых, сконвертируем существующий Java-класс, который описывает флаги, в модельно-ориентированный XML, затем из него сгенерируем protobuf файлы для бинарного обмена данными и в завершение скомпилируем их для JavaScript и Java, обернув в приличный JSDoc. В конце обсудим все преимущества работы "на модель" и будущее роли дизайна при разработке ПО. https://habr.com/ru/articles/761414/ 👉@BookJava

Не трогайте, это на Новый год! Профессия «Java-разработчик» 🎁 🎊 Получите скидку до 30 000 р. и кэшбек на карту до 25 000 р.
Не трогайте, это на Новый год! Профессия «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