论坛首页 Java企业应用论坛

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

浏览 27918 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-01  
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..



如上所述,有点贴近我的理解。
0 请登录后投票
   发表时间:2012-11-01  
lsmvictor 写道
skzr.org 写道
suene 写道
呵呵,要是问我.
我只是想说 ,spring mvc用的挺好的.


"个人觉得,对校招的同学问这类东西,有点扯淡。"
也同意这个.


上周六就面了十几个,各个都写精通ssh和s2sh啊,汗颜,这个能不问吗?
一般问,你精通在哪儿,就过滤掉没潜力的,同时还考察了面临压力下的表现。


说了无数次,简历上对“精通”俩字要 慎用,年年说,但年年都有N多人这样写。


“精通”两字代价可是很大的。。。
0 请登录后投票
   发表时间:2012-11-02  
Cindy_Lee 写道
“严重”两个字慎用啊,大哥,你这么理解干脆别用框架得了。

所以我现在主导的项目,只要是做产品化的项目,都是在一定程度上避免使用 Java 框架的。关于为什么叫“严重”,是有很多测试结果的。详情参看我另外的一篇回复。
0 请登录后投票
   发表时间:2012-11-02  
ansjsun 写道
楼主对反射有偏见呵呵..其实问这个问题的人就有点脑残..不过你能说出自己的理解就很好了..我以前也常问..一般面试的人都给我背了一遍...我感觉你挺有想法的...不过性能问题..得做测试在说话....哪个反射性能低下..实际上..在多次预热的时候..性能不一定会差...从你的回答..能看出你理论上比较强..换句话说就是..过度自信...这不是什么好事....除非测试过..否则别把话说死了...其他的没了.....


我曾经是多么坚定的反射拥护者啊,也会因为每一大版 JavaDevelopmentKit 发布,其中提到反射执行速度又提高了 50% 而兴奋。问题是经过实际测试,这速度真是差别太大了……
  我刚才翻了一下自己的帖子。最近百度正在转型,我以前的日志数据丢失了。所以拿不到截图和准确数字。但实际的执行速率是这样的:
1、直接访问属性。假设某个属性访问速度是 1 毫秒,那么通过反射(Java6.0)访问速度就是 200+ 毫秒,应该是能稳定在 260-290 之间,通过 Spring 来 get 在 1000 毫秒以上,2000 毫秒以下。
2、方法执行。如果不涉及 final 参数,则有参数方法直接执行速度为 1 毫秒,通过反射访问速度就是 600-800 毫秒,通过 Spring 来获取方法值在 1000 毫秒以上 2000 毫秒以下。

那个时候具体的测试方法,是在同等条件下,长时间多次执行某一个方法的调用。时间长度大概在 0.5-20 秒(基数)左右。然后切换成反射调用,测时间;再切换成 Spring 获取值,求时间。
  数据收集,是通过浏览器启动某方法,然后后台 System.out.println 输出的 Calendar.getInstance 时间。

我明白,不应该说空话的。在这之前,大概是 2、3 年前,我刚设计过一个用 Spring3 的产品,那个时候大家主要还在用 Spring2 ,现学的标注声明,觉得这个理念很先进。可在知道这种性能问题之后,我就觉得基于运行时反射的执行框架,只应该应用于内网应用,或者服务器硬件充足型应用。
0 请登录后投票
   发表时间:2012-11-02  
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..


您看我回帖多认真。   :-)

我最近招人都从来不进行笔试,面试的题目也没有任何知识型的问题(数据结构不算),而是给出一个设计任务,看ta的思路怎么样。如果ta表达出的思路,让我觉得ta设计能力还不错,至少知道什么是软件设计,那么就会引导ta去看一个架构设计的题目;否则会引导ta看一道编程题目。总之都是直接看反应,不考知识的。不然太浪费大家时间了……

以上我的回答,是指我觉得 Struts 再使用标注,也是基于反射的,就避免不开性能上边的问题。当然了,如果今后ta做了大规模的缓存,将反射结果全都缓存了,那么执行速度就能大幅度提升;但相应的就是内存消耗问题。
  我现在用自己改的一版 Tomcat(基于7.0.22),弱联网游戏一台服务器可以带 10000+ 的同时在线用户。而我们这边有一个最近才投资的小游戏公司,做网络游戏,用 Java Play ,开发速度是非常快,但是一台服务器只能容 1000 同时在线用户。服务器成本对于内网应用来说是小头,但是对于公网应用来说,是一个很不得了的支出,必须得考虑节省啊……用框架和用这种速成中间件,有一些类似的。
