Изучение внутреннего устройства Git — это одна из топ-5 вещей, которые разработчик может сделать для себя.
Вся суть Git внезапно сводится к коммитам в ветках, и тогда становится видно, насколько Git красив и прост по своей сути.
- rebase — это просто пересоздание коммитов на новой базе
- cherry-pick — это просто повторное применение изменений одного коммита
- merge — это просто соединение историй
- reset — это просто перемещение текущего ref’а
На самом деле это одна из самых красивых систем, когда-либо созданных.
👉 Java Portal
Вся суть Git внезапно сводится к коммитам в ветках, и тогда становится видно, насколько Git красив и прост по своей сути.
- rebase — это просто пересоздание коммитов на новой базе
- cherry-pick — это просто повторное применение изменений одного коммита
- merge — это просто соединение историй
- reset — это просто перемещение текущего ref’а
На самом деле это одна из самых красивых систем, когда-либо созданных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Harness Engineering для Java- и Spring Boot-приложений
В статье рассматриваются инструменты и практики для контроля качества и проверки архитектуры приложений:
- Форматирование и проверка кода
- Анализ покрытия кода и качества с помощью JaCoCo и SonarQube
- Проверка архитектуры с помощью ArchUnit и Taikai
- Контроль границ модулей с помощью Spring Modulith
- Анализ работы приложения во время выполнения с помощью BootUI
👉 Java Portal
В статье рассматриваются инструменты и практики для контроля качества и проверки архитектуры приложений:
- Форматирование и проверка кода
- Анализ покрытия кода и качества с помощью JaCoCo и SonarQube
- Проверка архитектуры с помощью ArchUnit и Taikai
- Контроль границ модулей с помощью Spring Modulith
- Анализ работы приложения во время выполнения с помощью BootUI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
💡 Нужны тестовые данные в базе? Используйте
Эта аннотация позволяет запускать SQL-скрипты перед тестами или после их выполнения.
✅ Загружает SQL-скрипты из
✅ Позволяет хранить тестовые данные в отдельных
✅ Работает с
👉 Java Portal
@Sql в Java!Эта аннотация позволяет запускать SQL-скрипты перед тестами или после их выполнения.
✅ Загружает SQL-скрипты из
classpath перед или после каждого тестового метода✅ Позволяет хранить тестовые данные в отдельных
.sql-файлах, не загромождая Java-код✅ Работает с
@SpringBootTest и @DataJpaTestPlease open Telegram to view this post
VIEW IN TELEGRAM
👍4
🚀 Совет по Spring:
Аннотация
👉 Java Portal
@Fallback — альтернативный выбор бинаАннотация
@Fallback позволяет Spring выбрать резервный бин, если доступные бины не имеют статуса @Primary.Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 Проверяете индекс массива? Используйте
✅ Заменяет ручные проверки
✅ Выбрасывает
✅ Также полезны методы
👉 Java Portal
Objects.checkIndex() (Java 9+).✅ Заменяет ручные проверки
if (i < 0 || i >= size)✅ Выбрасывает
IndexOutOfBoundsException с понятным сообщением✅ Также полезны методы
checkFromToIndex() и checkFromIndexSize() для проверки диапазоновPlease open Telegram to view this post
VIEW IN TELEGRAM
❤3
Хеширование vs шифрование vs кодирование
Эти три понятия часто путают в разработке. Все они могут преобразовывать данные в другое представление, но предназначены для совершенно разных задач.
Главный вопрос: что вы хотите сделать — проверить данные, защитить их или просто изменить способ их представления?
Короткая шпаргалка:
• Hashing (хеширование) → преобразование в одну сторону.
• Encryption (шифрование) → обратимое преобразование с помощью ключа.
• Encoding (кодирование) → обратимое преобразование без секретного ключа.
1. Хеширование (Hashing). Хеширование преобразует входные данные в хеш фиксированной длины.
Пример на Java:
Практически невозможно восстановить исходные данные из надёжного криптографического хеша.
Где используется:
• Проверка целостности данных.
• Хранение паролей (с помощью специализированных алгоритмов хеширования паролей).
• Цифровые подписи.
• Проверка файлов.
<text color="warning" weight="medium">⚠️</text> Для хранения паролей следует использовать Argon2id, bcrypt, scrypt или PBKDF2 с подходящими солью и параметрами, а не обычный SHA-256.
Запомните: можно ли проверить данные, не восстанавливая оригинал?
2. Шифрование (Encryption). Шифрование преобразует читаемые данные в зашифрованный текст с помощью криптографического ключа.
Например:
С правильным ключом исходные данные можно восстановить.
Где используется:
• Защита конфиденциальных данных.
HTTPS/TLS.
• Шифрование баз данных.
• Безопасная передача информации.
• Защита файлов.
Запомните: данные должны оставаться секретными, но при необходимости их можно восстановить.
3. Кодирование (Encoding). Кодирование преобразует данные в другое представление. Это не механизм обеспечения безопасности.
Пример на Java:
Где используется:
• Base64.
• URL-кодирование.
• Форматы сериализации данных.
• Передача бинарных данных в текстовом виде.
Запомните: меняется представление данных, а не уровень их защиты.
Распространённые заблуждения:
• Base64 — это шифрование.
• Хеширование — это шифрование.
• Зашифрованные данные невозможно расшифровать.
• SHA-256 сам по себе подходит для хранения паролей.
Всё это неверно.
Пример из реальной разработки: Представим, что нужно сохранить пароль пользователя:
• Хеширование: сохраняем надёжный хеш пароля и используем его для проверки при входе.
• Шифрование: защищаем данные, которые в дальнейшем потребуется расшифровать.
• Кодирование: преобразуем данные в формат, удобный для передачи.
Главное, что нужно запомнить:
• Hashing → Проверить.
• Encryption → Защитить.
• Encoding → Представить.
Если нужна конфиденциальность — используйте шифрование. Если нужно проверить целостность — хеширование. Если требуется изменить представление данных — кодирование.
👉 Java Portal
Эти три понятия часто путают в разработке. Все они могут преобразовывать данные в другое представление, но предназначены для совершенно разных задач.
Главный вопрос: что вы хотите сделать — проверить данные, защитить их или просто изменить способ их представления?
Короткая шпаргалка:
• Hashing (хеширование) → преобразование в одну сторону.
• Encryption (шифрование) → обратимое преобразование с помощью ключа.
• Encoding (кодирование) → обратимое преобразование без секретного ключа.
1. Хеширование (Hashing). Хеширование преобразует входные данные в хеш фиксированной длины.
Вход: Hello123
↓
SHA-256
↓
Хеш: 64-символьное шестнадцатеричное значение
Пример на Java:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(
"Hello123".getBytes(StandardCharsets.UTF_8)
);Практически невозможно восстановить исходные данные из надёжного криптографического хеша.
Где используется:
• Проверка целостности данных.
• Хранение паролей (с помощью специализированных алгоритмов хеширования паролей).
• Цифровые подписи.
• Проверка файлов.
<text color="warning" weight="medium">⚠️</text> Для хранения паролей следует использовать Argon2id, bcrypt, scrypt или PBKDF2 с подходящими солью и параметрами, а не обычный SHA-256.
Запомните: можно ли проверить данные, не восстанавливая оригинал?
2. Шифрование (Encryption). Шифрование преобразует читаемые данные в зашифрованный текст с помощью криптографического ключа.
Исходный текст
↓
Шифрование + ключ
↓
Шифротекст
↓
Расшифровка + ключ
↓
Исходный текст
Например:
Вход: AccountNumber123
Выход: Зашифрованный текст
С правильным ключом исходные данные можно восстановить.
Где используется:
• Защита конфиденциальных данных.
HTTPS/TLS.
• Шифрование баз данных.
• Безопасная передача информации.
• Защита файлов.
Запомните: данные должны оставаться секретными, но при необходимости их можно восстановить.
3. Кодирование (Encoding). Кодирование преобразует данные в другое представление. Это не механизм обеспечения безопасности.
Вход: Hello
↓
Base64 Encoding
↓
SGVsbG8=
↓
Base64 Decoding
↓
Hello
Пример на Java:
String encoded = Base64.getEncoder()
.encodeToString("Hello".getBytes());
String decoded = new String(
Base64.getDecoder().decode(encoded)
);
Где используется:
• Base64.
• URL-кодирование.
• Форматы сериализации данных.
• Передача бинарных данных в текстовом виде.
Запомните: меняется представление данных, а не уровень их защиты.
Распространённые заблуждения:
• Base64 — это шифрование.
• Хеширование — это шифрование.
• Зашифрованные данные невозможно расшифровать.
• SHA-256 сам по себе подходит для хранения паролей.
Всё это неверно.
Пример из реальной разработки: Представим, что нужно сохранить пароль пользователя:
MySecret123• Хеширование: сохраняем надёжный хеш пароля и используем его для проверки при входе.
• Шифрование: защищаем данные, которые в дальнейшем потребуется расшифровать.
• Кодирование: преобразуем данные в формат, удобный для передачи.
Главное, что нужно запомнить:
• Hashing → Проверить.
• Encryption → Защитить.
• Encoding → Представить.
Если нужна конфиденциальность — используйте шифрование. Если нужно проверить целостность — хеширование. Если требуется изменить представление данных — кодирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 Не отправляйте
✅ Исключает из ответа свойства, значение которых равно
✅ Делает JSON чище для клиентов и уменьшает размер ответа.
✅ Аннотацию можно добавить к классу или отдельному полю, а также настроить глобально через Jackson.
👉 Java Portal
null-поля в JSON — используйте @JsonInclude(NON_NULL).✅ Исключает из ответа свойства, значение которых равно
null.✅ Делает JSON чище для клиентов и уменьшает размер ответа.
✅ Аннотацию можно добавить к классу или отдельному полю, а также настроить глобально через Jackson.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Отличная шпаргалка для разработчиков, которые регулярно работают с Git.
Создание коммитов, переключение между ветками, разрешение конфликтов, отмена изменений, работа с удалёнными репозиториями и история проекта.
80 команд с короткими пояснениями и примерами.
👉 Java Portal
Создание коммитов, переключение между ветками, разрешение конфликтов, отмена изменений, работа с удалёнными репозиториями и история проекта.
80 команд с короткими пояснениями и примерами.
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Нужен бин только для тестов? Используйте
✅ Позволяет объявлять бины, которые загружаются только в тестах и не попадают в production.
✅ Можно объявить конфигурацию внутри тестового класса или явно подключить её через
✅ Безопаснее, чем размещать фейковые реализации в
👉 Java Portal
@TestConfiguration.✅ Позволяет объявлять бины, которые загружаются только в тестах и не попадают в production.
✅ Можно объявить конфигурацию внутри тестового класса или явно подключить её через
@Import.✅ Безопаснее, чем размещать фейковые реализации в
src/main.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Аутентификация и авторизация (OAuth, JWT, Sessions)
Что такое аутентификация (Authentication)?
Аутентификация — это процесс проверки личности пользователя или системы. Она подтверждает, что человек или приложение, пытающееся получить доступ к системе, действительно является тем, за кого себя выдаёт.
→ Пример: вход в систему с помощью логина и пароля.
Что такое авторизация (Authorization)?
Авторизация определяет, какие действия может выполнять аутентифицированный пользователь внутри системы. Она задаёт права и уровни доступа.
→ Пример: обычный пользователь может просматривать контент, а администратор — добавлять и удалять его.
OAuth (Open Authorization):
→ Стандартный протокол для делегирования доступа с помощью токенов.
→ Позволяет пользователям входить через сторонних провайдеров, например Google, Facebook или GitHub.
→ Пример: кнопка «Войти через Google» на сайте.
JWT (JSON Web Token):
→ Компактный формат токенов, используемый для передачи данных аутентификации.
→ Содержит закодированную информацию о пользователе и имеет цифровую подпись для проверки целостности.
→ Часто применяется в stateless-аутентификации, когда сервер не хранит данные сессии.
→ Пример: после входа сервер выдаёт JWT, который клиент отправляет с каждым запросом.
Sessions (Сессии):
→ Метод, при котором сервер временно хранит данные об аутентификации пользователя.
→ Идентификатор сессии сохраняется в браузере клиента (обычно в cookie) и связывается с данными на сервере.
→ Пример: классические веб-приложения, в которых пользователь остаётся авторизованным до истечения срока действия сессии или выхода из системы.
Ключевые отличия:
→ OAuth: делегирует доступ внешним провайдерам.
→ JWT: позволяет передавать данные аутентификации в токенах без хранения состояния сессии на сервере.
→ Sessions: используют состояние, храня данные сессии на сервере.
Примеры из реальной разработки:
→ OAuth: вход в Spotify через Facebook или Google.
→ JWT: API, в которых клиенты проходят аутентификацию с помощью токенов.
→ Sessions: классические веб-приложения на PHP или Node.js с системой входа.
👉 Java Portal
Что такое аутентификация (Authentication)?
Аутентификация — это процесс проверки личности пользователя или системы. Она подтверждает, что человек или приложение, пытающееся получить доступ к системе, действительно является тем, за кого себя выдаёт.
→ Пример: вход в систему с помощью логина и пароля.
Что такое авторизация (Authorization)?
Авторизация определяет, какие действия может выполнять аутентифицированный пользователь внутри системы. Она задаёт права и уровни доступа.
→ Пример: обычный пользователь может просматривать контент, а администратор — добавлять и удалять его.
OAuth (Open Authorization):
→ Стандартный протокол для делегирования доступа с помощью токенов.
→ Позволяет пользователям входить через сторонних провайдеров, например Google, Facebook или GitHub.
→ Пример: кнопка «Войти через Google» на сайте.
JWT (JSON Web Token):
→ Компактный формат токенов, используемый для передачи данных аутентификации.
→ Содержит закодированную информацию о пользователе и имеет цифровую подпись для проверки целостности.
→ Часто применяется в stateless-аутентификации, когда сервер не хранит данные сессии.
→ Пример: после входа сервер выдаёт JWT, который клиент отправляет с каждым запросом.
Sessions (Сессии):
→ Метод, при котором сервер временно хранит данные об аутентификации пользователя.
→ Идентификатор сессии сохраняется в браузере клиента (обычно в cookie) и связывается с данными на сервере.
→ Пример: классические веб-приложения, в которых пользователь остаётся авторизованным до истечения срока действия сессии или выхода из системы.
Ключевые отличия:
→ OAuth: делегирует доступ внешним провайдерам.
→ JWT: позволяет передавать данные аутентификации в токенах без хранения состояния сессии на сервере.
→ Sessions: используют состояние, храня данные сессии на сервере.
Примеры из реальной разработки:
→ OAuth: вход в Spotify через Facebook или Google.
→ JWT: API, в которых клиенты проходят аутентификацию с помощью токенов.
→ Sessions: классические веб-приложения на PHP или Node.js с системой входа.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Совет по конфигурации Spring Boot:
Не прописывайте значения окружения напрямую в коде.
•
•
•
• Секреты → переменные окружения или менеджер секретов
Используйте
👉 Java Portal
Не прописывайте значения окружения напрямую в коде.
•
application.yml → значения по умолчанию•
application-dev.yml → настройки для dev-окружения•
application-prod.yml → настройки для prod-окружения• Секреты → переменные окружения или менеджер секретов
Используйте
@ConfigurationProperties для типизированной конфигурации вместо того, чтобы повсюду применять @Value.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤣2