分享一下前段时间自己第三面的面试经历吧,虽然现在入职的不是 BAT,但也算是细分领域里的准独角兽公司了,希望可以对你有所帮助哈。
面试官:一面、二面他们对你的评价很高啊。我看你写着精通 Spring,今天我们就聊聊 Spring 吧!
我:走着!
面试官:谈谈你自己对 Spring 的理解吧!
我:我觉得 Spring 就是个万用排插,可以对接几乎一切的开源接口。像我接触过的项目有规则引擎,做推荐,做营销活动,做秒杀等等。
面试官:你为什么用 Spring?
我:Spring 的优点很多,比如方便解耦,简化开发,但是对我来说主要还是避免重复造轮子!
Spring 可以说已经是业界标准了,经过了无数项目的实战检验。遇到问题也可以向全世界的开发人员请教,可以帮忙指出思路或解决方案;
还有就是学习 Spring 的理念,我经常会研究 Spring 的源码,对自己的 Java 技术水平和应用开发水平提升很大。Spring 框架源码是 Java 技术的最佳实践范例。
面试官:我很赞同!我们来问问比较细的点,@Transactional 到底做了什么事?
我:保证事务的完整性,结合 ACID 了解。
面试官:@Transactional 一定能保证事务的 ACID 么?
我:不一定,默认情况下,回滚时,只会回滚 Error 与 RuntimeExcetption。
面试官:Spring 有几种事务的实现方式,为什么说加了 @Transactional 注解的业务方法里不适合有长调用?
我:排除自定义事务管理器的话,Spring 提供了 2 种事务管理方式,分别为声明式事务 @Transactional(注解式)和编程式事务,如果使用声明式事务,在源码中(省略 500 字),正常情况下,只有业务方法整体执行完成,才会释放数据库连接,如果业务方法中的长连接调用时间要 10s,那么意味着至少 10s,当前的数据库连接是无法释放的,数据库连接是很宝贵的资源(省略 100 字)。
面试官:Spring 的事务传播属性是如何实现的?
我:结合数据库连接去理解,我们在工作中常用的,有 REQUIRED,REQUIRES_NEW,NESTED 三种传播属性,在 Spring 底层实现中,它会根据传播属性的不同,去使用数据库连接,在源码中(省略 500 字),我们使用时,应该根据业务进行具体判断。
面试官:Spring 的事务隔离级别是如何实现的?
我:高并发场景下,为了保证竞争资源的安全性,就会考虑隔离级别的问题,结合您刚才问到的事务的传播属性,实际隔离级别这个问题,我觉得结合数据库的 MVCC&LBCC(省略 500 字),来结合业务场景会更加合适。
隔离性您真的了解么?在 MySQL5.5+,InnoDB 存储引擎中,如果表 my_table_innodb 中,id=12345,age=18,在下上事务中,Q1,Q2,Q3 的查询结果分别是什么?
面试官:答的很好,最后一个问题:如果没有 Spring,你打算怎么开展工作?
这个思考了几分钟后,我是这么回答的:Spring 的核心源码,比如:IOC、AOP、Spring 事务、MVC 原理等从 02 年到现在基本 80% 都没有改动过,核心源码我还是有信心把控的,手写一个类似 Spring 的核心框架,在我的能力范围内。
另外,如果业务比较紧急,git 上有很多可借鉴来源项目,因为我本人对 Spring 源码的了解,改造起来不会花费太多时间;
面试官:你本人对公司有什么要求?(喜闻乐见的谈薪水时刻)明天可以来上班吗?
做程序员难,做一个 2020 年的程序员更难,随着 IT 人员越来越多,我们的竞争压力也越来越大,想要在茫茫人海中脱颖而出,其实考察的就是我们技术栈的广度和深度。
Spring 框架为开发 Java 应用程序提供了全面的基础架构支持。Spring 包含了一些很好的功能,如依赖注入和开箱即用的模块:
Spring 框架的问世,给我们提供了很好的扩展性、易维护性,给我们的开发提供了便利,效率的提高,节省时间。
Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。
Spring 框架为开发 Java 应用程序提供了全面的基础架构支持。Spring 包含了一些很好的功能,如依赖注入和开箱即用的模块,这些模块能极大缩短应用程序的开发时间,提高我们的工作效率。
做 Java 的人,应该都听说过一句话:Spring 重新定义了 Java。
Spring 底层到底要看什么?以下是我的学习笔记,给大家分享一下,希望可以对你掌握 Spring 有所帮助。(xmind 格式可在文末获取)
Spring 学习笔记
Spring 作为现在最流行 Java 开发技术,其内部源码设计非常优秀。但是相当一部分程序员没有用过 Spring,很多用过的程序员对于 Spring 的理解也只停留在很浅的层面,只关注自己用的那部分代码的逻辑,而并不真正去理解框架,完全不懂 Spring 源码。
不懂 Spring,你怎么敢去面试啊?
为了帮助大家深刻理解 Spring 底层源码,并将它应用到工作中。我特邀了前谷歌 Spring 资深专家子路老师,为大家带来一堂《Spring 源码深度分析》,通过本节课的分享,你将摆脱面试造火箭,工作拧螺丝的困境。
大师精品之作 ——《Spring 源码深度分析》
如遇扫码受限,可添加微信:xxktqq20
子路老师
前华南谷歌资深工程师 Spring 金牌讲师;
专精领域:分布式、微服务、高并发、高可用等技术架构;
适合人群
1. 具备 Java、Spring 基础;
2. 具备一定自学能力;
3. 立志成为高级工程师、架构师的 IT 人;
课程介绍:
5.20
Spring bean 的生命周期
Spring 源码编译
Spring 官网的体系认知
Spring bean 生命周期源码学习
Spring 后置处理源码学习
5.21
Spring 循环依赖源码分析
Spring 循环依赖概念
Spring 容器的如何理解
单例池和容器的关系
Spring 三级缓存如何工作
附赠 7.8G 的 Java 架构进阶资料和 Spring 学习笔记
如遇扫码困难,请添加老师微信:xxktqq20