刚有人问面试题咋答,一时鼓起回了下,关于对 Struts2, Spring 和 Hibernate 的了解51CTO博客 - 娱乐之横扫全球

刚有人问面试题咋答,一时鼓起回了下,关于对 Struts2, Spring 和 Hibernate 的了解51CTO博客

2019-01-03 17:53:07 | 作者: 紫夏 | 标签: 了解,关于,运用 | 浏览: 663

Struts2, Spring 和 Hibernate 的了解之我谈

或人提出的问题:
咱们好,我是应届毕业生,我在找作业时分,面试官问我:用自己的话别离谈谈对 struts2,spring,Hibernate的了解,我应该怎样说啊?求高人点拨。(不要那些官方言语)

我的答复:
Struts2 是依据 Filter 进行跳转操控的东西,封装了从不同恳求途径到不同程序的分发进程。我个人觉得这种分发应该依据体系的预期杂乱程度来决议是否运用。究竟,依据反射的结构东西,都会带来履行速度的缓慢。这意味着相同规划的用户,服务器需求耗费防止反射型结构十倍以上的内存。
   关于页面跳转,我个人以为应该将软件结构规划成网络传输与数据功用分隔的形式。这种形式意味着,同一种网络恳求,就对应某一个程序程序。由这些和拜访直 接对应的程序办法来进行各种功用的组合调用。这么做是由于,在实践体系中,这种组合而来的功用流程,关于一个体系来说,是简直不会暂时改动的。就算可以改 变,也不方便通过让施行人员调整装备文件来达到这种改变。
  别的,假如网络和客户端(运转 JavaScript 的浏览器自身也可以了解为一种客户端)的数据交互,假如可以提纯,也就能在必定程度上处理对杂乱跳转操控的依靠,然后不运用 Struts 及相似产品。详细单页面运用的有关内容,有时机再说吧。

Spring 首要的功用是目标依靠联系的注入,以及办法履行前、后的监督(切片)。在完成途径上,通过 Spring 履行的每一个办法,都不是直接履行,而是通过署理程序的办法。这严峻损害了服务器功用。
  仍是方才的观念,我以为软件结构的规划,可以防止许多体系从前呈现的问题,比方依靠层次过多形成人工操控困难,等。
  通过 Spring 进行切片是一个具有很高开发功率的办法。不过由于功用严峻低下,所以内网体系可以考虑。公网体系,则应该通过可装备的模块化功用履行流程,来防止代码重复编写。

Hibernate 是目标-联系转化东西,并且可以在软件层面完成分布式业务。 不过就像 Spring 相同,其功用也彻底无法得到确保。我之前没有研究过火布式业务怎样完成。不过考虑到数据安全问题,实践中数据库一般并不会向外网泄漏。这形成了分布式业务 在绝大多数项目中缺少有用含义。目标-联系转化,其实也是由于 Java 关于数据处理的僵死,不像现在新语种那样可以轻松往现已存在的目标中增加特点。
  可以考虑自定义依据 Map 的数据结构,以简洁地和联系型数据库进行对应。这样可以很大程度脱节对目标-联系转化东西的依靠。

