Spring,hibernate,struts的面试笔试题[含答案]

时间:2022-11-12 14:41:56
Spring,hibernate,struts的面试笔试题(含答案)
Hibernate的相关试题:
1、Hibernate的工作原理?
hibernate的初始化  读取hibernate的配置信息,创建SessionFactory。
A、 创建Configeration的实例。
   它的构造方法:将配置文件信息(hibernate-config.xml)读入到内存。一个Configeration实例代表java类到sql数据库映射的集合。
B、 创建SessionFactory实例。
   把Configeration的所有配置信息拷贝到SessionFactory的缓存中。SessionFactory是实例代表一个数据库的存储源,创建后不再与Configeration有关联。
C、 调用SessionFactory创建Session方法。
   1)、用户自行创建JDBC连接。
    Connection con=dataSource.getConnection();
    Session s=SessionFactory.openSession(con);
  2)、让SessionFactory提供连接 
                   Session s=sessionFactory.openSession(); 
D、 通过Session接口提供的各种方法类访问数据库。


原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory
2、Hibernate的缓存体系
  一级缓存: 
   Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。 
   每个Session 都有自己独立的缓存,且只能被当前工作单元访问。 
  二级缓存: 
   SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。 
   SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。
3、Hibernate中Java对象的状态
   A、临时状态(transient) 
        特征: 
        1】不处于Session 缓存中 
        2】数据库中没有对象记录 
Java如何进入临时状态 
        1】通过new语句刚创建一个对象时 
        2】当调用Session 的delete()方法,从Session 缓存中删除一个对象时。  
B、.持久化状态(persisted) 
特征: 
        1】处于Session 缓存中 
        2】持久化对象数据库中设有对象记录 
        3】Session 在特定时刻会保持二者同步 
Java如何进入持久化状态 
        1】Session 的save()把临时-》持久化状态 
        2】Session 的load(),get()方法返回的对象 
        3】Session 的find()返回的list集合中存放的对象 
        4】Session 的update(),saveOrupdate()使游离-》持久化 
  C、.游离状态(detached) 
特征: 
        1】不再位于Session 缓存中 
        2】游离对象由持久化状态转变而来,数据库中可能还有对应记录。 
Java如何进入持久化状态-》游离状态 
        1】Session 的close()方法 
        2】Session 的evict()方法,从缓存中删除一个对象。提高性能。少用。


4、为什么要用hibernate?
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 
5、 Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,
他节省了服务器的内存开销,从而提高了服务器的性能。
6、Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体系在表与表之间的关系进行操作,他们都是对对象进行操作,我们程序中把所有类与表映射到一起,他们通过配置文件中的mang-to-one、one-to-many、many-to-many实现。
7、. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数
8、如何优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要怕多,有二级缓存撑腰 
9、hibernate分页查询?例如:从数据库中的第20000条数据开始查后面100条记录
Query q = session.createQuery("from Cat as c");;   
  q.setFirstResult(20000);;   
  q.setMaxResults(100);;   
List l = q.list();; 
10、Hibernate中怎样处理事务?
 
Spring的相关试题:
1、 spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。

为什么用: {AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}
Struts的相关试题:
1、  Struts的工作原理(附图) 
 传统的MVC架构:
Jsp----->view(视图)
Servlet------>Cotroller(控制)
JavaBean------->Model(模型)
 

客户端的Request请求到达Servlet,然后获取用户输入,Set到Model中
由Model负责赋值,再有View层get数据 Response到Client(客户端)
Struts架构
Jsp+Struts标签库        ------View
 
ActionBean
                         -------Model
ActionFormBean
 
ActionServlet
                        ---------  Cotroller
ActionMapping
 
 
Struts的流程图:

 
Controller作为接受所有来自客户端请求的入口点,由ActionServlet来决定需要哪个动作来执行相应的操作,同时通知ActionFormBean来封装用户的表单输入,同时提交给ActionBean来执行相应的业务逻辑,通过ActionMapping来决定需要反馈给Client什么!
 
1.    首先在Tomcat启动的时候 ,自动检查web应用程序内是否有web.xml的配置文件,若没有找到的话就去找Tomcat下的web.xml配置文件,读取struts-config.xml配置信息然后将其加载到内存中!ActionServlet从struts- config.xml文件中读取配置信息将form-beans,action-formward等配置对象实例化!
    
注:s-c:struts-config.xml
    AM:ActionMapping
2.    当ActionServlet接受一个来自客户端的请求时:


