Spring Boot面试题

Spring Boot面试题

基础概念

Q1: Spring Boot的核心特性有哪些?

java 复制代码
public class SpringBootBasicDemo {
    // 1. 自动配置
    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
        
        // 自定义配置
        @Configuration
        public class CustomConfig {
            @Bean
            @ConditionalOnMissingBean
            public DataSource dataSource() {
                return DataSourceBuilder
                    .create()
                    .url("jdbc:mysql://localhost:3306/demo")
                    .username("root")
                    .password("password")
                    .build();
            }
        }
    }
    
    // 2. 外部配置
    @Configuration
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {
        private String name;
        private String description;
        private Map<String, String> additionalHeaders = new HashMap<>();
        
        // getters and setters
    }
}

Q2: Spring Boot的启动流程是怎样的?

java 复制代码
public class SpringBootStartupDemo {
    // 1. 启动流程
    public class StartupExample {
        public void startupDemo() {
            @SpringBootApplication
            public class Application {
                public static void main(String[] args) {
                    SpringApplication app = new SpringApplication(Application.class);
                    app.setBannerMode(Banner.Mode.OFF);
                    app.setWebApplicationType(WebApplicationType.SERVLET);
                    app.addListeners(new ApplicationListener<ApplicationEvent>() {
                        @Override
                        public void onApplicationEvent(ApplicationEvent event) {
                            if (event instanceof ApplicationStartedEvent) {
                                // 应用启动后的处理
                            }
                        }
                    });
                    app.run(args);
                }
            }
        }
    }
    
    // 2. 自定义启动器
    public class CustomStarterExample {
        public void starterDemo() {
            // 自动配置类
            @Configuration
            @ConditionalOnClass(CustomService.class)
            @EnableConfigurationProperties(CustomProperties.class)
            public class CustomAutoConfiguration {
                @Autowired
                private CustomProperties properties;
                
                @Bean
                @ConditionalOnMissingBean
                public CustomService customService() {
                    return new CustomService(properties);
                }
            }
            
            // 配置属性
            @ConfigurationProperties(prefix = "custom")
            public class CustomProperties {
                private String property;
                private boolean enabled = true;
                
                // getters and setters
            }
        }
    }
}

高级特性

Q3: Spring Boot的自动配置原理是怎样的?

java 复制代码
public class AutoConfigurationDemo {
    // 1. 条件注解
    public class ConditionalExample {
        public void conditionalDemo() {
            @Configuration
            @ConditionalOnClass(DataSource.class)
            public class DatabaseConfiguration {
                @Bean
                @ConditionalOnMissingBean
                public DataSource dataSource() {
                    // 数据源配置
                }
                
                @Bean
                @ConditionalOnProperty(
                    prefix = "spring.jpa",
                    name = "enabled",
                    havingValue = "true",
                    matchIfMissing = true)
                public JpaTransactionManager transactionManager() {
                    // 事务管理器配置
                }
            }
        }
    }
    
    // 2. 自动配置实现
    public class AutoConfigImplementationExample {
        public void autoConfigDemo() {
            @Configuration
            @EnableAutoConfiguration
            @ComponentScan
            public class AppConfig {
                @Bean
                public BeanFactoryPostProcessor beanFactoryPostProcessor() {
                    return new BeanFactoryPostProcessor() {
                        @Override
                        public void postProcessBeanFactory(
                            ConfigurableListableBeanFactory beanFactory) 
                            throws BeansException {
                            // 处理bean工厂
                        }
                    };
                }
            }
        }
    }
}

Q4: Spring Boot的监控和运维是怎样的?

java 复制代码
public class MonitoringDemo {
    // 1. Actuator配置
    public class ActuatorExample {
        public void actuatorDemo() {
            @Configuration
            public class ActuatorConfig {
                @Bean
                public HealthIndicator customHealthIndicator() {
                    return new HealthIndicator() {
                        @Override
                        public Health health() {
                            return Health.up()
                                .withDetail("app", "Healthy")
                                .withDetail("error", "None")
                                .build();
                        }
                    };
                }
                
                @Bean
                public EndpointWebExtension metricsEndpointWebExtension(
                    MetricsEndpoint metricsEndpoint) {
                    return new EndpointWebExtension() {
                        @ReadOperation
                        public WebEndpointResponse<Map> getMetrics() {
                            return new WebEndpointResponse<>(
                                metricsEndpoint.metric("jvm.memory.used", null)
                                    .getMeasurements()
                                    .stream()
                                    .collect(Collectors.toMap(
                                        Measurement::getStatistic,
                                        Measurement::getValue)),
                                200);
                        }
                    };
                }
            }
        }
    }
    
