Библиотека джависта | Java, Spring, Maven, Hibernate
24.8K subscribers
1.87K 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 на любопытном примере

TL;DR
☕️ загрузка класса не всегда сопровождается его проверкой и инициализацией
☕️ проверка байт-кода может вызвать загрузку класса
☕️ в некоторых случаях проверку байт-кода можно отключить для ускорения запуски приложения

Читать статью
Метод ordinal() в Enum

Метод ordinal() является частью класса Enum. Класс Enum используется для создания типов данных, представляющих ограниченное множество значений, таких как перечисления (enumerations). Метод ordinal() возвращает порядковый номер (индекс) конкретного элемента перечисления в объявленном порядке.
#код
Предположим, есть метод, который может выбросить IOException и FileNotFoundException. В какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).

Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException:

void method() {
try {
//...
} catch (FileNotFoundException ex) {
//...
} catch (IOException ex) {
//...
}
}
#вопросы_с_собеседований
unchecked exception

unchecked exception (непроверяемое исключение) относится к исключениям, которые не требуется обязательно обрабатывать или объявлять в секции throws метода. Эти исключения наследуются от класса RuntimeException или его подклассов. Они обычно свидетельствуют о ситуациях, которые могут возникнуть в ходе выполнения программы, но которые, как правило, связаны с ошибками программирования или непредвиденными ситуациями.
#код
Как скомпилировать Spring Boot приложение в native image с помощью GraalVm и развернуть его с помощью Docker

Эта статья — туториал, как подружить между собой Spring Boot, GraalVm, Liquibase и Docker, какие могут возникнуть подводные камни и как их можно обойти.

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

Кстати, у нас есть канал с вопросами с собеседований по Java. Подписывайтесь!
Ищем копирайтера

Нам нужен человек, который:
— Любит IT и русский язык.
— Понимает разницу между бэкендом и фронтендом, OWASP и MISRA, функциональным программированием и ООП, микроконтроллером и миникомпьютером, UX и UI.
— Имеет опыт работы от 1 года.
— Будет плюсом, если вы программируете на каком-нибудь языке на уровне стажера/джуна.

Что нужно делать:
— Готовить подборки, ТОПы книг, ютуб- и телеграм-каналов по языкам программирования.
— Делать расшифровки топовых Ютуб-роликов по теме программирования и оформлять их в виде статей.
— Готовить новостные заметки.
— Актуализировать старые статьи.
— Брать интервью у экспертов. Мы поможем с поиском экспертов.
— Иногда писать небольшие рекламные посты в телеграм.
— Писать статьи с кодом, переводить статьи (по желанию, оплачивается отдельно).

Можно использовать нейронки?
— Да, главное, чтобы материал получился интересный.

Условия:
— Белая зарплата: 50 000 руб.
— Возможность работать удаленно.

👉Присылайте свои резюме: [email protected]
🗝 Просто про SOLID

SOLID — самые популярные и самые лучшие подходы к разработке программного обеспечения в языка с ООП.

Автор рассказывает про все части SOLID, показывает принципы на картинках и пишет код на Java для примеров.

Смотреть видео
Считаете ли вы, что в вашей компании уделяется слишком много времени на ненужные созвоны и мало времени на разработку?
#интерактив
serialVersionUID

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

Когда класс сериализуется, serialVersionUID записывается в поток данных вместе с объектом. При десериализации объекта Java сравнивает serialVersionUID, прочитанный из потока данных, со значением текущего serialVersionUID в классе:
☕️ если они совпадают, то класс считается совместимым и процесс десериализации может продолжаться.
☕️ если значения serialVersionUID отличаются, будет сгенерировано исключение InvalidClassException, указывающее на несовместимость версий класса.
#код
Что означает CAP-теорема?

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

Она была предложена в 2000 году Эриком Брюэром и формулирует три фундаментальных свойства, которые невозможно обеспечить одновременно в распределенной системе данных:
☕️ Согласованность (Consistency);
☕️ Доступность (Availability);
☕️ Устойчивость к разделению (Partition tolerance).

Согласно CAP-теореме, в распределенной системе данных можно гарантировать только два из трех свойств:
☕️ Согласованность и доступность (CA);
☕️ Согласованность и устойчивость к разделению (CP);
☕️ Доступность и устойчивость к разделению (AP).
Выбор между этими свойствами зависит от требований и характеристик конкретной системы и ее целей.
#вопросы_с_собеседований
🔍Насколько легко «войти в айти»?

IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.

👉Пройдите наш 10-минутный опрос по ссылке.
💰 Обзор зарплат: сколько сейчас зарабатывают айтишники

В этой статье обсуждаем самую животрепещущую тему — зарплату. Присоединяйтесь :)

🔗 Читать статью
🔗 Зеркало
Комбинирование хеш-таблиц

Комбинирование двух хеш-таблиц вручную через цикл очень неэффективно. Вот альтернативное решение этой проблемы, которое вам возможно понравится.
#код
Приходилось ли вам переходить на более младшую позицию в другую компанию? Например, с Senior на Middle при релокации.
#интерактив
Метод Character.isWhitespace()

Метод Character.isWhitespace() используется для проверки, является ли символ пробельным.
Метод принимает символ и возвращает булево значение.

Считается, что символ является пробельным, если он соответствует одному из следующих значений: пробел (' '), табуляция (\t), перевод строки (\n), перевод страницы (\f), возврат каретки (\r). Метод удобно использовать для проверок вводимых данных, парсинга строк.
#код
Очередной #дайджест по Java:

☕️ Преобразование закрытого ключа КриптоПро CSP по ГОСТ 2012 в контейнер p12, который понимает java
Интересная техническая статья.

☕️ Как легко перейти с Java на Rust: Особенности и советы

Автор делится опытом из своей рабочей практики.

☕️ Распространённые паттерны опечаток при программировании

Есть бесконечное количество способов ошибиться при написании кода. Однако иногда можно заметить явные интересные закономерности, как и где ошибаются программисты.

☕️ Всё, что вам нужно знать о таймаутах

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

☕️ Java и современный процессор, Часть 1: Память и иерархия кэша

Разобравшись в том, как процессоры, память и кэш влияют на выполнение программ, вы сможете лучше понять производительность приложений и оптимизировать свой подход к их написанию.
🤖 Generative AI: как ускорить разработку с помощью Github Copilot и Databricks English SDK

Давайте разберемся, что же могут помощники и SDK, а чего от них ожидать еще рано. Рассмотрим наиболее популярные решения от Github и Databricks: варианты использования и их ограничения. Также поговорим о перспективах профессии AI-инженера.

🔗 Читать статью
🔗 Зеркало
Метод regionMatches()

Используется для сравнения подстроки одной строки с подстрокой другой строки, то есть сравниваются части строк и возвращается результат этого сравнения — true (если части строк совпали) или false (не совпали).

Параметры
ignoreCase — логическая переменная со значением true — игнорировать регистр, со значением false — не игнорировать регистр.
toffset — позиция, с которой начнем отсчет.
other — другая строка, часть которой мы будем сравнивать.
ooffset — позиция, с которой начнем отсчет в строке other
len — количество символов для сравнения.
#код
fail-fast поведение

Fail-fast поведение (fail-fast behavior) — это принцип в программировании, который подразумевает, что программа должна обнаруживать ошибки и некорректные условия как можно раньше и немедленно генерировать исключения или останавливать выполнение, чтобы предотвратить дальнейшие некорректные операции и минимизировать возможные повреждения данных или неправильное поведение программы.

В Java fail-fast поведение реализуется с использованием механизмов. Если в процессе выполнения программы обнаруживается какое-либо нарушение, например, попытка доступа за пределы массива или передача недопустимого аргумента в метод, генерируется исключение, и выполнение программы прерывается.
#код
Какие подклассы класса Writer вы знаете, для чего они предназначены?

• Writer — абстрактный класс, описывающий символьный вывод;
• BufferedWriter — буферизованный выходной символьный поток;
• CharArrayWriter — выходной поток, который пишет в символьный массив;
• FileWriter — выходной поток, пишущий в файл;
• FilterWriter — абстрактный класс, предоставляющий интерфейс для классов-надстроек;
• OutputStreamWriter — выходной поток, транслирующий байты в символы;
• PipedWriter — выходной канал;
• PrintWriter — выходной поток символов, включающий методы print() и println();
• StringWriter — выходной поток, пишущий в строку;
#вопросы_с_собеседований