我看到很多面试官在面试的时候,尤其是中大厂都会提问:Spring AOP 的底层原理,或者说 Spring IOC 的原理。
请问遇到这种问题该如何回答才能让面试官觉得满意?这种问题我也有问过 GPT 或者上 Spring 官方文档看,感觉如果按照上面的来说也不是很全面,例如 Proxying Mechanisms 。如果看源码的话可能要考虑的东西太多了,求各位懂的哥哥帮助一下。
1
BBCCBB 2023-09-10 11:41:42 +08:00
动态代理, 责任链模式, 什么 Proxy 只能代理基于接口的类, 还有就是他的抽象的接口, Advice, Advisor, pointcut 之类的吧.
还有就是 aop 的缺陷, 比如 this 调用会导致失效, 不能 static method 之类的. 个人理解. |
2
sorra 2023-09-10 12:06:27 +08:00
推荐自行用 JDK 动态代理和 CgLib 写一遍,动手写一个简单的 IoC 容器,这样从原理入手能节省看源码的时间(因为源码的信息量太大了)。当然你也可以从源码入手,但可能更费时间。
只要你懂了来回答,自然能让面试官满意,不懂当然不能让面试官满意。 |
4
kuituosi 2023-09-10 13:29:32 +08:00 via Android
spring 的基本原理还是需要懂的,有的大厂还会涉及具体细节。实在不行就报个培训班吧
|
5
javaisthebest 2023-09-10 13:47:55 +08:00
首先你的理解下为什么出现 AOP 这个功能,我个人理解是这样的
在我们的应用着,不仅存在着 应用服务( Web Api ,功能性 API) 也存在着大量的系统功能(性能统计、日志)。这些功能点逻辑分散在应用功能中,与应用代码耦合性高,分散性强。不便于统一管理。 所以就出现了 AOP , 面向切面。把系统功能 像一把刀横切在应用流程中。 好处就是 统一管理、解耦 缺点无非就是 降低了性能 |
6
Ericcccccccc 2023-09-10 13:52:49 +08:00
比较好的回答可以是为什么会需要 AOP, 搞明白了这一点原理啥的就水到渠成了.
|
7
zhiyu1998 OP @kuituosi 可能培训班的老师也不会太注重这种,偏应用多一些吧
@javaisthebest 这个回答好像 GPT 的那种回答,所以我才觉得不够底层 @Ericcccccccc 现在已经是马桶堵住渠成不了了😂 |
8
BBCCBB 2023-09-10 15:29:47 +08:00
|
9
securityCoding 2023-09-10 16:37:07 +08:00
IOC 就是 spring 帮你省去手动 new object 同时帮你管理生命周期,AOP 本质是无侵入式增强方法。
|
11
diagnostics 2023-09-10 16:41:24 +08:00
为什么需要 IOC:对象依赖关系复杂,需要一个自动化帮忙做注入,以及 Spring 的 Bean 基本上没有状态而言的,因此只需要单例就好
如何实现:简单维护一个 Bean 的注册表(假设是 HashMap ),另一个 Bean 创建的时候,假设有依赖是需要注入的,到这个注册表查有没有(类型、同类型下对比 beanName )-> 假如该 Bean 没有,则尝试加载这个 Bean ,否则异常退出 我不是 Spring 专家,只在刚毕业看了一些、并且会用而已,按照我的理解我会这么写。。。Spring 无非就是增加了很多设计模式把代码优化了(但是复杂了更难懂) |
12
ikas 2023-09-10 21:45:52 +08:00
这个问题很多时候要看面试官想要关注什么..
如果是自身想要搞清楚,其实去看 spring 作者的书就可以了.来龙去脉 expert one-on-one J2EE Development without EJB |
13
liyunyang 2023-09-11 09:10:47 +08:00
想请问一下,哪里可以系统学习一下 spring 底层的这些东西?
是不是一定要花钱买网上那些源码课程? 有什么推荐的书籍吗? |
14
Ayanokouji 2023-09-11 10:05:19 +08:00
关于 ioc ,可以尝试换种思路,如果不用 ioc 需要怎么做。比如用 go ,一般都是全局变量。两种方式进行比较,可能会对 ioc 认识的比较深。
|
15
dif 2023-09-11 14:35:54 +08:00
@liyunyang 系统的学很慢,很枯燥,很容易放弃。不如多刷刷 spring 的面试题。遇到一个,先尝试自己能不能解释的通,解释不通就看答案,对答案不明白再去看相关的介绍或者源码。
目前我在刷 spring 的面试题。 |
16
Aresxue 2023-09-11 15:09:00 +08:00 1
面试是没有固定公式的,但对于某些固定的问题确实存在着套路,最基本的 3w ( what-how-why )原则就很好用。
比如 aop 这个命题, 什么是 aop?怎样使用 aop ?为什么需要 aop ?这些内容相对浮于表面但如果面试并不是什么大公司,面试官的水平也没有多高可能也就够用了。再向下挖掘,动态代理/静态代理 -> jdk 代理/cglib 代理 -> 字节码改写 asm/javasist -> agent -> jvmti -> jvm 源码等等,知识是有层次的,对应面试这件事情来说先选定目标公司,然后比面试公司的平均面试深度再深一个 level 一般就够用了,因为很多东西一下子是学不完的,你可以参考常见的面试题,对其中提到的知识点做些分层再做出合适的评估。 |