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

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

Обратная связь: @proglibrary_feedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
WeakHashMap

WeakHashMap — это подкласс java.util.HashMap, который используется для хранения пар "ключ-значение". Основное отличие WeakHashMap заключается в том, что он хранит ключи в виде "слабых ссылок" (weak reference), что означает их уничтожение при отсутствии сильной ссылки на объект.

Это позволяет использовать WeakHashMap для кэширования объектов, которые могут быть уничтожены сборщиком мусора в случае, если на них не осталось сильных ссылок. Это может подойти для объектов, созданных на основе потребительских запросов, которые не будут использоваться долгое время и не нужно хранить их в памяти постоянно.

В примере мы создаем объект и добавляем его в WeakHashMap. Затем мы обнуляем ссылку на этот объект и запускаем сборщик мусора. После этого мы пытаемся получить значение по ключу и должны получить null, так как ключ был удален из WeakHashMap.
#код
Меняем местами элементы первой и последний строки в матрице

Временная сложность: O(n*m), где n и m — количество строк и столбцов соответственно.
Вспомогательное пространство: O(1).
#код
Очередной #дайджест по Java:

✍️ Ивентная модель данных с использованием Kafka и Kafka Connect
Автор рассказывает, как, используя Kafka Connect, мы можем эффективно следить за изменениями в одной базе данных, обрабатывать их и мгновенно записывать в другую.

✍️ IntelliJ IDEA 2023.2. Language Server Protocol, AI Assistant, IntelliJ Profiler в редакторе, GitLab merge requests, ftw
Все основные фичи IntelliJ IDEA 2023.2.

✍️ Магия Spring Framework своими руками
Прокси объекты являются основой «магии» Spring Framework. В качестве демонстрации реализована @JmxExporter аннотация, которая позволяет превратить Spring Bean в JMX MBean.

✍️ Parallel Stream — не панацея или используй с умом (tutorial для начинающих)
Статья для тех, кто только изучает Stream API. В ней — функционал, плюсы и минусы использования Parallel Stream.

✍️ Правильные тестовые данные или почему Вася Пупкин лучший друг тестировщиков?
Об идеальных данных и источниках правильных тестовых данных.
Про какой учебный проект вы рассказывали/показывали его на первом собеседовании?
#интерактив
Узнаем разницу между 2 датами, представленными в виде строк

Для вычисления разницы между двумя датами, представленными в виде строк, можно использовать классы java.time.LocalDate и java.time.temporal.ChronoUnit из пакета java.time.

В этом примере мы используем метод LocalDate.parse() для преобразования строковых значений в объекты типа LocalDate. Затем мы используем метод ChronoUnit.between() для вычисления разницы между двумя датами в днях, месяцах и годах.

Обратите внимание, что вы должны использовать формат даты "yyyy-MM-dd" для парсинга строковых значений даты. Если ваши строки даты имеют другой формат, вам может потребоваться использовать другой метод для преобразования их в объекты LocalDate.
#код
Расскажите о типах шаблонов проектирования.

✔️Основные (Fundamental) — основные строительные блоки других шаблонов. Большинство других шаблонов использует эти шаблоны в той или иной форме.
✔️Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс создания экземпляра. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять созданный объект, а шаблон, порождающий объекты, делегирует создание объектов другому объекту.
✔️Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
✔️Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
#вопросы_с_собеседований
Оператор instanceof

Оператор java instanceof используется для проверки того, является ли объект экземпляром указанного типа (класса или подкласса или интерфейса). Во время выполнения результат оператора instanceof равен true, если значение выражения не равно null.

Это важное свойство операции instanceof, которое делает ее полезной для проверки приведения типов.
#код
Использование Spring Cloud Gateway в качестве OAuth2 клиента и KeyCloak для защиты служб

В первую очередь данная статья для тех, кто только пытаются освоить технологии Spring Cloud и KeyCloak, но уже имеют базовое представление о них.

Смотреть статью
Представьте, что вы за час можете научиться чему угодно — что бы это было?
#интерактив
Два новых канала от Proglib

Недавно мы запустили два канала для джавистов, которые помогут вам практиковать свои знания и готовиться к собеседованиям 💪

