摘要:
1、通俗易懂,適合小白
2、僅做面試復習用,部分來源網絡,博文免費,知識無價,侵權請聯系!
1. 什么是 Spring Boot 框架?
Spring Boot 是基于 Spring 框架的快速開發框架,它簡化了 Spring 應用的初始搭建和開發過程。它通過自動配置和起步依賴減少了大量的配置工作。
2. Spring Boot 框架的有什么優缺點?
優點:
- 快速構建獨立 Spring 應用
- 內嵌服務器,無需部署 WAR 文件
- 提供自動配置的 starter 項目依賴
- 提供生產就緒功能如指標、健康檢查等
- 無需 XML 配置
缺點:
- 學習曲線較陡峭
- 對于非常簡單的應用可能過于復雜
- 自動配置有時難以理解和定制
3. Spring Boot 核心注解都有哪些?
@SpringBootApplication
:組合注解,包含@Configuration
、@EnableAutoConfiguration
和@ComponentScan
@RestController
:組合@Controller
和@ResponseBody
@RequestMapping
:映射 web 請求@Autowired
:自動裝配依賴@Configuration
:標記類為配置類@ComponentScan
:組件掃描
4. Spring Boot 的目錄結構是怎樣的?
典型結構:
src/main/java/com.example.demo/DemoApplication.java # 主啟動類resources/static/ # 靜態資源templates/ # 模板文件application.properties # 配置文件test/java/com.example.demo/DemoApplicationTests.java # 測試類
5. Spring Boot 需要獨立的容器運行嗎?
不需要。Spring Boot 內置了 Tomcat、Jetty 或 Undertow 等服務器容器,可以直接運行。
6. Spring Boot 運行方式有哪幾種?
- 通過 IDE 直接運行主類
- 使用 Maven:
mvn spring-boot:run
- 打包成可執行 JAR:
java -jar app.jar
- 打包成 WAR 部署到外部容器
7. Spring Boot 自動配置原理是什么?
通過@EnableAutoConfiguration
注解觸發,Spring Boot 會檢查 classpath 中的 jar 包,根據META-INF/spring.factories
文件中定義的自動配置類進行條件化配置。
8. Spring Boot 熱部署有幾種方式?
- 使用 Spring Boot DevTools
- 使用 JRebel 插件
- 配置 IDE 自動編譯
9. Spring Boot 支持哪幾種內嵌容器?
- Tomcat (默認)
- Jetty
- Undertow
10. 什么是 Spring Boot Starter?
Starter 是一組方便的依賴描述符,可以一站式獲取所需的所有相關技術依賴。例如spring-boot-starter-web
包含了開發 web 應用所需的依賴。
11. Spring Boot Starter 有什么命名規范?
官方 starter 命名格式:spring-boot-starter-*
第三方 starter 命名格式:*-spring-boot-starter
12. Spring Boot 啟動器都有哪些?
常見的有:
spring-boot-starter-web
:Web 應用spring-boot-starter-data-jpa
:JPA 支持spring-boot-starter-test
:測試支持spring-boot-starter-security
:安全支持spring-boot-starter-thymeleaf
:Thymeleaf 模板
13. 什么是 JavaConfig?
JavaConfig 是 Spring 提供的基于 Java 的配置方式,替代傳統的 XML 配置。使用@Configuration
注解標記配置類。
14. 什么是 YAML?
YAML 是一種人類友好的數據序列化標準,常用于 Spring Boot 的配置文件。比 properties 文件更結構化。
15. YAML 配置和 properties 配置有什么區別?
- YAML 支持層次結構,properties 是扁平結構
- YAML 更易讀,適合復雜配置
- properties 文件更簡單,適合簡單配置
16. Spring Boot 是否可以使用 XML 配置?
可以,但不推薦。Spring Boot 推薦使用 JavaConfig 或注解配置,但可以通過@ImportResource
導入 XML 配置。
17. Spring Boot 中核心配置文件是什么?
application.properties
或application.yml
,默認放在resources
目錄下。
18. bootstrap.properties 和 application.properties 有何區別?
bootstrap.properties
:由父 ApplicationContext 加載,優先級更高,常用于配置中心application.properties
:由子 ApplicationContext 加載
19. 什么是 Spring Profiles?
Profile 是 Spring 提供的環境隔離機制,可以通過@Profile
注解或配置文件指定不同環境的配置。
20. Spring Security 和 Shiro 對比有什么優缺點?
Spring Security:
- 優點:深度集成 Spring 生態,功能全面
- 缺點:配置復雜,學習曲線陡峭
Shiro:
- 優點:簡單易用,輕量級
- 缺點:功能相對較少,與 Spring 集成需要額外配置
21. 什么是 Spring Batch?
Spring Batch 是 Spring 提供的輕量級批處理框架,用于處理大量數據的批處理作業。
22. 什么是 CSRF 攻擊?
跨站請求偽造(CSRF)是一種攻擊方式,攻擊者誘使用戶在已認證的網站上執行非預期的操作。Spring Security 提供了 CSRF 防護。
23. Spring Boot 中監視器是什么?
Spring Boot Actuator 提供的監控端點,可以監控應用運行狀態,如/health
、/metrics
等。
24. Spring Boot 中如何禁用 Actuator 端點安全性?
在application.properties
中添加:
management.security.enabled=false
25. 如何監視所有 Spring Boot 微服務?
可以使用 Spring Boot Admin,它集成了 Actuator 端點,提供統一的監控界面。
26. spring-boot-starter-parent 有什么用?
作為父 POM,提供依賴管理、默認配置和插件配置,簡化 Maven 配置。
27. Spring Boot jar 和普通 jar 有什么區別?
Spring Boot jar 是可執行 jar,包含內嵌容器和所有依賴,可以直接運行。普通 jar 需要部署到容器中運行。
28. Spring Boot 中如何實現全局異常處理?
使用@ControllerAdvice
和@ExceptionHandler
注解:
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return ResponseEntity.status(500).body(e.getMessage());}
}
29. Spring Boot 中如何實現定時任務?
使用@Scheduled
注解:
@Component
public class ScheduledTasks {@Scheduled(fixedRate = 5000)public void reportCurrentTime() {System.out.println("Current time: " + new Date());}
}
30. Spring Boot 中如何兼容舊 Spring 項目?
- 逐步遷移配置到 JavaConfig
- 使用
@ImportResource
導入舊 XML 配置 - 保持兼容的依賴版本
31. Spring Boot 中如何解決跨域問題?
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE");}
}
32. Spring Boot 內嵌容器默認是什么?
默認是 Tomcat。
33. Spring Boot 2.X 有什么新特性?與 1.X 有什么區別?
- 基于 Spring Framework 5
- 響應式編程支持
- 性能改進
- Actuator 改進
- 配置屬性綁定改進
34. Spring、Spring MVC 和 Spring Boot 有什么區別?
- Spring:核心框架,提供IoC和AOP
- Spring MVC:基于 Spring 的 Web MVC 框架
- Spring Boot:基于 Spring 的快速開發框架,簡化配置
35. 如何實現 Spring Boot 應用程序的安全性?
使用 Spring Security:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin();}
}
36. 如何重新加載 Spring Boot 上的更改內容,而無需重啟服務?
使用 Spring Boot DevTools 或 JRebel 插件。
37. 如何自定義端口運行 Spring Boot 應用程序?
在application.properties
中:
server.port=8081
38. Spring Boot 如何禁用某些自動配置特性?
使用@EnableAutoConfiguration
的exclude屬性:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
39. Spring boot 中當 bean 存在時如何重啟執行自動配置?
使用@ConditionalOnMissingBean
注解的自動配置類會在沒有相應 bean 時生效。
40. Spring Boot 如何編寫一個集成測試?
@SpringBootTest
@AutoConfigureMockMvc
class DemoApplicationTests {@Autowiredprivate MockMvc mockMvc;@Testvoid contextLoads() throws Exception {mockMvc.perform(get("/")).andExpect(status().isOk());}
}
41. Spring Boot 中 Actuator 有什么作用?
提供生產就緒功能,如健康檢查、指標收集、環境信息等監控端點。
42. Spring Boot 有什么外部配置的可能來源?
- 命令行參數
- Java 系統屬性
- 操作系統環境變量
- 配置文件(properties/yml)
- @Configuration類
43. Spring Boot 支持松綁定表示什么含義?
屬性名可以靈活匹配,如my.property-name
、my.propertyName
和MY_PROPERTYNAME
都會綁定到同一個屬性。
44. Spring Boot 如何注冊一個定制的自動化配置?
- 創建
META-INF/spring.factories
文件 - 添加
org.springframework.boot.autoconfigure.EnableAutoConfiguration
鍵 - 列出全限定名的自動配置類
45. 什么是 Swagger? Spring Boot 如何實現 Swagger?
Swagger 是 API 文檔工具。Spring Boot 集成:
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}
}
46. 如何使用 Spring Boot 實現分頁和排序?
使用 Spring Data JPA:
public interface UserRepository extends JpaRepository<User, Long> {Page<User> findAll(Pageable pageable);
}@GetMapping("/users")
public Page<User> getUsers(Pageable pageable) {return userRepository.findAll(pageable);
}
請求示例:/users?page=0&size=10&sort=name,asc
47. 如何使用 Maven 來構建一個 Spring Boot 程序?
- 使用
spring-boot-starter-parent
作為父POM - 添加所需starter依賴
- 使用
spring-boot-maven-plugin
打包
48. Spring Boot web 應用程序如何部署為 JAR 或 WAR 文件?
JAR:默認方式,使用spring-boot-maven-plugin
WAR:
- 修改打包方式為war
- 繼承
SpringBootServletInitializer
- 配置
spring-boot-maven-plugin
49. 什么是 WebSocket?
WebSocket 是一種全雙工通信協議,允許服務端主動向客戶端推送數據。
50. Spring Boot 和 Spring 有什么區別?
Spring Boot 是基于 Spring 的快速開發框架,簡化了配置和部署,提供了自動配置、起步依賴和內嵌服務器等特性。
51. 常見的系統架構風格有哪些?各有什么優缺點?
- 單體架構:簡單但難以擴展
- 分層架構:邏輯清晰但性能有損耗
- 微服務架構:靈活可擴展但復雜度高
- 事件驅動架構:松耦合但難以調試
- 服務導向架構(SOA):重用性好但ESB可能成為瓶頸
52. 什么是 AKF 拆分原則?
AKF擴展立方體理論,三個維度擴展:
- X軸:水平復制(克隆)
- Y軸:功能拆分(微服務)
- Z軸:數據分區(分片)