Библиотека джависта | Java, Spring, Maven, Hibernate
25.5K subscribers
1.4K photos
27 videos
36 files
2.28K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.me/proglibrary/9197
Учиться у нас: https://proglib.io/w/907158ab

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

По рекламе: @proglib_adv
Прайс: @proglib_advertising
Download Telegram
Почему Map не наследуется от Collection?

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

Интерфейс Map, с другой стороны, представляет собой отображение ключей на значения. Он не рассматривает элементы коллекции как отдельные объекты, а предоставляет доступ к значению, связанному с определенным ключом. Это более общий и мощный подход, который не сводится к работе с отдельными элементами коллекции.

Интерфейс Map включает в себя методы для управления парами ключ-значение и обеспечивает эффективный доступ к значениям по ключу. По этим причинам он не является подтипом Collection. Однако, классы, реализующие интерфейс Map, часто предоставляют методы, которые позволяют работать с элементами коллекции или возвращают представление коллекции ключей, значений или записей (ключ-значение).

Таким образом, хотя Map и Collection предоставляют абстракции для работы с группой объектов, они решают разные задачи, и поэтому не существует иерархического отношения наследования между ними.

#для_продвинутых
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
FairSemaphore

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

В примере на картинке два потока будут пытаться получить доступ к ресурсу, который защищен с помощью FairSemaphore. Потоки будут получать доступ к ресурсу по очереди, а не в случайном порядке.
☸️ Покоряем Kubernetes: от базовых концепций к эффективному управлению контейнерами

Умение работать с Kubernetes — ценный навык для продвинутого разработчика, и совершенно необходимый — для каждого DevOps-инженера. Расскажем просто и понятно, как разобраться в основных концепциях Kubernetes.

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

#гайд
✍️✍️ Юнит-тесты: чек-лист методик проектирования

Все много раз слышали о необходимости писать модульные тесты и о том, что весь код должен быть ими покрыт. При этом мне не встречалось списка: какие именно методики лучше использовать при тестировании кода.

Автор задумался: есть ли руководство, которое облегчило бы генерацию тестовых сценариев и помогло выявлять серьёзные ошибки? Чтобы вдумчиво подходить к тестированию и не тратить ресурсы впустую, сводя к минимуму количество необходимых тестов.

Материал будет полезен разработчикам, которые уже пишут модульные тесты и которые только думают внедрять их в свой проект, а также желают применить методики проектирования тестов.

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

#почитать
Метод newSingleThreadExecutor()

Метод newSingleThreadExecutor() используется для создания ExecutorService с единственным рабочим потоком. ExecutorService предоставляет удобный способ управления выполнением задач в асинхронном режиме.

В примере выше создается ExecutorService с одним рабочим потоком, и две задачи (task1 и task2) передаются на выполнение с использованием метода submit(). Закрытие ExecutorService выполняется с помощью метода shutdown(), который гарантирует, что больше никакие задачи не будут приняты, и потоки будут завершены после завершения всех текущих задач.
🧠 Знания — сила! Что должен изучить каждый программист?

Мы запускаем опрос среди наших читателей, чтобы выяснить, какие ключевые компетенции необходимо развивать программисту на текущий момент. Какие направления стоит изучать в первую очередь? Уровень каких знаний влияет на зарплату в отрасли?

Мы проведем анализ ответов и составим ТОП-лист навыков, которые не помешают освоить каждому программисту и разработчику для успешного карьерного роста!

👉 Пройти опрос
Очередной #дайджест по Java

Spring AI 0.8.0 уже доступен — удобный API для моделей искусственного интеллекта, API для хранения векторов, вызов функций, ETL-фреймворк для инженерии данных

Quarkus  —  горячий тренд Java-разработки

Apache Kafka 3.7.0 — описание основных функций, о которых вы должны знать

Как выдержать критику от других разрабов — чужие мнения и своя самооценка

Slim Docker Images для Java — как создавать слим Docker-образы для Java-приложений с помощью Alpine Linux и Jlink
😶‍🌫️😶‍🌫️ Изоляция в тестах с Kafka

Опыт запуска Kafka в тестовых сценариях достиг высокого уровня удобства благодаря использованию Testcontainers и улучшенной поддержке в Spring Boot 3.1 с помощью аннотации @ServiceConnection. Однако написание и поддержка интеграционных тестов с Kafka по-прежнему представляют собой вызов.

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

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

#туториал
ServletContext

Интерфейс, предоставляющий методы для взаимодействия с контекстом сервлета. Контекст сервлета — это область, в которой работает сервлет, и предоставляет средства для обмена данными между сервлетами, а также для доступа к различным ресурсам, таким как файлы, базы данных и другие.

Некоторые из основных методов ServletContext:

getInitParameter(String name): возвращает значение инициализационного параметра сервлета, указанного по имени.
getInitParameterNames(): возвращает имена всех инициализационных параметров сервлета.
getAttribute(String name): возвращает значение атрибута, сохраненного в контексте сервлета по имени.
setAttribute(String name, Object object): устанавливает значение атрибута в контексте сервлета.
getRequestDispatcher(String path): возвращает объект RequestDispatcher, который используется для включения другого ресурса (например, другого сервлета или JSP-страницы) в текущий запрос.
getRealPath(String path): преобразует виртуальный путь в абсолютный путь на сервере.
Агрегация

Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.

Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
📚Quick Functional Programming (2023)

✍️Автор: David Matuszek

📃Страниц: 128

Функциональное программирование - это мощный инструмент, который вы можете использовать в дополнение ко всем своим обычным инструментам, в той мере, в какой ваш текущий основной язык поддерживает его. Большинство языков имеют хотя бы базовую поддержку.

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


Скачать книгу
📚Pro Jakarta EE 10: Open Source Enterprise Java-based Cloud-native Applications Development (2023)

✍️Автор: Peter Späth

📃Страниц: 512

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

Что внутри:
🔸Создавайте сложные приложения Jakarta EE
🔸Создайте рабочий процесс профессиональной разработки с помощью Jakarta EE
🔸Создавайте более продвинутые приложения для веб-разработки
🔸Работайте с более продвинутыми вспомогательными технологиями для повышения зрелости и стабильности приложений в корпоративной среде

Скачать книгу
Очередной #дайджест по Java

Обязательные знания для тимлида — в помощь всем текущим и будущим руководителям

Асинхронная работа с файловой системой в Vert.x — узнаем больше про экосистему для создания реактивных приложений на JVM

Программирую, учусь и работаю 24/7 но этого все еще мало — история о вредном трудоголизме

Изоляция в тестах с Kafka — опыт запуска Kafka в тестовых сценариях

Создание REST API с использованием Spring WebFlux и Security — рассмотрен пример создания REST API с использованием следующих технологий: Spring Boot 3, Spring Security (JWT), Spring WebFlux, Spring Data R2DBC
PreferencesFactory

Интерфейс PreferencesFactory используется для создания объектов Preferences.

Он предоставляет два метода:
systemRoot(): возвращает корневой узел предпочтений системы.
userRoot(): возвращает корневой узел предпочтений пользователя, вызвавшего метод.

Поставщики новых реализаций Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.