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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Какие подклассы класса Reader вы знаете, для чего они предназначены?

• Reader — абстрактный класс, описывающий символьный ввод;
• BufferedReader — буферизованный входной символьный поток;
• CharArrayReader — входной поток, который читает из символьного массива;
• FileReader — входной поток, читающий файл;
• FilterReader — абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• InputStreamReader — входной поток, транслирующий байты в символы;
• LineNumberReader — входной поток, подсчитывающий строки;
• PipedReader — входной канал;
• PushbackReader — входной поток, позволяющий возвращать символы обратно в поток;
• StringReader — входной поток, читающий из строки.
#вопросы_с_собеседований
unmodifiableMap

UnmodifiableMap используется для создания неизменяемого представления отображения, это позволяет предоставить доступ к отображению, не давая возможности изменить его.

Как видно из примера, при попытке изменить неизменяемое отображение unmodifiableMap выбрасывается исключение UnsupportedOperationException. Это гарантирует, что исходное отображение не будет случайно изменено.
#код
Как получить коллекцию только для чтения?

При помощи:
Collections.unmodifiableList(list);
Collections.unmodifiableSet(set);
Collections.unmodifiableMap(map).
Эти методы принимают коллекцию в качестве параметра, и возвращают коллекцию только для чтения с теми же элементами внутри.
#вопросы_с_собеседований
shutdown hook

Shutdown hook позволяет приложению выполнить некоторый код перед завершением приложения.

Для создания hook нужно создать объект класса Thread и передать его в метод addShutdownHook() класса Runtime.
Когда приложение завершается, все заданные hook выполнятся последовательно.

Shutdown hook работает в случае нормального или аварийного завершения приложения и часто используется для освобождения ресурсов, закрытия соединений, сохранения данных.
🤖 Итоги недели в мире ИИ и обзоры новых сервисов

Мы написали статью на VC, которая основана на очередном выпуске нашей рассылки про последние новости и тенденции в мире ИИ. Залетайте и читайте!

👇Ниже — мини-подборка из статьи 👇

📰 Новости

▫️ OpenAI объявила о запуске долгожданного магазина кастомных чат-ботов.
▫️ В Пасадене (штат Калифорния) открывается первая закусочная CaliExpress by Flippy, полностью управляемая ИИ.
▫️ NVIDIA выпустила модель для распознавания речи Parakeet, которая по всем показателям превосходит OpenAI Whisper.
▫️ Использование ИИ в совместном научном проекте Microsoft и Тихоокеанской северо-западной национальной лаборатории в течение недели помогло определить новый элемент, который поможет снизить на 70% использование лития в батареях. Без ИИ такое исследование заняло бы по меньшей мере 20 лет.
▫️ Компания ByteDance выпустила новую модель MagicVideo-V2 для генерации видео.

🛠 Инструменты

◾️ Auto Wiki — генерирует вики-документацию для GitHub репозиториев.
◾️ Code to Flow — визуализирует, анализирует и объясняет код, написанный на всех популярных языках и фреймворках.
◾️ Concepto — платформа для создания прототипов веб-приложений.
◾️ Afforai — выполняет суммаризацию, перевод и поиск по множеству документов.
◾️ Corgea — исправляет уязвимые фрагменты кода.
◾️ Jan — опенсорсный оффлайновый чат-бот.
◾️ Plus AI — плагин для Google Slides: делает профессиональные презентации, персональные и командные дашборды, любые отчеты.

🤙 Сделай сам

🔸 WikiChat — опенсорсный инструмент для коррекции галлюцинаций с помощью информации из Википедии.
🔸 Подробная шпаргалка и советы по созданию продвинутых RAG.
🔸 OpenVoice — опенсорный инструмент для мгновенного клонирования голоса.

🎓 Туториалы

🔹 Туториал по работе с новым API Query Pipelines показывает примеры создания простых линейных цепочек и сложных ациклических графов из модулей LlamaIndex.
🔹 Туториал по объединению LLM с помощью mergekit детально разбирает 4 основных метода объединения моделей.

#чтопроисходит
Please open Telegram to view this post
VIEW IN TELEGRAM
Механизм try-with-resources

Механизм try-with-resources — это способ автоматического закрытия ресурсов после их использования. Появился этот механизм в Java 7.
Он работает для классов, реализующих интерфейс AutoCloseable (например, потоки), уменьшает количество кода и упрощает обработку исключений.

Ресурсы объявляются в скобках после try и закрываются автоматически по завершении этого блока. Ресурсы закрываются в обратном порядке создания при нормальном или аварийном завершении.

По сравнению с блоком try-catch-finally этот механизм позволяет лаконичнее писать код с автозакрытием ресурсов.

В этом примере в блоке try создаются объекты FileReader и BufferedReader для чтения данных из файла.
После завершения блока try оба ресурса будут автоматически закрыты, даже если произойдет исключение.
#код
Какие реализации SortedSet вы знаете и в чем их особенность?

