Библиотека джависта | Java, Spring, Maven, Hibernate
24.8K subscribers
1.87K photos
38 videos
42 files
2.66K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
В чем разница между Iterator и Enumeration?

— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.

— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.

— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.

— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
#вопросы_с_собеседований
Double.compare()

Метод Double.compare() используется для сравнения двух значений типа double.

Он принимает два значения double и возвращает:

— отрицательное число, если первое значение меньше второго.
— ноль, если значения равны.
— положительное число, если первое значение больше второго.

В этом примере мы передаем Double.compare() как компаратор в метод sort() из класса Arrays.
Это позволяет корректно отсортировать массив с плавающей точкой по возрастанию.
#код
Перестаём бояться генерировать байт-код

Многие, возможно, думают, что работа с байт-кодом Java (будь то чтение или, тем более, генерация) — это какая-то особенная магия, доступная только продвинутым разработчикам с особенно крутым опытом. Но JVM устроена гораздо проще, чем CPU; она оперирует такими высокоуровневыми понятиями как классы, интерфейсы, методы, а не просто лопатит байты в памяти.

Читать статью
Вложенные классы

Вложенные классы (nested classes) — это классы, определенные внутри другого класса. В Java есть два типа вложенных классов:

— Статические вложенные классы (static nested classes) — объявляются с модификатором static. Представляют собой обычные статические члены внешнего класса.
— Внутренние классы (inner classes) — объявляются без модификатора static. Связаны с экземпляром внешнего класса и имеют доступ к его членам.

Вложенные классы удобны для логической группировки классов и обеспечения инкапсуляции.

Как видно из примера, статический вложенный класс создается так же, как и обычный статический класс. А для создания экземпляра внутреннего класса сначала нужно создать экземпляр внешнего класса.
#код
Очередной #дайджест по Java:

FizzBuzz и искусство фильтрации: Stream API и предикаты
Проблема FizzBuzz — это классическая задача, которая часто встречается на собеседованиях для программистов.

Используем Neovim в качестве IDE для Java
Если вдруг захотите попробовать что-то кроме IntelliJ.

Пишем plugin для IDEA, используя External System API, на примере простой build системы
Статья о технических деталях реализации плагина.

Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin
В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта.
Сколько лет опыта по вашему должен иметь мидл?
#интерактив
Класс FileReader

FileReader — это класс, который позволяет считывать символьные данные из файла. Читает файл посимвольно в виде кодов UTF-16, а для работы принимает объект File или путь к файлу в конструктор.
Использует потоковый доступ для чтения данных.

Должен использоваться в try-with-resources блоке, чтобы корректно закрывать поток. Часто используется совместно с BufferedReader для удобства чтения по строкам.

Здесь мы открываем поток FileReader для чтения файла data.txt.
В цикле посимвольно считываем данные методом read() пока не достигнут конец файла.
#код
Имеет ли смысл объявлять метод private final?

Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:

— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
#вопросы_с_собеседований
Casting

Casting используется для преобразования переменной одного типа данных в другой. Существуют два типа преобразования: расширяющее (Widening Casting) и сужающее
(Narrowing Casting).

Расширяющее преобразование (Widening Casting): Процесс преобразования данных меньшего типа в больший тип называется расширяющим преобразованием. Это преобразование выполняется автоматически. (изображение 1)

Сужающее преобразование (Narrowing Casting): Преобразование данных большего типа в меньший тип называется сужающим преобразованием. Это преобразование должно выполняться вручную. (изображение 2)
Разница между Data Race и Race Condition

В статье рассматривается разница между популярными ошибками при работе с многопоточностью, такими как Data Race и Race Condition, а также способами борьбы с ними.

Читать статью
Сколько лет опыта по вашему должен иметь синьор?
#интерактив
NavigableSet

NavigableSet — это интерфейс, который расширяет интерфейс SortedSet и добавляет навигационные методы для поиска элементов в отсортированном множестве.

NavigableSet поддерживает следующие дополнительные операции:
— Поиск ближайшего элемента к заданному.
— Поиск элементов в заданном диапазоне.
— Получение подмножества элементов сначала или конца набора.

Основное применение NavigableSet — это реализация структур данных, где важен упорядоченный доступ к элементам, таких как:
— Деревья (Red-Black, AVL и др.).
— Приоритетные очереди.
— Сортированные словари.

Основные реализации в Java — TreeSet и ConcurrentSkipListSet.
#код
Очередной #дайджест по Java:

Как внедрить Prototype в Singleton в Spring с помощью параметра ProxyMode
Если просто добавить к определению бина аннотацию @Scope(SCOPE_PROTOTYPE) и использовать этот бин в синглтоне через аннотацию @Autowired – будет создан только один объект.

Делаем свою простейшую систему сборки для Java
Как работает компиляция и как устроен Gradle.

Микросмартфон за 100 рублей: Покупаем смартфон 11-летней давности и… пишем под него приложения
Уже тогда мобильные приложения писали на Java.

Ad-hoc мониторинг: сбор, хранение и визуализация данных
Делаем гибридную систему мониторинга.
BeanFactory

BeanFactory — это интерфейс, который предоставляет механизм для управления объектами bean в контейнере Inversion of Control (IoC).

BeanFactory является основой фреймворка Spring, где используется для создания приложений по принципу IoC и Dependency Injection. Он позволяет создавать гибкие, легко тестируемые приложения с инверсией управления и внедрением зависимостей.
#код
Создаем нативное Kotlin приложение на Spring Boot Native, Gradle и GraalVM без докера под MacOS и Windows

В этой статье автор рассказывает о практическом опыте нативной компиляции production приложения, написанного на Kotlin со Spring Boot, Gradle с использованием GraalVM.

Читать статью
🛣️ Дорожная карта Java-разработчика в 2023 году

В данной статье мы расскажем, в каком порядке изучать Java, чтобы начать свой путь в разработке и стать востребованным специалистом в 2023 году.

Читать статью
Что такое сериализация?

Сериализация — это процесс преобразования объекта в поток байтов для сохранения состояния объекта в файле или передачи по сети. Она выполняется потоками ObjectOutputStream и ObjectInputStream.
Сериализованный объект сохраняется в универсальном бинарном формате, независимом от платформы.

Сериализация позволяет сохранить состояние объекта между запусками программы и передавать объект через сеть.
Для сериализации класс должен имплементировать интерфейс Serializable. А если добавить полям класса модификатор transient, то такие поля не будут сериализованы.
#вопросы_с_собеседований
ForkJoinPool

Это класс, введенный в JDK 7, который представляет собой специализированный пул потоков, предназначенный для параллельного выполнения рекурсивных задач.

ForkJoinPool автоматически управляет созданием и использованием потоков для выполнения подзадач и обеспечивает эффективное распределение работы между ними.

Принцип работы основан на делении большой задачи на более мелкие подзадачи и их последующем объединении для получения результата. Каждая подзадача может быть выполнена независимо друг от друга, что позволяет эффективно использовать доступные ресурсы процессора.
#код
Protobuf vs Reflection

Вы когда-нибудь задумывались, насколько grpc быстрый? Если вы гоняете маленькие сообщения, которые надо быстро доставить, то лучше grpc попросту не найти. Но насколько он хорош? Сможет ли он, к примеру, сравниться просто с нативными вызовами?

Читать статью