每天一套面试题Day34-八股高频(15)

链接题目来自牛客

我的每日一套面试题专栏,每天更新一起打卡

78.讲一下 Spring 中用到的设计模式?

工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例; 单例模式:Bean默认为单例模式。 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术; 责任链模式:在Spring中,例如拦截器链(HandlerInterceptor)就是纯责任链,因为如果某个拦截器的preHandle返回false,则链终止,且只有部分拦截器(在返回false之前的那些)的preHandle被调用,而postHandle和afterCompletion则只有符合条件的拦截器才会执行(且每个拦截器只执行一次)。而过滤器链(Filter)则是不纯责任链,因为每个过滤器都会执行doFilter,并且每个过滤器都会执行。

79.Spring循环依赖是什么?介绍下三级缓存。

循环依赖是指 Bean 对象循环引用,A依赖B, B又依赖A. 那创建对象 时, 创建A对象需要用到B对象, 此时尝试去创建B对象, 发现又要用到 A对象. Spring通过三级缓存解决单例Bean的循环依赖:

一级缓存:singletonObjects - 完全初始化好的单例Bean 二级缓存:earlySingletonObjects - 早期暴露的对象(已实例化但未初始化完成) 三级缓存:singletonFactories - 单例工厂,用于创建早期对象

解决流程:

  1. 创建A时,实例化后就将ObjectFactory放入三级缓存
  2. 发现A依赖B,去创建B
  3. 创建B时,同样将ObjectFactory放入三级缓存
  4. 发现B依赖A,从三级缓存获取A的ObjectFactory
  5. 调用ObjectFactory.getObject()得到早期A对象
  6. 将早期A对象放入二级缓存,从三级缓存移除工厂
  7. 将早期A注入B,B完成初始化放入一级缓存
  8. 回到A,从一级缓存获取B并注入,A完成初始化放入一级缓存

记住这个简单的流程:

创建 A → 实例化 A → 放入三级缓存 → 发现需要 B
创建 B → 实例化 B → 放入三级缓存 → 发现需要 A
从三级缓存获取 A(早期对象)→ 放入二级缓存 → 注入给 B
B 完成 → 放入一级缓存 → A 获取 B → A 完成 → 放入一级缓存

80.说说Spring Boot常用的注解。

alt alt alt 参阅(牛客的答案)[https://www.nowcoder.com/questionTerminal/34cede9192b4440a9ee997d2de7a8d66?examPageSource=25mianshitop]

#面试真题#
每日一套面试真题 文章被收录于专栏

记录刷过的面试真题

全部评论

相关推荐

对转行软件测试的人而言,校招是降低入行难度、获得优质发展起点的关键机会,其核心优势体现在入行门槛低、企业培养体系完善等多个方面,具体原因如下:入行门槛更低,弱化转行短板:软件测试校招岗位大多是为应届生设计的,企业深知应届生(含转行应届生)普遍缺乏实战工作经验,招聘时更看重基础能力、学习潜力和逻辑思维,而非过往的行业履历。这恰好契合转行人群的特点 —— 即便之前无测试相关经历,只要掌握测试流程、基础测试用例设计等核心基础技能,就能参与竞争。而社招中,企业往往明确要求 1 - 3 年测试经验,还会看重过往项目经历,转行人群在这类硬指标上很难与之抗衡。企业培养体系完善,助力快速转型:校招入职后,多数企业尤其是大厂和中大型科技公司,会为应届生定制专属的培养计划。比如安排导师带教,从基础的功能测试、文档编写教起,逐步引导参与项目实战;还有系统的内部培训课程,帮助新人快速掌握企业内部的测试工具和业务逻辑。对于转行的人来说,这种 “从零开始” 的培养模式能让他们快速弥补行业知识缺口,平稳完成从原有职业到软件测试的过渡,而社招更要求员工入职后迅速胜任岗位,很少有专门的系统培养。竞争环境更友好,机会相对均衡:软件测试校招的竞争群体主要是同批次应届生,大家的起点相近,大多都是缺乏职场经验的新人,竞争维度集中在学习能力、在校实践或实习经历等方面。而社招的竞争群体包含有多年测试经验的资深从业者、熟练掌握自动化测试等技能的技术型人才,转行人群在这类竞争中毫无优势。而且很多企业的初级测试岗位会优先通过校招补充,社招更多是招聘中高级岗位,留给转行新人的社招初级岗位数量较少。职业起点更高,发展路径更清晰:校招是进入大厂、国企等优质企业的绝佳途径。这些企业的软件测试业务体系成熟,涉及的项目多为大型复杂项目,不仅能积累高质量的工作履历,还能接触到规范的测试流程和前沿技术,比如自动化测试框架、云测试平台等。这些经历会成为后续职业晋升或跳槽的重要筹码。而转行人群若通过社招,大多只能先进入中小型企业,接触的项目规模和技术深度有限,后续想进入优质企业的难度会大大增加。可塑性强受重视,适配行业发展需求:转行应届生通常思维灵活,能把原有行业的知识和视角融入测试工作,比如有施工行业背景的转行者,其流程把控能力可助力测试流程规范化,这种跨界优势在测试工作中很有价值。企业也正是看中了这类人群的高可塑性,愿意投入资源将其培养成符合自身业务需求的定制化人才。同时当前软件测试行业正朝着自动化、智能化转型,需要从业者快速学习新技术,转行应届生的适应能力和学习热情,恰好契合这种行业发展需求。
点赞 评论 收藏
分享
11-26 10:15
门头沟学院 Java
1. 项目介绍2. 具体展开介绍一个有挑战/有亮点的项目3. 项目中记忆深刻的难点4. 项目细节的问答(大概7个问题,20分钟)5. 手撕题:1047 删除字符串中的所有相邻重复项,问有无其他方案6. 手撕题:两个简单sql(一个group by,一个join in、子查询两个方案)7. JDK 的版本是多少?JDK 17、21的新特性是什么8. 创建一个线程池的方法?Executors能创建哪些线程池9. 核心线程数是什么意思?10. 阻塞队列是做什么?阻塞队列有可能会满吗?11. 如果我不想让阻塞队列满,一直往阻塞队列里面加,这种情况下可以实现吗?12. 阻塞队列满了之后把后面的新请求丢弃掉,这种可以实现吗?13. 首先核心线程数设置为5,任务都在核心线程上去执行,假如核心线程满了之后,希望说新请求继续创建新的线程去执行,然后一直到满足最大线程数的阈值之后,后续再来新的请求丢进阻塞队列里去等待。这种可以实现吗?14. JVM,包括垃圾回收这块,了解得多吗15. spring 版本是多少16. A类有A1方法,B类有B1、B2方法,A类中注入B类。spring 里的一个调用链:请求先请求到 A1 方法, A1 内部又调用了 B1 方法, B1内部又调用到 B2 方法,内部都没有异常。transactional注解加在B1方法上,哪些函数内部的数据库操作会包裹在事务里面去执行?如果加在B2方法上呢?17. MySQL用的是哪个版本18. select from score where student id=1 for update。数据库引擎是InnoDB,隔离级别也是默认的隔离级别,现在会加什么锁?假设条件改成不等于1呢?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务