Springboot 高频面试题
以下是Spring Boot的高频面试题及答案和底层原理解释:
基础概念
-
什么是Spring Boot,其主要特点是什么?
-
答案: Spring Boot本质上是一个建立在Spring框架之上的快速应用开发框架。其主要特点包括:
-
启动器:一组依赖性描述符,可以一次性包括相关的依赖性。
-
自动配置:一种基于classpath上的依赖关系自动配置应用程序的方法。
-
执行器:获得生产就绪的功能,如监控。
-
安全性。
-
日志。
-
-
原理: Spring Boot通过
@SpringBootApplication注解启动自动配置机制,它会根据类路径上的依赖自动配置Spring和第三方库。
-
SpringBootApplication 等于 SpringBootConfiguration EnableAutoConfiguration ComponentScan 三个注解的组合:@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {...}
// 添加web组件<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>// 默认端口为8080,修改为8081/Users/weiwei/Documents/MySpringBootTest/src/main/resources/application.properties
配置文件下添加:
server.port=8081// web controller 核心注解package com.example.MySpringBootTest.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class HelloController {@GetMapping("/hello")public String hello() {return "hello spring web.";}@GetMapping("/user")public String getUserByID(@RequestParam("id") String id) {return "hello spring web." + id;}@GetMapping("/search")public String search(@RequestParam String keyword) {return "Search keyword: " + keyword;}@RequestMapping("/find")public String getUser(@RequestParam String name) {return "Search keyword: " + name;}@RequestMapping(value = "/create", method = RequestMethod.POST)@ResponseBodypublic String create() {return "Created!";}
}
springboot常用注解,功能介绍,底层原理和用例说明
以下是Spring Boot中常用的注解、功能介绍、底层原理及用例说明:
1. 核心注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@SpringBootApplication | 标识Spring Boot应用的主类,整合了@Configuration、@EnableAutoConfiguration和@ComponentScan。 | 是一个组合注解,通过@EnableAutoConfiguration利用spring.factories文件中的自动配置类列表,结合条件注解(如@ConditionalOnClass)实现自动配置。 | java<br>@SpringBootApplication<br>public class MyApplication {<br> public static void main(String[] args) {<br> SpringApplication.run(MyApplication.class, args);<br> }<br>}<br> |
@Configuration | 标识一个配置类,用于定义Spring容器中的Bean。 | 通过@Bean注解定义Bean,Spring容器会调用这些方法并管理返回的对象。 | java<br>@Configuration<br>public class AppConfig {<br> @Bean<br> public MyService myService() {<br> return new MyService();<br> }<br>}<br> |
@ComponentScan | 自动扫描指定包路径下的组件(如@Component、@Service等),并将它们注册为Spring Bean。 | Spring通过反射查找带有特定注解的类,并将其注册到Spring容器中。 | java<br>@SpringBootApplication<br>@ComponentScan(basePackages = "com.example")<br>public class MyApplication {<br> // ...<br>}<br> |
2. Bean相关注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@Bean | 用于方法上,表示该方法返回的对象应注册为Spring容器中的Bean。 | Spring容器调用该方法并管理返回的对象。 | java<br>@Configuration<br>public class AppConfig {<br> @Bean<br> public MyBean myBean() {<br> return new MyBean();<br> }<br>}<br> |
@Component | 标识一个Spring组件。 | 被@ComponentScan扫描到后注册为Bean。 | java<br>@Component<br>public class MyComponent {<br> // ...<br>}<br> |
@Service | 标识服务层组件。 | 同@Component,用于业务逻辑层。 | java<br>@Service<br>public class MyService {<br> // ...<br>}<br> |
@Repository | 标识数据访问层组件。 | 同@Component,用于数据操作。 | java<br>@Repository<br>public class MyRepository {<br> // ...<br>}<br> |
@Controller / @RestController | 标识控制层组件,@RestController是@Controller和@ResponseBody的组合。 | 用于处理HTTP请求。 | java<br>@RestController<br>public class MyController {<br> @GetMapping("/hello")<br> public String hello() {<br> return "Hello, World!";<br> }<br>}<br> |
3. 依赖注入注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@Autowired | 自动注入依赖的Bean。 | Spring通过反射查找并注入合适的Bean。 | java<br>@Service<br>public class MyService {<br> @Autowired<br> private MyRepository myRepository;<br>}<br> |
@Qualifier | 当有多个相同类型的Bean时,指定注入的Bean。 | 通过Bean的名称进行区分。 | java<br>@Service<br>public class MyService {<br> @Autowired<br> @Qualifier("myBean1")<br> private MyBean myBean;<br>}<br> |
@Value | 注入配置文件中的属性值。 | 通过Spring的环境管理器解析属性值。 | java<br>@Service<br>public class MyService {<br> @Value("${app.name}")<br> private String appName;<br>}<br> |
4. Web相关注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@RequestMapping | 映射HTTP请求到处理方法。 | 根据URL路径和HTTP方法匹配请求。 | java<br>@RestController<br>public class MyController {<br> @RequestMapping(value = "/hello", method = RequestMethod.GET)<br> public String hello() {<br> return "Hello, World!";<br> }<br>}<br> |
@GetMapping / @PostMapping / @PutMapping / @DeleteMapping | 分别处理GET、POST、PUT和DELETE请求。 | 简化了@RequestMapping的使用。 | java<br>@RestController<br>public class MyController {<br> @GetMapping("/hello")<br> public String hello() {<br> return "Hello, World!";<br> }<br>}<br> |
@PathVariable | 将URL中的变量绑定到方法参数。 | 通过正则表达式解析URL参数。 | java<br>@GetMapping("/user/{id}")<br>public String getUser(@PathVariable Long id) {<br> return "User ID: " + id;<br>}<br> |
@RequestParam | 将请求参数绑定到方法参数。 | 从请求中提取参数。 | java<br>@GetMapping("/user")<br>public String getUser(@RequestParam String name) {<br> return "User Name: " + name;<br>}<br> |
5. 配置相关注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@ConfigurationProperties | 将配置文件中的属性绑定到Java类。 | 通过SpEL表达式解析配置文件中的值。 | java<br>@ConfigurationProperties(prefix = "app")<br>public class AppConfig {<br> private String name;<br> private String version;<br>}<br> |
@PropertySource | 导入外部配置文件。 | 将外部配置文件加载到Spring环境中。 | java<br>@Configuration<br>@PropertySource("classpath:custom.properties")<br>public class AppConfig {<br>}<br> |
6. 事务管理注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@Transactional | 管理数据库事务。 | 基于AOP实现事务管理。 | java<br>@Service<br>public class MyService {<br> @Transactional<br> public void updateData() {<br> // 数据操作<br> }<br>}<br> |
7. 缓存相关注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@Cacheable | 标识方法结果可缓存。 | 通过AOP拦截方法调用,缓存结果。 | java<br>@Cacheable("users")<br>public User getUser(Long id) {<br> // 数据库查询<br>}<br> |
@CacheEvict | 清除缓存。 | 通过AOP清除指定缓存。 | java<br>@CacheEvict("users")<br>public void deleteUser(Long id) {<br> // 删除操作<br>}<br> |
8. 条件化配置注解
| 注解 | 功能介绍 | 底层原理 | 用例说明 |
|---|---|---|---|
@ConditionalOnClass / @ConditionalOnMissingClass | 根据类是否存在进行条件化配置。 | 检查类加载器中是否存在指定类。 | java<br>@ConditionalOnClass(name = "com.example.MyClass")<br>public class MyConfig {<br>}<br> |
@ConditionalOnProperty | 根据配置文件中的属性值进行条件化配置。 | 检查配置文件中的属性值。 | java<br>@ConditionalOnProperty(name = "app.enabled", havingValue = "true")<br>public class MyConfig {<br>}<br> |
这些注解是Spring Boot开发中常用的工具,通过合理使用它们可以简化开发流程,提高开发效率。
-
如何理解Spring Boot的“约定优于配置”的理念?
-
答案: Spring Boot遵循“约定优于配置”的原则,即开发者只需遵循Spring Boot的默认规则,就可以无需配置或只需少量配置来快速开发应用。比如,Spring Boot会自动配置数据源、事务管理器等,如果开发者不满足默认配置,也可以通过配置文件或注解来自定义配置。
-
原理: Spring Boot通过
@Conditional注解系列来实现自动配置的条件判断,只有满足特定条件时才会进行相应的配置。
-
-
Spring Boot与Spring的主要区别是什么?
-
答案: Spring Boot简化了Spring的使用,主要区别在于:
-
配置简化:Spring Boot通过自动配置减少了大量的XML或Java配置。
-
独立运行:Spring Boot内嵌了Tomcat、Jetty等服务器,无需部署WAR文件。
-
开发效率:Spring Boot提供了许多开箱即用的特性,如自动配置、启动器等,提高了开发效率。
-
-
原理: Spring Boot在Spring的基础上,通过一系列的默认配置和约定,减少了开发者的配置工作量。
-
核心特性
-
Spring Boot的自动配置是什么?
-
答案: Spring Boot的自动配置是指基于类路径上的依赖自动配置Spring和第三方库。例如,当类路径下存在
spring-boot-starter-web依赖时,Spring Boot会自动配置Tomcat和Spring MVC。 -
原理: Spring Boot通过
@Conditional注解系列来判断是否满足自动配置的条件,如@ConditionalOnClass、@ConditionalOnMissingBean等。
-
-
如何在Spring Boot中使用自定义的starter?
-
答案: 创建自定义starter需要定义Maven依赖坐标,创建自动配置类,并在
resources/META-INF/spring.factories文件中指定自动配置类。使用时只需在项目中添加该starter的依赖即可。 -
原理: Spring Boot会加载
spring.factories文件中指定的自动配置类,并根据条件进行自动配置。
-
-
Spring Boot的Profile功能如何使用?
-
答案: 可以通过
application-{profile}.properties文件定义不同环境的配置,然后通过spring.profiles.active属性激活指定的Profile。也可以通过@Profile注解在代码中指定Bean在特定Profile下生效。 -
原理: Spring Boot通过
Environment接口来管理Profile,根据激活的Profile加载对应的配置文件。
-
高级特性
-
Spring Boot中的Actuator有什么功能?
-
答案: Spring Boot Actuator提供了生产就绪的功能,如健康检查、度量信息、审计信息等。常见的监控端点包括
/actuator/health、/actuator/metrics等。 -
原理: Actuator通过定义了一系列的端点,每个端点都对应一个特定的监控功能,通过HTTP接口暴露这些功能。
-
-
如何处理Spring Boot中的异常?
-
答案: 可以通过
@ExceptionHandler注解方法处理特定类型的异常,也可以通过@ControllerAdvice注解类来统一处理全局异常。 -
原理: Spring Boot利用Spring MVC的异常处理机制,通过
HandlerExceptionResolver接口来解析和处理异常。
-
-
如何优化Spring Boot应用的启动时间?
-
答案: 可以通过延迟加载Bean(
@Lazy注解)、减少自动配置的扫描范围、优化依赖等方式来优化启动时间。 -
原理: 延迟加载Bean可以减少应用启动时的初始化工作量,减少自动配置的扫描范围可以加快配置加载速度。
-
-
Spring Boot支持的外部配置机制有哪些?
-
答案: Spring Boot支持多种外部配置机制,包括
application.properties、application.yml、环境变量、命令行参数等。 -
原理: Spring Boot通过
Environment接口来管理外部配置,按照一定的优先级顺序加载配置。
-
其他
-
如何在Spring Boot中处理异步请求?
-
答案: 可以通过
@Async注解方法来实现异步调用,需要在配置类上添加@EnableAsync注解,并配置线程池。 -
原理: Spring Boot通过
TaskExecutor来执行异步任务,@Async注解标记的方法会在单独的线程中执行。
-
-
如何整合Spring Boot与数据库(如Spring Data JPA)?
-
答案: 可以通过添加
spring-boot-starter-data-jpa依赖,并配置数据源、实体类和Repository来整合Spring Boot与数据库。 -
原理: Spring Boot会根据
application.properties或application.yml中的配置自动配置数据源和JPA相关组件。
-
基础概念(续)
-
Spring Boot的自动配置是如何工作的?
-
答案: Spring Boot的自动配置是通过
@EnableAutoConfiguration注解来实现的。Spring Boot会根据类路径上的依赖自动配置Spring和第三方库。 -
原理: Spring Boot通过
@Conditional注解系列来判断是否满足自动配置的条件,例如@ConditionalOnClass、@ConditionalOnMissingBean等。
-
-
如何在Spring Boot中使用自定义的starter?
-
答案: 创建自定义starter需要定义Maven依赖坐标,创建自动配置类,并在
resources/META-INF/spring.factories文件中指定自动配置类。使用时只需在项目中添加该starter的依赖即可。 -
原理: Spring Boot会加载
spring.factories文件中指定的自动配置类,并根据条件进行自动配置。
-
-
Spring Boot的Profile功能如何使用?
-
答案: 可以通过
application-{profile}.properties文件定义不同环境的配置,然后通过spring.profiles.active属性激活指定的Profile。也可以通过@Profile注解在代码中指定Bean在特定Profile下生效。 -
原理: Spring Boot通过
Environment接口来管理Profile,根据激活的Profile加载对应的配置文件。
-
核心特性(续)
-
Spring Boot中的Actuator有什么功能?
-
答案: Spring Boot Actuator提供了生产就绪的功能,如健康检查、度量信息、审计信息等。常见的监控端点包括
/actuator/health、/actuator/metrics等。 -
原理: Actuator通过定义了一系列的端点,每个端点都对应一个特定的监控功能,通过HTTP接口暴露这些功能。
-
-
如何处理Spring Boot中的异常?
-
答案: 可以通过
@ExceptionHandler注解方法处理特定类型的异常,也可以通过@ControllerAdvice注解类来统一处理全局异常。 -
原理: Spring Boot利用Spring MVC的异常处理机制,通过
HandlerExceptionResolver接口来解析和处理异常。
-
-
如何优化Spring Boot应用的启动时间?
-
答案: 可以通过延迟加载Bean(
@Lazy注解)、减少自动配置的扫描范围、优化依赖等方式来优化启动时间。 -
原理: 延迟加载Bean可以减少应用启动时的初始化工作量,减少自动配置的扫描范围可以加快配置加载速度。
-
-
Spring Boot支持的外部配置机制有哪些?
-
答案: Spring Boot支持多种外部配置机制,包括
application.properties、application.yml、环境变量、命令行参数等。 -
原理: Spring Boot通过
Environment接口来管理外部配置,按照一定的优先级顺序加载配置。
-
高级特性(续)
-
Spring Boot中的异步请求是如何处理的?
-
答案: 可以通过
@Async注解方法来实现异步调用,需要在配置类上添加@EnableAsync注解,并配置线程池。 -
原理: Spring Boot通过
TaskExecutor来执行异步任务,@Async注解标记的方法会在单独的线程中执行。
-
-
如何整合Spring Boot与数据库(如Spring Data JPA)?
-
答案: 可以通过添加
spring-boot-starter-data-jpa依赖,并配置数据源、实体类和Repository来整合Spring Boot与数据库。 -
原理: Spring Boot会根据
application.properties或application.yml中的配置自动配置数据源和JPA相关组件。
-
-
如何在Spring Boot中处理跨域请求(CORS)?
-
答案: 可以通过在配置类上添加
@CrossOrigin注解,或者通过配置WebMvcConfigurer接口来全局处理CORS。 -
原理: Spring Boot通过在响应头中添加
Access-Control-Allow-Origin等CORS相关头信息来允许跨域请求。
-
-
如何在Spring Boot中实现定时任务?
-
答案: 可以通过
@Scheduled注解方法来实现定时任务,需要在配置类上添加@EnableScheduling注解。 -
原理: Spring Boot通过
TaskScheduler来执行定时任务,@Scheduled注解标记的方法会在指定的时间间隔内执行。
-
-
如何在Spring Boot中实现安全性(如Spring Security)?
-
答案: 可以通过添加
spring-boot-starter-security依赖,并配置WebSecurityConfigurerAdapter类来实现安全性。 -
原理: Spring Boot通过
WebSecurityConfigurerAdapter类来定义安全策略,如认证、授权、密码加密等。
-
-
如何在Spring Boot中实现微服务架构?
-
答案: 可以通过Spring Cloud来实现微服务架构,包括服务发现(如Eureka)、配置中心(如Spring Cloud Config)、网关(如Spring Cloud Gateway)等。
-
原理: Spring Cloud通过一系列的组件,如服务发现、配置中心、网关等,来实现微服务架构,提高微服务的可管理性和可扩展性。
-
-
如何在Spring Boot中实现API网关?
-
答案: 可以通过添加
spring-cloud-starter-gateway依赖,并配置路由规则来实现API网关。 -
原理: Spring Cloud Gateway通过定义路由规则,将请求转发到对应的服务,并提供负载均衡、熔断等功能。
-
-
如何在Spring Boot中实现服务发现?
-
答案: 可以通过添加
spring-cloud-starter-netflix-eureka-client依赖,并配置Eureka客户端,来实现服务发现。 -
原理: Eureka客户端会向Eureka服务器注册服务,并通过心跳机制来保持服务的存活状态,其他服务可以通过Eureka服务器来发现和调用服务。
-
-
如何在Spring Boot中实现配置中心?
-
答案: 可以通过添加
spring-cloud-starter-config依赖,并配置配置中心,来实现配置中心。 -
原理: 配置中心通过Git仓库、数据库等存储配置信息,服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。
-
-
如何在Spring Boot中实现熔断器模式?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端,来实现熔断器模式。 -
原理: Hystrix通过定义熔断器,在服务调用失败时,快速失败并返回默认值,防止服务雪崩。
-
-
如何在Spring Boot中实现链路追踪?
-
答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端,来实现链路追踪。 -
原理: Zipkin通过收集和分析服务之间的调用链路,帮助开发者快速定位问题,提高系统的可维护性。
-
-
如何在Spring Boot中实现负载均衡?
-
答案: 可以通过添加
-
高级特性(续)
-
如何在Spring Boot中实现负载均衡?
-
答案: 可以通过添加
spring-cloud-starter-netflix-ribbon依赖,并配置Ribbon客户端,来实现负载均衡。 -
原理: Ribbon是一个基于HTTP和TCP的客户端负载均衡器,通过配置Ribbon的规则,可以在多个服务实例之间进行负载均衡。
-
-
如何在Spring Boot中实现服务降级?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端,来实现服务降级。 -
原理: Hystrix通过定义降级逻辑,在服务调用失败时,快速返回默认值,防止服务雪崩。
-
-
如何在Spring Boot中实现服务熔断?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端,来实现服务熔断。 -
原理: Hystrix通过定义熔断器,在服务调用失败时,快速失败并返回默认值,防止服务雪崩。
-
-
如何在Spring Boot中实现服务限流?
-
答案: 可以通过添加
spring-boot-starter-aop依赖,并使用AOP切面来实现服务限流。 -
原理: 通过AOP切面拦截请求,统计请求次数,当请求次数超过阈值时,拒绝后续请求。
-
-
如何在Spring Boot中实现服务监控?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置Actuator端点,来实现服务监控。 -
原理: Actuator通过定义一系列的端点,每个端点都对应一个特定的监控功能,通过HTTP接口暴露这些功能。
-
-
如何在Spring Boot中实现服务追踪?
-
答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端,来实现服务追踪。 -
原理: Zipkin通过收集和分析服务之间的调用链路,帮助开发者快速定位问题,提高系统的可维护性。
-
-
如何在Spring Boot中实现服务网关?
-
答案: 可以通过添加
spring-cloud-starter-gateway依赖,并配置路由规则,来实现服务网关。 -
原理: Spring Cloud Gateway通过定义路由规则,将请求转发到对应的服务,并提供负载均衡、熔断等功能。
-
-
如何在Spring Boot中实现服务发现?
-
答案: 可以通过添加
spring-cloud-starter-netflix-eureka-client依赖,并配置Eureka客户端,来实现服务发现。 -
原理: Eureka客户端会向Eureka服务器注册服务,并通过心跳机制来保持服务的存活状态,其他服务可以通过Eureka服务器来发现和调用服务。
-
-
如何在Spring Boot中实现配置中心?
-
答案: 可以通过添加
spring-cloud-starter-config依赖,并配置配置中心,来实现配置中心。 -
原理: 配置中心通过Git仓库、数据库等存储配置信息,服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。
-
-
如何在Spring Boot中实现服务链路追踪?
-
答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端,来实现服务链路追踪。 -
原理: Zipkin通过收集和分析服务之间的调用链路,帮助开发者快速定位问题,提高系统的可维护性。
-
-
如何在Spring Boot中实现服务熔断与降级?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端,来实现服务熔断与降级。 -
原理: Hystrix通过定义熔断器和降级逻辑,在服务调用失败时,快速失败并返回默认值,防止服务雪崩。
-
安全性
-
如何在Spring Boot中实现安全性(如Spring Security)?
-
答案: 可以通过添加
spring-boot-starter-security依赖,并配置WebSecurityConfigurerAdapter类来实现安全性。 -
原理: Spring Security通过
WebSecurityConfigurerAdapter类来定义安全策略,如认证、授权、密码加密等。
-
-
如何在Spring Boot中实现JWT认证?
-
答案: 可以通过添加
java-jwt或JJWT依赖,并配置JWT认证逻辑来实现JWT认证。 -
原理: JWT(JSON Web Token)通过生成一个包含用户信息的Token,在每次请求时携带该Token,服务端通过解析Token来验证用户身份。
-
-
如何在Spring Boot中实现OAuth2认证?
-
答案: 可以通过添加
spring-boot-starter-oauth2-client和spring-boot-starter-oauth2-resource-server依赖,并配置OAuth2客户端和资源服务器来实现OAuth2认证。 -
原理: OAuth2通过定义客户端、授权服务器、资源服务器等角色,实现授权和认证流程。
-
-
如何在Spring Boot中实现CSRF防护?
-
答案: 可以通过在
WebSecurityConfigurerAdapter类中配置CSRF防护来实现。 -
原理: Spring Security通过在表单中添加CSRF Token,并在提交时验证该Token,防止CSRF攻击。
-
-
如何在Spring Boot中实现跨域请求(CORS)?
-
答案: 可以通过在配置类上添加
@CrossOrigin注解,或者通过配置WebMvcConfigurer接口来全局处理CORS。 -
原理: Spring Boot通过在响应头中添加
Access-Control-Allow-Origin等CORS相关头信息来允许跨域请求。
-
性能优化
-
如何优化Spring Boot应用的启动时间?
-
答案: 可以通过延迟加载Bean(
@Lazy注解)、减少自动配置的扫描范围、优化依赖等方式来优化启动时间。 -
原理: 延迟加载Bean可以减少应用启动时的初始化工作量,减少自动配置的扫描范围可以加快配置加载速度。
-
-
如何优化Spring Boot应用的内存占用?
-
答案: 可以通过优化Bean的生命周期管理、减少不必要的Bean加载、使用缓存等方式来优化内存占用。
-
原理: 优化Bean的生命周期管理可以减少不必要的内存占用,减少不必要的Bean加载可以减少内存消耗,使用缓存可以减少重复计算和数据加载。
-
-
如何优化Spring Boot应用的响应时间?
-
答案: 可以通过优化数据库查询、使用缓存、优化代码逻辑等方式来优化响应时间。
-
原理: 优化数据库查询可以减少数据加载时间,使用缓存可以减少重复计算和数据加载,优化代码逻辑可以减少不必要的计算。
-
-
如何优化Spring Boot应用的并发性能?
-
答案: 可以通过使用线程池、优化数据库连接池、使用异步编程等方式来优化并发性能。
-
原理: 使用线程池可以提高线程的复用率,优化数据库连接池可以减少数据库连接的创建和销毁时间,使用异步编程可以提高系统的并发处理能力。
-
-
如何优化Spring Boot应用的日志性能?
-
答案: 可以通过配置日志级别、使用异步日志、优化日志输出等方式来优化日志性能。
-
原理: 配置日志级别可以减少不必要的日志输出,使用异步日志可以减少日志记录对主线程的影响,优化日志输出可以提高日志记录的效率。
-
部署与运维
-
如何在Spring Boot中实现应用的热部署?
-
答案: 可以通过添加
spring-boot-devtools依赖来实现应用的热部署。 -
原理:
spring-boot-devtools通过监听文件变化,自动重启应用,实现热部署。
-
-
如何在Spring Boot中实现应用的监控?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置Actuator端点来实现应用的监控。 -
原理: Actuator通过定义一系列的端点,每个端点都对应一个特定的监控功能,通过HTTP接口暴露这些功能。
-
-
如何在Spring Boot中实现应用的日志管理?
-
答案: 可以通过配置日志框架(如SLF4J、Logback)来实现应用的日志管理。
-
原理: 日志框架通过定义日志级别、日志格式、日志输出等方式来管理
-
部署与运维(续)
-
如何在Spring Boot中实现应用的健康检查?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置健康检查端点/actuator/health来实现应用的健康检查。 -
原理: Actuator通过定义健康检查端点,可以检查应用的各种依赖组件(如数据库、消息队列等)的健康状态,并返回相应的健康信息。
-
-
如何在Spring Boot中实现应用的度量信息收集?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置度量信息端点/actuator/metrics来实现应用的度量信息收集。 -
原理: Actuator通过定义度量信息端点,可以收集应用的各种度量信息(如内存使用、线程池状态等),并通过HTTP接口暴露这些信息。
-
-
如何在Spring Boot中实现应用的审计信息收集?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置审计信息端点/actuator/auditevents来实现应用的审计信息收集。 -
原理: Actuator通过定义审计信息端点,可以记录应用的各种审计事件(如用户登录、权限变更等),并通过HTTP接口暴露这些信息。
-
-
如何在Spring Boot中实现应用的远程调试?
-
答案: 可以通过在启动应用时添加远程调试参数(如
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005)来实现应用的远程调试。 -
原理: 远程调试参数允许JVM在指定的端口上监听调试连接,开发人员可以通过IDE连接到该端口进行远程调试。
-
-
如何在Spring Boot中实现应用的热更新?
-
答案: 可以通过使用Spring Cloud的
spring-cloud-starter-config和spring-cloud-config-server来实现应用的热更新。 -
原理: 配置中心通过Git仓库、数据库等存储配置信息,服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。
-
-
如何在Spring Boot中实现应用的灰度发布?
-
答案: 可以通过使用Spring Cloud的
spring-cloud-starter-gateway和spring-cloud-gateway来实现应用的灰度发布。 -
原理: 网关通过定义路由规则,将请求转发到对应的服务,并根据请求的特征(如用户ID、请求头等)将请求路由到不同的服务实例,实现灰度发布。
-
-
如何在Spring Boot中实现应用的蓝绿部署?
-
答案: 可以通过使用Spring Cloud的
spring-cloud-starter-gateway和spring-cloud-gateway来实现应用的蓝绿部署。 -
原理: 网关通过定义路由规则,将请求转发到对应的服务,并根据请求的特征(如用户ID、请求头等)将请求路由到不同的服务实例,实现蓝绿部署。
-
测试
-
如何在Spring Boot中实现单元测试?
-
答案: 可以通过添加
spring-boot-starter-test依赖,并使用JUnit和Mockito等测试框架来实现单元测试。 -
原理: JUnit用于编写测试用例,Mockito用于模拟依赖对象,通过这些工具可以对Spring Boot应用的各个组件进行单元测试。
-
-
如何在Spring Boot中实现集成测试?
-
答案: 可以通过添加
spring-boot-starter-test依赖,并使用Spring Test框架来实现集成测试。 -
原理: Spring Test框架通过
@SpringBootTest注解启动Spring应用上下文,可以对Spring Boot应用的各个组件进行集成测试。
-
-
如何在Spring Boot中实现端到端测试?
-
答案: 可以通过添加
spring-boot-starter-test依赖,并使用Selenium等测试框架来实现端到端测试。 -
原理: Selenium通过模拟用户操作,可以对Spring Boot应用的前端和后端进行端到端测试。
-
-
如何在Spring Boot中实现测试数据的初始化?
-
答案: 可以通过使用Spring Test框架的
@TestExecutionListeners注解,并配置DataLoader来实现测试数据的初始化。 -
原理:
@TestExecutionListeners注解可以指定测试执行监听器,DataLoader可以加载测试数据,从而在测试前初始化测试数据。
-
-
如何在Spring Boot中实现测试环境的配置?
-
答案: 可以通过在
application-test.properties文件中定义测试环境的配置,并通过spring.profiles.active属性激活测试环境。 -
原理: Spring Boot通过
Environment接口来管理Profile,根据激活的Profile加载对应的配置文件。
-
数据库
-
如何在Spring Boot中实现数据库的连接池?
-
答案: 可以通过添加
spring-boot-starter-jdbc依赖,并配置数据源(如HikariCP)来实现数据库的连接池。 -
原理: Spring Boot会根据
application.properties或application.yml中的配置自动配置数据源和连接池。
-
-
如何在Spring Boot中实现数据库的事务管理?
-
答案: 可以通过添加
spring-boot-starter-data-jpa依赖,并配置事务管理器(如@EnableTransactionManagement)来实现数据库的事务管理。 -
原理: Spring Boot会根据
application.properties或application.yml中的配置自动配置事务管理器,并通过@Transactional注解来管理事务。
-
-
如何在Spring Boot中实现数据库的迁移?
-
答案: 可以通过添加
flyway-core或liquibase-core依赖,并配置数据库迁移工具来实现数据库的迁移。 -
原理: 数据库迁移工具通过定义迁移脚本,可以在应用启动时自动执行迁移脚本,实现数据库的版本管理。
-
-
如何在Spring Boot中实现数据库的分页查询?
-
答案: 可以通过使用Spring Data JPA的
Pageable接口和Page类来实现数据库的分页查询。 -
原理: Spring Data JPA通过
Pageable接口定义分页参数,通过Page类返回分页结果,从而实现分页查询。
-
-
如何在Spring Boot中实现数据库的缓存?
-
答案: 可以通过添加
spring-boot-starter-cache依赖,并配置缓存管理器(如Redis、Caffeine)来实现数据库的缓存。 -
原理: Spring Boot会根据
application.properties或application.yml中的配置自动配置缓存管理器,并通过@Cacheable注解来缓存查询结果。
-
微服务
-
如何在Spring Boot中实现微服务的注册与发现?
-
答案: 可以通过添加
spring-cloud-starter-netflix-eureka-client依赖,并配置Eureka客户端来实现微服务的注册与发现。 -
原理: Eureka客户端会向Eureka服务器注册服务,并通过心跳机制来保持服务的存活状态,其他服务可以通过Eureka服务器来发现和调用服务。
-
-
如何在Spring Boot中实现微服务的配置管理?
-
答案: 可以通过添加
spring-cloud-starter-config依赖,并配置配置中心来实现微服务的配置管理。 -
原理: 配置中心通过Git仓库、数据库等存储配置信息,服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。
-
-
如何在Spring Boot中实现微服务的网关?
-
答案: 可以通过添加
spring-cloud-starter-gateway依赖,并配置路由规则来实现微服务的网关。 -
原理: Spring Cloud Gateway通过定义路由规则,将请求转发到对应的服务,并提供负载均衡、熔断等功能。
-
-
如何在Spring Boot中实现微服务的熔断器模式?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端来实现微服务的熔断器模式。 -
原理: Hystrix通过定义熔断器,在服务调用失败时,快速失败并返回默认值,防止服务雪崩。
-
-
如何在Spring Boot中实现微服务的链路追踪?
-
答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端来实现微服务的链路追踪。 -
原理: Zipkin通过
-
微服务(续)
-
如何在Spring Boot中实现微服务的负载均衡?
-
答案: 可以通过添加
spring-cloud-starter-netflix-ribbon依赖,并配置Ribbon客户端来实现微服务的负载均衡。 -
原理: Ribbon是一个基于HTTP和TCP的客户端负载均衡器,通过配置Ribbon的规则,可以在多个服务实例之间进行负载均衡。
-
-
如何在Spring Boot中实现微服务的降级策略?
-
答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端来实现微服务的降级策略。 -
原理: Hystrix通过定义降级逻辑,在服务调用失败时,快速返回默认值,防止服务雪崩。
-
-
如何在Spring Boot中实现微服务的限流策略?
-
答案: 可以通过添加
spring-boot-starter-aop依赖,并使用AOP切面来实现微服务的限流策略。 -
原理: 通过AOP切面拦截请求,统计请求次数,当请求次数超过阈值时,拒绝后续请求。
-
-
如何在Spring Boot中实现微服务的健康检查?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置健康检查端点/actuator/health来实现微服务的健康检查。 -
原理: Actuator通过定义健康检查端点,可以检查微服务的各种依赖组件(如数据库、消息队列等)的健康状态,并返回相应的健康信息。
-
-
如何在Spring Boot中实现微服务的配置动态更新?
-
答案: 可以通过添加
spring-cloud-starter-config依赖,并配置配置中心来实现微服务的配置动态更新。 -
原理: 配置中心通过Git仓库、数据库等存储配置信息,微服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。
-
高级特性
-
如何在Spring Boot中实现异步消息处理?
-
答案: 可以通过添加
spring-boot-starter-amqp依赖,并配置RabbitMQ客户端来实现异步消息处理。 -
原理: RabbitMQ通过定义消息队列和交换器,实现消息的发布和订阅,Spring Boot通过
RabbitTemplate来发送和接收消息。
-
-
如何在Spring Boot中实现事件驱动架构?
-
答案: 可以通过添加
spring-boot-starter-event依赖,并配置事件发布和订阅来实现事件驱动架构。 -
原理: Spring Boot通过
ApplicationEventPublisher发布事件,通过@EventListener注解订阅事件,实现事件驱动的处理逻辑。
-
-
如何在Spring Boot中实现Websocket通信?
-
答案: 可以通过添加
spring-boot-starter-websocket依赖,并配置WebSocket消息代理来实现Websocket通信。 -
原理: Spring Boot通过
WebSocketMessageBrokerConfigurer配置WebSocket消息代理,实现客户端和服务器之间的实时通信。
-
-
如何在Spring Boot中实现文件上传和下载?
-
答案: 可以通过Spring MVC的
@RestController和@PostMapping注解来实现文件上传,通过ResponseEntity来实现文件下载。 -
原理: Spring MVC通过
MultipartFile处理上传的文件,通过ResponseEntity返回文件流,实现文件的上传和下载。
-
-
如何在Spring Boot中实现RESTful API的版本管理?
-
答案: 可以通过在URL中添加版本号(如
/api/v1/users)或通过请求头中的Accept字段来实现RESTful API的版本管理。 -
原理: 通过不同的版本号或请求头字段,可以区分不同版本的API,实现向后兼容。
-
性能优化
-
如何在Spring Boot中实现缓存优化?
-
答案: 可以通过添加
spring-boot-starter-cache依赖,并配置缓存管理器(如Redis、Caffeine)来实现缓存优化。 -
原理: Spring Boot通过
@Cacheable注解缓存查询结果,通过@CacheEvict注解清除缓存,实现缓存的优化。
-
-
如何在Spring Boot中实现数据库查询优化?
-
答案: 可以通过优化SQL语句、使用索引、分页查询等方式来实现数据库查询优化。
-
原理: 优化SQL语句可以减少数据库的计算量,使用索引可以加快查询速度,分页查询可以减少数据传输量。
-
-
如何在Spring Boot中实现线程池优化?
-
答案: 可以通过自定义线程池,并配置线程池的参数(如核心线程数、最大线程数、队列大小等)来实现线程池优化。
-
原理: 通过合理配置线程池的参数,可以提高线程的复用率,减少线程的创建和销毁时间。
-
-
如何在Spring Boot中实现日志优化?
-
答案: 可以通过配置日志级别、使用异步日志、优化日志输出等方式来实现日志优化。
-
原理: 配置日志级别可以减少不必要的日志输出,使用异步日志可以减少日志记录对主线程的影响,优化日志输出可以提高日志记录的效率。
-
-
如何在Spring Boot中实现内存优化?
-
答案: 可以通过优化Bean的生命周期管理、减少不必要的Bean加载、使用缓存等方式来实现内存优化。
-
原理: 优化Bean的生命周期管理可以减少不必要的内存占用,减少不必要的Bean加载可以减少内存消耗,使用缓存可以减少重复计算和数据加载。
-
安全性
-
如何在Spring Boot中实现用户认证和授权?
-
答案: 可以通过添加
spring-boot-starter-security依赖,并配置WebSecurityConfigurerAdapter类来实现用户认证和授权。 -
原理: Spring Security通过
WebSecurityConfigurerAdapter类定义安全策略,如认证、授权、密码加密等。
-
-
如何在Spring Boot中实现JWT认证和授权?
-
答案: 可以通过添加
java-jwt或JJWT依赖,并配置JWT认证逻辑来实现JWT认证和授权。 -
原理: JWT通过生成一个包含用户信息的Token,在每次请求时携带该Token,服务端通过解析Token来验证用户身份和权限。
-
-
如何在Spring Boot中实现OAuth2认证和授权?
-
答案: 可以通过添加
spring-boot-starter-oauth2-client和spring-boot-starter-oauth2-resource-server依赖,并配置OAuth2客户端和资源服务器来实现OAuth2认证和授权。 -
原理: OAuth2通过定义客户端、授权服务器、资源服务器等角色,实现授权和认证流程。
-
-
如何在Spring Boot中实现CSRF防护?
-
答案: 可以通过在
WebSecurityConfigurerAdapter类中配置CSRF防护来实现。 -
原理: Spring Security通过在表单中添加CSRF Token,并在提交时验证该Token,防止CSRF攻击。
-
-
如何在Spring Boot中实现跨域请求(CORS)?
-
答案: 可以通过在配置类上添加
@CrossOrigin注解,或者通过配置WebMvcConfigurer接口来全局处理CORS。 -
原理: Spring Boot通过在响应头中添加
Access-Control-Allow-Origin等CORS相关头信息来允许跨域请求。
-
部署与运维
-
如何在Spring Boot中实现应用的热部署?
-
答案: 可以通过添加
spring-boot-devtools依赖来实现应用的热部署。 -
原理:
spring-boot-devtools通过监听文件变化,自动重启应用,实现热部署。
-
-
如何在Spring Boot中实现应用的监控?
-
答案: 可以通过添加
spring-boot-starter-actuator依赖,并配置Actuator端点来实现应用的监控。 -
原理: Actuator通过定义一系列的端点,每个端点都对应一个特定的监控功能,通过HTTP接口暴露这些功能。
-
-
如何在Spring Boot中实现应用的日志管理?
-
答案: 可以通过配置日志框架(如SLF4J、Logback)来实现应用的日志管理。
-
原理: 日志框架通过定义日志级别、日志格式、日志输出等方式来管理日志。
-
部署与运维(续)
-
如何在Spring Boot中实现应用的分布式追踪?
-
答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端来实现应用的分布式追踪。 -
原理: Zipkin通过收集和分析服务之间的调用链路,帮助开发者快速定位问题,提高系统的可维护性。它通过在每个服务中生成唯一的Trace ID和Span ID,记录服务之间的调用关系。
-
-
如何在Spring Boot中实现应用的弹性伸缩? - 答案: 可以通过使用容器化技术(如Docker、Kubernetes)来实现应用的弹性伸缩。 - 原理: 容器化技术通过将应用打包为容器,可以在云平台或本地环境中快速部署和扩展。Kubernetes等容器编排工具可以自动管理容器的生命周期,根据负载自动伸缩服务实例。
性能优化(续)
-
如何在Spring Boot中实现数据库连接池的优化? - 答案: 可以通过配置HikariCP等高性能连接池,并调整连接池的参数(如最大连接数、最小空闲连接数、连接超时时间等)来实现数据库连接池的优化。 - 原理: HikariCP通过高效的连接管理策略,减少连接的创建和销毁时间,提高数据库访问性能。
-
如何在Spring Boot中实现缓存穿透、缓存击穿和缓存雪崩的解决方案? - 答案:
-
缓存穿透:通过在缓存中存储空对象或使用布隆过滤器来避免对不存在的数据进行查询。
-
缓存击穿:通过使用互斥锁(如Redis的
SETNX命令)来确保只有一个请求可以加载数据。 -
缓存雪崩:通过设置不同的过期时间或使用本地缓存(如Caffeine)作为二级缓存来避免大量缓存同时失效。 - 原理: 缓存穿透、缓存击穿和缓存雪崩是缓存系统中常见的问题,通过合理的缓存策略和同步机制可以有效解决这些问题。
-
安全性(续)
-
如何在Spring Boot中实现HTTPS? - 答案: 可以通过在
application.properties或application.yml中配置SSL证书,并在Spring Boot的嵌入式服务器(如Tomcat)中启用HTTPS。 - 原理: HTTPS通过SSL/TLS协议加密HTTP请求和响应,确保数据传输的安全性。Spring Boot支持通过配置文件启用HTTPS。 -
如何在Spring Boot中实现访问控制? - 答案: 可以通过Spring Security的
@PreAuthorize、@PostAuthorize注解或HttpSecurity配置来实现访问控制。 - 原理: Spring Security通过定义访问控制规则,如基于角色的访问控制(RBAC)或基于权限的访问控制(ABAC),确保只有授权用户可以访问特定资源。 -
如何在Spring Boot中实现安全的用户认证? - 答案: 可以通过Spring Security的
UserDetailsService接口和PasswordEncoder接口来实现安全的用户认证。 - 原理: Spring Security通过UserDetailsService加载用户信息,并通过PasswordEncoder对用户密码进行加密存储和验证,确保用户认证的安全性。
微服务(续)
-
如何在Spring Boot中实现微服务的断路器模式? - 答案: 可以通过添加
spring-cloud-starter-netflix-hystrix依赖,并配置Hystrix客户端来实现微服务的断路器模式。 - 原理: Hystrix通过定义断路器,在服务调用失败时,快速失败并返回默认值,防止服务雪崩。 -
如何在Spring Boot中实现微服务的链路追踪? - 答案: 可以通过添加
spring-cloud-starter-zipkin依赖,并配置Zipkin客户端来实现微服务的链路追踪。 - 原理: Zipkin通过收集和分析服务之间的调用链路,帮助开发者快速定位问题,提高系统的可维护性。 -
如何在Spring Boot中实现微服务的负载均衡? - 答案: 可以通过添加
spring-cloud-starter-netflix-ribbon依赖,并配置Ribbon客户端来实现微服务的负载均衡。 - 原理: Ribbon是一个基于HTTP和TCP的客户端负载均衡器,通过配置Ribbon的规则,可以在多个服务实例之间进行负载均衡。 -
如何在Spring Boot中实现微服务的配置管理? - 答案: 可以通过添加
spring-cloud-starter-config依赖,并配置配置中心来实现微服务的配置管理。 - 原理: 配置中心通过Git仓库、数据库等存储配置信息,微服务可以通过配置中心动态获取配置信息,实现配置的集中管理和动态更新。 -
如何在Spring Boot中实现微服务的网关? - 答案: 可以通过添加
spring-cloud-starter-gateway依赖,并配置路由规则来实现微服务的网关。 - 原理: Spring Cloud Gateway通过定义路由规则,将请求转发到对应的服务,并提供负载均衡、熔断等功能。
高级特性(续)
-
如何在Spring Boot中实现事件驱动架构? - 答案: 可以通过添加
spring-boot-starter-event依赖,并配置事件发布和订阅来实现事件驱动架构。 - 原理: Spring Boot通过ApplicationEventPublisher发布事件,通过@EventListener注解订阅事件,实现事件驱动的处理逻辑。 -
如何在Spring Boot中实现Websocket通信? - 答案: 可以通过添加
spring-boot-starter-websocket依赖,并配置WebSocket消息代理来实现Websocket通信。 - 原理: Spring Boot通过WebSocketMessageBrokerConfigurer配置WebSocket消息代理,实现客户端和服务器之间的实时通信。 -
如何在Spring Boot中实现文件上传和下载? - 答案: 可以通过Spring MVC的
@RestController和@PostMapping注解来实现文件上传,通过ResponseEntity来实现文件下载。 - 原理: Spring MVC通过MultipartFile处理上传的文件,通过ResponseEntity返回文件流,实现文件的上传和下载。 -
如何在Spring Boot中实现RESTful API的版本管理? - 答案: 可以通过在URL中添加版本号(如
/api/v1/users)或通过请求头中的Accept字段来实现RESTful API的版本管理。 - 原理: 通过不同的版本号或请求头字段,可以区分不同版本的API,实现向后兼容。 -
如何在Spring Boot中实现异步消息处理? - 答案: 可以通过添加
spring-boot-starter-amqp依赖,并配置RabbitMQ客户端来实现异步消息处理。 - 原理: RabbitMQ通过定义消息队列和交换器,实现消息的发布和订阅,Spring Boot通过RabbitTemplate来发送和接收消息。
性能优化(续)
-
如何在Spring Boot中实现缓存优化? - 答案: 可以通过添加
spring-boot-starter-cache依赖,并配置缓存管理器(如Redis、Caffeine)来实现缓存优化。 - 原理: Spring Boot通过@Cacheable注解缓存查询结果,通过@CacheEvict注解清除缓存,实现缓存的优化。 -
如何在Spring Boot中实现数据库查询优化? - 答案: 可以通过优化SQL语句、使用索引、分页查询等方式来实现数据库查询优化。 - 原理: 优化SQL语句可以减少数据库的计算量,使用索引可以加快查询速度,分页查询可以减少数据传输量。
-
如何在Spring Boot中实现线程池优化? - 答案: 可以通过自定义线程池,并配置线程池的参数(如核心线程数、最大线程数、队列大小等)来实现线程池优化。 - 原理: 通过合理配置线程池的参数,可以提高线程的复用率,减少线程的创建和销毁时间。
-
如何在Spring Boot中实现日志优化? - 答案: 可以通过配置日志级别、使用异步日志、优化日志输出等方式来实现日志优化。 - 原理: 配置日志级别可以减少不必要的日志输出
相关文章:
Springboot 高频面试题
以下是Spring Boot的高频面试题及答案和底层原理解释: 基础概念 什么是Spring Boot,其主要特点是什么? 答案: Spring Boot本质上是一个建立在Spring框架之上的快速应用开发框架。其主要特点包括: 启动器:一…...
常用电脑,护眼软件推荐 f.lux 3400K | 撰写论文 paper
常用电脑?平均每天用 5 个小时?你就要考虑用一个护眼软件了,对皮肤也好。因为电脑屏幕有辐射,比如蓝光。 f.lux 作为一款专业护眼软件,值得使用。之前用了三年的 Iris Pro,现在 f.lux 做的更好了。 使用…...
MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用
目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...
如何有效利用MYSQL的连接数
连接数配置2500~3000 依然发现连接不够用? -- 查看当前最大连接数 SHOW VARIABLES LIKE MAX_CONNECTIONS; -- 查看当前总链接数 SHOW STATUS LIKE Threads_connected; -- 查看当前进程明细 SHOW PROCESSLIST; 合理设置以下参数: 1. MySQL 的参数设置 …...
调用click.getchar()时Windows PyCharm无法模拟键盘输入
文章目录 问题描述解决方案参考文献 问题描述 调用 click.getchar() 时,Windows PyCharm 无法模拟键盘输入 解决方案 Run → Edit Configurations… → Modify options → Emulate terminal in output console 参考文献 Terminal emulator | PyCharm Documentati…...
使用Hardhat实现ERC20 代币合约详解
ERC20 代币合约详解 💰 1. 合约概览 // SPDX-License-Identifier: MIT pragma solidity ^0.8.20;import "openzeppelin/contracts/token/ERC20/ERC20.sol";contract MyToken is ERC20 {constructor() ERC20("MyToken", "MTK") {_min…...
清华大学《DeepSeek与AI幻觉》(无套路免费分享)
随着人工智能技术的飞速发展,以DeepSeek为代表的国产大模型正逐渐成为各行各业的重要工具。然而,AI在生成内容时常常会出现“幻觉”——即生成与事实不符、逻辑断裂或脱离上下文的内容。 清华大学新闻与传播学院与人工智能学院联合推出的这篇教程《Deep…...
代码随想录算法【Day52】
Day51 101. 孤岛的总面积 思路 从周边找到陆地然后 通过 dfs或者bfs 将周边靠陆地且相邻的陆地都变成海洋,然后再去重新遍历地图 统计此时还剩下的陆地 代码 #include <iostream> #include <vector> using namespace std; int dir[4][2] {-1, 0, …...
Spark 和 Flink
Spark 和 Flink 都是目前流行的大数据处理引擎,但它们在架构设计、应用场景、性能和生态方面有较大区别。以下是详细对比: 1. 架构与核心概念 方面Apache SparkApache Flink计算模型微批(Micro-Batch)为主,但支持结构…...
Unity结合Vuforia虚拟按键实现AR机械仿真动画效果
零、最终效果 待上传 一、资源准备 1、Vuforia Vuforia版本不能高于10.17.4(往上的版本虚拟按键功能被删除) 2、Unity Unity版本必须要高于2022.3.x,不然使用Vuforia插件时会出现bug 二、主要内容 1、添加虚拟按钮 2、为虚拟按钮设置…...
PL/SQL 异常处理
目录 一、命名的系统异常 1.常见命名的系统异常 2.预定义的系统异常数量以及描述 3.处理命名的系统异常的一般步骤 二、程序员定义的异常 1.概念 2.自定义异常的定义与抛出 3.自定义异常的处理 三、未命名的系统异常 1.概述 2.处理未命名的系统异常的方法 3.使用场景 …...
【自学笔记】Spring Boot框架技术基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Spring Boot框架技术基础知识点总览一、Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的主要特性 二、Spring Boot快速入门2.1 搭建Spring Boo…...
Redis 缓存穿透、击穿、雪崩:问题与解决方案
在使用 Redis 作为缓存中间件时,系统可能会面临一些常见的问题,如 缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致数据库压力过大、系统响应变慢甚至崩溃。本文将详细分析这三种问题的起因,并提供有效的解决…...
第一个CMAKE项目hello cmake
#注意! 这篇文章是为WINDWOS用户写的 #请检查你的电脑上已经安装了MINGW和CMAKE 快速检查方法如下 C:\Users\Basicoperation>g --version g (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. …...
骶骨神经
骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术(七) 勇闯禁区 骶骨肿瘤切除术...
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物管理采取了人工的管理方法,但这种管理方法存…...
使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作
如果你想提高工作效率,减少鼠标操作,掌握键盘快捷键是一个非常有效的方式。在编程过程中,熟练使用快捷键能够快速管理文件、标签页,节省时间并提升效率。比如,Ctrl P 和 Ctrl W 可以快速打开和关闭文件,而…...
【找工作】C++和算法复习(自用)
文章目录 C头文件自定义排序函数stl 算法数据结构树状数组 数学 自用随便记录 C 排序 stl 头文件 全能头文件: #include<bits/stdc.h>自定义排序函数 bool compare(const int &odd1,const int &odd2) {return odd1>odd2; }stl 枚举map map&…...
大语言模型基础
简介 AI大模型是“人工智能预训练大模型”的简称,包含了“预训练”和“大模型”两层含义,二者结合产生了一种新的人工智能模式,即模型在大规模数据集上完成了预训练后无需微调,或仅需要少量数据的微调,就能直接支撑各类应用。AI大模型主要分为三类:大语言模型、CV大模型…...
深入浅出机器学习:概念、算法与实践
目录 引言 机器学习的基本概念 什么是机器学习 机器学习的基本要素 机器学习的主要类型 监督学习(Supervised Learning) 无监督学习(Unsupervised Learning) 强化学习(Reinforcement Learning) 机器…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