В Java есть несколько реализаций интерфейса SortedSet:

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

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

— EnumSet — высокопроизводительная реализация для элементов-перечислений.
Использует внутри битовые вектора для хранения.

— LinkedHashSet — реализация на основе хеш-таблицы и связанного списка.
Сохраняет порядок вставки элементов.
#вопросы_с_собеседований
⚡️ Что должен знать Junior

Если посмотреть вакансии, то Junior должен писать такой же код как и Senior, но получать как джун. А если серьёзно, то это программист, который решает простые задачи.

Из ролика вы узнаете, что должен знать новичок перед тем как претендовать на место Junior разработчика.

Смотреть видео
Priority Queue

PriorityQueue — это коллекция, которая хранит элементы в соответствии с их приоритетом.
Реализует очередь на базе кучи (heap) и используется в ситуациях, когда необходимо обрабатывать или получать элементы в определенном порядке.

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

PriorityQueue не поддерживает изменение приоритета элемента после добавления.
#код
Cartesian product

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

Например, если у нас есть две коллекции: A = {1, 2, 3} и B = {a, b}, то произведение A и B будет выглядеть следующим образом:

{(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)}

Таким образом, мы получаем шесть возможных пар элементов из коллекций A и B.

В этом примере мы создаем две коллекции и используем два вложенных цикла для создания cartesian product. Созданное произведение сохраняется в коллекцию cartesianProduct типа List> и результат выводится на экран.
#код
Почему вам нравится Spring? Опишите его основные преимущества.
#интерактив
🔤 Азбука SQL в примерах. Часть 3. Обрабатываем результаты и делаем сложные запросы

Мы уже умеем довольно много, и наша база содержит полезную информацию. А еще она умеет проверять новые данные, когда мы их добавляем. Пора разобраться, как их обрабатывать, чтобы узнать из данных что-то интересное.

👉 Читать статью
👉 Часть 1
👉 Часть 2
Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц?

Соотношения one-to-one, one-to-many и many-to-many в таблицах баз данных хранятся следующим образом:

Соотношение one-to-one — в одном primary key одной таблицы хранятся значения, связанные с другой одиночной таблицей во внешнем ключе (foreign key).

Соотношение one-to-many — в таблице, которая «one», в качестве primary key используется идентификатор объекта, который распространяется на все связанные объекты в таблице, которая «many». Так, одно значение может ссылаться на несколько значений в другой таблице.

Соотношение many-to-many — необходимо создать дополнительную таблицу, которая связывает связанные таблицы. Так, в этой дополнительной таблице устанавливается соответствие между primary key одной таблицы и primary key другой таблицы.
👨‍💻🧩 Психология и ИТ: 17 личностных качеств, необходимых для успешной карьеры

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

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

#новость
⌨️ Управление доступом к членам класса

Модификаторы уровня доступа определяют, могут ли другие классы использовать определенное поле или вызывать определенный метод.

Существует 4 уровня доступа:

private
Указывает, что доступ возможен только в его собственном классе.

package-private (нет явного модификатора)
Указывает, что доступ только внутри своего собственного пакета.

protected
Указывает, что доступ возможен только внутри его собственного пакета (как в случае с package-private) и, кроме того, для подкласса его класса в другом пакете.

public
Указывает, что доступ возможен отовсюду.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между «конкуренцией» и «параллелизмом»?

Конкуренция — это способ одновременного решения множества задач.

Признаки:
• Наличие нескольких потоков управления (например, Thread в Java, корутина в Kotlin), если поток управления один, то конкурентного выполнения быть не может
• Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того, как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным

Параллелизм — это способ выполнения разных частей одной задачи.

Признаки:
• Необязательно имеет несколько потоков управления
• Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно.
Что такое мёртвая нить?

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

Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода tryLock() из java.util.concurrent.locks.Lock, которые позволяют более гибко управлять блокировками и избегать мёртвой нити.

#для_начинающих
🤔 Очередной #дайджет для джавистов

🔺 Kotlin Explorer — инструмент для быстрого и эффективного реверс-инжиниринга Kotlin кода в Java байткод, Android DEX и OAT

🔺 Spring Boot и Apache Camel — как интегрировать опенсорсный фреймворк и Spring Boot

🔺 VisualVM — анализируйте использование памяти, потребление процессора и поведение потоков для оптимизации вашего приложения

🔺 Модульное тестирование вашей архитектуры Java — начните внедрять свою архитектуру в течение 30 минут, используя уже имеющуюся установку

🔺 Spring Boot 3.2.2 уже доступен — пофиксили 53 бага, улучшили документацию и обновили зависимости
🧑‍🍳🧑‍🍳 Apache Maven — введение в автоматизированную сборку проектов

В статье разбирается один из сборщиков проектов Apache Maven. Все начнется с установки, настройки и сборки первого проекта.

Apache Maven — это фреймворк по автоматизации и сборки Java-проектов. Обычно просто называют Maven.

Подробную информацию всегда можно тут.

Продолжить чтение

#гайд