论坛首页 Java企业应用论坛

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

浏览 27985 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-22  
Surmounting 写道
aasddsasda 写道
讨厌SSH,弃用很多年了,喜欢类似ROR这种轻量级敏捷开发框架

肯定比 SSH 快,但实测结果 Python 是很多倍比 Java 运行慢的。Java 是一种很快速的技术,条件就是别使用 SSH 。关键之处在于不能使用运行时反射。


ssh比python慢?你真测试过?如果你测试过请说一下你详细的测试过程。
ssh的确是用到了反射,不过主要是spring用到了动态代理模式,需要通过代理模式获得bean。
不过获得bean的引用之后反射用的就少了。这样的确会影响一些性能,如果你设置了服务器启动就加载bean,也就是说在加载的时候用到了反射而已。

通过反射之后,这个类已经载入了内存,动态代理主要是动态的修改载入内存的字节码,达到代理的功能(依赖注入)。不过载入内存之后的对象就没有再改变过,就不存在性能问题。
0 请登录后投票
   发表时间:2012-11-26  
canshou 写道
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..



如上所述,有点贴近我的理解。


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



如上所述,有点贴近我的理解。


-----请问
至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合 怎么理解。我感觉map有点不舒服



你感觉对了...比如一个分页组件吧...Page类...如果用map做..1.字段无法确定.到底是pagesize还是size.开发者也忘记了
2.计算总页数也写东西其实可以放到get方法中来做的.而且.如果做缓存..需要重写hash和equals.到时候这些都是map无法做到的
0 请登录后投票
   发表时间:2012-11-29  
samwalt 写道
Surmounting 写道
samwalt 写道
Surmounting 写道
aasddsasda 写道
讨厌SSH,弃用很多年了,喜欢类似ROR这种轻量级敏捷开发框架

肯定比 SSH 快,但实测结果 Python 是很多倍比 Java 运行慢的。Java 是一种很快速的技术,条件就是别使用 SSH 。关键之处在于不能使用运行时反射。


也许ruby或者python的web框架也使用了类似java反射的技术啊。


实测的就是一些最基础的标准类库方法,比如排序,比如定位插入。


这个可不是比较ror和ssh哪个快哦


我知道。对于 Rails 比 SSH(Java) 运行速度快,这里就第一句“肯定比 SSH 快”说的是这个内容。之后就是在介绍我进行的 Python 和 Java 的性能测试情况。而我那个“肯定”,其实是没有直接依据的……
0 请登录后投票
   发表时间:2012-11-29  
Cindy_Lee 写道
Surmounting 写道
aasddsasda 写道
讨厌SSH,弃用很多年了,喜欢类似ROR这种轻量级敏捷开发框架

肯定比 SSH 快,但实测结果 Python 是很多倍比 Java 运行慢的。Java 是一种很快速的技术,条件就是别使用 SSH 。关键之处在于不能使用运行时反射。


ssh比python慢?你真测试过?如果你测试过请说一下你详细的测试过程。
ssh的确是用到了反射,不过主要是spring用到了动态代理模式,需要通过代理模式获得bean。
不过获得bean的引用之后反射用的就少了。这样的确会影响一些性能,如果你设置了服务器启动就加载bean,也就是说在加载的时候用到了反射而已。

通过反射之后,这个类已经载入了内存,动态代理主要是动态的修改载入内存的字节码,达到代理的功能(依赖注入)。不过载入内存之后的对象就没有再改变过,就不存在性能问题。


那个……以上第一句是说 Rails 比 SSH(Java) 运行速度快。之后说的是对于一些标准的大量数据定位插入、给集合排序;Python 标准方法比 Java 最好用的方法要慢很多;这是二个不同的事情。

Spring 获取 bean 之后,代理层次过分繁多我觉得大概在 4-5 层这个样子(Spring3)。如果我声明了切片,就更严重。而且对于非单例的爪哇豆,现存环境都将会在需要的时候重新反射生成一个爪哇豆对象。

,这里就第一句“肯定比 SSH 快”说的是这个内容。之后就是在介绍我进行的 Python 和 Java 的性能测试情况。而我那个“肯定”,其实是没有直接依据的……
0 请登录后投票
   发表时间:2012-11-29  
yuanmengchong 写道
canshou 写道
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..



如上所述,有点贴近我的理解。


-----请问
至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合 怎么理解。我感觉map有点不舒服


我不知道最初留言的那个人是咋处理的。我这边,是提供了一种叫 DataObject 的接口。接口具有 getDataMap() 这样一个方法以返回数据 Map 。这样,在 setData(String key, Object value) 的时候,就能够做关于这个对象自身的数据处理了。
  不过我觉得可以通过设计工作来尽可能避免非直接性质的数据类里边的逻辑。像日期转字符啦,飞空验证啦,各种数据字段合并啦,都应该可以通过引用工具方法来完成。
0 请登录后投票
   发表时间:2012-11-29  
ansjsun 写道
yuanmengchong 写道
canshou 写道
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..



如上所述,有点贴近我的理解。


-----请问
至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合 怎么理解。我感觉map有点不舒服



你感觉对了...比如一个分页组件吧...Page类...如果用map做..1.字段无法确定.到底是pagesize还是size.开发者也忘记了
2.计算总页数也写东西其实可以放到get方法中来做的.而且.如果做缓存..需要重写hash和equals.到时候这些都是map无法做到的


Page 本身是通用的、结构性的内容,不是数据内容本身,当然需要单做的呀。重写 equals() 是可以靠数据对象内部的 Map 里边的数据来完成的。至于忘了字段的问题,应该有相关的叙述文档,以及公共常量来保证可知。
0 请登录后投票
   发表时间:2012-11-29  
