
学习SSH框架已经很久了,应用得不是很熟练,但即将面临着找工作,所以整理了这套有关于SSH框架面试可能遇到的问题,希望对大家有所帮助。

1 Struts工作机制?为什么要使用Struts?
Struts的工作流程:
- request请求会先通过一系列过滤器,配置PreparedAndExecuteFilter过滤HttpServletRequest请求;
- 过滤器根据访问的路径来决定是否调用,若符合,则调用ActionMapper
- ActionMapper调用ActionProxy,通过配置文件,找到相应的Action类
- Action类实例化一个ActionInvocation的实例,该实例涉及到一系列的拦截器
- 一旦方法运行完毕,ActionInvocation根据返回值去配置文件查找要去访问的路径,通常可以是Jsp页面和另一个Action.
为什么要用Struts:
JSP、 Servlet 、 JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件.
2. 说下Struts的设计模式
- MVC模式:将控制层、模型层、视图层分开(配合详细的MVC工作流程,自由发挥);
- Treadlocal模式:针对同一个Servlet实例;
- 代理模式。

3.Hibernate工作原理及为什么要用?
原理:
- 读取并解析配置文件
- 读取并解析映射信息,创建 SessionFactory
- 打开Sesssion
- 创建事务Transcation
- 持久化 操作
- 提交事务
- 关闭Session
- 关闭SesstionFactory
为什么要用:
- 对 jdbc 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
- Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
- hibernate映射很灵活性。它支持各种关系数据库,从一对一到多对多的各种复杂关系
4.Hibernate与jdbc的联系
- hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接,增删改查等功能
- hibernate用面向对象的思想,通过配置文件把 pojo 类的字段和数据库的字段关联起来;
- 其实hibernate=封装的jdbc+xml文件
5、 说下Hibernate的 缓存 机制
- 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
- 二级缓存:
- 应用及缓存
- 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据
- 第三方缓存的实现:使用第三方缓存插件
26、 Hibernate的查询方式
- Hibernate特有的语句Hql:
- 属性查询
- 参数查询、命名参数查询
- 关联查询
- 分页查询
- 统计函数
2、Criteria查询
3、Sql查询
6.Hibernate与 spring 的联系
Spring实现了程序的全局性管理,包括对Hibernate的管理:
- hibernate中的一些对象可以给Spring来管理,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactory,HibernateTemplate等。
- Hibernate本来是对数据库的一些操作,放在DAO层,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。

7. 为什么要用spring?
Spring既是一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换不同的接口实现类。
Spring有两大特性: IOC和AOP
IOC:正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),把对象的创建和维护交由容器管理,从而使类与类之间的依赖关系发生反转,实现解耦合。
AOP: 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
8.项目中如何体现Spring中的切面编程,具体说明。
面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。
具体操作:在切面上声明一个通知(Advice)和切入点(Pointcut);
1.通知(Advice):
通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。
2.连接点(Joinpoint):
程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。
3.切入点(Pointcut)
通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,Spring中允许我们方便的用正则表达式来指定
4.切面(Aspect)
通知和切入点共同组成了切面:时间、地点和要发生的“故事”
项目中用到的Spring中的切面编程最多的地方:声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

最后,祝愿大家都能够有所进步,早日实现自己的人生理想,走向人生巅峰。
如果您觉得有用的话,记得加个关注(⊙o⊙)哦!!