Рубрики
Без рубрики

Вопросы для интервью с Весенней загрузкой

Практический обзор наиболее популярных вопросов для интервью Spring Boot (с ответами).

Автор оригинала: Nguyen Nam Thai.

1. введение

С момента своего появления Spring Boot является ключевым игроком в экосистеме Spring. Этот проект значительно облегчает нашу жизнь благодаря возможности автоматической настройки.

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

Дальнейшее чтение:

Лучшие вопросы для интервью Spring Framework

Сравнение между Пружиной и Пружинным ботинком

2. Вопросы

Q1. Что такое Spring Boot и каковы его основные характеристики?

Spring Boot-это, по сути, фреймворк для быстрой разработки приложений, построенный поверх фреймворка Spring. Благодаря автоматической настройке и поддержке встроенного сервера приложений в сочетании с обширной документацией и поддержкой сообщества Spring Boot является одной из самых популярных технологий в экосистеме Java на сегодняшний день.

Вот несколько характерных особенностей:

  • Starters – набор дескрипторов зависимостей для включения соответствующих зависимостей на ходу
  • Автоконфигурация -способ автоматической настройки приложения на основе зависимостей, присутствующих в пути к классу
  • Привод – для получения готовых к производству функций, таких как мониторинг
  • Безопасность
  • Регистрация

Q2. В чем разница между пружиной и пружинным ботинком?

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

С годами Spring становится все более и более сложной, и объем конфигурации, требуемой для такого приложения, может быть пугающим. Вот где пригодится Spring Boot – это делает настройку приложения Spring легким делом.

По сути, в то время как Spring не является открытым, Spring Boot имеет самоуверенный взгляд на платформу и библиотеки, позволяя нам быстро начать работу.

Есть два наиболее важных преимущества, которые приносит весенняя загрузка:

  • Автоматическая настройка приложений на основе артефактов, обнаруженных в пути к классам
  • Предоставление нефункциональных функций, общих для приложений в рабочей среде, таких как проверка безопасности или работоспособности

Пожалуйста, проверьте один из наших других учебников для подробного сравнения между vanilla Spring и Spring Boot .

Q3. Как Мы Можем настроить приложение Spring Boot С Помощью Maven?

Мы можем включить Spring Boot в проект Maven точно так же, как и в любую другую библиотеку. Однако лучший способ-наследовать от проекта spring-boot-starter-parent и объявить зависимости для Spring Boot starters . Это позволяет нашему проекту повторно использовать настройки Spring Boot по умолчанию.

Наследование проекта spring-boot-starter-parent просто – нам нужно только указать элемент parent в pom.xml :


    org.springframework.boot
    spring-boot-starter-parent
    2.4.0.RELEASE

Мы можем найти последнюю версию spring-boot-starter-parent на Maven Central .

Использование родительского проекта starter удобно, но не всегда выполнимо. Например, если ваша компания требует, чтобы все проекты наследовались от стандартного POM, мы все равно можем извлечь выгоду из управления зависимостями Spring Boot с помощью пользовательского родителя .

Q4. Что такое Spring Initializr?

Spring Initializr-это удобный способ создания проекта Spring Boot.

Мы можем перейти на сайт Spring Initializr , выбрать инструмент управления зависимостями (Maven или Gradle), язык (Java, Kotlin или Groovy), схему упаковки (Jar или War), версию и зависимости и загрузить проект.

Это создает для нас каркасный проект и экономит время настройки, чтобы мы могли сосредоточиться на добавлении бизнес-логики.

Даже когда мы используем мастер новых проектов нашей IDE (например, STS или Eclipse с плагином STS) для создания проекта Spring Boot, он использует Spring Initializr под капотом.

Q5. Какие Пружинные Загрузочные Стартеры Доступны Там?

Каждый стартер играет роль универсального магазина для всех необходимых нам весенних технологий. Другие необходимые зависимости затем транзитивно втягиваются и управляются согласованным образом.

Все стартеры находятся под org.springframework.boot group и их имена начинаются с spring-boot-starter- . Этот шаблон именования упрощает поиск стартеров, особенно при работе с IDE, которые поддерживают поиск зависимостей по имени.

