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. 关注最佳实践
复制代码
相关推荐
初次攀爬者6 小时前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840826 小时前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解7 小时前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
初次攀爬者1 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺1 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart1 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep01131 天前
SpringBoot Starter的用法以及原理
java·spring boot
dkbnull2 天前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记3 天前
Spring Boot配置管理最佳实践
spring boot