Библиотека джависта | 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
加入频道
❗️Мы запускаем серию исследований — и вы можете нам в этом помочь!

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

Помогите нам выбрать интересные темы: может быть, вы давно хотели узнать, как изменилась зарплата у тех, кто релоцировался? Или гадаете, сколько лет нужно, чтобы стать миддлом?

Присылайте интересующие вас темы в комментарии — интересные мы возьмем в работу и поделимся с вами результатами 💙
ListIterator

ListIterator — это интерфейс итератора, предназначенный специально для работы со списками.

В отличие от обычного Iterator, ListIterator позволяет не только итерировать список в прямом направлении, но и в обратном.
Он поддерживает операции для перемещения вперед и назад по списку.

ListIterator реализует методы:
— next(): переход к следующему элементу.
— previous(): переход к предыдущему элементу.
— hasNext(): проверка, есть ли следующий элемент.
— hasPrevious(): проверка, есть ли предыдущий элемент.
— add(): добавление элемента в список.

ListIterator часто используется, когда нужно пройти по списку в обоих направлениях. Например, чтобы сначала обработать элементы в прямом порядке, а затем в обратном. Или чтобы вставить элементы в произвольное место списка.
#код
Может ли метод принимать аргументы переменной длины?

В Java метод может принимать переменное количество аргументов двумя основными способами:

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

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

Таким образом метод становится более гибким и его можно вызывать с разным количеством аргументов в зависимости от ситуации. Это избавляет от необходимости перегружать метод для разного числа параметров.
#вопросы_с_собеседований
ByteBuffer

ByteBuffer используется для работы с байтовыми данными.
Он позволяет читать и записывать байты в буфер в памяти.

Основные способы использования:
— Чтение/запись байтовых данных из файлов, сетевых соединений и других источников. ByteBuffer обеспечивает эффективный доступ к данным без копирования.

— Преобразование между байтами и другими типами данных как примитивными (int, float), так и объектными. Можно получить доступ к байтам объекта или записать объект в байтовое представление.

— Компактное хранение данных в оперативной памяти. ByteBuffer располагается в памяти даже в случае больших объемов данных.

— Обработка байтовых данных как потока байт. Можно последовательно читать или записывать данные в буфер.

— Доступ к данным «по смещению» без копирования. Можно получить «вид» на часть буфера.
#код
StringBuilder

StringBuilder — это класс для работы с изменяемыми строками, аналогичный StringBuffer. API класса StringBuilder такой же, как у StringBuffer, он также хранит строку в виде модифицируемого массива символов.

Но, в отличие от StringBuffer, StringBuilder не является потокобезопасным. Он работает быстрее за счет отсутствия синхронизации.
Поэтому его рекомендуется использовать в однопоточных приложениях для работы со строками, когда нет необходимости в синхронизации.

При создании можно задать начальную емкость buffer'а в виде размера массива символов.
Если строка превышает текущую емкость, она автоматически расширяется с сохранением содержимого.
#код
👩‍💻 Изучаем Java за час

В этом часовом видеоуроке вы узнаете базовый синтаксис языка программирования Java. Изучите базовые конструкции вроде ветвлений, циклов, функций и так далее.

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

Смотреть видео
Что такое finalize? Зачем он нужен?

finalize() — это метод, который вызывается перед уничтожением объекта сборщиком мусора в Java.

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

Финализатор может быть полезен, когда нужно гарантировать, что объект освободит какие-то ресурсы даже в случае, если программист забыл явно вызвать метод закрытия ресурсов.
Однако, на практике лучше не полагаться на него, так как неизвестно, когда именно сборщик мусора вызовет его.
Поэтому рекомендуется явно освобождать ресурсы с помощью try-finally блоков.
Selector

Класс Selector используется для организации многоканального неблокирующего ввода-вывода.
Основная идея в том, что Selector позволяет одному потоку следить за состоянием множества каналов (сокетов, файловых каналов) и обрабатывать их события (готовность к чтению/записи).

Возможности Selector:
— Регистрация множества каналов в Selector для мониторинга.
— Проверка готовности зарегистрированных каналов к операциям чтения, записи.
— Извлечение готовых каналов и выполнение операций с ними.
— Отмена регистрации каналов в Selector.

Использование Selector позволяет избежать блокировки на операциях чтения/записи по каналам и эффективно масштабировать приложение для одновременной работы с большим количеством соединений.
Класс часто применяется в сетевых серверах для неблокирующей обработки большого числа клиентских соединений в одном потоке.
#код
❤️🙏 Путь к мечте: как инвалидность не помешала стать разработчиком и продолжить борьбу за здоровье

Автор «Библиотеки программиста» Станислав Герасимов, инвалид с детства, делится жизненной историей становления профессиональным разработчиком.

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