На момент написания этой статьи в нашем распоряжении было более 50 стартеров. Наиболее часто используемые:

  • spring-boot-starter: core starter, включая поддержку автоматической настройки, ведение журнала и YAMI
  • spring-boot-starter-aop: стартер для аспектно-ориентированного программирования с Spring AOP и AspectJ
  • spring-boot-starter-data-jpa: стартер для использования Spring Data JPA с Hibernate
  • spring-boot-starter-security: стартер для использования Spring Security
  • spring-boot-starter-test: стартер для тестирования приложений Spring Boot
  • spring-boot-starter-web: стартер для создания веб-приложений, включая RESTful, с использованием Spring MVC

Полный список стартеров см. в разделе этот репозиторий .

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

Q6. Как отключить определенную автоматическую настройку?

Если мы хотим отключить определенную автоконфигурацию, мы можем указать ее с помощью атрибута exclude аннотации @EnableAutoConfiguration|/. Например, этот фрагмент кода нейтрализует DataSourceAutoConfiguration :

// other annotations
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }

Если бы мы включили автоматическую настройку с помощью аннотации @SpringBootApplication , которая имеет @EnableAutoConfiguration в качестве мета-аннотации, мы могли бы отключить автоматическую настройку с атрибутом с тем же именем:

// other annotations
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MyConfiguration { }

Мы также можем отключить автоматическую настройку с помощью свойства spring.auto configure.exclude environment. Этот параметр в файле application.properties делает то же самое, что и раньше:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Q7. Как зарегистрировать Пользовательскую автоконфигурацию?

Чтобы зарегистрировать класс автоматической конфигурации, мы должны иметь его полное имя, указанное под ключом EnableAutoConfiguration в файле META-INF/spring.factories :

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration

Если мы создадим проект с помощью Maven, этот файл должен быть помещен в каталог resources/META-INF , который окажется в указанном месте во время фазы package .

Q8. Как сообщить Автоконфигурации, чтобы отступить,когда боб существует?

Чтобы указать классу автоматической конфигурации отступить, когда боб уже существует, мы можем использовать аннотацию @ConditionalOnMissingBean . Наиболее заметными атрибутами этой аннотации являются:

  • значение: Типы бобов, которые необходимо проверить
  • имя: Имена проверяемых бобов

При размещении в методе , украшенном символом @Bean , целевой тип по умолчанию соответствует типу возвращаемого метода:

@Configuration
public class CustomConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public CustomService service() { ... }
}

Q9. Как развернуть веб-приложения Spring Boot в виде файлов Jar и War?

Традиционно мы упаковываем веб-приложение в виде файла WAR, а затем развертываем его на внешнем сервере. Это позволяет нам организовать несколько приложений на одном сервере. В то время, когда процессор и память были дефицитными, это был отличный способ сэкономить ресурсы.

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

Spring решает эту проблему, предоставляя плагин , а именно spring-boot-maven-plugin , для упаковки веб-приложения в виде исполняемого файла JAR . Чтобы включить этот плагин, просто добавьте элемент plugin в pom.xml :


    org.springframework.boot
    spring-boot-maven-plugin

С помощью этого плагина мы получим жирную банку после выполнения фазы package . Эта БАНКА содержит все необходимые зависимости, включая встроенный сервер. Таким образом, нам больше не нужно беспокоиться о настройке внешнего сервера.

Затем мы можем запустить приложение так же, как и обычную исполняемую банку.

Обратите внимание, что элемент упаковка в pom.xml файл должен быть установлен в jar для создания файла JAR:

jar

Если мы не включаем этот элемент, он также по умолчанию имеет значение jar .

В случае, если мы хотим создать файл WAR, измените элемент packaging на war :

war

И оставьте зависимость контейнера от упакованного файла:


    org.springframework.boot
    spring-boot-starter-tomcat
    provided

После выполнения фазы Maven package у нас будет развертываемый файл WAR.

Q10. Как использовать Spring Boot для приложений командной строки?

