Библиотека джависта | 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
加入频道
Ключевое слово new

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

Ссылка на объект должна быть сохранена в переменной соответствующего класса.

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

В Java 21 собираются реализовать сопоставление с образцом
Выпуск Java 21 состоялся 19 сентября 2023 года. В этой версии поддерживаются паттерны записи в switch-блоках и выражениях. Такой синтаксис выглядит монументально (как минимум, по меркам Java).

Protobuf или Reflection в JNI
Вы когда-нибудь задумывались, насколько grpc быстрый?

Все плохое в Java хорошо для вас
Автор говорит о философии Java: «Раннюю пташку проглатывает змея».

Почему Lombok все еще присутствует в каждом наборе инструментов Java-разработчика?
Почему Lombok по-прежнему занимает почетное место среди опытных разработчиков на Java.

Как работает память Java?
Это отправная точка для каждого разработчика, который хочет изучить и настроить производительность, чтобы увеличить скорость.
На каком языке вы пишите сейчас и на какой хотели бы перейти?
#интерактив
📊 Как я входил в IT? Результаты опроса «Библиотеки программиста»

Вы когда-нибудь задумывались о том, как входят в IT люди, у которых нет технического образования? Насколько тяжело начать карьеру с чистого листа в зрелом возрасте? Вот и мы решили выяснить это.

Читать статью
Для ArrayList или для LinkedList операция добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее?

Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив (O(N));
• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо (O(N));
• вставка элемента (O(1)).

Для LinkedList:
• поиск позиции вставки (O(N));
• вставка элемента (O(1)).

В худшем случае вставка в середину списка эффективнее для LinkedList. В остальных — скорее всего, для ArrayList, поскольку копирование элементов осуществляется за счет вызова быстрого системного метода System.arraycopy().
#вопросы_с_собеседований
ExecutorService

ExecutorService — это API JDK, который упрощает запуск задач в асинхронном режиме. В общем смысле, ExecutorService автоматически предоставляет пул потоков и API для назначения задач.

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

В этом примере создается ExecutorService с помощью фабричного метода Executors.newSingleThreadExecutor(). Затем запускается задача с помощью метода submit(). В конце работы ExecutorService завершается с помощью метода shutdown().
#код
Разбираемся с GraalVM, AOT и JIT

Если вы хотите разобраться, что такое GraalVM, как он работает, и в чем различия между Just-In-Time (JIT) компиляцией и Ahead-Of-Time (AOT) компиляцией, то это руководство — именно то, что вы искали.

Смотреть статью
Что лучше: ООП или функциональный подход?
#интерактив
PhantomHashMap

PhantomHashMap — это еще одна реализация интерфейса Map, которая использует призрачные ссылки для хранения ключей и значений.

Отличие PhantomHashMap от обычной HashMap заключается в том, что она не хранит реальные значения, а только призрачные ссылки на них.
Как только ссылка на значение становится призрачной, оно может быть удалено сборщиком мусора.

PhantomHashMap чаще всего используется для отслеживания жизненного цикла объектов. Например, чтобы понять, какие объекты все еще используются, а какие можно удалить.
#код
Очередной #дайджест по Java:

Подтверждение электронной почты с помощью Spring Boot & Angular
О том, как сделать это с использованием Spring Boot и Angular, двух мощных инструментов для создания современных веб-приложений.

jenv — удобный инструмент для управления версиями Java
Иногда может возникнуть необходимость использовать какую-то определенную версию Java для вашего проекта. Решение нашлось в виде использования менеджера версий Java.

Spring Cloud Config и Git. Хранение и распространение конфигураций приложений
Еще одна статья о том, как можно применять Spring Cloud Config Server при выборе Git репозитория как хранилища конфигураций приложений в облаке и не только в облаке.

Аннотации и рефлексия в Java
Аннотации и рефлексия являются ключевыми концепциями в Java, предоставляя разработчикам мощные инструменты для создания более гибких, адаптивных и понятных приложений.
Атомарные переменные в 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.
#вопросы_с_собеседований