Spring、SpringBoot、SpringCloud 面试指南

Spring

Spring是什么?

Spring是一个开源的企业级应用开发框架,由Rod Johnson创建。它简化了Java企业级开发,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,帮助开发者更好地管理Java对象的创建和依赖关系,同时简化了事务管理、数据访问等企业级应用的常见需求。

Spring的核心容器是什么?

Spring的核心容器是BeanFactory,它是Spring框架的核心,负责创建、配置和管理Bean对象。BeanFactory通过读取配置元数据(如XML配置文件或注解)来创建和初始化Bean,并管理它们之间的依赖关系。ApplicationContext是BeanFactory的子接口,提供了更多企业级功能,如事件发布、资源加载等。

Spring的AOP是什么?

AOP是一种编程范式,用于将横切关注点(如日志记录、事务管理、安全检查等)从业务逻辑中分离出来。Spring的AOP通过代理模式实现,允许开发者定义切面(Aspect),在特定的连接点(Join Point)执行增强(Advice),从而实现对多个模块的统一管理和增强。

Spring事务管理的核心接口有哪些?

Spring事务管理的核心接口包括PlatformTransactionManager(事务管理器)、TransactionDefinition(事务定义)和TransactionStatus(事务状态)。PlatformTransactionManager负责管理事务的开始、提交和回滚等操作;TransactionDefinition定义了事务的属性,如传播行为、隔离级别等;TransactionStatus提供了事务执行过程中的状态信息。

Spring是如何解决循环依赖问题的?

Spring通过引入三级缓存来解决循环依赖问题。一级缓存中存放所有的成熟Bean,二级缓存中存放所有的早期Bean,先取一级缓存,再去二级缓存。在创建Bean的过程中,Spring会将创建好的代理实例存储到三级缓存中,最终,创建好的实例会被同步到一级缓存中,以便下次获取该Bean时能够直接从一级缓存中获取。

Spring里面的事务和分布式事务的使用如何区分,以及这两个事务之间有什么关联?

Spring的事务管理主要用于单个数据源的事务处理,通过AOP实现事务的统一管理。分布式事务则涉及多个数据源或服务的事务协调,通常需要借助分布式事务框架(如Seata)来实现。两者之间的关联在于,Spring的事务管理是分布式事务的基础,分布式事务在实现时会利用Spring的事务管理机制来处理每个服务内部的事务。

SpringBoot

SpringBoot是什么?

Spring Boot是Spring家族的子项目,旨在简化Spring应用的初始搭建和开发过程。它通过约定大于配置的理念,自动配置Spring框架,使得开发者无需繁琐的XML配置文件,只需添加依赖和少量的注解,就能快速创建一个独立运行的、生产级别的Spring应用。

SpringBoot的核心注解有哪些?

  • @SpringBootApplication:这是Spring Boot的核心启动注解,组合了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个注解。@SpringBootConfiguration表明该类是一个Spring Boot的配置类;@EnableAutoConfiguration开启自动配置功能;@ComponentScan用于扫描当前包及其子包中的Spring组件。

  • @RestController@Controller@RestController@Controller@ResponseBody的组合注解,用于定义RESTful风格的控制器,返回JSON或XML格式的数据;@Controller用于定义传统的MVC控制器,返回视图名称。

  • @GetMapping@PostMapping等:这些注解用于映射HTTP请求到处理方法上,分别对应GET、POST等HTTP方法。

SpringBoot的自动配置原理是什么?

Spring Boot的自动配置基于@EnableAutoConfiguration注解,它通过@Import注解导入AutoConfigurationImportSelector类。在AutoConfigurationImportSelector中,通过一系列的逻辑,最终会加载类路径下META-INF/spring.factories配置文件中定义的自动配置类。这些自动配置类使用了@Conditional注解(如@ConditionalOnClass@ConditionalOnMissingBean等),根据项目中的类、Bean等条件来决定是否应用相应的配置。

如何解决SpringBoot中的跨域问题?

在SpringMVC项目中,可以使用@CrossOrigin注解来解决跨域问题,它本质上是基于CORS(跨域资源共享)机制。在Spring Boot项目中,可以通过实现WebMvcConfigurer接口并重写addCorsMappings方法来配置CORS跨域。而在Spring Cloud项目中,一般会在网关中配置CORS跨域,这样所有通过网关的请求都能解决跨域问题。

SpringCloud

SpringCloud是什么?

Spring Cloud是一组为开发分布式系统的微服务架构提供工具和框架的集合。它基于Spring Boot,帮助开发者快速构建和部署微服务应用。Spring Cloud提供了服务注册与发现、负载均衡、分布式配置管理、断路器、API网关、消息总线等功能,简化了微服务开发的复杂性。

SpringCloud的主要组件有哪些?

  • Eureka:一个基于REST的服务发现和注册中心,用于在分布式环境中定位服务,以实现服务发现和故障转移。服务提供者将自身注册到Eureka Server上,服务消费者从Eureka Server获取服务列表,从而实现服务间的通信。

  • Ribbon:一个基于客户端的负载均衡器,与服务发现组件结合使用,可以在客户端实现负载均衡,将请求分发到多个服务实例上。

  • Hystrix:一个熔断器库,用于在分布式系统中防止级联故障。当某个服务出现故障时,Hystrix会熔断该服务的调用,快速失败并返回一个默认值,避免线程阻塞和资源耗尽。

  • Feign:一个声明式的HTTP客户端,与Ribbon和Hystrix集成,简化了服务间的调用。通过Feign,开发者可以使用接口和注解的方式,像调用本地方法一样调用其他服务。

  • Zuul:一个微服务网关,负责请求路由、过滤和负载均衡。Zuul作为系统的入口,可以对请求进行统一的认证、鉴权、限流等处理,然后将请求转发到对应的服务。

  • Spring Cloud Config:用于集中管理应用程序的配置文件,解决了分布式环境中配置同步的问题。它支持多种存储后端(如Git、SVN等),并且具备版本控制功能,方便团队成员协作开发。

SpringCloud的配置中心使用的是什么?

Spring Cloud Config是Spring Cloud的配置中心组件,它提供了一个服务器和客户端来管理应用的外部配置。服务器作为配置的集中存储库,可以使用Git存储配置信息,方便配置的版本管理和多环境支持。客户端应用通过连接到Config Server获取配置属性,并在本地缓存配置,实现配置的集中管理和动态刷新。

如何在SpringCloud中实现服务间的通信?

在Spring Cloud中,服务间的通信主要有两种方式:一种是使用RestTemplate结合Ribbon进行服务间调用,通过服务名代替IP地址进行调用,Ribbon会根据负载均衡策略选择具体的服务实例;另一种是使用Feign客户端,它简化了服务调用的代码,通过声明式接口的方式,自动集成了Ribbon的负载均衡和Hystrix的熔断功能,使得服务调用更加便捷和健壮。

SpringCloud与Docker的整合实践

以某知名电商平台为例,该平台采用了Spring Cloud与Docker的整合方案,成功实现了微服务的高效部署和管理。具体来说,平台将所有的微服务(如用户服务、订单服务、支付服务等)都封装为Docker镜像,并通过Kubernetes进行集群管理。每当有新的服务版本发布时,运维团队只需更新相应的Docker镜像,即可实现无缝升级。这种方式不仅简化了发布流程,还减少了停机时间,确保了用户体验的连续性。

你可能感兴趣的:(spring,spring,boot,spring,cloud)