Библиотека джависта | 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
加入频道
🆕 Вышла 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
🔟🏩 ТОП-10 ведущих аутсорс-компаний: куда пойти за карьерным ростом

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

Но устраиваться в первую попавшуюся компанию — не лучший план. Часто возникают проблемы с финансами, и стабильность здесь — редкость. Поэтому важно выбрать правильную студию, которая поддержит ваши карьерные амбиции.

📖 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
⛔️ «Голая Java» или разработка без всего

Устали от скучной рутины? Хочется чего-то необычного и интересного? Эта статья точно для вас! Здесь вы узнаете, как создать полноценное веб-приложение на Java без использования фреймворков и библиотек, работая только с JDK. Автор предлагает заново открыть забытые методы разработки и создать проект "с нуля" в духе "старой школы". Вас ждёт увлекательное погружение в разработку без современных зависимостей, что откроет новые горизонты в вашем понимании программирования.

🖥 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💻🔍💼 Кризис IT-рынка: как джуны и кадровый голод меняют правила игры

В условиях нехватки опытных специалистов и наплыва джунов, IT-компании вынуждены искать нестандартные подходы к найму. Рассмотрим основные тренды и стратегии адаптации рынка.

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

#почитать
ℹ️ Как устроен под капотом HashSet?

HashSet — это реализация множества (set), которое не допускает дублирующихся элементов. В его основе используется механизм хеширования для быстрого поиска, добавления и удаления элементов.

🔹 Хеш-таблица как основа

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

🔹 Хеширование
Когда вы добавляете элемент в HashSet, для него вычисляется хеш-код с помощью метода hashCode(). Этот хеш-код помогает определить, в какую "корзину" (bucket) поместится элемент. Если два элемента имеют одинаковый хеш-код (коллизия), они будут помещены в один и тот же бакет, и далее будут различаться с помощью метода equals().

🔹 Коллизии и структура бакета
До Java 8, если в бакет попадало несколько элементов (коллизия), они сохранялись в виде односвязного списка. Это приводило к тому, что в худшем случае производительность поиска и добавления элементов могла падать до O(n), если список становился слишком длинным.

С Java 8 при превышении 8 элементов в одном бакете, односвязный список преобразуется в красно-чёрное дерево, что улучшает производительность операций до O(log n). Когда количество элементов в бакете падает ниже 6, структура снова преобразуется обратно в связанный список для экономии памяти.

🔹 Добавление элементов
▪️ В среднем: добавление элемента занимает O(1), потому что благодаря хеш-кодам можно быстро находить нужную корзину для элемента.
▪️ В худшем случае: добавление элемента может занять O(n) до Java 8 (связный список) и O(log n) начиная с Java 8 (красно-чёрное дерево).

🔹 Удаление элементов
Удаление происходит также через хеш-код: ищется соответствующая корзина, а затем элемент удаляется, если он там есть. Сложность удаления аналогична добавлению: O(1) в среднем и O(n) или O(log n) в худшем случае (в зависимости от структуры бакета).

🔹 Преимущества и недостатки

▪️ Преимущества: Быстрое добавление, удаление и поиск элементов в среднем за O(1), так как используется хеширование. Улучшенная производительность с Java 8 благодаря использованию красно-чёрного дерева.
▪️ Недостатки: Не гарантирует порядок элементов, а при частых коллизиях, особенно в старых версиях Java, производительность может падать до O(n).
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья! 👋

Мы хотим обсудить важную тему — токсичность в среде разработчиков и значимость поддержки и наставничества. Нам интересно узнать ваше мнение и опыт! Поделитесь своими мыслями, и самые полезные советы мы включим в нашу статью. Вот несколько вопросов для вас:

🤔 Приходилось ли вам сталкиваться с токсичными коллегами на работе? Как вы справлялись с этой ситуацией?
🌟 Какие качества вы считаете важными для хорошего наставника в IT-сфере?
💡 Какие советы вы бы дали тем, кто хочет создать более поддерживающую и позитивную рабочую атмосферу?

Спасибо за ваше участие! Ваши ответы помогут сделать рабочую среду лучше для всех. 🚀
🕯 Паттерн Observer (Наблюдатель)

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

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

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

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

1️⃣ Обеспечивает слабую связанность между объектами.
2️⃣ Упрощает динамическое добавление новых наблюдателей без изменения кода субъекта.
3️⃣ Позволяет множеству объектов реагировать на события.

Недостатки:

1️⃣ Может приводить к большим накладным расходам при большом количестве наблюдателей.
2️⃣ Потенциальная сложность отладки из-за непредсказуемого порядка оповещения.
3️⃣ Может возникнуть ситуация, когда наблюдатели получают неконсистентное состояние.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️🔫 Секретное оружие бэкендера: 6 инструментов, о которых вы не знали

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

👉 Читать по этой ссылке