image_2025-06-11_07-57-10.png
646.4 KB
Вот ещё необходимые инструменты для современной разработки на Java
Database & Migrations Tools
> Liquibase – Отслеживает, управляет и автоматизирует изменения базы данных через changelogs.
> Flyway – Лёгкий инструмент миграции базы данных на основе версий, поддерживает SQL и Java.
> H2 Database – Встроенная in-memory БД, идеальна для локальной разработки и автотестов.
> JOOQ – Type-safe SQL builder, генерирует Java-код из схемы БД; хорош для SQL-нагруженных приложений.
> DBVisualizer / DBeaver – GUI-инструменты для просмотра и визуализации БД (упомянуты как достойные упоминания).
Debugging & Monitoring Tools
> Spring Boot Actuator – Предоставляет метрики, health-check'и и прочее для мониторинга.
> VisualVM – GUI для мониторинга JVM (потоки, память, GC, CPU).
> Java Flight Recorder (JFR) – Встроенный профайлер с низкой нагрузкой от JDK.
> JConsole – Лёгкий инструмент мониторинга на основе JMX, входит в JDK.
> Logback – Мощный логгер, преемник Log4j, с гибкой конфигурацией.
> Log4j2 – Асинхронный логгер с высокой производительностью.
> ELK Stack (Elasticsearch + Logstash + Kibana) – Централизованное логирование и анализ логов.
> Prometheus + Grafana – Сбор и визуализация метрик, часто используются для JVM.
Testing & Mocking Tools
> JUnit 5 – Стандарт для юнит- и интеграционных тестов в Java.
> Mockito – Мощный фреймворк для мокирования зависимостей.
> MockK – Kotlin-ориентированная библиотека моков (можно использовать с Java).
> Testcontainers – Тестирование с использованием Docker-контейнеров (БД, Kafka и т. д.).
> AssertJ – Упрощённые и читаемые assert'ы.
> Arquillian – Интеграционное тестирование Java EE и Jakarta EE (используется реже).
> REST Assured – DSL для тестирования REST API в Java.
> WireMock – HTTP мок-сервер для имитации внешних API.
Dependency & Build Management Tools
> Maven – XML-базированный билд и dependency-менеджмент (широко используется).
> Gradle – Гибкий билд-инструмент с Groovy/Kotlin DSL; быстрее Maven с кэшированием.
> JitPack – Позволяет использовать GitHub-репо как зависимости.
> Versions Maven Plugin – Автоматически проверяет устаревшие зависимости и плагины Maven.
> Dependabot – GitHub-инструмент для автообновления зависимостей через PR.
> Build Scan (by Gradle) – Анализ сборок с веб-дашбордом.
> Bazel – Масштабируемая система сборки от Google, подходит для больших кодовых баз.
> Nexus/Artifactory – Хостинг для внутренних/приватных Java-библиотек (артефактов)
👉 Java Portal
Database & Migrations Tools
> Liquibase – Отслеживает, управляет и автоматизирует изменения базы данных через changelogs.
> Flyway – Лёгкий инструмент миграции базы данных на основе версий, поддерживает SQL и Java.
> H2 Database – Встроенная in-memory БД, идеальна для локальной разработки и автотестов.
> JOOQ – Type-safe SQL builder, генерирует Java-код из схемы БД; хорош для SQL-нагруженных приложений.
> DBVisualizer / DBeaver – GUI-инструменты для просмотра и визуализации БД (упомянуты как достойные упоминания).
Debugging & Monitoring Tools
> Spring Boot Actuator – Предоставляет метрики, health-check'и и прочее для мониторинга.
> VisualVM – GUI для мониторинга JVM (потоки, память, GC, CPU).
> Java Flight Recorder (JFR) – Встроенный профайлер с низкой нагрузкой от JDK.
> JConsole – Лёгкий инструмент мониторинга на основе JMX, входит в JDK.
> Logback – Мощный логгер, преемник Log4j, с гибкой конфигурацией.
> Log4j2 – Асинхронный логгер с высокой производительностью.
> ELK Stack (Elasticsearch + Logstash + Kibana) – Централизованное логирование и анализ логов.
> Prometheus + Grafana – Сбор и визуализация метрик, часто используются для JVM.
Testing & Mocking Tools
> JUnit 5 – Стандарт для юнит- и интеграционных тестов в Java.
> Mockito – Мощный фреймворк для мокирования зависимостей.
> MockK – Kotlin-ориентированная библиотека моков (можно использовать с Java).
> Testcontainers – Тестирование с использованием Docker-контейнеров (БД, Kafka и т. д.).
> AssertJ – Упрощённые и читаемые assert'ы.
> Arquillian – Интеграционное тестирование Java EE и Jakarta EE (используется реже).
> REST Assured – DSL для тестирования REST API в Java.
> WireMock – HTTP мок-сервер для имитации внешних API.
Dependency & Build Management Tools
> Maven – XML-базированный билд и dependency-менеджмент (широко используется).
> Gradle – Гибкий билд-инструмент с Groovy/Kotlin DSL; быстрее Maven с кэшированием.
> JitPack – Позволяет использовать GitHub-репо как зависимости.
> Versions Maven Plugin – Автоматически проверяет устаревшие зависимости и плагины Maven.
> Dependabot – GitHub-инструмент для автообновления зависимостей через PR.
> Build Scan (by Gradle) – Анализ сборок с веб-дашбордом.
> Bazel – Масштабируемая система сборки от Google, подходит для больших кодовых баз.
> Nexus/Artifactory – Хостинг для внутренних/приватных Java-библиотек (артефактов)
Please open Telegram to view this post
VIEW IN TELEGRAM
Техники аутентификации
> Аутентификация по паролю: Это самый простой способ аутентификации. Требуется пароль для конкретного имени пользователя. Если пароль совпадает с именем пользователя и оба значения соответствуют данным в базе, пользователь будет успешно аутентифицирован.
> Аутентификация без пароля: В этой технике пользователю не нужно вводить пароль; вместо этого он получает одноразовый пароль (OTP) или ссылку на зарегистрированный номер телефона. Также называется OTP-аутентификацией.
> 2FA/MFA: Двухфакторная (2FA) или многофакторная (MFA) аутентификация — это более высокий уровень защиты. Требует дополнительный PIN-код или ответы на контрольные вопросы для подтверждения личности пользователя.
> Единый вход (SSO): SSO (Single Sign-On) позволяет получить доступ к нескольким приложениям, используя один набор учетных данных. Пользователь входит один раз, и автоматически получает доступ ко всем другим веб-приложениям из той же централизованной директории.
Техники авторизации
> Контроль доступа на основе ролей (RBAC): Техника RBAC предоставляет доступ пользователям в зависимости от их роли или профиля в организации. Может использоваться как для взаимодействия между системами, так и между пользователем и системой.
> JSON Web Token (JWT): JWT — это открытый стандарт, предназначенный для безопасной передачи данных между сторонами в виде JSON-объекта. Пользователи проверяются и авторизуются с использованием пары закрытого и открытого ключей.
> SAML: SAML (Security Assertion Markup Language) — это открытый стандарт, обеспечивающий передачу авторизационных данных поставщикам сервисов. Эти данные передаются в виде подписанных XML-документов.
> Авторизация через OpenID: Позволяет клиентам проверять личность конечных пользователей на основе аутентификации.
> OAuth: OAuth — это протокол авторизации, который позволяет API аутентифицировать пользователя и предоставлять доступ к запрашиваемым ресурсам.
👉 Java Portal
> Аутентификация по паролю: Это самый простой способ аутентификации. Требуется пароль для конкретного имени пользователя. Если пароль совпадает с именем пользователя и оба значения соответствуют данным в базе, пользователь будет успешно аутентифицирован.
> Аутентификация без пароля: В этой технике пользователю не нужно вводить пароль; вместо этого он получает одноразовый пароль (OTP) или ссылку на зарегистрированный номер телефона. Также называется OTP-аутентификацией.
> 2FA/MFA: Двухфакторная (2FA) или многофакторная (MFA) аутентификация — это более высокий уровень защиты. Требует дополнительный PIN-код или ответы на контрольные вопросы для подтверждения личности пользователя.
> Единый вход (SSO): SSO (Single Sign-On) позволяет получить доступ к нескольким приложениям, используя один набор учетных данных. Пользователь входит один раз, и автоматически получает доступ ко всем другим веб-приложениям из той же централизованной директории.
Техники авторизации
> Контроль доступа на основе ролей (RBAC): Техника RBAC предоставляет доступ пользователям в зависимости от их роли или профиля в организации. Может использоваться как для взаимодействия между системами, так и между пользователем и системой.
> JSON Web Token (JWT): JWT — это открытый стандарт, предназначенный для безопасной передачи данных между сторонами в виде JSON-объекта. Пользователи проверяются и авторизуются с использованием пары закрытого и открытого ключей.
> SAML: SAML (Security Assertion Markup Language) — это открытый стандарт, обеспечивающий передачу авторизационных данных поставщикам сервисов. Эти данные передаются в виде подписанных XML-документов.
> Авторизация через OpenID: Позволяет клиентам проверять личность конечных пользователей на основе аутентификации.
> OAuth: OAuth — это протокол авторизации, который позволяет API аутентифицировать пользователя и предоставлять доступ к запрашиваемым ресурсам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Введение в Springdoc OpenAPI в Spring Boot
Хотите автоматически документировать свои REST API на Spring Boot?
Используйте Springdoc OpenAPI для генерации интерактивного Swagger UI с минимальной конфигурацией.✌️
👉 Java Portal
Хотите автоматически документировать свои REST API на Spring Boot?
Используйте Springdoc OpenAPI для генерации интерактивного Swagger UI с минимальной конфигурацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
Базовые понятия метрик производительности
> Latency (Задержка) – Время, необходимое для выполнения одного запроса или операции.
> Throughput (Пропускная способность) – Количество операций в секунду (например, запросов/сек, транзакций/сек).
> P95 / P99 – Перцентильные метрики, показывающие задержку в худших 5% или 1% случаев.
> Tail Latency – Задержка самых медленных запросов (например, 99-й перцентиль); критично для UX.
> Cold Start – Начальная задержка при запуске системы "с нуля" (например, AWS Lambda).
> Warm Start – Повторное использование уже инициализированного сервиса для снижения задержки старта.
> TTFB– Время между отправкой запроса и получением первого байта ответа.
> RPS – Часто используемая метрика пропускной способности API/сервера.
> QPS – Аналог RPS, но чаще применяется к базам данных и поисковым системам.
> Error Rate – Процент запросов, завершившихся ошибкой (например, 5xx или 4xx).
> Apdex Score – Метрика удовлетворённости пользователей: сколько запросов были быстрыми, терпимыми или медленными.
> SLA – Обещанный провайдером уровень доступности или производительности.
> SLO – Внутренняя целевая метрика производительности.
> SLI – Фактически измеренное значение (например, «99.95% запросов быстрее 500 мс»).
> Resource Utilization – Нагрузка на CPU, память, диск и сеть.
> GC Pause Time – Время, в течение которого приложение приостанавливается для сборки мусора.
> Throughput vs Latency Tradeoff – Увеличение числа запросов может снизить задержку... до определённого момента.
> Jank – Подвисания/дёргания при отрисовке на фронтенде (часто вызвано долгими задачами или перерасчётами стилей).
> CPU Throttling – Ограничения по CPU, например, в контейнерах или облачных окружениях.
> I/O Wait Time – Время, которое CPU тратит в ожидании операций ввода/вывода.
> TTI – Сколько времени нужно, чтобы страница стала полностью пригодной для взаимодействия.
> CLS – Измеряет, насколько элементы смещаются при загрузке.
> FPS – Ключевая метрика визуальной производительности (особенно в играх и анимациях).
> Memory Footprint – Объём памяти, используемый системой/процессом при обычной нагрузке.
> Throttling & Backpressure – Механизмы замедления клиентов/систем при высокой нагрузке для стабилизации.
👉 Java Portal
> Latency (Задержка) – Время, необходимое для выполнения одного запроса или операции.
> Throughput (Пропускная способность) – Количество операций в секунду (например, запросов/сек, транзакций/сек).
> P95 / P99 – Перцентильные метрики, показывающие задержку в худших 5% или 1% случаев.
> Tail Latency – Задержка самых медленных запросов (например, 99-й перцентиль); критично для UX.
> Cold Start – Начальная задержка при запуске системы "с нуля" (например, AWS Lambda).
> Warm Start – Повторное использование уже инициализированного сервиса для снижения задержки старта.
> TTFB– Время между отправкой запроса и получением первого байта ответа.
> RPS – Часто используемая метрика пропускной способности API/сервера.
> QPS – Аналог RPS, но чаще применяется к базам данных и поисковым системам.
> Error Rate – Процент запросов, завершившихся ошибкой (например, 5xx или 4xx).
> Apdex Score – Метрика удовлетворённости пользователей: сколько запросов были быстрыми, терпимыми или медленными.
> SLA – Обещанный провайдером уровень доступности или производительности.
> SLO – Внутренняя целевая метрика производительности.
> SLI – Фактически измеренное значение (например, «99.95% запросов быстрее 500 мс»).
> Resource Utilization – Нагрузка на CPU, память, диск и сеть.
> GC Pause Time – Время, в течение которого приложение приостанавливается для сборки мусора.
> Throughput vs Latency Tradeoff – Увеличение числа запросов может снизить задержку... до определённого момента.
> Jank – Подвисания/дёргания при отрисовке на фронтенде (часто вызвано долгими задачами или перерасчётами стилей).
> CPU Throttling – Ограничения по CPU, например, в контейнерах или облачных окружениях.
> I/O Wait Time – Время, которое CPU тратит в ожидании операций ввода/вывода.
> TTI – Сколько времени нужно, чтобы страница стала полностью пригодной для взаимодействия.
> CLS – Измеряет, насколько элементы смещаются при загрузке.
> FPS – Ключевая метрика визуальной производительности (особенно в играх и анимациях).
> Memory Footprint – Объём памяти, используемый системой/процессом при обычной нагрузке.
> Throttling & Backpressure – Механизмы замедления клиентов/систем при высокой нагрузке для стабилизации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Флаги управления памятью JVM
👉 Java Portal
-Xms
— устанавливает начальный размер кучи (heap). Пример использования: -Xms512m
. Это предотвращает частое перераспределение памяти при прогреве приложения, что может ускорить старт и стабилизировать поведение.-Xmx
— задаёт максимальный размер кучи. Пример: -Xmx2g
. Критически важно для ограничения потребления памяти и предотвращения ошибок OutOfMemoryError (OOM), особенно в долгоживущих или нагруженных приложениях.-Xmn
— определяет размер молодого поколения (Young Generation) в куче. Пример: -Xmn256m
. Точная настройка этого параметра позволяет оптимизировать частоту малых сборок мусора (Minor GC), что напрямую влияет на производительность.-XX:MaxMetaspaceSize
— ограничивает максимальный размер области метаданных классов (Metaspace). Пример: -XX:MaxMetaspaceSize=512m
. Помогает избежать чрезмерного потребления памяти при интенсивной загрузке классов, особенно в приложениях с большим количеством библиотек или плагинов.Please open Telegram to view this post
VIEW IN TELEGRAM
Профилирование с помощью Spring Boot Actuator
Spring Boot Actuator предоставляет эндпоинты, такие как
В связке с Micrometer, Prometheus и Grafana позволяет визуализировать производительность вашего приложения.
👉 Java Portal
Spring Boot Actuator предоставляет эндпоинты, такие как
/actuator/metrics
, /actuator/health
и /actuator/heapdump
.В связке с Micrometer, Prometheus и Grafana позволяет визуализировать производительность вашего приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример Spring MVC: Hello World
Простое веб-приложение, в котором контроллер обрабатывает запрос, добавляет данные в модель и отображает их в представлении (view).
👉 Java Portal
Простое веб-приложение, в котором контроллер обрабатывает запрос, добавляет данные в модель и отображает их в представлении (view).
Please open Telegram to view this post
VIEW IN TELEGRAM
image_2025-06-15_08-03-03.png
2.6 MB
Блок
↳ Синтаксис:
↳ Область действия: Только код внутри фигурных скобок {}.
↳ Блокировка: Используется объект
↳ Поведение: Только один поток может одновременно выполнять код внутри блока synchronized для конкретного объекта objectReference. Это позволяет, например, синхронизироваться на приватном объекте, чтобы внешние классы не могли захватить ту же блокировку, или ограничить синхронизацию только частью метода
👉 Java Portal
synchronized
в Java позволяет указать любой объект в качестве блокировки. Это даёт более тонкий контроль по сравнению с синхронизацией всего метода.↳ Синтаксис:
synchronized (objectReference) { // критическая секция }
↳ Область действия: Только код внутри фигурных скобок {}.
↳ Блокировка: Используется объект
objectReference
, указанный в круглых скобках.↳ Поведение: Только один поток может одновременно выполнять код внутри блока synchronized для конкретного объекта objectReference. Это позволяет, например, синхронизироваться на приватном объекте, чтобы внешние классы не могли захватить ту же блокировку, или ограничить синхронизацию только частью метода
Please open Telegram to view this post
VIEW IN TELEGRAM
image_2025-06-15_07-56-57.png
450.7 KB
Концепции моделирования данных, которые должен знать каждый разработчик
1. Сущность — Объект реального мира или концепт, о котором вы хотите хранить данные (например, пользователь, заказ).
2. Атрибут — Свойство или поле сущности (например, имя, email, цена).
3. Первичный ключ — Уникальный идентификатор для каждой строки в таблице (например,
4. Внешний ключ — Ссылка на первичный ключ в другой таблице; используется для связывания сущностей.
5. Связь "один к одному" — Каждая строка в одной таблице связана с одной строкой в другой.
6. Связь "один ко многим" — Одна строка в таблице связана с несколькими строками в другой (например, пользователь → посты).
7. Связь "многие ко многим" — Несколько строк в одной таблице связаны с несколькими строками в другой (требуется таблица-связка).
8. Нормализация — Организация данных с целью уменьшения дублирования и повышения целостности.
9. Денормализация — Добавление избыточных (дублированных) данных для повышения скорости чтения.
10. Первая нормальная форма (1NF) — Устранение повторяющихся групп; каждая ячейка содержит атомарное значение.
11. Вторая нормальная форма (2NF) — Устранение частичных зависимостей от составного ключа.
12. Третья нормальная форма (3NF) — Устранение транзитивных зависимостей (неключевые столбцы не зависят от других неключевых столбцов).
13. Суррогатный ключ — Системно-сгенерированный идентификатор (например, UUID или auto-increment ID).
14. Естественный ключ — Уникальный идентификатор из реального мира (например, email или номер паспорта).
15. Составной ключ — Первичный ключ, состоящий из нескольких столбцов.
16. Уникальное ограничение — Обеспечивает уникальность значений в столбце (или группе столбцов).
17. Допустимость NULL — Возможность хранить в столбце NULL (т.е. отсутствие значения).
18. Ограничение по значению — Проверяет значения в столбце на соответствие условиям (например,
19. Индекс — Повышает производительность поиска за счёт ускоренного доступа к данным.
20. Схема — Структура/определение таблиц, полей, типов и связей в базе данных.
21. ERD (диаграмма "сущность-связь") — Визуальное представление сущностей и их связей.
22. Кардинальность — Количество строк, которое может быть связано в рамках связи.
23. Тип данных — Определяет, какие значения может хранить столбец (например,
24. Перечисление — Поле, значение которого ограничено предопределённым набором (например, s
25. Мягкое удаление — Пометка записи как удалённой без фактического удаления (например,
👉 Java Portal
1. Сущность — Объект реального мира или концепт, о котором вы хотите хранить данные (например, пользователь, заказ).
2. Атрибут — Свойство или поле сущности (например, имя, email, цена).
3. Первичный ключ — Уникальный идентификатор для каждой строки в таблице (например,
user_id
).4. Внешний ключ — Ссылка на первичный ключ в другой таблице; используется для связывания сущностей.
5. Связь "один к одному" — Каждая строка в одной таблице связана с одной строкой в другой.
6. Связь "один ко многим" — Одна строка в таблице связана с несколькими строками в другой (например, пользователь → посты).
7. Связь "многие ко многим" — Несколько строк в одной таблице связаны с несколькими строками в другой (требуется таблица-связка).
8. Нормализация — Организация данных с целью уменьшения дублирования и повышения целостности.
9. Денормализация — Добавление избыточных (дублированных) данных для повышения скорости чтения.
10. Первая нормальная форма (1NF) — Устранение повторяющихся групп; каждая ячейка содержит атомарное значение.
11. Вторая нормальная форма (2NF) — Устранение частичных зависимостей от составного ключа.
12. Третья нормальная форма (3NF) — Устранение транзитивных зависимостей (неключевые столбцы не зависят от других неключевых столбцов).
13. Суррогатный ключ — Системно-сгенерированный идентификатор (например, UUID или auto-increment ID).
14. Естественный ключ — Уникальный идентификатор из реального мира (например, email или номер паспорта).
15. Составной ключ — Первичный ключ, состоящий из нескольких столбцов.
16. Уникальное ограничение — Обеспечивает уникальность значений в столбце (или группе столбцов).
17. Допустимость NULL — Возможность хранить в столбце NULL (т.е. отсутствие значения).
18. Ограничение по значению — Проверяет значения в столбце на соответствие условиям (например,
age > 0
).19. Индекс — Повышает производительность поиска за счёт ускоренного доступа к данным.
20. Схема — Структура/определение таблиц, полей, типов и связей в базе данных.
21. ERD (диаграмма "сущность-связь") — Визуальное представление сущностей и их связей.
22. Кардинальность — Количество строк, которое может быть связано в рамках связи.
23. Тип данных — Определяет, какие значения может хранить столбец (например,
INT, VARCHAR, DATE
).24. Перечисление — Поле, значение которого ограничено предопределённым набором (например, s
tatus = [pending, complete]
).25. Мягкое удаление — Пометка записи как удалённой без фактического удаления (например,
deleted_at
).Please open Telegram to view this post
VIEW IN TELEGRAM
CompletableFuture - современный подход к асинхронному программированию в Java.
Это помогает повысить производительность в реальных приложениях, таких как API и микросервисы.🥰
👉 Java Portal
CompletableFuture
в Java позволяет выполнять неблокирующие асинхронные задачи с помощью чистого, цепочечного API.Это помогает повысить производительность в реальных приложениях, таких как API и микросервисы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Security. Управление доступом на основе ролей
1) Что такое управление доступом на основе ролей (RBAC)?
RBAC — это подход к безопасности, при котором права доступа назначаются ролям, а пользователи получают определённые роли.
Такой подход упрощает управление разрешениями и делает его масштабируемым по мере роста приложения.
2) Как Spring Security реализует RBAC
Spring Security позволяет определить роли (например, USER, ADMIN, EDITOR) и защитить эндпоинты или методы так, чтобы доступ к ним имели только пользователи с соответствующей ролью.
Роли обычно хранятся в базе данных пользователей и отображаются на authorities (полномочия) в контексте аутентификации.
3) Определение и назначение ролей
Роли можно назначать пользователям в базе данных (например, MySQL) и связывать их с помощью Spring Data JPA.
Например:
🔸 пользователь с ролью ADMIN получает доступ к административным эндпоинтам,
🔸 а пользователь с ролью USER — только к обычным пользовательским функциям.
4) Защита эндпоинтов с помощью аннотаций
Spring Security предоставляет мощные аннотации для контроля доступа:
🔹
🔹
Также можно использовать
5) Иерархия ролей для гибкого управления доступом
Spring Security поддерживает иерархии ролей, что позволяет определить, например:
👉 ADMIN > STAFF > USER
Это означает, что роль ADMIN автоматически наследует все права ролей STAFF и USER. Такой подход снижает избыточность и упрощает управление доступом.
6) Управление доступом на основе ролей с JWT и OAuth2
При использовании OAuth2 или JWT, роли можно закодировать в токене и отобразить их на authorities Spring Security.
Это позволяет реализовать масштабируемую и стейтлес (stateless) безопасность для API и микросервисов.
7) Пример из реального мира
Предположим, у вас есть следующие пользователи и роли:
> USER — может просматривать товары
> CREATOR — может добавлять товары
> EDITOR — может редактировать товары
> ADMIN — имеет полный доступ ко всем действиям
👉 Механизм управления доступом на основе ролей в Spring Security позволяет чётко задать, кто и что может делать в вашем приложении — с использованием гибких ролей, аннотаций и даже иерархий ролей для сложных случаев.
Защищайте эндпоинты и обеспечивайте безопасность и сопровождаемость вашего приложения
👉 Java Portal
1) Что такое управление доступом на основе ролей (RBAC)?
RBAC — это подход к безопасности, при котором права доступа назначаются ролям, а пользователи получают определённые роли.
Такой подход упрощает управление разрешениями и делает его масштабируемым по мере роста приложения.
2) Как Spring Security реализует RBAC
Spring Security позволяет определить роли (например, USER, ADMIN, EDITOR) и защитить эндпоинты или методы так, чтобы доступ к ним имели только пользователи с соответствующей ролью.
Роли обычно хранятся в базе данных пользователей и отображаются на authorities (полномочия) в контексте аутентификации.
3) Определение и назначение ролей
Роли можно назначать пользователям в базе данных (например, MySQL) и связывать их с помощью Spring Data JPA.
Например:
4) Защита эндпоинтов с помощью аннотаций
Spring Security предоставляет мощные аннотации для контроля доступа:
@PreAuthorize("hasRole('ADMIN')")
— ограничивает доступ к методу только для пользователей с ролью ADMIN.@Secured("ROLE_USER") и @RolesAllowed("ROLE_EDITOR")
— альтернативные способы указания разрешённых ролей.Также можно использовать
ant matchers
в конфигурации безопасности для ограничения доступа к URL-шаблонам по ролям.5) Иерархия ролей для гибкого управления доступом
Spring Security поддерживает иерархии ролей, что позволяет определить, например:
Это означает, что роль ADMIN автоматически наследует все права ролей STAFF и USER. Такой подход снижает избыточность и упрощает управление доступом.
6) Управление доступом на основе ролей с JWT и OAuth2
При использовании OAuth2 или JWT, роли можно закодировать в токене и отобразить их на authorities Spring Security.
Это позволяет реализовать масштабируемую и стейтлес (stateless) безопасность для API и микросервисов.
7) Пример из реального мира
Предположим, у вас есть следующие пользователи и роли:
> USER — может просматривать товары
> CREATOR — может добавлять товары
> EDITOR — может редактировать товары
> ADMIN — имеет полный доступ ко всем действиям
Защищайте эндпоинты и обеспечивайте безопасность и сопровождаемость вашего приложения
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Singleton Pattern
Гарантирует наличие единственного экземпляра класса с ленивой инициализацией. Использует двойную проверку блокировки (double-checked locking) для обеспечения потокобезопасности
Где используется:
> глобальный логгер на всё приложение
> загрузка конфигурации при первом вызове
> отложенное создание пула соединений
> минимизируем блокировки после инициализации📝
👉 Java Portal
Гарантирует наличие единственного экземпляра класса с ленивой инициализацией. Использует двойную проверку блокировки (double-checked locking) для обеспечения потокобезопасности
Где используется:
> глобальный логгер на всё приложение
> загрузка конфигурации при первом вызове
> отложенное создание пула соединений
> минимизируем блокировки после инициализации
Please open Telegram to view this post
VIEW IN TELEGRAM
Различия между List, Set и Map в Java — как раз то, что часто спрашивают на интервью
1. List представляет собой упорядоченную коллекцию элементов, в которой допускаются дубликаты. Элементы сохраняют порядок вставки, как, например, в ArrayList. Доступ к элементам осуществляется по индексу, например list.get(0). Основные методы:
Часто используемые реализации — ArrayList и LinkedList. List может содержать несколько значений null.
Потокобезопасность не обеспечивается по умолчанию, но можно использовать
2. Set — это неупорядоченная коллекция уникальных элементов. Порядок не гарантируется (например, в
Основные методы:
Сортировка поддерживается в TreeSet, где элементы хранятся отсортированными. Производительность: быстрые операции в HashSet. Потоки поддерживаются (
3. Map — это коллекция пар ключ-значение. Ключи должны быть уникальными, значения — нет.
Ключи могут быть неупорядоченными (HashMap), отсортированными (TreeMap) или упорядоченными по порядку вставки (LinkedHashMap). Доступ осуществляется по ключу, например
Разрешён один null-ключ и несколько null-значений (например, в HashMap). Потокобезопасность отсутствует в HashMap, но есть в ConcurrentHashMap. Применяется, когда данные организованы в формате ключ-значение. TreeMap поддерживает сортировку по ключам. Производительность: быстрый доступ у HashMap, отсортированный доступ у TreeMap. Поддержка потоков осуществляется через
👉 Java Portal
1. List представляет собой упорядоченную коллекцию элементов, в которой допускаются дубликаты. Элементы сохраняют порядок вставки, как, например, в ArrayList. Доступ к элементам осуществляется по индексу, например list.get(0). Основные методы:
add(), get(), remove(), set()
. Часто используемые реализации — ArrayList и LinkedList. List может содержать несколько значений null.
Потокобезопасность не обеспечивается по умолчанию, но можно использовать
Collections.synchronizedList()
. Сценарий применения — когда важен порядок элементов и допускаются дубликаты. Для сортировки можно использовать Collections.sort()
. Производительность: быстрое чтение у ArrayList, быстрая вставка у LinkedList. Поддерживается работа с потоками, например list.stream()
.2. Set — это неупорядоченная коллекция уникальных элементов. Порядок не гарантируется (например, в
HashSet
). Доступ осуществляется через итерацию. Основные методы:
add(), contains(), remove()
. Часто используемые реализации — HashSet, LinkedHashSet, TreeSet
. Set может содержать только один элемент null, как в HashSet. Потокобезопасность отсутствует. Применяется, когда важна уникальность элементов.Сортировка поддерживается в TreeSet, где элементы хранятся отсортированными. Производительность: быстрые операции в HashSet. Потоки поддерживаются (
stream()
).3. Map — это коллекция пар ключ-значение. Ключи должны быть уникальными, значения — нет.
Ключи могут быть неупорядоченными (HashMap), отсортированными (TreeMap) или упорядоченными по порядку вставки (LinkedHashMap). Доступ осуществляется по ключу, например
map.get(key)
. Основные методы: put(), get(), remove(), containsKey()
. Типичные реализации — HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap
.Разрешён один null-ключ и несколько null-значений (например, в HashMap). Потокобезопасность отсутствует в HashMap, но есть в ConcurrentHashMap. Применяется, когда данные организованы в формате ключ-значение. TreeMap поддерживает сортировку по ключам. Производительность: быстрый доступ у HashMap, отсортированный доступ у TreeMap. Поддержка потоков осуществляется через
map.entrySet().stream()
.Please open Telegram to view this post
VIEW IN TELEGRAM
Потокобезопасные неизменяемые данные с использованием Java Records:
Классы record в Java обеспечивают встроенную неизменяемость, что делает их идеальными для безопасного обмена данными между потоками. В сочетании с❤️
👉 Java Portal
Классы record в Java обеспечивают встроенную неизменяемость, что делает их идеальными для безопасного обмена данными между потоками. В сочетании с
ExecutorService
они упрощают конкурентное программирование Please open Telegram to view this post
VIEW IN TELEGRAM
Примитивные типы данных
Мини-шпаргалка для новичков и тех, кто повторяет основы
🔸 byte — 1 байт
Диапазон: -128 до 127
🔸 short — 2 байта
Диапазон: -32,768 до 32,767
🔸 int — 4 байта
Диапазон: -2,147,483,648 до 2,147,483,647
🔸 long — 8 байт
Диапазон: ±9 квинтиллионов (±2^63)
🔸 float — 4 байта
Точность: ~7 знаков после запятой
🔸 double — 8 байт
Точность: ~15 знаков после запятой
🔸 char — 2 байта
Хранит 1 Unicode-символ
🔸 boolean — ~1 бит (зависит от JVM)
Значения: true / false
👉 Java Portal
Мини-шпаргалка для новичков и тех, кто повторяет основы
Диапазон: -128 до 127
Диапазон: -32,768 до 32,767
Диапазон: -2,147,483,648 до 2,147,483,647
Диапазон: ±9 квинтиллионов (±2^63)
Точность: ~7 знаков после запятой
Точность: ~15 знаков после запятой
Хранит 1 Unicode-символ
Значения: true / false
Please open Telegram to view this post
VIEW IN TELEGRAM
Взаимоблокировка (deadlock) в Java
Взаимоблокировка возникает, когда два потока удерживают блокировки и одновременно ожидают освобождения друг друга, что приводит к зависанию программы. Такая ситуация труднообнаружима и становится кошмаром в масштабных приложениях😨
👉 Java Portal
Взаимоблокировка возникает, когда два потока удерживают блокировки и одновременно ожидают освобождения друг друга, что приводит к зависанию программы. Такая ситуация труднообнаружима и становится кошмаром в масштабных приложениях
Please open Telegram to view this post
VIEW IN TELEGRAM
Java остаётся одним из самых популярных языков уже больше двух десятилетий.
Банковские системы, e-commerce платформы, Android-приложения и многое другое, всё это можно писать на Java.
В этом курсе ты изучишь основы Java: от переменных и циклов до объектно-ориентированного программирования (OOP).😊
👉 Java Portal
Банковские системы, e-commerce платформы, Android-приложения и многое другое, всё это можно писать на Java.
В этом курсе ты изучишь основы Java: от переменных и циклов до объектно-ориентированного программирования (OOP).
Please open Telegram to view this post
VIEW IN TELEGRAM