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

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

Для обратной связи: @proglibrary_feeedback_bot


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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
ℹ️ Как работает Pageable в Spring?

Pageable — это мощный инструмент в Spring Data для работы с большими объемами данных, который позволяет разделить результат на страницы. Это оптимизирует память и улучшает производительность.

Вместо загрузки всех записей, например через findAll(), мы можем запросить только определенное количество данных (порции/страницы) и продолжать загружать по мере необходимости. Интерфейс Pageable создает запрос с параметрами LIMIT и OFFSET, что позволяет базе данных возвращать только нужные записи, начиная с определенного места.

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

▪️ Репозиторий:

public interface UserRepository extends JpaRepository<User, Long> {}


▪️Сервис:

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public Page<User> getUsersByPage(int page, int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by("name").ascending());
return userRepository.findAll(pageable);
}
}


Здесь PageRequest.of(page, size, Sort) создает объект Pageable, который указывает, какую страницу и сколько записей нужно получить, а также сортирует результат по имени в порядке возрастания.

▪️ Контроллер:

@RestController
public class UserController {

@Autowired
private UserService userService;

@GetMapping("/users")
public Page<User> getUsers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size) {
return userService.getUsersByPage(page, size);
}
}


Этот эндпоинт позволяет запрашивать данные по страницам. Например, /users?page=1&size=20 вернет вторую страницу с 20 записями.

🔵 Преимущества использования Pageable:

- Экономия памяти: Мы загружаем только небольшие порции данных.
- Легкость навигации: Можно переключаться между страницами.

🔵 Недостатки использования Pageable:

- Дополнительный запрос для подсчета записей: Spring Data выполняет запрос для получения общего числа записей.
- Ограниченная гибкость: При сложных запросах с множеством фильтраций и джоинов Pageable может быть не таким гибким, как ручные запросы с LIMIT и OFFSET.

⚠️ Важно: Пагинация удобна для больших объемов данных, но если данные постоянно обновляются, возможны проблемы с консистентностью между страницами. Записи могут дублироваться или пропадать.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Разыгрываем флагманский смартфон

«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ

🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.

Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом

Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.

⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.
#дайджест #javadevjob

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

▪️Java разработчик
Москва. Datanomica — работа с данными
Подробнее

▪️Java Developer
Новосибирск. Динамика — разработчик программных продуктов для финансового сектора
Подробнее

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

▪️Java-разработчик
Казань. Global Solutions — предоставление передовых услуг в области создания и интеграции современных IT-решений
Подробнее

▪️Java разработчик
Удаленка. Surf — разработка клиентских и корпоративных решений
Подробнее

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

▪️Java разработчик
Удаленка. СИГМА — ИТ-решения для энергетики и ЖКХ
Подробнее

▪️Java-разработчик
Москва. KPBS — системный интегратор
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🎮 API архитектурные стили

🔗 REST – популярный подход для публичных API и веб-приложений, поддерживает JSON, XML, HTML и текст.
🔗 SOAP – использует структуру сообщений с оберткой на основе XML. Применяется в платежных системах и телеком-сервисах, но имеет высокий порог входа.
🔗 GraphQL – гибкая схема и система типов, позволяет использовать JSON и подходит для сложных систем и мобильных API.
🔗 gRPC – высокопроизводительный фреймворк RPC, работает через протоколы сериализации, используется для высоконагруженных систем.
🔗 WebSocket – поддерживает двустороннюю связь, подходит для чатов и других приложений реального времени.
🔗 Webhook – асинхронный подход, применим для CI/CD процессов и платежных шлюзов.
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Bootstrapping Microservices, Second Edition: With Docker, Kubernetes, GitHub Actions, and Terraform (2024)
✍️ Автор: Ashley Davis
📃 Страниц: 463

Это ваш наставник по микросервисам. Она научит вас использовать стандартные инструменты для создания работающего приложения для потокового видео с нуля. Вы узнаете об основах облачной нативной разработки, включая Terraform для конфигурирования, Docker для упаковки и базовое развертывание Kubernetes. Кроме того, во второе издание включены сведения о GitHub Actions, непрерывной доставке и Infrastructure as Code.
📊 Paging vs. Segmentation

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

🔹 Пагинация:


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

Преимущества:
- Устраняет внешнюю фрагментацию.
- Облегчает работу с виртуальной памятью и перемещением страниц.
- Управление памятью становится более простым и эффективным.