后来此篇日志在 ITeye 论坛( http://www.iteye.com/topic/1127474 )引起了一些重视和评论,我把首要内容弥补部分有代表性的在下边。  2012-11-5 Monday
---------- ---------- ---------- ----------
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 ,现学的标示声明,觉得这个理念很先进。可在知道这种功用问题之后,我就觉得依据运转时反射的履行结构,只应该运用于内网运用,或许服务器硬件满足型应 用。
以上我的答复,是指我觉得 Struts 再运用标示,也是依据反射的,就防止不开功用上边的问题。当然了,假如往后ta做了大规划的缓存,将反射成果全都缓存了,那么履行速度就能大幅度提高;但相应的便是内存耗费问题。
我现在用自己改的一版 Tomcat(依据7.0.22),弱联网游戏一台服务器可以带 10000+ 的同时在线用户。而咱们这边有一个最近才出资的小游戏公司,做网络游戏,用 Java Play ,开发速度是十分快,可是一台服务器只能容 1000 同时在线用户。服务器本钱关于内网运用来说是小头,可是关于公网运用来说,是一个很不得了的开支,必须得考虑节约啊……用结构和用这种速成中间件,有一些 相似的。
功用,这东西真不是扯淡。部分内容请参看上边的回复。由于做互联网运用,服务器本钱是很大的开支,所以真是不能不考虑。这和内网运用 /服务器密布的运用不相同。我曾经给城市政府做项目,那当然是 Oracle ,架构也好分,数据的处理逻辑全放存储进程;服务端也可以用 Spring3 。可是做一个网络游戏服务器产品,那真不敢这么弄。这么弄的成果便是小规划的 CP(内容提供商),彻底无法依据这样的产品做他们的网游。由于小规划几台服务器,受不了通过推行一会儿暴增的那种低质量用户。
---------- ---------- ---------- ----------
Matol 说:有自己的主意和了解很好,可是,关于有些东西的观点太过于过火了。
这么说来,好像是,我是有些过火了。一方面是由于第四页我的许多回复中说到的互联网运用对服务器本钱的操控。另一方面我细心想了想,或许也是由于这么些年我的算法技能一向没有时机运用,所以总会不自觉地就期望能给自己营造出一个算法有用,算法可以带来时效的气氛。
在这种不自觉的自我影响中,我就越来越觉得功用问题很严峻。那些动辄几百倍履行速度的都是实在数据。但我现在想,假如满足沉着的话,应该细心核算运用低 效结构的服务器本钱增值,和不运用结构的开发本钱增值,谁更大。我曾经考虑到这个问题的时分,就自己给自己敷衍过去了,一向没有细心想过。
唉,我的抱负啊……
我才做完了一个公式解析的开源小项目,原本正准备做一个内存数据中心(高可用)的开源项目,来处理我这边网络游戏排名可以完成即时排名而不像绝大多数网友得定时改写的问题。现在看来要细心核算一下用 MemoryCache 仍是自己开发了……
尽管很懊丧,不过,仍是谢谢您……
---------- ---------- ---------- ----------
84707227 说:面试官仅仅问你对SSH的了解,不是总结SSH的缺乏。试问一下,SSH有那么多缺陷,许多公司(至少我国的许多公司)都在用,怎样解说?
SSH 缺陷并不相同,我只说到了一个一同的缺陷,便是履行速度低。
那么,这个问题什么时分才严峻呢?便是履行速度对整个体系比较重要的时分。
关于服务器运算资源冗余的运用场景,结构仍是低速,但不会影响到体系履行成果。那就无所谓。假如服务器运算资源严重,集群规划比较小但用户数量很大,那便是不应运用。
当然,许多公司即便是运算资源严重,仍然运用很多的结构,这有几个原因。
1、爪哇(Java)开发人员过火了解运用结构,以至于许多人,嗯,绝大多数爪哇(Java)从业者没有才能脱离结构编写大规划运用。
2、研制耗时。互联网运用国内的行情(我置疑国际上也是),现在都重视快出产品。这意图是运用构思抢用户。所以研制耗时低,就算或许因小失大,或许服务器硬件本钱会变得极高,只需用户体会别太差,终究就会用这种速成计划。当然,这也就造就了技能堆集缓慢。
3、 理念都是在不断更新的。比方早年以为用文本文件装备便是灵敏的,后来以为用标示标明就现已灵敏了,到现在以为“约好优于明示”才是更有用的。说实 话,SSH 作为老练结构,都现已有些显露出落后的疲态了。关于这个,可以重视一下 Python 这门言语。可是,程序员们,技能更新是可以很快,但理念更新并不是那么简单的,得多否定自己。这个,咱们都做不够好。
4、公司的项目是长久以来承继下来的,谁也承担不起重构的危险。也不觉得重构是一个含义很大的作业。当然了,其实很或许会回归第 1 点,也便是就算重构仍是会选用结构,顶多便是找找谁相对更好用。这是爪哇(Java)程序员的开发形式。
---------- ---------- ---------- ----------
cbbaaa1989 说:汇编的功用比java 好太多了,你为什么不必汇编
说实话,我是考虑过汇编的。但不必汇编的理由有二个
1、我不会。这是实情。并且掌趣科技这边一个会的也没有……   T T    我曾经约了一个测验的朋友一同学,可是由于各自作业繁忙,以及异地,都没有学成。吐槽一下我的意志……太差了。
2、服务器硬件 CPU 的问题。由于现在硬件不归我自己的部分担任,遭到一些要素影响,形成拿到的服务器彻底无法共同标准,也无法确保支撑的指令集共同。无法用汇编写通用的本地办法。
在之前,我会用 C 言语做一些最中心的办法,生成 .dll ,映射成 native 办法来运用。
可是在掌趣科技这边,我在推行悉数服务器 虚拟化 ,并且不准备运用 Windows 服务器,悉数用了其时新版的 CentOS 6.1 。而我又不知道 Linux C 怎样和 Java 绑定。所以这边的作业也放下来了。
其实 Java 的履行功率是十分高的。假如你乐意来我的日志看看,前几篇有一个是我为字符串处理写了几个比体系类库快许多倍的办法。可是这种个位数倍数的速度差,都是小 作业。本帖第四页回复,我写了之前对反射的功用测验数据。动辄几百倍啊……假如需求服务器功用,这仍是应该防止一些的。
不运用传统三大结构,这不是想当然,尽管或许有我想做算法的要素含在里面。但至少并不是一个太不沉着的挑选。


本文也在我的 CSDN 空间宣布: http://blog.csdn.net/shanelooli/article/details/8128567
在 ITeye 宣布: http://surmounting.iteye.com/blog/1708931
在我国开源社区宣布: http://my.oschina.net/shane1984/blog/86091

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章