0 请登录后投票
   发表时间:2012-11-02   最后修改:2012-11-03
TXterran 写道
文章写的有点长,没耐心看完,只看了第一句就看出一个硬伤,然后不想往下看了。
指出一下: “Struts2 是基于 Filter 进行跳转控制的工具”

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


啊,是这样的吗,我真是不学无术啊……可是我很多年前学 Struts 的时候,貌似是基于 Servlet 的啊,我还做过一版自己的利用 .properties 的小小 Struts 。后来推出 Struts2 的时候,有新闻宣传说不用 Servlet 了,改用 Filter 了。

  我可能是被以前的错误理解和新闻联合误导了。有没有相关的介绍材料?给我推荐点,我去学习一下~
我的电子邮箱是 Surmounting@gmail.com 多谢了……
0 请登录后投票
   发表时间:2012-11-02  
Shen.Yiyang 写道
楼主你对性能的想法都是臆测,至少你要解释基于平台的什么特点,什么样的框架实现原理会导致性能的下降,而不是想当然地认为 反射和代理等等就一定性能差;唯一的数据 内存十倍更是天方夜谭


真不是天方夜谭,我也不是想当然。总是想当然做事情会带来项目灾难的,我明白。不过如果是面试的话,我会用不够明确的结论性回答,来看看面试官对技术的理解是否能产生共鸣,是否懂得尊重别人来问问其不同意见之处;当然也有装屄成分,故作高深……这个……好像不太好是吧…

  不闲扯了。我以前的测试方法以及数据,因为百度空间改版所以拿不到了,大概数据和测试方法在本楼上边几楼都有所回复了。编写这样的测试并不会很费时间,2 小时就可以拿到很完善的测试结果。您可以尝试一下。如果我所说的属实,希望您也可以加入到追求服务器端性能而编程的行列中来……
0 请登录后投票
   发表时间:2012-11-02  
at1943 写道
对于性能底下的地方,一般都会做缓存,不用担心


我只确定我看 Spring3 程序的时候,它还没有做反射的缓存。这也是真话。这是 2010 年底,2011 年初,我在数字政通时候的事情。
0 请登录后投票
   发表时间:2012-11-02  
kidfang 写道
面试别人的每年除了这些也没什么可以问的了。


参看此楼几楼以上的我的回复。推荐引导式面试。虽然可能会稍微费一些时间,但是能够比较清楚地了解对方的学习潜力。这对于面试新人,特别是工作经验较少的新人,是能够淘到宝的。
  可惜我最近淘到的这么一个宝,竟然因为还没有毕业,被人事部门给切掉了!他们都不知道浪费了公司多少本来预期可以减少的支出!

我看看今天要不要把面试题目的帖子发出来……估计会发成,日志?请在容我想想吧。
0 请登录后投票
   发表时间:2012-11-02  
xiangdefei 写道
首先楼主同学没有说到为三个框架的核心东西,其次,楼主同学对这种三个框架只有批判,动不动就严重影响性能,真扯淡。第三,校招问这种面试题也是扯淡。


我觉得 Hibernate 比较高深如果不用它自己做时间会很长的就是分布式事务了。于是结果就是我自己发布的开源模块中,没有能实现分布式事务的……

  性能,这东西真不是扯淡。部分内容请参看此楼以上几楼我的回帖。因为做互联网应用,服务器成本是很大的开销,所以真是不能不考虑。这和内网应用/服务器密集的应用不一样。我以前给城市政府做项目,那当然是 Oracle ,架构也好分,数据的处理逻辑全放存储过程;服务端也可以用 Spring3 。但是做一个网络游戏服务器产品,那真不敢这么弄。这么弄的后果就是小规模的 CP(内容提供商),完全无法基于这样的产品做他们的网游。因为小规模几台服务器,受不了经过推广一瞬间暴增的那种低质量用户。

  我现在主导的所有项目,全都不使用 SSH 任何一个。我招人也完全不考察其对 SSH 的了解程度。至于损害性能严重的程度,请参看本帖子中另外的一篇回帖。数据还是挺触目惊心的。
0 请登录后投票
论坛首页 Java企业应用版

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