🔹 Сегментация:

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

Преимущества:
- Обеспечивает логическое разделение кода и данных.
- Упрощает защиту и обмен сегментами.
- Поддерживает управление растущими структурами данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧪 Чем заменить Postman: 5 отличных инструментов для разработки API

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

👉Читаем здесь
#дайджест #javadevjob

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

▪️Java Developer
Таганрог. JavaCode — работа в аутстафф направлении
Подробнее

▪️Java Frontend Developer
Новосибирск. Soft-logic — разработкa собственных коробочных продуктов
Подробнее

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

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

▪️Java разработчик
Удаленка. HolyCode — разработка IT решений
Подробнее

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

▪️Java Developer
Удаленка. 8B WORLD — финтех-стартап
Подробнее

▪️Java разработчик
Москва. Платформа ОФД — оператор фискальных данных
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🤔 Нужна ли математика на собеседованиях?

🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/a928b7c2

🌟 Спикер: Станислав Петров – Senior Data Scientist.

😮 На вебинаре вы узнаете:

😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.

🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.

✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.

🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.

🎯 Почему важно посетить вебинар?

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

• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.

👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/a928b7c2
ℹ️ Как работает SSO

SSO (Single Sign-On) или Единая система аутентификации — это схема аутентификации, которая позволяет пользователю войти в разные системы, используя одну учетную запись.

На фото выше показан принцип работы SSO.

Шаг 1: Пользователь заходит в Gmail или любой другой сервис электронной почты. Gmail обнаруживает, что пользователь не авторизован, и перенаправляет его на SSO сервер аутентификации, который также обнаруживает отсутствие входа. Пользователь попадает на страницу авторизации SSO и вводит свои учетные данные.

Шаги 2-3: SSO сервер проверяет данные пользователя, создает глобальную сессию и выдает токен.

Шаги 4-7: Gmail проверяет токен на SSO сервере. Система аутентификации регистрирует Gmail и возвращает статус «действительно». Gmail отправляет пользователю защищенный ресурс.

Шаг 8: Из Gmail пользователь переходит на другой сайт Google, например, YouTube.

Шаги 9-10: YouTube обнаруживает, что пользователь не авторизован, и запрашивает подтверждение. SSO сервер находит уже активную сессию пользователя и выдает токен.

Шаги 11-14: YouTube проверяет токен на SSO сервере. Система аутентификации регистрирует YouTube и возвращает статус «действительно». YouTube отправляет пользователю защищенный ресурс.

✔️ Процесс завершен, и пользователь получает доступ к своим данным.
Please open Telegram to view this post
VIEW IN TELEGRAM
🕯 Паттерн Хранитель (Memento)

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

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

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

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

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

Недостатки:

1️⃣ Увеличивает расход памяти, так как каждое сохранённое состояние требует хранения.
2️⃣ Может усложнить реализацию при наличии множества состояний с большим количеством данных.
3️⃣ Может потребоваться создание большого количества объектов Memento для хранения истории изменений.

📌 Паттерн полезен, когда нужно сохранить и восстановить состояние объекта, например, при реализации истории действий пользователя или для поддержки функций отмены и возврата к ранее сохранённым состояниям.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨🔙🔚 Паттерн «Бэкенд для фронтенда»: преимущества, недостатки и лучшие практики для реализации

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

👉 Читать статью
👉 Зеркало
💻🤔 Код сожаления: 10 ошибок, о которых жалеют даже опытные программисты

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


✔️Читать статью
🚀💾 Protocol Buffers: самая эффективная бинарная альтернатива текстовому формату

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

Особенно интересно, как решается проблема совместимости версий. Обо всем этом подробнее читайте в нашей статье👇

🔗 Читать статью
🔗 Зеркало
Привет, друзья! 👋

Мы готовим статью об ИИ-инструментах для программирования в 2024 году и хотим услышать ваше мнение! 🤖💻 Поделитесь своим опытом и помогите нам сделать материал ещё полезнее. Самые интересные ответы войдут в статью! 🏆
Какой ИИ-инструмент для программирования вы считаете самым полезным и почему? 🛠
Anonymous Poll
7%
GitHub Copilot
51%
ChatGPT
2%
Claude
3%
Codeium
2%
Локальные LLM
29%
Не пользуюсь ИИ
5%
Другой (укажите в комментариях)