Библиотека джависта | 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
加入频道
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
🎁 256-й день года: 15 подарков, которые оценит каждый программист

Мы собрали 15 идей подарков — от практичных гаджетов до инструментов для профессионального роста. Эти подарки не только упростят рабочий процесс, но и вдохновят на новые достижения. Независимо от того, junior вы или senior, в нашем списке каждый найдёт что-то для себя.

👉 Смотреть список
🙌 Хардкорный вышмат для тех, кто интересуется ML, AI, DS

Начать с вводных занятий можно здесь, ответив всего на 4 вопроса – https://proglib.io/w/3e093096

Что будет на демо?

🔹Вводный урок от CPO курса;

🔹Лекции со всеми преподавателями МГУ по темам: теория множеств, непрерывность функции, основные формулы комбинаторики, матрицы и операции над ними, градиентный спуск;

🔹Практические задания и дополнительные материалы!

⚡️Переходите и активируйте – https://proglib.io/w/3e093096
Please open Telegram to view this post
VIEW IN TELEGRAM
🔼 Оптимизация обработки JSON с помощью JsonPath

JsonPath — это библиотека, которая позволяет извлекать данные из JSON-структур по пути, подобно тому, как это делает XPath для XML. В отличие от традиционного парсинга JSON в Java-объекты через такие библиотеки, как Jackson или Gson, JsonPath позволяет выбирать только те фрагменты данных, которые действительно нужны. Это экономит как время, так и память, что особенно важно при работе с большими JSON-документами.

Пример использования:

Допустим, у нас есть большой JSON, который представляет данные о магазине, и нужно вытащить категорию первой книги из списка:

{
"store": {
"book": [
{ "category": "fiction", "title": "The Great Gatsby" },
{ "category": "science", "title": "The Origin of Species" }
]
}
}


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

String json = "{ \"store\": { \"book\": [ { \"category\": \"fiction\" }, { \"category\": \"science\" } ] } }";
String category = JsonPath.read(json, "$.store.book[0].category");
System.out.println(category); // Output: fiction


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

✔️ Плюсы:

▪️ Эффективность: Можно выбирать только нужные данные.
▪️ Гибкость: поддерживает мощные выражения для фильтрации и выборки данных (например, выбор элементов по условию).
▪️ Лаконичность: Вместо написания громоздкого кода для обхода JSON-структуры использунтся один понятный запрос.
▪️ Простота интеграции: Легко интегрируется с такими библиотеками, как Jackson, Gson и другими популярными парсерами.

Минусы:

▪️ Меньшая безопасность типов: В отличие от полной десериализации JSON в строгие Java-объекты, данные получаются в виде строк, что может привести к ошибкам при обработке типов.
▪️ Отсутствие контроля над схемой: Если схема JSON изменится, запросы могут стать неактуальными, и ошибки появятся не сразу, так как нет строгой валидации типов на уровне компиляции.
▪️ Меньше гибкости при сложной логике: Когда нужно не просто вытащить данные, а, например, выполнить дополнительные преобразования или логику на основе полей JSON, десериализация в объекты может быть более подходящей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🕯 Паттерн Iterator (Итератор)

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

Использование:

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

Преимущества:

1️⃣ Упрощает работу с коллекциями, позволяя обходить их элементы через единый интерфейс, независимо от внутренней структуры.
2️⃣ Реализует принцип единственной ответственности, отделяя логику обхода от структуры данных.
3️⃣ Упрощает добавление новых способов обхода коллекции без изменения её кода.

Недостатки:

1️⃣ Могут возникать сложности при синхронизации, если коллекция изменяется в процессе итерации.
2️⃣ Может потребоваться создание множества различных классов итераторов для каждого типа коллекции, что увеличивает сложность системы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🆕 Вышла Java 23: Новые фичи, которые не стоит пропустить

Oracle выпустила Java 23. Вот несколько из самых интересных нововведений:

🔹 Модульные импорты (JEP 476): Теперь можно легко импортировать все пакеты модуля, не погружаясь в детали модульной системы.

🔹 Паттерны для примитивов (JEP 455): Теперь примитивные типы можно использовать в pattern matching, instanceof и switch, что делает Java ещё более гибкой и выразительной.

🔹 Структурированная конкуренция (JEP 480): Этот API упрощает многопоточное программирование, объединяя связанные задачи в один блок работы, что повышает надежность и упрощает сопровождение кода.

🔹 Документация на Markdown (JEP 467): Теперь документацию Javadoc можно писать на Markdown, что делает её более удобной для чтения и создания.

🔹 Поколенческий режим для ZGC (JEP 474): Улучшен сборщик мусора ZGC, который теперь по умолчанию работает в поколенческом режиме, что увеличивает производительность и снижает затраты ресурсов.

Подробнее об обновлениях - ссылка.
Please open Telegram to view this post
VIEW IN TELEGRAM
🐘🔧 Расширение pg_variables: мощная альтернатива временным таблицам в PostgreSQL

Расширение pg_variables для PostgreSQL предлагает альтернативу временным таблицам для эффективной работы с промежуточными данными, но имеет свои преимущества и недостатки, требующие тщательного анализа перед внедрением:

🔸 Оно позволяет определять скалярные сессионные переменные, которые могут быть очень ценными для хранения идентификатора пользователя, от имени которого выполняется запрос, и его различных атрибутов.
🔸 Оно содержит функции для работы с переменными различных типов. Созданные переменные существуют в течение текущей пользовательской сессии.
🔸 По умолчанию эти переменные создаются без поддержки транзакций. Если переменная успешно создана, она остаётся доступной в течение всего сеанса, даже если происходят откаты транзакций.

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

Флаг is_transactional нужно указывать каждый раз, когда вы изменяете значение транзакционной переменной с помощью функций pgv_set() и pgv_insert(). В противном случае возникнет ошибка. Другим функциям передавать этот флаг не нужно.

Если вызовы функций pgv_free() или pgv_remove() откатываются, затронутые транзакционные переменные восстанавливаются. В отличие от них, нетранзакционные переменные удаляются безвозвратно.

👉 Читать подробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Java 23: новинки и изменения

Статья предлагает обзор новой версии Java 23. Полный и подробный перечень нововведений и изменений с наглядными примерами кода. Оцените новинки и удобные фичи. Подробнее читайте в статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔑 Encoding vs Encryption vs Tokenization: основные отличия

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

🔹 Кодирование
Кодирование переводит данные в другой формат по легко обратимой схеме. Например, Base64 кодирует бинарные данные в текстовый формат для упрощения передачи через текстовые каналы. Кодирование не обеспечивает защиту данных, так оно легко обратимо без ключа.

🔹 Шифрование
Шифрование преобразует данные с помощью алгоритмов и ключей. Бывает симметричным (один ключ) и асимметричным (разные ключи). Оно защищает данные, превращая их в нечитаемый формат, который можно расшифровать только с правильным ключом.

🔹 Токенизация
Токенизация заменяет чувствительные данные безопасными токенами, связь которых с оригиналом хранится в защищенном хранилище. Токены используются в системах без риска утечки данных и полезны для соблюдения стандартов, таких как PCI DSS.
🏗 3 основных шаблона событийно-ориентированной архитектуры

Знание данных шаблонов позволяет:

✔️ Создавать слабосвязанные системы, в которых сбой одного компонента не приводит к полному отказу всей системы, а составные части приложения легче масштабировать и модифицировать.
✔️ Эффективно управлять асинхронными операциями и обрабатывать непредсказуемые события в системе.
✔️ Разрабатывать отзывчивые и эффективные приложения, обрабатывающие данные в реальном времени.
✔️ Создавать высоконагруженные системы, в которых требуется быстрая реакция на события.
✔️ Эффективно использовать современные технологии, например потоковую обработку данных и бессерверные вычисления.

1️⃣ Шаблон конкурирующих потребителей используется для эффективного распределения большого количества асинхронных сообщений между несколькими потребителями. Ключевой момент в этом шаблоне — необходимость обработки каждого сообщения только одним потребителем. Разные инструменты и платформы решают эту задачу по-своему:
2️⃣ Шаблон повторных попыток сообщений используется для обработки ошибок при работе с очередями сообщений. Этот шаблон позволяет создать надежную систему обработки транзакций, способную справляться с временными сбоями и обеспечивающую контролируемый процесс для работы с проблемными транзакциями, например, при обработке платежей.
3️⃣ Шаблон асинхронного запроса-ответа позволяет создавать масштабируемые и устойчивые к сбоям системы, где сервисы могут взаимодействовать асинхронно, не блокируя друг друга и сохраняя способность корректно обрабатывать ответы даже при изменении состояния системы между запросом и ответом.

👉 Подробнее читайте в нашей статье
👉 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
#дайджест #javadevjob

Вакансии Java разработчиков уровня Junior

▪️Java developer
Самара. TEAMSCORE — системный интегратор полного цикла
Подробнее

▪️Java-разработчик
Москва. Gridnine Systems — проектная разработка
Подробнее

Вакансии Java разработчиков уровня Middle

▪️Java-разработчик
Удаленка. Ар Софт — разработка ПО
Подробнее

▪️Java Developer
Удаленка. Datanomica — работа с данными
Подробнее

Вакансии Java разработчиков уровня Senior

▪️Java-разработчик
Удаленка. Росбанк — универсальный банк
Подробнее

▪️Java developer
Новосибирск. Дата Ист — программные продукты и системы в области геоинформатики
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🌐 Polling Vs Webhooks

🔄 Polling

Это процесс регулярного опроса внешнего сервиса или конечной точки с целью получения обновлённой информации. Это похоже на постоянный вопрос: "У вас есть что-то новое для меня?" даже когда обновлений может и не быть. Такой подход требует много ресурсов и часто бывает неэффективен. Также данные обновляются только тогда, когда вы запрашиваете их, из-за чего можно пропустить актуальную информацию в реальном времени. Но разработчики имеют больше контроля над тем, когда и как получать данные.

📩 Вебхуки

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

🎯 Когда использовать:

▪️ Polling уместен, если есть инфраструктурные ограничения, мешающие использовать вебхуки. Также вебхуки могут пропускать уведомления из-за сетевых проблем, поэтому нужны механизмы повторных попыток.
▪️ Вебхуки рекомендуются для приложений, которым важна мгновенная доставка данных, и они более эффективны с точки зрения использования ресурсов, особенно в условиях высокой нагрузки.
Please open Telegram to view this post
VIEW IN TELEGRAM