Как и любая другая программа Java, приложение командной строки Spring Boot должно иметь метод main . Этот метод служит точкой входа, которая вызывает метод Spring Application#run для начальной загрузки приложения:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class);
        // other statements
    }
}

Затем класс Spring Application запускает контейнер Spring и автоматически настраивает компоненты.

Обратите внимание, что мы должны передать класс конфигурации методу run , чтобы он работал в качестве основного источника конфигурации. По соглашению, этот аргумент является самим классом ввода.

После вызова метода run мы можем выполнять другие операторы, как в обычной программе.

Q11. Каковы возможные источники внешней конфигурации?

Spring Boot обеспечивает поддержку внешней конфигурации, позволяя нам запускать одно и то же приложение в различных средах. Мы можем использовать файлы свойств, файлы YAML, переменные среды, системные свойства и аргументы параметров командной строки для указания свойств конфигурации.

Затем мы можем получить доступ к этим свойствам с помощью аннотации @Value , связанного объекта с помощью аннотации @ConfigurationProperties или абстракции Environment .

Q12. Что Означает, что Spring Boot Поддерживает ослабленную привязку?

Ослабленная привязка в Spring Boot применима к типобезопасной привязке свойств конфигурации .

При ослабленной привязке ключ свойства не обязательно должен точно совпадать с именем свойства. Такое свойство среды может быть записано в camelCase, kebab-case, snake_case или в верхнем регистре со словами, разделенными подчеркиванием.

Например, если свойство в классе bean с аннотацией @ConfigurationProperties имеет имя myProp , оно может быть привязано к любому из этих свойств среды: myProp , my-prop , my_prop или MY_PROP .

Q13. Для Чего используется Spring Boot Devtools?

Spring Boot Developer Tools, или DevTools, – это набор инструментов, облегчающих процесс разработки. Чтобы включить эти функции во время разработки, нам просто нужно добавить зависимость в pom.xml файл:


    org.springframework.boot
    spring-boot-devtools

Модуль spring-boot-devtools автоматически отключается, если приложение работает в рабочей среде. Переупаковка архивов также исключает этот модуль по умолчанию. Следовательно, это не принесет никаких накладных расходов на наш конечный продукт.

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

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

По умолчанию статические ресурсы, включая шаблоны представлений, не запускают перезапуск. Вместо этого изменение ресурса вызывает обновление браузера. Обратите внимание, что это может произойти только в том случае, если расширение LiveReload установлено в браузере для взаимодействия со встроенным сервером LiveReload, содержащимся в DevTools.

Для получения дополнительной информации по этому вопросу, пожалуйста, ознакомьтесь с обзором Spring Boot DevTools .

Q14. Как писать интеграционные тесты?

При выполнении интеграционных тестов для приложения Spring мы должны иметь ApplicationContext .

Чтобы облегчить нашу жизнь, Spring Boot предоставляет специальную аннотацию для тестирования – @SpringBootTest . Эта аннотация создает ApplicationContext из классов конфигурации, указанных его атрибутом classes .

Если атрибут classes не задан, Spring Boot выполняет поиск основного класса конфигурации. Поиск начинается с пакета, содержащего тест, до тех пор, пока он не найдет класс с аннотацией @SpringBootApplication или @SpringBootConfiguration .

Для получения подробных инструкций ознакомьтесь с нашим руководством по тестированию в Spring Boot .

Q15. Для Чего Используется Привод Пружинного Ботинка?

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

Интеграция привода пружинного загрузчика в проект очень проста. Все, что нам нужно сделать, это включить пружинный загрузочный стартер-привод стартер в pom.xml файл:


    org.springframework.boot
    spring-boot-starter-actuator

Привод пружинной загрузки может предоставлять оперативную информацию с помощью конечных точек HTTP или JMX. Однако большинство приложений используют HTTP, где идентификатор конечной точки и префикс / /образуют URL-путь.

