«Интервью» Вопросы интервью SpringBoot

интервью
«Интервью» Вопросы интервью SpringBoot

__Лучшего нет, есть только правильный

предисловие

SpringBoot сейчас настолько широко используется, что почти все интервьюеры, проводящие бэкенд, будут изучать его использование и основы.

Зачем использовать Spring Boot?

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

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

характеристика:

  1. Нет необходимости использовать конфигурацию XML.
  2. Предоставляет статер для упрощения настройки сборки.
  3. Автоматически настраивайте Spring для интеграции со сторонними библиотеками.
  4. Встроенные веб-сервисы упрощают развертывание.
  5. Предоставляет функции производственного уровня, такие как мониторинг, проверки работоспособности, внешняя конфигурация и многое другое.

Принцип автоматической настройки SpringBoot

просто используйте@EnableAutoConfigurationАннотации включают автоматическую настройку.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration  

@Import(AutoConfigurationImportSelector.class)Это ключ к автоматической настройке, завершающий основную логику автоматической настройки. Ниже приведен основной фрагмент кода

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
	if (!isEnabled(annotationMetadata)) {
		return NO_IMPORTS;
	}
   // 获取配置的元数据
   AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
			.loadMetadata(this.beanClassLoader);
   // 这个方法包含了加载的主要逻辑,它能找到所有自动注入的类
   AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(
			autoConfigurationMetadata, annotationMetadata);
   return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}

ПосмотримgetAutoConfigurationEntryосновная логика

protected AutoConfigurationEntry getAutoConfigurationEntry(
		AutoConfigurationMetadata autoConfigurationMetadata,
		AnnotationMetadata annotationMetadata) {
	// ....
	// 获取候选配置类
	List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);
	// ... 过滤、去重、排除一些配置类
	return new AutoConfigurationEntry(configurations, exclusions);
}

продолжайте следить

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
			AnnotationAttributes attributes) {
   // 通过SpringFactoriesLoader获取到所有自动配置类名称
   List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
				getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
   return configurations;
}

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
	return EnableAutoConfiguration.class;
}

SpringFactoriesLoaderЭто механизм расширения, обеспечиваемый пружиной, который может загружать модули подMETA-INF/sring.factoriesФайл, ключ в этом файле формата свойств — это полное имя интерфейса, аннотации или абстрактного класса, а значением является класс реализации, разделенный запятыми «,». SpringFactoriesLoader может внедрить соответствующий класс реализации в контейнер Spirng.

Посмотрите под модулем spring-boot-autoconfigureMETA-INF/spring.factoriesдокумент

...
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
...

Вы можете видеть, какие классы автоконфигурации он загружает; с помощью этого механизма мы можем написать свои собственные классы автоконфигурации и прописать их под модулемMETA-INF/spring.factoriesзаписать в файл

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.yuan.interview.springboot.XXXAutoConfiguration

Таким образом, прямой импорт нашего модуля загрузитorg.yuan.interview.springboot.XXXAutoConfigurationНастроил класс 👍.

Как отключить определенный класс автоконфигурации?

Есть более чем один способ

  1. использовать@EnableAutoConfigurationизexcludeАтрибуты.
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
  1. Если класс не находится в пути к классам, вы можете использовать@EnableAutoConfigurationизexcludeNameАтрибуты
@EnableAutoConfiguration(excludeName={Foo.class})
  1. Список исключаемых классов автоконфигурации можно контролировать с помощью свойства конфигурации spring.autoconfigure.exclude. Свойства настраиваются в файле конфигурации application.properties, и можно добавить несколько классов, разделенных запятыми.

Что такое встроенный сервер

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

Что такое мониторы в Spring Boot?

Spring Boot Actuator — это реализация мониторинга производственного уровня. Мониторы Spring Boot помогают получить доступ к текущему состоянию работающего приложения в рабочей среде.
Например, какие bean-компоненты были созданы, сопоставления в контроллерах, использование ЦП и т. д.
Из соображений безопасности, если Spring Security присутствует, то по умолчанию для защиты этой информации используется стратегия согласования содержимого Spring Security.

Что такое служба без гражданства

Одной из целей микросервисной архитектуры является обеспечение высокой степени параллелизма в нескольких процессах и использование нескольких копий для совместного использования трафика в зависимости от требований параллелизма. Ключевым моментом, не позволяющим монолитной архитектуре стать распределенной архитектурой, является обработка состояния — если состояние все хранится локально, будь то в памяти или на жестком диске, оно будет отдано архитектуре.МасштабированиеВносит узкое место, потому что только что запущенный процесс просто не может обработать данные пользователя, сохраненные в исходном процессе.
Поэтому всю архитектуру следует разделить на две части: stateless и stateful.Часть бизнес-логики — это stateless часть, которую легко масштабировать по горизонтали.При распространении пользователями ее можно легко распределить по новым процессам для обработки;сохранение состояния Во внутреннем промежуточном программном обеспечении с отслеживанием состояния, таком как кеш, база данных, объектное хранилище, платформа больших данных, очередь сообщений и т. д., в начале проектирования этих промежуточного программного обеспечения рассматривается механизм миграции состояния, репликации и синхронизации во время расширения. , и никакого ухода за слоями не требуется.

Разница между JPA и Hibernate

JPA сама по себе является спецификацией, а ее сущностью является спецификация ORM (не фреймворк ORM, поскольку JPA не предоставляет реализацию ORM, а только делает спецификацию). Поскольку JPA является спецификацией, она лишь предоставляет некоторые связанные интерфейсы. Интерфейс нельзя использовать напрямую.Нижний уровень JPA нуждается в какой-то реализации JPA.Hibernate — это набор реализации JPA.

SpringDataJpa — это продукт семейства данных Spring, предназначенный для упрощения уровня доступа к данным. Он реализует спецификацию Jpa, но под капотом используются другие реализации с открытым исходным кодом, такие как Hibernate, OpenJpa и т. д.

Другие статьи:
Процесс запуска SpringBoot

Увидимся!

добро пожаловать в игру