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. 关注最佳实践
复制代码
相关推荐
invicinble20 小时前
关于springboot引入traceid来保障可观测型
java·spring boot·后端
Jaising66620 小时前
Mybatis Plus 主键生成器实现思路分析
数据库·spring boot·mybatis
快乐就去敲代码@!20 小时前
Boot Cache Star ⭐(高性能两级缓存系统)
spring boot·redis·后端·缓存·docker·压力测试
阿杆.21 小时前
如何在 Spring Boot 中接入 Amazon ElastiCache
java·spring boot·后端
Tjohn921 小时前
前后端分离项目(Vue-SpringBoot)迁移记录
前端·vue.js·spring boot
invicinble21 小时前
springboot的日志体系
java·spring boot·后端
阿拉斯攀登21 小时前
Spring Boot 自动配置的底层实现原理
spring boot·自动配置
czlczl2002092521 小时前
拒绝 DTO 爆炸:详解 Spring Boot 参数校验中的“分组校验” (Validation Groups) 技巧
java·spring boot·后端
爱宇阳21 小时前
宝塔面板 + Nginx + Spring Boot 零停机滚动发布完整教程
运维·spring boot·nginx
小鸡脚来咯21 小时前
springboot项目包结构
java·spring boot·后端