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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Атомарные переменные в Java.util.concurrent

Пакет java.util.concurrent.atomic определяет классы, которые поддерживают атомарные операции над отдельными переменными. Все классы имеют методы get и set, которые работают как чтение и запись волатильных переменных. То есть set имеет отношение happens-before с любым последующим get на той же переменной.

Ниже перечислены все переменные, определенные в пакете: AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference.

В этом примере создается AtomicInteger со значением 0. Затем значение инкрементируется с помощью метода incrementAndGet(). В конце значение получается с помощью метода get().
#код
Как я делал солнечную зарядку для своего моноколеса и вот что получилось

Получилось так, что с недавнего времени, я обзавелся личным электротранспортом, который называется моноколесо. Долго я шел к этому, но всё же решился и ни о чем не жалею, даже наоборот, испытываю полный восторг от поездок на этом сногсшибательном транспорте. А еще очень люблю поезки на природу, а езда на моноколесе на природу умножают эту любовь на 100500. Но есть одно «НО» и об этом далее...

Читать статью
Понимание и использование Kubernetes Custom Controllers и Custom Resource Definitions с использованием Java

Kubernetes позволяет создавать собственные API-ресурсы и дополнять его функциональность, что особенно полезно при работе со сложными или специфическими для вашей системы задачами. Custom Resource Definitions (CRDs) позволяют определить новые типы ресурсов, а Custom Controllers предоставляют логику управления этими ресурсами.

Давайте представим, что мы хотим внедрить новый тип ресурса в Kubernetes, назовем его CustomApp. Вначале мы должны создать CRD для CustomApp.

Теперь мы можем создать Custom Controller на Java, который будет управлять ресурсами CustomApp. Для этого мы можем использовать библиотеку Fabric8's Kubernetes Client.

В примере CustomAppController использует Fabric8's Kubernetes Client для отслеживания событий, связанных с ресурсами CustomApp. В зависимости от действия, можно реализовать логику для создания, обновления, удаления или других событий, связанных с CustomApp.
#код
Как работает сравнение двух строк?

Чтобы сравнить две строки, используется метод equals() класса String. Этот метод сравнивает строки по символам и возвращает логическое значение — true если строки одинаковые, false если строки разные.

Также можно использовать метод compareTo(), который возвращает 0, если строки одинаковые, положительное число, если первая строка больше в лексикографическом порядке, и отрицательное, если вторая строка больше.
#вопросы_с_собеседований
Когда ломается магия фреймворков...

Более чем за десять лет работы со Spring Framework и Enterprise Java автор успел полюбить Spring Framework, возненавидеть и в итоге пересмотреть свои подходы к работе с ним. То же самое касается работы с рефлексией в целом и работы с АОП в частности.

Всё это из-за того, что магия фреймворков иногда ломается, и делает это очень неочевидно.

Смотреть видео
🎮 Идеальный подарок геймеру: Xbox vs PlayStation vs Nintendo Switch vs Steam Deck

В продолжение темы предыдущего опроса рассмотрим самые популярные платформы на рынке – Xbox, PlayStation, Nintendo Switch и Steam Deck – и поможем вам определиться с выбором.

🔗Читать статью
🔗Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
Очередной #дайджест по Java:

Анализ дампа кучи Java: разбираем на примерах
В этой статье автор пробует объяснить, как взять и проанализировать дамп кучи – разбор на примерах.

Не придумывайте данные для интеграционных тестов — генерируйте их
Testcontainers "по щелчку пальцев" запускают базы данных, но для того, чтобы тесты начали проходить, нужно кое-что ещё: начальные данные внутри базы. Их необходимо подготовить перед запуском тестов, а по мере того, как схема растёт и усложняется, делать это становится всё труднее.

Репликация между SQL- и NoSQL-базами данных: туда и обратно
Часто при построении высоконагруженных проектов задействуют несколько хранилищ. При этом нередко одновременно используют как SQL-, так и NoSQL-базы данных. Такая реализация оправдана, но для её корректной работы надо правильно настроить репликацию данных в одну из сторон.

Spring Security и архитектура наследования ролей в не плоской модели
Когда речь заходит об авторизации, роли вступают в игру.
Хотите ли вы изучить vim или он вам не нужен?
#интерактив
Java и IBM Watson

IBM Watson предоставляет мощный инструмент для анализа изображений — Visual Recognition. Этот инструмент позволяет классифицировать изображения, обнаруживать объекты на изображениях и даже обучать свои собственные модели на основе пользовательских данных.

Java SDK для IBM Watson предоставляет простой и удобный интерфейс для работы с Visual Recognition API. Это позволяет Java-разработчикам легко интегрировать функции распознавания изображений в свои приложения.

