锁定老帖子 主题:一个牛人出给软件工程师的面试题
精华帖 (0) :: 良好帖 (2) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-02
最后修改:2010-02-03
zcy860511 写道 看了回答,觉得回答是在扯淡
就第一个而论 struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……) spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……) hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题) 综上所述:此人在扯淡 1.当时回答这个问题时所说的是struts 1 想说的是: 请求->返回页面 有了ajax flash之后页面的总数变少了 当时认为全站一页的应用, 全站flash的网站会大行其道 这样子的条件下面mvc就没有必要了(struts-config.xml) 2.spring的主要配置文件还是xml 而不是写在程序内部 写在内部的template回调又非常难以测试 aop : public class aa { public void bb(){ tt(); // i think doSomthing in there ss(); } } try catch finally 更是要命 def aa(func123) tt(); func123(); ss(); end |
|
返回顶楼 | |
发表时间:2010-02-03
zcy860511 写道 看了回答,觉得回答是在扯淡
就第一个而论 struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……) spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……) hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题) 综上所述:此人在扯淡 顶你~ |
|
返回顶楼 | |
发表时间:2010-02-05
1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?
答:如果给自己企业信息化或者产品做能省去这些框架的就省去不要,这些鸟框架日新月异,身心疲惫. 如果是给别人做项目,那就用这些东西还忽悠下客户,多弄点钱吧 |
|
返回顶楼 | |
发表时间:2010-02-05
2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
答:google首页和结果页面的头顶不要考虑用web框架,那是个静态页面,直接用socket编程,都不用分析http协议,直接返回静态文本,客户端可以根据搜索的结果合成后显示 |
|
返回顶楼 | |
发表时间:2010-02-05
5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求?
我们不可能熟悉这些业务流程和专业知识,只能尽快的做出模型,让用户用,然后改进 |
|
返回顶楼 | |
发表时间:2010-02-11
vision2000 写道 2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
答:google首页和结果页面的头顶不要考虑用web框架,那是个静态页面,直接用socket编程,都不用分析http协议,直接返回静态文本,客户端可以根据搜索的结果合成后显示 听着挺牛,感觉不对吧。。直接socket通信??线程池,通信细节之类的都自己写?? |
|
返回顶楼 | |
发表时间:2010-02-11
看了回答,觉得回答是在扯淡
就第一个而论 struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……) spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……) hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题) 综上所述:此人在扯淡 同意 |
|
返回顶楼 | |
发表时间:2010-02-28
此处牛人实在太多了。。小弟还没毕业,以前对SSH倒自我感觉有那么一点认识。现如今经过这番折腾,顿感自己是井底之蛙,还需大把大把努力才是呀。哎
|
|
返回顶楼 | |
发表时间:2010-03-04
其实这些题没有固定答案,不过是每个人不用的分析角度而已。并不是能把人忽悠迷糊的答案才是真正的答案,有些答案可能就很简单或者你感觉不可理喻。
小弟不才也回答几个。 1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架? 历史局限性分析过程 凡是框架都有局限性,框架不是万能的它在应用领域都有局限性。哪怕是最新最流行的框架也有局限性。题中问的是历史局限性。所以我觉得重点是从发展和未来两方面着手来说明框架在时间影响下的一系列问题。 例子 首先ssh都是老牌明星框架。打个比方柴可夫斯基是明星音乐家但是他的生活年代至少100多年之前,那时候音乐如果我们称为古典音乐,对于现在这些流行音乐或者像陈美那种音乐都谓之现代音乐。好了古典和现代是有分别的这个分别我就不多说了相信都理解这个分别。 在假设一个条件我们的老牌明星柴可夫斯基活到了21世纪。它的音乐也会随着时间改变在21世纪它的音乐也会现代化不过由于他有着100多年的古典音乐基础相信现代音乐中也会有着重要的古典成分。 好了我现在要对例子加几个图例,同时进行第二步分析。在例子中 柴可夫斯基就是著名的SSH框架。而这些框架在时间线上发展的版本更新就是柴可夫斯基活到21世纪的时间里谱写的各个乐谱。 到了21世纪老柴的音乐也可以堪称现代音乐经典或者鼻祖。不过它的历史问题就是它的音乐古典成分多。而对于ssh它们的历史问题就是他们原始问题的遗留以及后续版本更新时新增的近历史遗留问题。不过这还不是重点。 第二步分析 在开始分析前我们增加一个影响因素爵士乐,古典音乐与爵士乐的重要区别之一就是爵士乐注重个人体验的表达而古典音乐相对就没有爵士乐注重个人体验的表达。 在19世纪初出生的路易斯·阿姆斯特朗他是爵士乐之父。时间在发展从18世纪到19世纪人类为了自由爆发了两次世界大战。在这个时间段里人类完成了从封建主义制度到资本主义制度的转变。 资本主义制度下人有了很大的自由思想得到解放就保守的古典音乐和比较注重个人表现的爵士乐而言我相信在这种历史背景下爵士乐会压迫古典乐风靡全球。 好了第二步分析结束我们改变一些图例的规则:爵士乐及其凡生物就是新兴的同类ssh框架,而古典乐及其凡生物代表了老牌SSH框架。 古典乐的遗留问题是比爵士乐保守。那么ssh框架的历史问题就是最初版本的某些封闭特性或者不灵活特性。 接下来在进行重要的第三步分析通过第三步分析来看看ssh有那些问题。 在前两次分析中都指明ssh框架的历史局限性在其根上那么就看看ssh的最初版本和现代版本的比较。 http://www.diybl.com/course/3_program/java/javajs/20090308/159530.html这个是在网上随便找的一篇文章。 取一个不变的特征就是无论struts1还是struts2它们的Action都是一个具体类,action的调用流程基本没有变化。 好了其他问题先不分析就看这条就是struts的历史遗留问题。让我们看看这挑有什么限制然后在决定何种情况下会不适合用这些框架。 项目是一个分布式项目,项目会产生大量请求。大量的请求会调用大量的分布式业务服务。如果采用“客户端->请求分析->业务调用”这样的流程我觉得某种程度上请求分析会产生性能瓶颈。如果请求分析做群集那么就需要一个压力均衡器来负责均衡这些请求。我们都知道struts中有session方面的特性但是session与其他服务器的session之间的通信还需要其他手段来处理。这种集成需要第三方软件包的支持这是历史因素影响下的局限性表现之一。 现在项目采用这种架构来分离这些框架与框架的耦合关系。我们分离ssh框架为 struts + sh 使struts与spring的联系为手动。这样每次struts接收到action都有struts自己处理。同时我们将session同步到session池中然后在调用spring并将状态传入spring由spring来调用远程分布式业务服务器。 这样解决了struts和session同步框架的耦合问题。 这样的设计有了另一个问题要编写大量的action来负责接收请求,然后在将这些接受的请求在去调用spring中请求分析层,无形中增加了系统分层,增加了代码量。 方案二 替换struts为more在moreMVC中不存在Session部分的支持所有session都需要自己处理。使用msh组合 然后编写一个session代理来替换原有的session对象,这个可以使用一个设计模式解决两个不同接口之间对应的关系。 由于more支持直接与spring集成这样就减少了上一个设计中多出来那层的代码编写。 好了这个题的答案有了。 就在这样的项目下,替换Struts为More会解决问题。 另外我补充一下就是并不是一定要这样对于我所了解的Struts程度对项目做出这样的架构设计。如果有Struts高人可以轻松解决自然可以使用SSH来解决Session同步问题。不同的人有着不同的正确答案。对于我这个就是我所能分析设计出迎合这种系统要求的架构。 综述:可以这样回答这个问题,由于Struts不开放Session资源管理在这样的一个项目中需要由于Struts开放Session管理所以替换Struts为More。而这个改变的根本原因就是Struts的历史遗留问题,过分封装(某种程度)。 |
|
返回顶楼 | |
发表时间:2010-03-04
2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
首先群集Web服务器是必须的。整个Web部分都是html+css+js。完毕了而表单递交则采用递交到另外的一个http服务器去处理。另外的一个http服务器放置一个无状态需求的cgi程序。由cgi程序负责调用搜索引擎。 剩下的问题就是静态页面服务器性能优化的问题。这个题并没有考程序部分所以需要补充大量关于http服务器的知识,小弟不才只知道群集和增加高昂的硬件。至于服务器优化了解不多。 3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计? 小型路由,按照1~20人来算把。这样的路由通常不需要复杂的统计分析,能给出路由配置界面和当前网络状态就已经完成大部分了。因此html+css就可以解决。表单递交交由路由系统中cgi程序处理,由cgi程序调用硬件接口来处理。 同样建议使用嵌入式数据库,或者ini文件做数据库,如果路由CPU有限制也可以采用二进制替代数据库。毕竟谁也不会没事刷路由玩。在加上谁也不会在路由中增加jdk。那是疯子。 就目前技术 选型而言可以考虑 Perl,php,cgi,lua等轻量的可以作为嵌入式开发的web技术。 另外3题不写了,套写文字太多。 |
|
返回顶楼 | |