当前位置: 首页 > news >正文

2026-02-14学习

2026-02-14学习

一、Spring Cloud 面试题

微服务的面试题面试基本没怎么问,而且自己学习感觉也很难体会到那种场景,像我实习的公司,都是多个单体项目进行远程接口调用的,有点像但其实又不是微服务。因为微服务的维护成本是比较高的,大部分还是单体架构居多,但是没办法,现在面试都要问呐!!!太难了!!!而且,自己本地要实现的话,内存这一块有点遭不住,现在内存又贵得要死o(╥﹏╥)o

1、单体架构和微服务的区别?

单体架构就是所有的功能都在一个整体之内,虽然维护起来很简单,但是修改一行代码就要重新部署

微服务就是不同功能放在不同服务上,当修改其中的代码的时候,只需要将该服务的代码进行部署即可,就不用动其他的代码了

这是我的一个理解

2、Spring Cloud 有哪些核心组件?

核心组件主要包括:网关服务、注册中心、负载均衡、远程调用、熔断服务等,但是主要说几个就好,一般就是围绕你说的这几个进行提问

3、服务注册和发现是什么意思?Spring Cloud 如何实现服务注册和发现?

服务注册和发现的意思主要就是用一个注册中心来管理这些关系,服务启动后会将自己的信息注册到中心去,比如 ip,端口,服务名等关键信息,当

消费者调用的时候,直接问注册中心要就可以了

实现注册和发现,一般来说用 Nacos,因为像 Eureka 已经停止维护了

4、什么是微服务网关?为什么需要微服务网关?

微服务网关就相当于一个入口,所有人都需要经过这个入口,这比如酒店前台,你订房需要必须到前台进行登记,然后由前台进行信息登记,信息核

实之后,就将房间号告诉你。微服务网关就起到这样的作用,通过路由转发将不同请求分发到不同的服务上去;通过鉴权方式,比如登录鉴权,来

保证拦截;等等功能

5、什么是负载均衡?为什么需要负载均衡?

负载均衡就是将流量均分到不同的服务上,让系统能够抗住更大的并发量。

假如现在有一个双 11 活动,全国好几千万的请求流量,一个服务能抗住这么多的请求吗,根本不可能的,所以要进行请求均衡负载,将这么多的

请求分发到不同的服务上去。

二、SpringBoot 面试题

SpringBoot 感觉面试题较少,因为 SpringBoot 就是一个小型的 SSM 架构嘛,包含 Spring、SpringMVC、MyBatis 三种框架嘛,一般了解清楚这三个架构,SpringBoot 也是很好去上手的。

1、SpringBoot 自动装配的原理?

自动装配原理我觉得看源码是最清楚的,首先,SpringBoot 的自动装配其实依赖于启动类上的一个注解@SpringBootApplication

image

但是关键点不在这,而是里面有几个关键的注解,但是针对自动装配的话,我们需要着重了解其中一个。

image

@EnableAutoConfiguration 是实现 Spring Boot 自动装配的核心注解。不过在此之前需要明确:自动装配仅针对标注了 @Configuration 的配置类生效。而像 @Controller@Service 等注解的 Bean 是通过 @ComponentScan 的扫描机制注册的,并不属于自动装配的范畴。这部分若有兴趣可自行查阅相关资料,这里不再展开。

那么,@EnableAutoConfiguration 为何能够驱动自动装配?关键在于它组合了 @Import 注解,并导入了一个实现了特定接口的类。根据相关资料,该类起到了延迟配置的作用——它会等待所有常规的 @Configuration 配置类加载完毕后,再触发自动装配逻辑。

那这个“延迟”是如何在代码层面实现的?上源码:

protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {// 获取配置项AnnotationAttributes attributes = this.getAttributes(annotationMetadata);// 获取候选配置类List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);// 去重操作configurations = this.removeDuplicates(configurations);// 处理exclude操作Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);// 条件过滤(@ConditionalOnClass)configurations = this.getConfigurationClassFilter().filter(configurations);// 导入this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationEntry(configurations, exclusions);}
}

以上是整个自动装配的核心流程:从读取属性、获取候选类、去重、排除,到条件过滤和事件发布,最终生成并返回配置项。

三、复习

1、Spring 循环依赖是什么?

Spring 循环依赖其实就是当 A 服务需要 B 服务的时候,发现 B 服务也需要 A 服务,但是两个都没实例化,导致死循环

2、如何解决循环依赖问题?

1)三级缓存:一级缓存存储的是经历过完整生命周期的 Bean,但是没有经过销毁这个阶段哦;二级缓存存储的是实例化后的 Bean,但是没有进行

依赖注入这个阶段;三级缓存存储的是一个 ObjectFactory,主要作用是延迟配置。当需要代理对象的的时候才会去配置,如果实例化后就进行代理

的创建,那么会破坏整个生命周期。三级缓存解决循环依赖问题的流程为:当 A 服务实例化后,将其缓存到三级缓存中,之后进行依赖注入,但是 B

服务并没有实例化,所以实例化之后,将其缓存到三级缓存中,之后开始依赖注入,这时发现 A 已经实例化,那就直接从三级缓存中拿出来放到二级

缓存中,当 B 完成整个生命周期后,缓存到一级缓存中,之后 A 再完成整个过程。

2)@Lazy 注解,可以在字段注入上使用,也可以在构造函数中使用,也是起到了一个延迟配置的作用

3、Spring 事务怎么用?

编程式事务

声明式事务,使用 @Transcational 注解

4、Spring 事务的隔离级别有哪些?

Spring 事务的隔离级别主要有读未提交、读已提交、可重复读、串行化