Вот некоторые из наиболее распространенных встроенных конечных точек, которые предоставляет привод:

  • env: Раскрывает свойства среды
  • здоровье: Показывает информацию о состоянии приложения
  • трассировка http: Отображает информацию о трассировке HTTP
  • информация: Отображает произвольную информацию о приложении
  • метрики: Показывает информацию о метриках
  • регистраторы: Показывает и изменяет конфигурацию регистраторов в приложении
  • сопоставления: Отображает список всех @RequestMapping путей

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

Q16. Какой способ лучше настроить проект Spring Boot – С помощью свойств или YAML?

YAML предлагает множество преимуществ по сравнению с файлами свойств, такими как:

  • Большая ясность и лучшая читабельность
  • Идеально подходит для иерархических конфигурационных данных, которые также представлены в лучшем, более удобочитаемом формате
  • Поддержка карт, списков и скалярных типов
  • Может включать несколько профилей в один и тот же файл (начиная с Spring Boot 2.4.0, это возможно и для файлов свойств)

Однако его написание может быть немного сложным и подверженным ошибкам из-за правил отступов.

Для получения подробной информации и рабочих образцов, пожалуйста, обратитесь к нашему учебнику Spring YAML vs Properties.

Q17. Каковы основные аннотации, которые предлагает Spring Boot?

Основные аннотации, предлагаемые Spring Boot, находятся в его org.springframework.boot.autoconfigure и его подпакетах. Вот несколько основных из них:

  • @EnableAutoConfiguration – чтобы заставить Spring Boot искать компоненты автоматической конфигурации в своем пути к классам и автоматически применять их.
  • @SpringBootApplication – используется для обозначения основного класса загрузочного приложения. Эта аннотация объединяет @Configuration , @EnableAutoConfiguration и @ComponentScan аннотации с их атрибутами по умолчанию.

Аннотации Spring Boot дают более глубокое представление об этом предмете.

Q18. Как Вы можете изменить порт по умолчанию в Spring Boot?

Мы можем изменить порт по умолчанию сервера, встроенного в Spring Boot, одним из следующих способов:

  • использование файла свойств – мы можем определить это в файле application.properties (или application.yml ) , используя свойство server.port
  • программно – в нашем основном классе @SpringBootApplication мы можем установить server.port на экземпляре SpringApplication
  • использование командной строки – при запуске приложения в виде файла jar мы можем установить server.port в качестве аргумента команды java:

Q19. Какие встроенные серверы поддерживает Spring Boot и как изменить значение по умолчанию?

На сегодняшний день Spring MVC поддерживает Tomcat, Jetty и Undertow . Tomcat-это сервер приложений по умолчанию, поддерживаемый Spring Boot web starter.

Spring Web Flux поддерживает Reactor Netty, Tomcat, Jetty и Undertow с Reactor Netty по умолчанию.

В Spring MVC, чтобы изменить значение по умолчанию, скажем, на Jetty, нам нужно исключить Tomcat и включить Jetty в зависимости:


    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    


    org.springframework.boot
    spring-boot-starter-jetty

Аналогично, чтобы изменить значение по умолчанию в Web Flux на UnderTow, нам нужно исключить Reactor Netty и включить UnderTow в зависимости.

“”Сравнение встроенного контейнера сервлетов в Spring Boot” содержит более подробную информацию о различных встроенных серверах, которые мы можем использовать с Spring MVC.

Q20. Зачем Нам Нужны Пружинные Профили?

При разработке приложений для предприятия мы обычно имеем дело с несколькими средами, такими как Dev, QA и Prod. Свойства конфигурации для этих сред различны.

Например, мы можем использовать встроенную базу данных H2 для Dev, но Prob может иметь собственный Oracle или DB2. Даже если СУБД одинакова в разных средах, URL-адреса определенно будут разными.

Чтобы сделать это легко и чисто, Spring предоставляет профили, чтобы помочь разделить конфигурацию для каждой среды . Таким образом, вместо того, чтобы поддерживать это программно, свойства могут храниться в отдельных файлах, таких как application-dev. properties и application-prod. свойства . По умолчанию application.properties s указывает на текущий активный профиль с помощью spring. профили . активен , чтобы была подобрана правильная конфигурация.

Spring Profiles дает всестороннее представление об этой теме.

3. Заключение

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