框架类面试题总结
一.谈谈你对struts2的理解
Struts2是一个Mvc结构的web层框架,其实就是一个大大的servlet,这个Servlet 名为 ActionServlet,或是 ActionServlet 的子类。我们可以在 web.xml 文件中将符合某种特征的所有请求交给这个 Servlet 处理,这个 Servlet 再参照一个配置文件(struts.xml)将各个请求分别分配给不同的
action 去处理。
他的工作流程
客户端发送一个请求过来------>经过struts2的FilterDispatcher过滤器来决定调用合适的action----->找到需要调用的action,则会创建一个action的代理类,这个代理类通过配置文件找到action类---------->通过实现ActionInvocation接口,调用一系列拦截器----->通过对应的方法将处理过的结果返回给页面
2.谈谈你对Hibernate框架的理解
Hibernate的核心思想是ORM模型,就是讲数据库中的数据以对象的形式展示,程序员通过对数据库的操作变为对对象的操作
使用Hibernate的基本流程就是配置Configuration对象,产生sessionFactory,创建session对象,启动事务,执行CURD操作,关闭session
二级缓存的配置 ,级联,qbc和hql查询等等
3.aop的作用
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码
4.Struts2的ActionServlert的作用
ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax.servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始,因此它在MVC模型中扮演中央控制器的角色。
在Struts中,它的主要作用是用来接收用户的请求信息,然后根据系统配置要求将请求传递给相应的Action对象。在具体实现时,它首先要判断Action对象是否存在,如果不存在则先创建该对象;在请求被接收后,控制器会将其传递给一个Action实例,这一过程同样会判断实例是否存在,如果不存在则需先创建该实例的execute()方法。
5.hibernate 中的 update()和 和 saveOrUpdate() 的区别,session 的 的 load()和 和
get()
get() 和 load()
都可以根据跟定的 OID 从数据库中加载一个持久化对象
区别:
- 当数据库中不存在与 OID 对应的记录时, load() 方法抛出 ObjectNotFoundException 异常, 而 get() 方法返回 null
- 两者采用不同的延迟检索策略:load 方法支持延迟加载策略。而 get 不支持。
update()和 和 saveOrUpdate() 的区别
update() 更新,没有主键会报错的
saveOrUpdate() 保存或更新, 没有主键就执行插入.
<set name="orders" table="ORDERS">
<key column="ORDER_ID"></key>
<one-to-many class="Order"/>
</set>
6.hibernate 的 的 inverse 属性的作用?
那么如何设定他们的关联关系呢?
在hibernate中通过对
inverse 属性的来决定是由双向关联的哪一方来维护表和表之间的关系. inverse = false 的为主动方,inverse = true 的为被动方, 由主动方负责维护关联关系
在没有设置 inverse=true 的情况下,父子两边都维护父子
关系
在 1-n 关系中,将 n 方设为主控方将有助于性能改善(如果要国家元首记住全国人民的名字,不是太可能,但要让全国人民知道国家元首,就容易的多)
Hibernate 提供了属性的延迟加载策略,当hibernate查询数据的时候,数据并没有保存于内存中,当程序真正对数据进行操作的时候,对象才存于内存中,它节省了服务器的内存开销,从而提高了服务器的性能
8.