👉Библиотека Java для собеса — канал, в котором мы выкладываем наши уже традиционные вопросы с собеседований

👉Библиотека задач по Java — канал с задачами, тестами, квизами и, конечно, кодом

Бегом подписываться 🏃
Переименовываем файл

Переименовать файл можно, переместив содержимое первого файла в новый файл и удалив предыдущий файл. Java обрабатывает эту операцию, используя метод resolveSibiling. Он используется для разрешения данного пути относительно родительского пути этого пути.

#код

👉Больше кода и задач в нашем канале «Библиотека задач по Java»
Получение обратного массива

Используем библиотеку Apache Commons Lang.

Библиотека Apache Commons Lang представляет собой набор служебных классов для упрощения работы с классами пакета java.lang.*.
#код
Какие два класса не наследуются от Object?

Ответ: не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!
«Библиотека программиста» в поиске контент-менеджера для ведения телеграм-каналов

Ищем человека, который грамотно пишет, разбирается в контенте и в одной из этих трех тем:
👉Data Science
👉Frontend
👉мобильная разработка

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Подробнее о вакансии и форма для отклика — по ссылке.

Ждем вас в команде!
Prototype

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

Для реализации этого паттерна необходимо, чтобы классы имели возможность клонирования, что достигается реализацией интерфейса Cloneable и переопределением метода clone().

В этом примере класс Sheep имеет два приватных поля name и color, а также соответствующие геттеры и сеттеры. Класс также имплементирует интерфейс Cloneable и переопределяет метод clone() для создания копии объекта.

В main мы создаем оригинальный объект, клонируем его с помощью метода clone() и получаем клонированный объект clonedSheep. Затем мы изменяем его параметры и выводим результат.
#код
В чем разница между Thread.sleep() и Thread.yield()?

Thread.sleep(): этот метод приостанавливает выполнение текущего потока на заданное количество времени. Время задается в миллисекундах и указывается в качестве аргумента метода. При вызове Thread.sleep() поток переходит в состояние ожидания и не выполняет код в течение указанного периода времени. После истечения времени поток снова становится готовым к выполнению. Вызов Thread.sleep() может сгенерировать исключение InterruptedException, поэтому необходимо обрабатывать его или пробрасывать.

Thread.yield(): этот метод предоставляет намек планировщику потоков на то, что поток, вызвавший yield(), готов уступить процессорное время другим потокам с тем же приоритетом. Однако это рекомендация, а не гарантия. Вызов Thread.yield() приводит к тому, что текущий поток переходит из исполняемого в состояние готовности, чтобы другие потоки могли получить доступ к процессору. Однако, если нет других готовых потоков с тем же приоритетом, поток может продолжить выполнение.
#вопросы_с_собеседований
Код, задачи и тесты по Java📚

Напоминаем, что мы запустили канал, в котором разбираемся в коде и проверяем свои знания с помощью тестов🤓

👉Подписывайтесь на «Библиотеку задач по Java»
Свойство типа Controller Service в кастомном процессоре NiFi

В этой короткой статье показано, как использовать в качестве одного из свойств кастомного процессора NiFi стандартную службу Controller Service, а также как написать тест для такого процессора. В качестве примера использована стандартную служба SSLContextService.

Читать статью
Очередной #дайджест по Java:

✍️ Опыт Сдачи: Oracle Certified Professional: Java SE 11 Developer 1Z0-819
Публикация для тех кто планирует сдавать OCP от Oracle (с личным опытом автора).

✍️ JavaDoc: добро или необходимое зло?
Рассказ о том, принёс ли JavaDoc пользу, а также немного слов о том, где усилия по JavaDoc были избыточны.

✍️ Как VMware создала проблему, а мы ее решили
Любопытный разбор кейса.

✍️ Одна из возможных версий переезда с MySQL на PostgreSQL
Автор рассказывает о подводных камнях переезда.

✍️ Разница между загрузкой и инициализацией классов в Java на любопытном примере
Статья о некоторых тонкостях загрузки и инициализации классов и немного о производительности.

👉Больше кода и задач в нашем канале «Библиотека задач по Java»