❓ Вопрос
Какие файлы конфигураций и структуры каталогов вы используете для разделения настроек разных окружений? Как предлагаете управлять секретами и чувствительными данными в таких файлах?
✅ Ответ
Разделение настроек разных окружений осуществляется с помощью отдельных конфигурационных файлов или профилей (например, application-dev.yml, application-prod.yml), которые содержат параметры, специфичные для каждого окружения. Структура каталогов обычно отражает логическое разделение, где базовые настройки лежат в общем файле, а окруженческие расширяются и переопределяются в специализированных файлах. Для управления секретами и чувствительными данными применяются защищённые хранилища, такие как Vault или KMS, либо переменные окружения, чтобы не хранить их напрямую в конфигурационных файлах и избежать утечек.
#lexicon #собеседование #java #junior #spring #boot
Какие файлы конфигураций и структуры каталогов вы используете для разделения настроек разных окружений? Как предлагаете управлять секретами и чувствительными данными в таких файлах?
✅ Ответ
Разделение настроек разных окружений осуществляется с помощью отдельных конфигурационных файлов или профилей (например, application-dev.yml, application-prod.yml), которые содержат параметры, специфичные для каждого окружения. Структура каталогов обычно отражает логическое разделение, где базовые настройки лежат в общем файле, а окруженческие расширяются и переопределяются в специализированных файлах. Для управления секретами и чувствительными данными применяются защищённые хранилища, такие как Vault или KMS, либо переменные окружения, чтобы не хранить их напрямую в конфигурационных файлах и избежать утечек.
#lexicon #собеседование #java #junior #spring #boot
❓ Вопрос
Опишите, как настроить ограничение доступа к конкретным эндпоинтам REST API с помощью аннотаций @PreAuthorize или @Secured в Spring. Приведите пример выражения для роли и дополнительные условия доступа.
✅ Ответ
Для ограничения доступа к REST API в Spring используются аннотации @PreAuthorize или @Secured, которые применяются к методам контроллеров или сервисов. @PreAuthorize позволяет задавать сложные выражения на языке SpEL, например '@PreAuthorize("hasRole('ADMIN') and #userId == authentication.principal.id")' ограничит доступ по роли и дополнительному условию. @Secured поддерживает упрощённый синтаксис с перечислением ролей, например '@Secured("ROLE_ADMIN")'. Важно, чтобы включена поддержка методной безопасности через @EnableGlobalMethodSecurity.
#lexicon #собеседование #java #junior #spring #security
Опишите, как настроить ограничение доступа к конкретным эндпоинтам REST API с помощью аннотаций @PreAuthorize или @Secured в Spring. Приведите пример выражения для роли и дополнительные условия доступа.
✅ Ответ
Для ограничения доступа к REST API в Spring используются аннотации @PreAuthorize или @Secured, которые применяются к методам контроллеров или сервисов. @PreAuthorize позволяет задавать сложные выражения на языке SpEL, например '@PreAuthorize("hasRole('ADMIN') and #userId == authentication.principal.id")' ограничит доступ по роли и дополнительному условию. @Secured поддерживает упрощённый синтаксис с перечислением ролей, например '@Secured("ROLE_ADMIN")'. Важно, чтобы включена поддержка методной безопасности через @EnableGlobalMethodSecurity.
#lexicon #собеседование #java #junior #spring #security
❓ Вопрос
Как можно конфигурировать BeanPostProcessor для изменения поведения бина с конструкторной инъекцией и в каких сценариях это будет полезно?
✅ Ответ
BeanPostProcessor можно сконфигурировать, реализовав методы postProcessBeforeInitialization и postProcessAfterInitialization, чтобы модифицировать созданный бин или его свойства после конструкторной инъекции. Это полезно для добавления дополнительной логики, валидации или проксирования бинов без изменения их исходного кода. Особенно эффективно используется для внедрения аспектов, кэширования или динамического изменения поведения объектов на этапе инициализации.
#lexicon #собеседование #java #middle #spring #injection
Как можно конфигурировать BeanPostProcessor для изменения поведения бина с конструкторной инъекцией и в каких сценариях это будет полезно?
✅ Ответ
BeanPostProcessor можно сконфигурировать, реализовав методы postProcessBeforeInitialization и postProcessAfterInitialization, чтобы модифицировать созданный бин или его свойства после конструкторной инъекции. Это полезно для добавления дополнительной логики, валидации или проксирования бинов без изменения их исходного кода. Особенно эффективно используется для внедрения аспектов, кэширования или динамического изменения поведения объектов на этапе инициализации.
#lexicon #собеседование #java #middle #spring #injection
❓ Вопрос
Объясните разницу между lazy и eager загрузкой в JPA. Какие преимущества и недостатки у каждого подхода?
✅ Ответ
Lazy загрузка откладывает извлечение связанных данных до момента их непосредственного использования, что снижает начальную нагрузку на базу и улучшает производительность при работе с большими объемами данных. Eager загрузка сразу загружает все связанные объекты, что упрощает доступ, но может привести к избыточным запросам и снижению производительности при ненужном извлечении данных. Выбор между подходами зависит от сценария использования и требований к производительности и памяти.
#lexicon #собеседование #java #junior #spring #data
Объясните разницу между lazy и eager загрузкой в JPA. Какие преимущества и недостатки у каждого подхода?
✅ Ответ
Lazy загрузка откладывает извлечение связанных данных до момента их непосредственного использования, что снижает начальную нагрузку на базу и улучшает производительность при работе с большими объемами данных. Eager загрузка сразу загружает все связанные объекты, что упрощает доступ, но может привести к избыточным запросам и снижению производительности при ненужном извлечении данных. Выбор между подходами зависит от сценария использования и требований к производительности и памяти.
#lexicon #собеседование #java #junior #spring #data
❓ Вопрос
Какое поведение и жизненный цикл у Spring-бина с областью видимости singleton? Приведите пример, когда это предпочтительно.
✅ Ответ
Spring-бин с областью видимости singleton создаётся один раз при старте контейнера и существует в течение всего времени жизни приложения. Все запросы к такому бину возвращают одну и ту же инстанцию, что обеспечивает экономию ресурсов и состояние, если оно требуется. Такой scope подходит для безсостоянийных сервисов или компонентов, где общий доступ к ресурсам безопасен и желателен. Например, бины-сервисы, реализующие логику бизнес-процессов, часто объявляют singleton для повышения производительности.
#lexicon #собеседование #java #junior #spring #injection
Какое поведение и жизненный цикл у Spring-бина с областью видимости singleton? Приведите пример, когда это предпочтительно.
✅ Ответ
Spring-бин с областью видимости singleton создаётся один раз при старте контейнера и существует в течение всего времени жизни приложения. Все запросы к такому бину возвращают одну и ту же инстанцию, что обеспечивает экономию ресурсов и состояние, если оно требуется. Такой scope подходит для безсостоянийных сервисов или компонентов, где общий доступ к ресурсам безопасен и желателен. Например, бины-сервисы, реализующие логику бизнес-процессов, часто объявляют singleton для повышения производительности.
#lexicon #собеседование #java #junior #spring #injection
❓ Вопрос
Как в Spring Boot настроить профили, чтобы автоматически выбирать конфигурацию базы данных для разных окружений? Расскажите, какие файлы properties или yaml для этого используются и как их приоритет определяется.
✅ Ответ
Для настройки профилей в Spring Boot используют файлы application-{profile}.properties или application-{profile}.yaml, где {profile} — имя профиля, например, dev или prod. Профиль активируется через свойство spring .profiles.active, которое можно задавать в основном application.properties , переменных окружения или аргументах командной строки. Spring Boot загружает сначала основной application.properties , затем перекрывает его значениями из файла активного профиля, определяя приоритет конфигураций. Это позволяет удобно переключать настройки базы данных и другие параметры для разных окружений.
#lexicon #собеседование #java #middle #spring_boot #backend
Как в Spring Boot настроить профили, чтобы автоматически выбирать конфигурацию базы данных для разных окружений? Расскажите, какие файлы properties или yaml для этого используются и как их приоритет определяется.
✅ Ответ
#lexicon #собеседование #java #middle #spring_boot #backend