论坛首页 Java企业应用论坛

刚有人问面试题咋答,一时兴起回了下,关于对 Struts2, Spring 和 Hibernate 的理解

浏览 27978 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-10-30  

Struts2, Spring 和 Hibernate 的理解之我谈

某人提出的问题:
大家好,我是应届毕业生,我在找工作时候,面试官问我:用自己的话分别谈谈对 struts2,spring,Hibernate的理解,我应该怎么说啊?求高人指点。(不要那些官方语言)


我的回答:
Struts2 是基于 Filter 进行跳转控制的工具,封装了从不同请求路径到不同程序的分发过程。我个人觉得这种分发应该根据系统的预期复杂程度来决定是否使用。毕竟,基于反射的框架工具,都会带来执行速度的缓慢。这意味着同样规模的用户,服务器需要消耗避免反射型框架 十倍以上的内存。
   对于页面跳转,我个人认为应该将软件结构设计成网络传输与数据功能分开的模式。这种模式意味着,同一种网络请求,就对应某一个程序程序。由这些和访问直 接对应的程序方法来进行各种功能的组合调用。这么做是因为,在实际系统中,这种组合而来的功能流程,对于一个系统来说,是几乎不会临时改变的。就算能够改 变,也不方便通过让实施人员调整配置文件来达成这种变化。
  另外,如果网络和客户端(运行 JavaScript 的浏览器本身也可以理解为一种客户端)的数据交互,如果能够提纯,也就能在一定程度上解决对复杂跳转控制的依赖,从而不使用 Struts 及类似产品。具体单页面应用 的有关内容,有机会再说吧。

Spring 主要的功能是对象依赖关系的注入,以及方法执行前、后的监视(切片)。在实现途径上,通过 Spring 执行的每一个方法,都不是直接执行,而是通过代理程序的方式。这严重损害了服务器性能。
  还是刚才的观点,我认为软件结构的设计,可以避免很多系统曾经出现的问题,比如依赖层次过多造成人工控制困难,等。
  通过 Spring 进行切片是一个具备很高开发效率的方式。不过因为性能严重低下,所以内网系统可以考虑。公网系统,则应该通过可配置的模块化功能执行流程,来避免代码重复编写。

Hibernate 是对象-关系转换工具,并且能够在软件层面实现分布式事务 。 不过就像 Spring 一样,其性能也完全无法得到保证。我之前没有研究过分布式事务如何实现。不过考虑到数据安全问题,现实中数据库一般并不会向外网透露。这造成了分布式事务 在绝大多数项目中缺乏实用意义。对象-关系转换,其实也是因为 Java 对于数据处理的僵死,不像现在新语种那样能够轻松往已经存在的对象中添加属性。
  可以考虑自定义基于 Map 的数据结构,以简便地和关系型数据库进行对应。这样能够很大程度摆脱对对象-关系转换工具的依赖。

   发表时间:2012-10-30  
然后,就没有然后了。。
0 请登录后投票
   发表时间:2012-10-30   最后修改:2012-10-30
“严重”两个字慎用啊,大哥,你这么理解干脆别用框架得了。
1 请登录后投票
   发表时间:2012-10-30  
楼主对反射有偏见呵呵..其实问这个问题的人就有点脑残..不过你能说出自己的理解就很好了..我以前也常问..一般面试的人都给我背了一遍...我感觉你挺有想法的...不过性能问题..得做测试在说话....哪个反射性能低下..实际上..在多次预热的时候..性能不一定会差...从你的回答..能看出你理论上比较强..换句话说就是..过度自信...这不是什么好事....除非测试过..否则别把话说死了...其他的没了.....
1 请登录后投票
   发表时间:2012-10-30  
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..
2 请登录后投票
   发表时间:2012-10-30  
文章写的有点长,没耐心看完,只看了第一句就看出一个硬伤,然后不想往下看了。
指出一下: “Struts2 是基于 Filter 进行跳转控制的工具”

struts2 是基于Interceptor 拦截器的,
struts1 才是基于Filter 过滤器的,
至于Interceptor 与Filter 的区别,好吧,不想打字了。。。
2 请登录后投票
   发表时间:2012-10-30  
TXterran 写道
文章写的有点长,没耐心看完,只看了第一句就看出一个硬伤,然后不想往下看了。
指出一下: “Struts2 是基于 Filter 进行跳转控制的工具”

struts2 是基于Interceptor 拦截器的,
struts1 才是基于Filter 过滤器的,
至于Interceptor 与Filter 的区别,好吧,不想打字了。。。


我一直觉得有些功能用过滤和用拦截都是可以实现的,从功能的角度考虑他俩是不是没什么区别啊,比如我们过滤掉某一个url请求,其实我们也可以用拦截实现,拦截前就可以判断url并作出相应处理。除了实现原理不一样,在功能上过滤和拦截有什么区别吗?
1 请登录后投票
   发表时间:2012-10-30  
TXterran 写道
文章写的有点长,没耐心看完,只看了第一句就看出一个硬伤,然后不想往下看了。
指出一下: “Struts2 是基于 Filter 进行跳转控制的工具”

struts2 是基于Interceptor 拦截器的,
struts1 才是基于Filter 过滤器的,
至于Interceptor 与Filter 的区别,好吧,不想打字了。。。


我咋记得struts1是在web.xml中时配置Servlet的? struts2是Filter配置的?为什么呢?
0 请登录后投票
   发表时间:2012-10-30  
lyl290932857 写道
TXterran 写道
文章写的有点长,没耐心看完,只看了第一句就看出一个硬伤,然后不想往下看了。
指出一下: “Struts2 是基于 Filter 进行跳转控制的工具”

struts2 是基于Interceptor 拦截器的,
struts1 才是基于Filter 过滤器的,
至于Interceptor 与Filter 的区别,好吧,不想打字了。。。


我咋记得struts1是在web.xml中时配置Servlet的? struts2是Filter配置的?为什么呢?

楼上是正解。。。struts1和2的区别就是2是用filter的来着。。
0 请登录后投票
   发表时间:2012-10-30  
楼主你对性能的想法都是臆测,至少你要解释基于平台的什么特点,什么样的框架实现原理会导致性能的下降,而不是想当然地认为 反射和代理等等就一定性能差;唯一的数据 内存十倍更是天方夜谭
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics