面试总结

1 谈谈你 mvc 的理解? 
MVC 是 Model—View—Controler 的简称。即模型—视图—控制器。MVC 是一种设计模式, 它强制性的把应用程序的输入、处理和输出分开。MVC 中的模型、视图、控制器它们分别 担负着不同的任务。        
(1)视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接 受用户的输入。视图不进行任何业务逻辑处理。        
(2)模型: 模型表示业务数据和业务处理。相当于 JavaBean。一个模型能为多个视 图提供数据。这提高了应用程序的重用性        
(3)控制器: 当用户单击 Web 页面中的提交按钮时,控制器接受请的 action 类对象。 因为当服务器第一次加载 struts 的配置文件的时候,创建了一个 Action 后,每发送一 个请求,服务器都会先去检索相应的范围内(request,session)是否存在 这样一个 action 实例,如果存在,则使用这个实例,如果不存在,则创建一个 action 实例。 求并调用相应的 模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。 MVC 的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回 数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。 
 
2 项目中为什么使用 SSH?实际开发中如 何决定选择使用哪个框架进行开发? 
(1) 使用 Struts2 是因为 struts2 是基于 MVC 模式的,很好的将应用程序进行了分层,使开 发者更关注于业务逻辑的实现;第二,struts 有着丰富的 taglib,如能灵活运用,则能大大提 高开发效率。 
(2)使用 Hibernate:因为 hibernate 为 Java 应用提供了一个易用的、高效率的对象关系映 射框架。hibernate 是个轻量级的持久性框架,功能丰富。 
(3)使用 Spring:因为 spring 基于 IoC(Inversion of Control,反向控制)和 AOP 构架多层 j2ee 系统的框架,但它不强迫你必须在每一层中必须使用 Spring,因为它模块化的很好,允许你 根据自己的需要选择使用          它的某一个模块;采用 IoC 使得可以很容易的实现 bean 的装配,提供了简洁的 AOP 并据此实现事务管理(Transcation Managment),等等 
 
3 Struts2 中转发和重定向有何区别? 
转发:一次请求,一次响应。地址栏的 url 不会改变。在服务器端执行,所以必须在同一台 服务器上。转发速度快。 重定向:两次请求。地址栏的 url 会随之改变为定向后的那个 url。在客户端执行,所以可以

 
 页 2 
在不同的服务器上。重定向速度慢。 
4 action 是单实例还是多实例,为什么? 
action 是单实例的。当多个用户访问一个请求的时候,服务器内存中只有一个与之 对应的 action 类对象。 因为当服务器第一次加载 struts 的配置文件的时候,创建了一个 Action 后,每发送一 个请求,服务器都会先去检索相应的范围内(request,session)是否存在 这样一个 action 实例,如果存在,则使用这个实例,如果不存在,则创建一个 action 实例。 
5 struts2.0 的 mvc 模式?与 struts1.0 的区 别? 
struts2 的 mvc 模式:当用户在页面提交用户请求时,该请求需要提交给 struts2 的控 制器处理。struts2 的控制器根据处理结果, 决定将哪个页面呈现给客户端。 与 struts1 最大的不同是:struts2 的控制器。struts2 的控制器不再像 struts1 的控 制器,需要继承一个 Action 父类,甚至可以无需实现 任何接口,struts2 的 Action 就是一个普通的 POJO。实际上,Struts2 的 Action 就是 一个包含 execute 方法的普通 Java 类 该类里包含的多个属性用于封装用户的请求参数。 
 
6 Struts 的工作机制? 
Struts 2 框架的大致处理流程如下: 浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf 等。 核心控制器 FilterDispatcher 根据请求决定调用合适的 Action。 WebWork 的拦截器链自动对请求应用通用功能,例如 workflow、validation 或文件 上传等功能。 回调 Action 的 execute 方法,该 execute 方法先获取用户请求参数,然后执行某种数 据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上, 因为 Action 只是一个控制器,它会调用业务逻辑组件来处理用户的请求。 Action 的 execute 方法处理结果信息将被输出到浏览器中,可以是 HTML 页面、图 像,也可以是 PDF 文档或者其他文档。此时支持的视图技术非常多,既支持 JSP,也 支持 Velocity、FreeMarker 等模板技术。 
 

 
 页 3 
7 什么是 Hibernate 的并发机制?怎么去处 理并发问题? 
Hibernate 并发机制: a、Hibernate 的 Session 对象是非线程安全的,对于单个请求,单个会话,单个的工作 单元(即单个事务,单个线程),它通常只使用一次, 然后就丢弃。 如果一个 Session 实例允许共享的话,那些支持并发运行的,例如 Http request,session beans 将会导致出现资源争用。 如果在 Http Session 中有 hibernate 的 Session 的话,就可能会出现同步访问 Http Session。只要用户足够快的点击浏览器的“刷新”, 就会导致两个并发运行的线程使用同一个 Session。 b、多个事务并发访问同一块资源,可能会引发第一类丢失更新,脏读,幻读,不可 重复读,第二类丢失更新一系列的问题。 
 
解决方案:设置事务隔离级别。 Serializable:串行化。隔离级别最高 Repeatable Read:可重复读 Read Committed:已提交数据读 Read Uncommitted:未提交数据读。隔离级别最差 设置锁:乐观锁和悲观锁。 乐观锁:使用版本号或时间戳来检测更新丢失,在的映射中设置 optimistic- lock=”all”可以在没有版本或者时间戳属性映射的情况下实现 版本检查,此时 Hibernate 将比较一行记录的每个字段的状态 行级悲观锁:Hibernate 总是使用数 据库的锁定机制,从不在内存中锁定对象!只要为 JDBC 连接指定一下隔 离级别, 然后让数据库去搞定一切就够了。类 LockMode 定义了 Hibernate 所需的不同的锁定 级别:LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ; 
 
8 Hibernate 与 jdbc 有何联系?与 Spring 有何联系? 
1、hibernate 是 jdbc 的轻量级封装,包括 jdbc 的与数据库的连接(用 hibernate.property 的配置文件实现当然本质是封装了 jdbc 的 forname), 和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate 通过 hbm 配置文件把 po 类的字段和数据库的字段关联起来比如数据库的 id, 在 po 类中就是 pravite Long id; public Long getId() ;public setId(Long id); 然后 hql 语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实 

 
 页 4 
现的魔法就是 xml 文件,其实 hibernate=封装的 jdbc+xml 文件. 
 
2、hibernate 中的一些对象可以给 Spring 来管理,让 Spring 容器来创建 hibernate 中一 些对象实例化。例如:SessionFactory,HibernateTemplate 等。 Hibernate 本来是对数据库的一些操作,放在 DAO 层,而 Spring 给业务层的方法定义了 事务,业务层调用 DAO 层的方法,很好的将 Hibernate 的操作也加入到事务中来了。 
9 Hibernate3 种状态如何转换? 
当对象由瞬时状态(Transient)一 save()时,就变成了持久化状态。 当我们在 Session 里存储对象的时候,实际是在 Session 的 Map 里存了一份, 也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持 久对象(Persistent)。 Session 一 Close()了,它的缓存也都关闭了,整个 Session 也就失效了, 这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。 当游离状态(Detached)update()时,又变为了持久状态(Persistent)。 当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient), 此时,数据库中没有与之对应的记录。 
10 Hibernate 拒绝连接、服务器崩溃的原 因是什么?(最少写 5 个)。 
1. db 没有打开 2. 网络连接可能出了问题 3. 连接配置错了 4. 驱动的 driver,url 是否都写对了 5. LIB 下加入相应驱动,数据连接代码是否有误 6. 数据库配置可能有问题 7. 当前联接太多了,服务器都有访问人数限制的 8. 服务器的相应端口没有开,即它不提供相应的服务 

你可能感兴趣的:(面试总结)