Surmounting 写道
ansjsun 写道
yuanmengchong 写道
canshou 写道
ansjsun 写道
算了..顺路说点我的看法吧..闲着没事...
1.struts..反射..偏见...struts现在有零配置.适合敏捷开发.不用xml配置跳转.struts标签一句没提.不应该啊
2.spring 太大了..不好说..一般常用ioc aop..我感觉面试官想听你..无非就是个动态代理..反向注入..等..但是..如果你只觉得他会注入..service.关闭数据库..那就片面了..其实.定时器...权限..spring -mvc 一整套都是一种标准了...
3.hibernate 说实话..我一直觉得它好用..至于性能..有些sql陷阱...不过一般碰不到..至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合..你就发现.这个的好处了..没法解释..



如上所述,有点贴近我的理解。


-----请问
至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合 怎么理解。我感觉map有点不舒服



你感觉对了...比如一个分页组件吧...Page类...如果用map做..1.字段无法确定.到底是pagesize还是size.开发者也忘记了
2.计算总页数也写东西其实可以放到get方法中来做的.而且.如果做缓存..需要重写hash和equals.到时候这些都是map无法做到的


Page 本身是通用的、结构性的内容,不是数据内容本身,当然需要单做的呀。重写 equals() 是可以靠数据对象内部的 Map 里边的数据来完成的。至于忘了字段的问题,应该有相关的叙述文档,以及公共常量来保证可知。



page.只是个例子...说一个比较常用的吧...比如...Doc类中有summary..需要控制在250字以内..你可以在pojo中加一个get方法.来截取字符串..很方便..这样不用在业务逻辑中混杂进去...
0 请登录后投票
   发表时间:2012-11-30  
Surmounting 写道
ansjsun 写道
yuanmengchong 写道
canshou 写道

-----请问
至于用map代替pojo...等你真正开发项目..pojo有时候难免混入一些简单逻辑的适合 怎么理解。我感觉map有点不舒服


你感觉对了...比如一个分页组件吧...Page类...如果用map做..1.字段无法确定.到底是pagesize还是size.开发者也忘记了
2.计算总页数也写东西其实可以放到get方法中来做的.而且.如果做缓存..需要重写hash和equals.到时候这些都是map无法做到的


Page 本身是通用的、结构性的内容,不是数据内容本身,当然需要单做的呀。重写 equals() 是可以靠数据对象内部的 Map 里边的数据来完成的。至于忘了字段的问题,应该有相关的叙述文档,以及公共常量来保证可知。


page.只是个例子...说一个比较常用的吧...比如...Doc类中有summary..需要控制在250字以内..你可以在pojo中加一个get方法.来截取字符串..很方便..这样不用在业务逻辑中混杂进去...


从编程技巧方面来说,这样是很方便编程。但是不用成员变量存数据,而是用 Map ,不是一样的吗?我的意思是说,数据类还是数据类,但数据不存在成员变量里边,存在其内部的一个 Map 中。这样的好处是可以增加一些最开始没有的数据。

不过从软件结构的角度来说,如果把数据记录和内容提取二种东西放在一起,究竟是不是合适的呢?另外从 text 得到 250 字 summary 的这个事情,难道不是应该在数据中做冗余吗?就是既有 text ,又有 summary ……

咱们多讨论哈。我最近一些日子一直在认真寻找设计方法,以避免无用的教条带来的麻烦,同时也避免修改或复用的时候层次不清晰。
0 请登录后投票
   发表时间:2012-11-30  
Surmounting 写道

从编程技巧方面来说,这样是很方便编程。但是不用成员变量存数据,而是用 Map ,不是一样的吗?我的意思是说,数据类还是数据类,但数据不存在成员变量里边,存在其内部的一个 Map 中。这样的好处是可以增加一些最开始没有的数据。

不过从软件结构的角度来说,如果把数据记录和内容提取二种东西放在一起,究竟是不是合适的呢?另外从 text 得到 250 字 summary 的这个事情,难道不是应该在数据中做冗余吗?就是既有 text ,又有 summary ……

咱们多讨论哈。我最近一些日子一直在认真寻找设计方法,以避免无用的教条带来的麻烦,同时也避免修改或复用的时候层次不清晰。



1.summary如果做冗余..有些地方要求120字.有些地方要求250字.你会疯掉的...(这只是一个编程技巧,也未必是好)
2.如果基于对象.在做排序的时候.非常遍历..TreeSet,(如果你喜欢Comparable 接口的话)
3.基于对象可维护性高.数据结构清晰.代码容易阅读.基于map的确能带来很多便利.仿佛讨论到了关系型数据库和非关系型数据库的方面了..不好说谁不好.应用不同..使用不用..在复杂业务中我还是更倾向于面向对象编程.


如果你真正开发项目.你会发现pojo层改动非常少.最大的有点是他能和数据库做一一映射...强约束.低耦合..避免灵异事件发生.

其实说白了无非是个数据展示..可以不纠结于用谁..不具有倾向性的说..有几点用map的确不合适

1.继承关系.
      比如 "新闻 论坛 博客" 你可以统计继承一个抽象类.Doc
2.引用关系
      比如.新闻中有一个作者.作者跟着粉丝.如果用map嵌套的话...1.浪费内存.2.结构不清晰..真正做的时候能体会出来

map的好处.灵活..有点动态语言的感觉.其他没什么了.



其实最好的办法..可以用两种方式都做一下..不一定一个项目只能用一种..一切从需求出发吧..
0 请登录后投票
论坛首页 Java企业应用版

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