5、Spring 事务在什么情况下会失效?

1)try catch 捕获了异常,但是没有抛出去

2)方法使用非 public 方法

3)异常抛出的是编译时异常,而非运行时异常,在注解配置上将异常升级一下就行,改为能够感知到所有异常

6、说一下你对 Spring 的理解

Spring 就是一个框架,主要作用就是为了解耦,通过 IOC 控制反转以及 DI 依赖注入

IOC 控制反转就是创建的对象交给容器进行管理,按照普通的情况就是程序员自己去手动创建病管理

DI 依赖注入就是通过构造函数注入法、Setter注入、字段注入

7、什么是 Spring Bean?

Spring Bean 就是 Spring 容器管理 Java 创建的普通对象

8、Spring 事务有哪几种传播行为?

Spring 事务的传播行为常见的主要有三个:

事务的传播行为一般都是一个事务调用另一个事务产生的行为

required:当调用方调用事务的时候,如果有事务,就加入事务;如果没事务,就新建事务。比如下单和扣库存场景,一般来说,下单之后就要扣

库存,但是现在我只扣库存,那么就只新建扣库存这个事务

requires_new:单独事务的时候需要,比如说日志记录,无论这个方法是否报错,日志中都要进行记录,但是现在日志一般使用 AOP

nested:嵌套事务,当子事务回滚的时候,不会影响父事务;但是父事务回滚的时候,会影响子事务

9、Spring 的单例 Bean 是否有并发问题?

有并发问题,因为单例 Bean 在创建的时候只会实例化一个,多线程都共享这个 Bean,假如高并发场景下,可能就会出现并发问题了

10、说一下对 Spring MVC 的理解

Spring MVC 就是一个分层架构思想,像普通的 MVC 就是 Model 数据层,View 视图层,Controller 层,但是在 Spring 中就进行了一个完善

处理。分层架构分为 Controller 层,Service 层,DAO 层,View 层,专门应用于 Spring 框架中。

11、Spring 中拦截器和过滤器的区别?

过滤器主要是在 Servlet 容器中进行管理,拦截器主要是在 Spring 容器中进行管理

12、Spring Bean 的生命周期?

实例化 -> 依赖注入 -> 前置处理 -> 初始化 -> 后置处理 -> 就绪使用 -> 销毁

四、总结

http://www.jsqmd.com/news/382752/

相关文章:

  • javascript之字符串索引数组
  • 2026年2月贵阳防腐木栈道厂家推荐,户外耐用与施工质量测评 - 品牌鉴赏师
  • 计算机毕业设计springboot试卷生成器 基于SpringBoot的智能组卷系统设计与实现 SpringBoot在线考试与试卷自动生成平台
  • 西湖大学突破:AI推理模型数据“指纹识别”技术
  • [深度学习网络从入门到入土] 拓展 - Inception
  • 基于SpringBoot+Vue的社区旧衣物品回收与捐赠平台设计与实现
  • 2026年 吹膜机厂家推荐排行榜,实验型/小型/单层/双层/三层/五层/色母/多层共挤/降解材料吹膜机,实力品牌与创新技术深度解析 - 品牌企业推荐师(官方)
  • 如何通过单北斗GNSS提升桥梁形变监测的准确性?
  • 计算机毕业设计springboot高校资源共享平台 基于SpringBoot的高等院校教学资源协同共享系统 SpringBoot框架下高校数字化学习资源互通服务平台
  • 港大突破:VR驱动机器人实现类人动作学习
  • 2026年集装箱房厂家实力推荐榜:住人/工地/可移动/折叠/临建集装箱房,源头工厂专业定制与创新设计深度解析 - 品牌企业推荐师(官方)
  • 2026年切削液厂家实力推荐榜:防锈型/微乳化/全合成/铝合金/镁合金/玻璃磨削液等专业品类深度解析与选购指南 - 品牌企业推荐师(官方)
  • 港大用AI视频生成技术让机器人拥有“透视眼“:首次实现超视野导航
  • 2026大专大数据与会计专业学习数据分析的价值分析
  • 深入解析Effective Modern C++条款35:基于任务与基于线程编程的哲学与实践
  • 阿里Qwen团队首次提出P-GenRM:个性化大模型奖励机制的全新突破
  • ollama+tts+vlm+langchain 示例代码
  • [深度学习网络从入门到入土] 含并行连结的网络GoogLeNet
  • AI替代老农经验———全程种植方案,输入,地块,土壤,作物,处理,知识库匹配最优方案,输出,播种/施肥/打药全流程表。
  • 一篇撞车的文章
  • 2026情人节开启第一篇博客
  • langChain 大模型开发知识汇总
  • JMeter 简介 - 教程
  • 基于微信小程序的“共享书角”图书借还管理系统毕设源码
  • 2026年 雷达塔厂家实力推荐榜:军用/海洋/边防/相控阵等全类型雷达塔,专业制造与创新技术深度解析 - 品牌企业推荐师(官方)
  • 2026年电池防爆阀刻痕残厚测试仪厂家推荐榜单:全自动/锂电池防爆阀/刻痕深度/残厚测试仪,精准高效与安全可靠技术解析 - 品牌企业推荐师(官方)
  • 《实时渲染》第3章-图形处理单元-3.4可编程着色和及其API的演变
  • 高温隔热布产品哪家好?2026年十强厂商深度分析对比 - 资讯焦点
  • 上海AI实验室携手港中文首创“隐喻星辰“:让AI读懂图像背后含义
  • 旧物利用:如何用 GKD 将旧手机变成“全自动”远程看护?