🔗 Читать статью
🔗 Зеркало
🥵 7 типов «сложных» разработчиков

Как найти подход к таким «сложным» типам и сделать работу в команде более эффективной и приятной? Рассказываем в статье, как с ними работать, чтобы избежать конфликтов и достичь общих целей.

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

#почитать
📯Внимание всем отважным героям и искателям приключений!

«Библиотеки Программиста» с гордостью представляет новую захватывающую игру — «Битва с Драконом». Выберите своих персонажей и сразитесь с древним Крылатым Ужасом Бурлопиворогом в эпическом поединке!

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

💎Победителей ждет почет, уважение и награда! Итак, кто осмелится бросить вызов Бурлопиворогу? Начните свою «Битву с Драконом»!
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

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

Кто нужен?
● Энтузиасты, которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать

Тематика
● Java, C#
● В четырех случаях из пяти вы предлагаете тему статьи

Объем
● От 7 до 15 тыс. знаков без учета кода
● 3-4 статьи в месяц

Оплата
● 4к руб. за статью
● Перевод — 250 руб. за 1000 символов без учета кода
● В месяц выйдет ~16к руб.
● Работаем с самозанятыми (компенсируем налог), ИП

Тестовое задание
Автор: написать статью по Java или C#
Переводчик: перевести статью или часть статьи по Java или C#
● Тема: на ваше усмотрение
● ЦА: начинающие/джуны
● Объем: 5-7к символов без пробелов
● Не оплачивается

Не хочу выполнять тестовое задание
Если у вас есть опубликованные статьи, пришлите ссылки на них.

Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.

Где публикуется статья?

Статья публикуется на сайте proglib.io, в группе ВК (425к подписчиков), на канале «Библиотека джависта» (24к подписчиков) и в «Библиотека шарписта» (20к подписчиков).

Вакансию закроем 15 января. У вас есть время пройти курс и написать тестовое задание.

➡️ Заполнить анкету ⬅️
🏆 Самые популярные языки программирования 2023

Популярность ЯП зависит от нескольких факторов. Мы разобрались с ними, составили сводный рейтинг и обсудили особенности, преимущества, недостатки и причины популярности каждого языка. Заходите и читайте👇

🔗 Читать статью
🔗 Зеркало
CompletableFuture

CompletableFuture в пакете java.util.concurrent является классом, который предоставляет мощный и гибкий подход к асинхронному программированию. Он позволяет выполнять асинхронные операции и обрабатывать их результаты, комбинировать несколько операций и управлять зависимостями между ними.

Помимо операций, представленных на изображении, CompletableFuture также предоставляет множество других методов для работы с асинхронными операциями, таких как thenApply(), thenCompose(), thenCombine(), exceptionally() и другие, которые позволяют обрабатывать результаты, комбинировать операции, обрабатывать исключения и многое другое. Это делает CompletableFuture мощным инструментом для асинхронного программирования.
Кэширование

Кэширование (caching) — это механизм хранения временных данных в оперативной памяти или на диске, чтобы улучшить производительность приложения. Кэширование позволяет избежать повторного вычисления или запроса данных, которые уже были получены или рассчитаны ранее.
#код
🔤 Азбука SQL в примерах. Часть 2. Ограничения, которые упрощают жизнь

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

🔗 Читать статью
🔗 Зеркало
Sorted set

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

SortedSet имеет несколько дополнительных операций, которые позволяют использовать упорядочение элементов:
— first() и last() возвращают первый и последний элементы в множестве соответственно.
— headSet(), tailSet() и subSet() возвращают подмножества элементов, которые находятся до, после или между заданными элементами соответственно.

В этом примере мы создаем TreeSet (класс, который реализует SortedSet) и добавляем в него несколько строк. Поскольку строки реализуют интерфейс Comparable, они упорядочиваются в алфавитном порядке. Затем мы используем различные методы SortedSet для получения первого и последнего элементов, а также подмножеств элементов.
#код
Реализация авторизации на основе ролей в Spring Boot с помощью Keycloak

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

Смотреть статью
Метод valueOf()

Метод valueOf() используется для преобразования различных типов данных в объекты класса String.
Он определен во многих встроенных классах обертках примитивных типов, таких как Integer, Double, Boolean и других.

Основные преимущества использования valueOf():

— Преобразование примитивных типов в объекты обертки для использования в Collections.
— Удобное преобразование числовых типов в строки.
— Получение объектного представления примитивного значения.

В примере создается целочисленная переменная i со значением 10. Далее метод Integer.valueOf(i) преобразует int в объект Integer. После чего вызывается метод toString() у объекта Integer, который возвращает строковое представление числа.
#код