    // 2. 自定义监控指标
    public class CustomMetricsExample {
        public void metricsDemo() {
            @Component
            public class CustomMetricsExporter {
                private final MeterRegistry registry;
                
                public CustomMetricsExporter(MeterRegistry registry) {
                    this.registry = registry;
                }
                
                public void recordCustomMetric(String name, double value) {
                    registry.gauge(name, value);
                }
                
                public void incrementCounter(String name) {
                    registry.counter(name).increment();
                }
                
                public void recordTimer(String name, long timeInMs) {
                    registry.timer(name)
                        .record(Duration.ofMillis(timeInMs));
                }
            }
        }
    }
}

Q5: Spring Boot的性能优化有哪些?

java 复制代码
public class PerformanceOptimizationDemo {
    // 1. JVM优化
    public class JVMOptimizationExample {
        public void jvmOptDemo() {
            // JVM参数配置
            public class JVMConfig {
                public void configureJVM() {
                    // 设置JVM参数
                    System.setProperty("spring.jmx.enabled", "false");
                    System.setProperty("spring.config.location", 
                        "classpath:/application.yml");
                    System.setProperty("server.tomcat.max-threads", "200");
                    System.setProperty("server.tomcat.min-spare-threads", "10");
                }
            }
        }
    }
    
    // 2. 数据库优化
    public class DatabaseOptimizationExample {
        public void dbOptDemo() {
            @Configuration
            public class DatabaseConfig {
                @Bean
                public DataSource dataSource() {
                    HikariConfig config = new HikariConfig();
                    config.setMaximumPoolSize(10);
                    config.setMinimumIdle(5);
                    config.setIdleTimeout(300000);
                    config.setConnectionTimeout(20000);
                    config.setMaxLifetime(1200000);
                    
                    return new HikariDataSource(config);
                }
                
                @Bean
                public JdbcTemplate jdbcTemplate(DataSource dataSource) {
                    JdbcTemplate template = new JdbcTemplate(dataSource);
                    template.setFetchSize(100);
                    template.setMaxRows(500);
                    return template;
                }
            }
        }
    }
    
    // 3. 缓存优化
    public class CacheOptimizationExample {
        public void cacheOptDemo() {
            @Configuration
            @EnableCaching
            public class CacheConfig {
                @Bean
                public CacheManager cacheManager() {
                    CaffeineCacheManager cacheManager = 
                        new CaffeineCacheManager("users");
                    cacheManager.setCaffeine(Caffeine.newBuilder()
                        .expireAfterWrite(60, TimeUnit.MINUTES)
                        .maximumSize(100));
                    return cacheManager;
                }
            }
            
            @Service
            public class UserService {
                @Cacheable(value = "users", key = "#id")
                public User getUser(Long id) {
                    // 从数据库获取用户
                    return userRepository.findById(id).orElse(null);
                }
                
                @CacheEvict(value = "users", key = "#user.id")
                public void updateUser(User user) {
                    // 更新用户
                    userRepository.save(user);
                }
            }
        }
    }
}

面试关键点

  1. 理解Spring Boot的核心特性
  2. 掌握启动流程和原理
  3. 熟悉自动配置机制
  4. 了解监控和运维
  5. 掌握性能优化方法
  6. 理解配置管理
  7. 注意安全实践
  8. 关注最佳实践
复制代码
相关推荐
天上掉下来个程小白3 小时前
登录-10.Filter-登录校验过滤器
spring boot·后端·spring·filter·登录校验
找了一圈尾巴3 小时前
自定义Spring Boot Starter(官网文档解读)
java·spring boot
Jayden4 小时前
Logback:强大的Java日志框架
spring boot
JiaJunRun4 小时前
Java Queue实现类面试题
spring boot
青灯文案16 小时前
如何在 SpringBoot 项目创建并使用 Redis 的详细介绍
spring boot·redis·bootstrap
念言-ny6 小时前
sentinel小记
java·spring boot·sentinel
Hamm6 小时前
封装一个优雅的自定义的字典验证器,让API字典参数验证更湿滑
java·spring boot·后端
m0_748250746 小时前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
java·spring boot·后端
m0_748254097 小时前
Spring Boot 中使用 @Transactional 注解配置事务管理
数据库·spring boot·sql