В примере мы классифицируем изображение по URL с использованием Visual Recognition API. Результатом будет объект ClassifiedImages, который содержит информацию о классах, к которым относится изображение, и уровне уверенности для каждого класса.

Java и IBM Watson предоставляют мощные инструменты для анализа изображений. С помощью Java SDK для Watson разработчики могут легко интегрировать эти функции в свои приложения и использовать их для решения сложных задач.
#код
Какова иерархия коллекций?

В Java есть два основных интерфейса для коллекций — Collection и Map.

Interface Collection находится на верху иерархии и определяет общие методы для работы с коллекциями, такие как add(), remove(), size() и другие. От него наследуются конкретные реализации коллекций.

Наиболее часто используемые реализации Collection — это List, Set и Queue.

Map интерфейс реализует отдельную структуру данных. Он представляет отображение ключ-значение. Основные реализации — HashMap и TreeMap.
#вопросы_с_собеседований
Объекты как параметры методов

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

Параметры методов представляют собой значения, которые передаются методу при его вызове. Они объявляются в заголовке метода и позволяют методу получать информацию, необходимую для выполнения своей задачи.
#код
Шпаргалка по структурам данных в Java

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

Смотреть статью
Сколько вы тратите времени в день на работу по факту?
#интерактив
Адаптер

Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе. Он позволяет «преобразовать» интерфейс одного класса в интерфейс другого класса таким образом, чтобы они могли взаимодействовать без изменения существующего кода.

Паттерн Адаптер включает в себя два вида адаптеров:

Классовый адаптер: использует наследование для адаптации интерфейса исходного класса к целевому интерфейсу. То есть, он наследует исходный класс и реализует целевой интерфейс.
Объектный адаптер: использует композицию, чтобы включить объект исходного класса в адаптер и реализует целевой интерфейс.
#код
Micronaut

Micronaut — это относительно новый фреймворк для разработки микросервисов на Java.
Основные преимущества — высокая производительность, низкое потребление памяти, интеграция с популярными технологиями микросервисов.
Фреймворк активно развивается и используется в продакшене несколькими крупными компаниями.

Области применения:
— Разработка высокопроизводительных микросервисов. Micronaut оптимизирован для создания легковесных микросервисов с минимальным использованием ресурсов.
— Построение serverless-приложений. Благодаря низким накладным расходам при старте фреймворк хорошо подходит для бессерверных архитектур на основе функций.
— Быстрая разработка микросервисов. Фреймворк содержит много готовой инфраструктуры для разработки, позволяя быстрее создавать сервисы.
— Интеграция с GraalVM. Micronaut оптимизирован для работы со средой исполнения GraalVM, что дает дополнительное ускорение.
#код
Упрощаем работу с Excel с помошью Apache POI: готовый шаблонный код

Пошаговое практическое руководство c преобразованием шаблона poiTemplate.xlsx в Excel документ с возможностью программной модификации страниц. Также код может послужить образцом применения паттерна стратегия.

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

ServletConfig используется для настройки сервлетов при их инициализации.

Основные моменты, которые следует знать о ServletConfig:

— ServletConfig предоставляет сервлету доступ к инициализационным параметрам. Эти параметры определяются в дескрипторе развертывания (например, web.xml).

— Для получения экземпляра ServletConfig используется метод getServletConfig(), вызываемый в методе инициализации сервлета init().

— Через ServletConfig можно получить доступ к контексту сервлета с помощью метода getServletContext().

— Можно получить значение инициализационного параметра по имени с помощью метода getInitParameter().

— Можно перечислить все инициализационные параметры методом getInitParameterNames().
#код
Какие коллекции синхронизированы?

Vector — синхронизированный аналог ArrayList.
Hashtable — синхронизированный аналог HashMap.
Stack — синхронизированный стек на основе Vector.
Collections.synchronizedList() — возвращает синхронизированный список на основе переданного в нее списка.
Collections.synchronizedSet() — то же самое для множества.
Collections.synchronizedMap() — для отображения.

Синхронизация в этих коллекциях реализована с помощью внутренних блокировок, которые упорядочивает доступ к коллекции из разных потоков.

Обычно предпочтительнее использовать несинхронизированные коллекции и синхронизировать доступ к ним самостоятельно при необходимости, чтобы не терять производительность.
Это можно сделать с помощью методов synchronizedCollection(), synchronizedList(), synchronizedSet(), synchronizedMap().
#вопросы_с_собеседований
SQLException

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

Обычно он возникает при выполнении запросов к БД через JDBC и сигнализирует об ошибках соединения с БД, синтаксических ошибках в SQL запросе, проблемах с транзакциями и т.д.

Здесь мы подключаемся к БД, выполняем запрос INSERT и отлавливаем возможную ошибку через блок catch по SQLException.

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