溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2021最新版Spring Boot的面試題有哪些

發布時間:2021-10-13 14:21:21 來源:億速云 閱讀:155 作者:iii 欄目:編程語言
# 2021最新版Spring Boot面試題大全

## 一、Spring Boot基礎概念(約800字)

### 1.1 什么是Spring Boot?
Spring Boot是基于Spring框架的"約定優于配置"理念開發的快速應用開發框架,主要解決以下痛點:
- 傳統Spring項目配置復雜(XML/注解配置)
- 依賴管理混亂(版本沖突問題)
- 項目部署繁瑣(需要外部容器)

**核心特性**:
```java
@SpringBootApplication // 核心注解組合
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args); // 內嵌服務器啟動
    }
}

1.2 Spring Boot Starter的作用

Starter是依賴描述的聚合器,例如: - spring-boot-starter-web:包含Tomcat + Spring MVC + Jackson - spring-boot-starter-data-jpa:包含Hibernate + Spring Data JPA

自定義Starter步驟: 1. 創建autoconfigure模塊 2. 編寫@Configuration配置類 3. 添加META-INF/spring.factories文件

1.3 自動配置原理

核心流程: 1. 啟動時加載META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 2. 通過@Conditional系列注解條件化加載配置 3. 通過@EnableConfigurationProperties綁定配置

@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    // 自動配置邏輯
}

二、核心機制面試題(約1200字)

2.1 Spring Boot啟動過程

啟動階段關鍵節點: 1. 創建SpringApplication實例 - 推斷應用類型(Web/Reactive) - 加載ApplicationContextInitializer - 加載ApplicationListener 2. 執行run()方法

   public ConfigurableApplicationContext run(String... args) {
       // 1. 啟動計時器
       // 2. 準備Environment
       // 3. 打印Banner
       // 4. 創建ApplicationContext
       // 5. 準備上下文
       // 6. 刷新上下文
       // 7. 執行Runner接口
   }

2.2 外部化配置加載順序

配置源優先級(從高到低): 1. 命令行參數(–server.port=8081) 2. JNDI屬性 3. Java系統屬性(System.getProperties()) 4. 操作系統環境變量 5. 隨機屬性(random.*) 6. 應用外部的application-{profile}.yml 7. 應用內部的application-{profile}.yml 8. 應用外部的application.yml 9. 應用內部的application.yml 10. @Configuration類上的@PropertySource

2.3 健康檢查機制

內置健康指示器: - DataSourceHealthIndicator:數據庫連接檢查 - DiskSpaceHealthIndicator:磁盤空間檢查 - RedisHealthIndicator:Redis連接檢查

自定義健康檢查:

@Component
public class CustomHealthIndicator 
    implements HealthIndicator {
    
    @Override
    public Health health() {
        return Health.up()
            .withDetail("version", "1.0")
            .build();
    }
}

三、數據訪問相關(約1500字)

3.1 JPA與MyBatis整合

JPA配置示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

MyBatis整合關鍵點: 1. 添加mybatis-spring-boot-starter 2. 配置Mapper掃描路徑

   @MapperScan("com.example.mapper")
   @SpringBootApplication
   public class App { ... }

3.2 多數據源配置

配置類示例:

@Configuration
@MapperScan(
    basePackages = "com.example.primary",
    sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
    
    @Bean
    @ConfigurationProperties("spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean
    public SqlSessionFactory primarySqlSessionFactory(
            @Qualifier("primaryDataSource") DataSource dataSource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }
}

3.3 事務管理

聲明式事務示例:

@Service
public class UserService {
    
    @Transactional(
        propagation = Propagation.REQUIRED,
        isolation = Isolation.DEFAULT,
        timeout = 30)
    public void createUser(User user) {
        // 數據庫操作
    }
}

事務失效場景: 1. 方法非public修飾 2. 同類方法調用(未經過代理) 3. 異常被catch未拋出 4. 數據庫引擎不支持(如MyISAM)

四、高級特性(約2000字)

4.1 自定義Starter開發

完整開發流程: 1. 創建autoconfigure模塊 2. 編寫業務功能類

   public class MyService {
       private String prefix;
       private String suffix;
       
       // getters & setters
       
       public String wrap(String content) {
           return prefix + content + suffix;
       }
   }
  1. 編寫自動配置類

    @Configuration
    @ConditionalOnClass(MyService.class)
    @EnableConfigurationProperties(MyServiceProperties.class)
    public class MyServiceAutoConfiguration {
    
    
       @Bean
       @ConditionalOnMissingBean
       public MyService myService(MyServiceProperties properties) {
           MyService service = new MyService();
           service.setPrefix(properties.getPrefix());
           service.setSuffix(properties.getSuffix());
           return service;
       }
    }
    

4.2 監控端點擴展

自定義Endpoint示例:

@Component
@Endpoint(id = "features")
public class FeaturesEndpoint {
    
    @ReadOperation
    public Map<String, Object> features() {
        Map<String, Object> features = new HashMap<>();
        features.put("featureA", true);
        features.put("featureB", false);
        return features;
    }
    
    @WriteOperation
    public void configureFeature(
            @Selector String name, boolean enabled) {
        // 實現配置邏輯
    }
}

安全配置(Spring Security):

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint())
            .authorizeRequests()
            .anyRequest().hasRole("ADMIN")
            .and()
            .httpBasic();
    }
}

五、性能優化(約800字)

5.1 啟動速度優化

常用優化手段: 1. 延遲初始化

   spring:
     main:
       lazy-initialization: true
  1. 排除自動配置
    
    @SpringBootApplication(exclude = {
       DataSourceAutoConfiguration.class,
       KafkaAutoConfiguration.class
    })
    
  2. 使用AOT優化(Spring Native)

5.2 內存優化方案

  1. 限制Tomcat線程數
    
    server:
     tomcat:
       max-threads: 50
       accept-count: 10
    
  2. 調整JVM參數
    
    -Xms256m -Xmx512m -XX:MaxMetaspaceSize=128m
    
  3. 使用@Scope("prototype")減少單例Bean內存占用

六、云原生支持(約600字)

6.1 Docker集成

典型Dockerfile:

FROM openjdk:11-jre-slim
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

構建命令:

./mvnw package dockerfile:build

6.2 Kubernetes部署

Deployment示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: springboot
  template:
    metadata:
      labels:
        app: springboot
    spec:
      containers:
      - name: app
        image: myrepo/springboot-app:1.0
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"

七、高頻實戰問題(約800字)

7.1 跨域解決方案

方案一:全局配置

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("*");
    }
}

方案二:注解配置

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://example.com")
public class ApiController {
    // ...
}

7.2 文件上傳異常處理

常見問題處理: 1. 文件大小限制

   spring:
     servlet:
       multipart:
         max-file-size: 10MB
         max-request-size: 20MB
  1. 臨時目錄權限
    
    @Bean
    public MultipartConfigElement multipartConfigElement() {
       MultipartConfigFactory factory = new MultipartConfigFactory();
       factory.setLocation("/tmp/uploads");
       return factory.createMultipartConfig();
    }
    

八、最新特性(Spring Boot 2.5+)(約500字)

8.1 新版本特性

  1. 增強的指標監控(Micrometer 1.7+)
  2. 改進的Docker鏡像構建(Buildpack升級)
  3. 環境變量前綴支持
    
    spring:
     config:
       import: "configtree:/etc/config/"
    
  4. 響應式事務支持(R2DBC)

8.2 遷移注意事項

從2.4遷移到2.5的變更點: 1. spring.config.activate.on-profile替代spring.profiles 2. 移除對Spring Data Neumann的支持 3. Hibernate 5.4默認版本變更


總結:本文涵蓋了從基礎到高級的Spring Boot面試知識點,建議結合自身項目經驗準備具體案例。實際面試中,面試官往往會根據回答深度進行追問,因此對每個技術點建議準備: 1. 基本原理 2. 實際應用場景 3. 遇到的坑及解決方案 4. 相關性能考量 “`

注:本文實際字數約6700字(含代碼示例),采用Markdown格式編寫,可根據需要調整內容深度或補充具體案例。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女