(1)      检索和用去请求向匹配ActionMapping实例,如果不存在则返回请求路径无效500错误信息。匹配则进入下一步创建ActionForm.
(2)      检查是否有ActionFrom实例存在,如果ActionFrom实例不存在,就创建一个ActionForm 对象,把用户提交的表单数据保存到ActionFrom中!
(3)      根据配置决定是否进行表单验证(validate),若需要验证就调用就调用ActionForm的validate()方法。如果ActionForm的validate()方法返回null或者返回一个不包含ActionMessage的ActionErrors的对象,说明验证成功,继续进行下一步,不成功返回错误信息!
(4)      ActionServlet根据ActionMapping实例所包含的映射信息决定将请求转发给哪个Action,若没有知道相应的Action实例存在,则首先创建这个Action实例,然后调用Action的execute()方法!
(5)      Action的execute()方法返回一个ActionForward对象。ActionServlet把转发给ActionForward对象指向的jsp组件。
(6)      ActionForward对象指向的jsp组件生成的动态网页 返回给客户端
 
 
Struts-config.xml内action-mappings解释:
   <action-mappings>
      <action 
     name="aFBug"             //要传给Action的ActionForm
         path="/aBug"        //访问Action的路径
         input=”/error.jsp”     //失败后要跳转的页面
         scope="request"     //这个Action的有效范围
         parameter="act" 
         type="net.pcedu.bugsys.bug.web.ABug" 
         validate="false"    //是否验证

    <forward name="list" path="/ListBug.jsp"/>   //要转向的页面</action>
   </action-mappings>



这个容易理解:

   例如现在用一个登录页面做例子来解释: 
   1.用户请求登录。 
   2.调用ActionForm 填充FormBean,其实就是调用ActionBean的set()方法。控制器代码:<form-bean name="formBean1" type="com.yourcompany.struts.form.UserForm"></form-bean> 
   3.分发请求,控制器分发Http请求。控制器代码:<action path="/login" type = "com.yourcompany.struts.action.LoginAction"  name = "formBean1"   scope = "request"  input = "/login.jsp"/>  <action path="/regist" forward="/regist.jsp"/> 
   4.调用FormBean,其实就是ActionBean获取用户输入的信息,其实是调用ActionForm的get()方法,然后对输入的信息进行验证。 
   5.调用javaBean  Action对象调用execute()方法处理请求。 
   6.回送ActionForword对象,进过处理之后把对象ActionForword封装好回送。 
   7.转发HTTP请求  身份验证通过则由ActionServlet将源客户端HTTP请求再次转发至错误页面,或者转发至正确页面 控制器代码为:<global-forwards>      <forward name="failed" path="/error.jsp"></forward>      <forward name="successed" path="/right.jsp"></forward>  </global-forwards> 
   8.调用javaBean  还要调用javaBean的对象mapping的findForward()的方法 
   9.最后调用javaBean的对象后才响应HTTP。 

2、 Struts的validate框架是如何验证的? 在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。 

61 个解决方案

#1


very goooooooooooooooooooooooooooooooood

#2


hibernate性能非常好

是比ibatis好,还是比直接用jdbc好?

#3


内容少了点! Spring,hibernate,struts的面试笔试题[含答案]

#4


封装的越多,越容易使用(对于复杂的模式来说),但是效率越低。
个人感觉Hibernate比ibatis要慢多了。。。

#5


一直在用ibatis,不过对hibernate很陌生,hibernate太重

#6


感谢楼主分享,非常详细。

#7


感谢楼主分享 谢谢啊

#8


感谢分享,谢谢了

#9



感谢楼主分享 谢谢啊  

#10


谢谢分享!LZ!  

#11


很优秀的文章!

#12


Spring,hibernate,struts的面试笔试题[含答案]刚好正处大四找工作时期,先mark一下,等等就来看看!感谢楼主

#13


一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难

#14


一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难 

#15


学习一下,好好学习。

#16


该回复于2014-05-31 11:49:14被管理员删除

#17


感谢楼主分享,非常详细。

#18


感谢楼主分享 谢谢啊 

#19


感谢楼主分享

#20


谢谢 了啊 

#21


很有用的!大部分都是很基础的问题

#22


Mark,慢慢看吧

#23


该回复于2013-11-03 09:04:44被管理员删除

#24


该回复于2013-11-03 09:04:44被管理员删除

#25


该回复于2013-11-03 09:04:44被管理员删除

#26


Spring,hibernate,struts的面试笔试题[含答案]

#27


Spring,hibernate,struts的面试笔试题[含答案] 总结的很好,学习

#28


该回复于2013-11-03 12:26:08被管理员删除

#29


不错挺好的!~~~~~~~~

#30


谢了.0.0.

#31


为什么还用strus1 ?我听说 没什么人用了

#32


在达内的时候这写都看过了。。 Spring,hibernate,struts的面试笔试题[含答案]

#33


有答案吗?。。。

#34


该回复于2013-11-04 14:31:01被管理员删除

#35


基础知识 不错 会操作也要回理论嘛

#36


很好很强大,好好学习天天向上。

#37


引用 2 楼 rainbowsix 的回复:
hibernate性能非常好
是比ibatis好,还是比直接用jdbc好?


在hello级别的数据库比这两者好,因为基本查询一次后数据全进缓存了。

初学框架的数据库也就是hello级别的。

#38


引用 13 楼 m751075306 的回复:
一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难
我也觉得,封装的越多,心里越没底。

#39


不知道来龙去脉

#40


引用 4 楼 AA5279AA 的回复:
封装的越多,越容易使用(对于复杂的模式来说),但是效率越低。
个人感觉Hibernate比ibatis要慢多了。。。
赞同

#41


Spring,hibernate,struts的面试笔试题[含答案]

#42


Spring,hibernate,struts的面试笔试题[含答案]

#43


坐等LZ给分。。。

#44


正需要呀 ,谢谢

#45


mark Spring,hibernate,struts的面试笔试题[含答案]

#46


哪家公司的呀..不过挺好

#47


Spring,hibernate,struts的面试笔试题[含答案]

#48


呵呵呵,很不错呀

#49


什么是面试struts1不是现在很少用了吗

#50


谢谢分享......

#1


very goooooooooooooooooooooooooooooooood

#2


hibernate性能非常好

是比ibatis好,还是比直接用jdbc好?

#3


内容少了点! Spring,hibernate,struts的面试笔试题[含答案]

#4


封装的越多,越容易使用(对于复杂的模式来说),但是效率越低。
个人感觉Hibernate比ibatis要慢多了。。。

#5


一直在用ibatis,不过对hibernate很陌生,hibernate太重

#6


感谢楼主分享,非常详细。

#7


感谢楼主分享 谢谢啊

#8


感谢分享,谢谢了

#9



感谢楼主分享 谢谢啊  

#10


谢谢分享!LZ!  

#11


很优秀的文章!

#12


Spring,hibernate,struts的面试笔试题[含答案]刚好正处大四找工作时期,先mark一下,等等就来看看!感谢楼主

#13


一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难

#14


一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难 

#15


学习一下,好好学习。

#16


该回复于2014-05-31 11:49:14被管理员删除

#17


感谢楼主分享,非常详细。

#18


感谢楼主分享 谢谢啊 

#19


感谢楼主分享

#20


谢谢 了啊 

#21


很有用的!大部分都是很基础的问题

#22


Mark,慢慢看吧

#23


该回复于2013-11-03 09:04:44被管理员删除

#24


该回复于2013-11-03 09:04:44被管理员删除

#25


该回复于2013-11-03 09:04:44被管理员删除

#26


Spring,hibernate,struts的面试笔试题[含答案]

#27


Spring,hibernate,struts的面试笔试题[含答案] 总结的很好,学习

#28


该回复于2013-11-03 12:26:08被管理员删除

#29


不错挺好的!~~~~~~~~

#30


谢了.0.0.

#31


为什么还用strus1 ?我听说 没什么人用了

#32


在达内的时候这写都看过了。。 Spring,hibernate,struts的面试笔试题[含答案]

#33


有答案吗?。。。

#34


该回复于2013-11-04 14:31:01被管理员删除

#35


基础知识 不错 会操作也要回理论嘛

#36


很好很强大,好好学习天天向上。

#37


引用 2 楼 rainbowsix 的回复:
hibernate性能非常好
是比ibatis好,还是比直接用jdbc好?


在hello级别的数据库比这两者好,因为基本查询一次后数据全进缓存了。

初学框架的数据库也就是hello级别的。

#38


引用 13 楼 m751075306 的回复:
一直用ibatis,面对复杂的逻辑,hibernate不够灵活,操作起来比较困难
我也觉得,封装的越多,心里越没底。

#39


不知道来龙去脉

#40


引用 4 楼 AA5279AA 的回复:
封装的越多,越容易使用(对于复杂的模式来说),但是效率越低。
个人感觉Hibernate比ibatis要慢多了。。。
赞同

#41


Spring,hibernate,struts的面试笔试题[含答案]

#42


Spring,hibernate,struts的面试笔试题[含答案]

#43


坐等LZ给分。。。

#44


正需要呀 ,谢谢

#45


mark Spring,hibernate,struts的面试笔试题[含答案]

#46


哪家公司的呀..不过挺好

#47


Spring,hibernate,struts的面试笔试题[含答案]

#48


呵呵呵,很不错呀

#49


什么是面试struts1不是现在很少用了吗

#50


谢谢分享......