面试题(五):框架相关知识

本文针对SpringMVC和MyBatis框架进行了深入浅出的解析,重点介绍了Spring框架中的IOC与AOP概念及其实现方式,并对SpringMVC的核心控制器及其消息处理流程做了详细介绍。此外,还讲解了MyBatis中#与$占位符的区别,旨在帮助读者更好地准备相关技术面试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

框架相关知识

我在项目中使用的框架有 Spring MVC 和 MyBatis,所以在简历上只写了这两种框架,面试官主要针对这两种框架进行提问。以下问题供小伙伴们参考。

JavaWeb 开发经典的 3 层框架:Web 层、Service 层(业务逻辑层)和 Dao 层(数据访问层)

· Web 层:包含 JSP 和 Servlet 等与 Web 相关的内容;

· 业务层:只关心业务逻辑;

· 数据层:封装了对数据库的访问细节。

Spring 知识点

快速学习 Spring Boot 技术栈

Spring / Spring Boot 原理与实践

01. Spring 的 IOC 和 AOP 有了解吗?

答:

IOC:控制反转,(解耦合)将对象间的依赖关系交给 Spring 容器,使用配置文件来创建所依赖的对象,由主动创建对象改为了被动方式;

·AOP:面向切面编程,将功能代码从业务逻辑代码中分离出来。

02. AOP 的实现方式有哪几种?如何选择?(必考)

答:JDK 动态代理实现和 cglib 实现。

选择:

1. 如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理实现 AOP,也可以强制使用 cglib 实现 AOP;

2. 如果目标对象没有实现接口,必须采用 cglib 库,Spring 会自动在 JDK 动态代理和 cglib 之间转换。

3. 扩展:JDK 动态代理如何实现?(加分点)

答:

JDK 动态代理,只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。

原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。

1. 定义一个实现接口 InvocationHandler 的类;

2. 通过构造函数,注入被代理类;

3. 实现 invoke( Object proxy, Method method, Object[] args)方法;

4. 在主函数中获得被代理类的类加载器;

5. 使用 Proxy.newProxyInstance( ) 产生一个代理对象;

6. 通过代理对象调用各种方法。

03. Spring MVC 的核心控制器是什么?消息处理流程有哪些?

答:核心控制器为 DispatcherServlet。消息流程如下:

04. 其他问题包括:重定向和转发的区别、动态代理和静态代理的区别等。

Mybatis 知识点

关于 MyBatis 主要考察占位符#和 $ 的区别,区别如下:

1. 符号将传入的数据都当做一个字符串,会对自动传入的数据加一个双引号;

2. $ 符号将传入的数据直接显示生成 SQL 中;

3. 符号存在预编译的过程,,对问号赋值,防止 SQL 注入;

4. $ 符号是直译的方式,一般用在 order by ${列名}语句中;

5.能用#号就不要用 $ 符号。


小结:限于作者水平,MVC 框架方面了解不是太多,实战能力欠缺。面试官偶尔问框架底层实现原理等都知之甚少,有能力的小伙伴可以多加学习。

 

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adam`南帝·梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值