`
岳乡成
  • 浏览: 122319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一个牛人出给软件工程师的面试题

阅读更多
一、牛人出的面试题如下:


1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?


2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)


3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计?


4. 请评价下你所熟悉的web框架的可测试性如何,struts,springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备的面向web系统的自动化测试框架所应当具有的特性.


5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求?


6. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里?



二、以下好像是另一个牛人跟帖给的一个自己的答案,内容如下:

1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?
struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了.....
spring是由于java的静态类型限制,等java可以支持动态方法添加之后.....
hibernate是由于数据库都是关系型的,等数据库面向了对象之后.....
综上所述...ssh蹦达不了几天了.


2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
性能:
1客户端:js的写法,数据排列,不同浏览器区别.
2服务器:逻辑,计算,缓存,减少I/O,提高命中
3传输:带宽,缓存,异步,进度条,并发,集群,数据压缩.
我认为最主要的性能是人的体验,其它都是可以放到第二位去的.

3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计?
使用不需要并发多线程的简单文件服务器提交后直接改文件.
不使用常规异常捕获方式
(由于选择性少所以根本不使用异常,只提供软硬的复位)


4. 请评价下你所熟悉的web框架的可测试性如何,struts,springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备的面向web系统的自动化测试框架所应当具有的特性.
由于容器的限制所以:web,spring,hibernate都不是很好测试.
由于大多数web是以人的体验为主的.主观概念变成代码代价过高
由于页面生成工具没有足够的测试支持.所以写出的代码非常难以程序化自动化

现有的seleniumIDE还不是很稳定
如果把html,js,css分开,页面内容以json或xml来传输,页面的逻辑由js二次绚染成型那么测试成本会下降很多.....
(开发成本提高2到5倍)


5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求?
,性能,扩展性,7*24小时,
性能问题在出现性能问题之前不考虑
扩展性问题在签定长期维护,二期开发合同之前不考虑
7*24工作系统一般不考虑...开发中本身就是


6. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里?
......................我设计的.........
瓶颈很大一部分是由于没有勇气 去尝试新的实践.


三、看了上面的问题和回答我无语了,三年的职业生涯,觉得自己狗屁不是。更绝望的是可能再给我三年的时间,可能也不会能自如的回答上面的问题,达到牛人要求的程度。一股透心的悲伤从心口喷出,前面是有路,但我可能走不过去了。真该考虑转行了吗?


四、看这个帖子的人,你的感觉呐。



五、哎。。。。。。。。。


分享到:
评论
76 楼 jinkingmanager 2010-04-15  
的确是说不清楚,头大中……
75 楼 fu013013 2010-04-11  
要使web性能最大化,那页面就不能用js,什么ajax,等,图片也不要用,最好做成静态的html这样加载才快。
74 楼 diddyrock 2010-04-11  
不太同意测试那一块,自动化的web测试有成本但是如果真的想做,成本也不是那么高,太多工具可以选择,自己写代码也ok。另外,selenium已经很强大
73 楼 富人村的门岗 2010-04-11  
认真记录,并认真学习
72 楼 meadlai 2010-03-15  
小心web系统,可以移植以C语言的服务器.
要实现http1.1协议....session,cookies等.是有点麻烦.
直接基于socket处理可能还简单一点....呵呵

html5,flex等出现会把control控制层转移过去....用上struts的控制层就有点古怪了.

spring的IoC实现简单,AoP自己要实现一个很有难度.....
Hibernate在很多大数据量的关联,处理可能不是很好....

google页面,一个是简单易用,速度高,很多js都是压缩了空格的..另外一个还是实现业务配合.....

对于测试不懂....一些框架貌似保证和验证了程序,降低了错误率.Web测试还真没有搞过.单元测试还是有必要,很多框架集成了,测试初始化都是非常浪费时间...呵呵
71 楼 lpleap1982 2010-03-13  
这些题目还不错  每个人的答案不一样
70 楼 mojiedao 2010-03-05  
1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?
   ssh针对EJB的改良,适用于企业级应用。
   历史局限性:动态性不足,不能快速修改功能模块,OO和关系数据的阻抗不匹配,开发效率低
   不适用场景:简单的web系统,逻辑处理少的应用。

2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
    服务器方面对请求频繁的页面进行缓存和预读;客户端尽量使用本地缓存;传输数据进行压缩。

3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计?
   使用cgi或者自己开发web服务器,尽可能的精炼简单,需要考虑并发冲突

4. 请评价下你所熟悉的web框架的可测试性如何,struts,springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备的面向web系统的自动化测试框架所应当具有的特性.
   struts:应该是struts1的测试性最差;springMVC和webwork的测试性良好,主要是Mock测试。web自动化测试在系统正常运行,并功能完成后引入。自动化测试框架的特性:定时,测试数据的准备和回复,页面显示和逻辑诊断,截图。

5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求?
   系统运行的稳定性,业务要求多种多样,功能的扩展性,数据的备份和回复。
   针对某一业务需求时,不需要考虑扩展性

6. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里?
   psp和tdd
   研发人员的执行能力是瓶颈
69 楼 ta8210 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题不写了,套写文字太多。
68 楼 ta8210 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的历史遗留问题,过分封装(某种程度)。
67 楼 quxiaoyong 2010-02-28  
此处牛人实在太多了。。小弟还没毕业,以前对SSH倒自我感觉有那么一点认识。现如今经过这番折腾,顿感自己是井底之蛙,还需大把大把努力才是呀。哎
66 楼 belly 2010-02-11  
看了回答,觉得回答是在扯淡

就第一个而论

struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……)
spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……)
hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题)

综上所述:此人在扯淡


同意
65 楼 belly 2010-02-11  
vision2000 写道
2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)


答:google首页和结果页面的头顶不要考虑用web框架,那是个静态页面,直接用socket编程,都不用分析http协议,直接返回静态文本,客户端可以根据搜索的结果合成后显示


听着挺牛,感觉不对吧。。直接socket通信??线程池,通信细节之类的都自己写??
64 楼 vision2000 2010-02-05  
5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求?

我们不可能熟悉这些业务流程和专业知识,只能尽快的做出模型,让用户用,然后改进
63 楼 vision2000 2010-02-05  
2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)


答:google首页和结果页面的头顶不要考虑用web框架,那是个静态页面,直接用socket编程,都不用分析http协议,直接返回静态文本,客户端可以根据搜索的结果合成后显示
62 楼 vision2000 2010-02-05  
1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?


答:如果给自己企业信息化或者产品做能省去这些框架的就省去不要,这些鸟框架日新月异,身心疲惫.
如果是给别人做项目,那就用这些东西还忽悠下客户,多弄点钱吧
61 楼 piao_bo_yi 2010-02-03  
zcy860511 写道
看了回答,觉得回答是在扯淡

就第一个而论

struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……)
spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……)
hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题)

综上所述:此人在扯淡

顶你~
60 楼 抛出异常的爱 2010-02-02  
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 
59 楼 岳乡成 2010-02-02  
fengshihao 写道
zcy860511 写道
看了回答,觉得回答是在扯淡

就第一个而论

struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……)
spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……)
hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题)

综上所述:此人在扯淡



总算出来一个 懂事的。 唉 这帖子 牛人不多 铅笔盒不少。


给个答案吧。
58 楼 岳乡成 2010-02-02  
zcy860511 写道
看了回答,觉得回答是在扯淡

就第一个而论

struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……)
spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……)
hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题)

综上所述:此人在扯淡

有答案吗?给个答案,让看帖的人膜拜一下。谢谢。
57 楼 fengshihao 2010-02-02  
zcy860511 写道
看了回答,觉得回答是在扯淡

就第一个而论

struts是以请求回答方式为基础的.ajax,flash等富客户端越来越多了..... (难道说富客户端不是以请求回答方式为基础的?这家伙学哪去了……)
spring是由于java的静态类型限制,等java可以支持动态方法添加之后..... (这个完全是扯淡……)
hibernate是由于数据库都是关系型的,等数据库面向了对象之后..... (对象数据库可能靠谱,但是对象数据库还面临很多很多问题)

综上所述:此人在扯淡



总算出来一个 懂事的。 唉 这帖子 牛人不多 铅笔盒不少。

相关推荐

Global site tag (gtag.js) - Google Analytics