`
岳乡成
  • 浏览: 122007 次
  • 性别: 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. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里?
......................我设计的.........
瓶颈很大一部分是由于没有勇气 去尝试新的实践.


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


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



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


分享到:
评论
56 楼 zcy860511 2010-02-02  
看了回答,觉得回答是在扯淡

就第一个而论

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

综上所述:此人在扯淡
55 楼 piao_bo_yi 2010-02-02  
freej 写道
1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?

ssh框架的目的是节省开发成本,提高应用的可扩展性。但是由于框架的运行时速度相对缓慢,所以在需要提供高性能的、与体验无关的应用时建议直接使用Servlet/JSP作为基础架构。


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

在WEB方面追求性能最大化就意味着用户从进入第一个页面到获得准确结果的时间最小化,所以:
a.采用至简的WEB设计,以及明示的功能引导。
b.一定要有诸如搜索下拉框提示等辅助工具
c.搜索结果格式鲜明、重点突出。


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

a.因需要强调高性能,故需要采取最原生态的WEB技术作为基础机构(观点类似于问题1)。
b.因需要强调实时性,故采用AJAX技术作为信息获取基础手段,以定时获取相应信息。
c.不要加入任何RIA特性。
d.页面中要以图表为主要展示手段。
e.其他一些常规注意事项在此略过。


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

a.Struts2和SpringMVC的可测试性强于Strust1。Struts1非常难于测试。
b.自动化测试需要一套完备的解决方案支持,需要根据具体需要定制测试方案,系统代码需要预先做好单元测试和模块测试方面的准备,这样之后的集成测试以及自动化测试才有基础、有意义。
c.主要要从几个方面考虑:单元测试及集成测试的统一执行能力;系统用户输入模拟测试测试;并发访问测试能力;测试覆盖度检查能力;测试中断的问题跟踪能力;完备准确地报告生成能力等等。


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

需要关注
a.业务优先,做好系统分析,紧跟用户需求。
b.系统界面风格需要与企业文化相匹配。
c.系统各操作的示意和导向明确,要针对目标用户群进行必要调整。
d.要着眼于怎样能使系统真正帮助企业实现更多的价值。
e.根据需要做好外部交互和接口。
f.可移植的系统。(根据不同客户的已有资源进行环境搭建,如果整个系统只是针对个别用户定制则此条忽略)

可暂时忽略:
a.超高性能系统构建
b.玄酷的用户界面
c.集群和并行扩展能力(如确无需要)


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

软件研发工作最重要的就是流程和规范的贯彻和执行。
具体流程略,研发流程是否高效往往取决于团队管理的合理性。
从团队管理方面建议从几方面考虑:
a.关注木桶原则,注重团队中每位成员,尤其是水平较低人员的培训和技能提高。
b.明确开发方式和流程,并严格贯彻执行。
c.制定开发中的各种规范,并根据规范严格要求每位成员,必要时进行培训。
d.建立良好的代码测试、审查和责任制度,严格绩效管理。

这方面的关键点和瓶颈均存在于贯彻执行上,如果执行不力则任何流程规范都会形同虚设。这就需要团队管理者拥有较强的执行力甚至是自我约束力。

感觉这是程序员给出的答案,比较离谱。
54 楼 aaronluo 2010-02-01  
bluemeteor 写道
这也叫牛??楼主再哭几年吧


求答案和更牛的问题
53 楼 fjilyfe 2010-02-01  
唉,这才是真正的再找软件工程师,我很佩服出题的这个人,而且很少能见到把问题出的这么到位的,这几乎是在一个项目从研发开始到上线之间遇到的所有的问题。

第一个问题是要考察一个人的高度,而不是对技术的理解,SSH是轻量级框架,适合于简单快速的开发系统,但比较局限于WEB系统。从重量级的框架来比较的话会比较明显。

第二个问题是GOOGLE的简单,设计的关键点在于如何满足用户的查询条件,其中会包括这种各样的关键词,考虑到用户在一个框中如何能更精确快速的找出所需的东西。


。。。。。。。

感觉没有设计过三四个项目答这些个问题都有些费劲,他主要看你是否能找出问题根源,呵呵,每个三四年的牛逼经验是不行的
52 楼 beiyangshuishi 2010-02-01  
面对这些问题我只有哭的份,杯具呀
51 楼 Lunatica 2010-02-01  
这根本不算是个软件工程师的面试,而是web工程师,他们侧重点根本不同,合格的软件工程师并不是对ssh有多熟悉,而是更多的内在修养,对语言的理解,设计模式,学习方式等等。
50 楼 mp_juan 2010-02-01  
一切都不是关键,关键的是看到本质,不过我经常自己做总结,思考
正如我们远行一样,走累了,就需要时间休息....
49 楼 sxs 2010-01-31  
菜鸟的来帮忙看看,估计本人也不是很会
48 楼 bigkai13 2010-01-31  
我回答第一个问题,struts的出现,开辟了java框架满天飞的时代。
楼下继续回答。
47 楼 li445970924 2010-01-30  
  真不知道怎么回答  楼下的回答下
46 楼 shoushou2001 2010-01-30  
不怎么样,特别是那回答。
45 楼 蜗牛创业网 2010-01-30  
为什么非得去迎合面试官的答案,被他牵着走的感觉很好吗?
我感觉这里好几个问题并没有绝对的正确答案。如果我们这个时代每个人都按照面试官的要求答案去做,我们面前琳琅满目的产品的动力何在?公司的目的是什么?最关键是迎合市场的需求,你作为一个普通用户,你对这些产品怎么考虑,你想要怎么样的产品,就怎么回答,如果面试官觉得不对,那并一定是你的问题,而是你的机遇!
并非面试官或者大公司的思路就一定是正确的,你完全可以另辟蹊径,关键还在于你要有说服力的想法
我感觉仅仅从技术角度来回答这些问题少了一层意义
44 楼 iamlotus 2010-01-30  
hibernate是由于数据库都是关系型的,等数据库面向了对象之后.....

关系数据库背后是关系理论,对象数据库后面是???
43 楼 java_fxj 2010-01-30  
面对这些问题,我杯具了...
42 楼 皇室勇少 2010-01-30  
小公司很多东西都不一样。随性,随意。有时简直就是乱搞!

追求短期效率,没有考虑日后的扩展,等等。。
41 楼 freej 2010-01-29  
岳乡成 写道
freej 写道
1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?

ssh框架的目的是节省开发成本,提高应用的可扩展性。但是由于框架的运行时速度相对缓慢,所以在需要提供高性能的、与体验无关的应用时建议直接使用Servlet/JSP作为基础架构。


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

在WEB方面追求性能最大化就意味着用户从进入第一个页面到获得准确结果的时间最小化,所以:
a.采用至简的WEB设计,以及明示的功能引导。
b.一定要有诸如搜索下拉框提示等辅助工具
c.搜索结果格式鲜明、重点突出。


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

a.因需要强调高性能,故需要采取最原生态的WEB技术作为基础机构(观点类似于问题1)。
b.因需要强调实时性,故采用AJAX技术作为信息获取基础手段,以定时获取相应信息。
c.不要加入任何RIA特性。
d.页面中要以图表为主要展示手段。
e.其他一些常规注意事项在此略过。


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

a.Struts2和SpringMVC的可测试性强于Strust1。Struts1非常难于测试。
b.自动化测试需要一套完备的解决方案支持,需要根据具体需要定制测试方案,系统代码需要预先做好单元测试和模块测试方面的准备,这样之后的集成测试以及自动化测试才有基础、有意义。
c.主要要从几个方面考虑:单元测试及集成测试的统一执行能力;系统用户输入模拟测试测试;并发访问测试能力;测试覆盖度检查能力;测试中断的问题跟踪能力;完备准确地报告生成能力等等。


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

需要关注
a.业务优先,做好系统分析,紧跟用户需求。
b.系统界面风格需要与企业文化相匹配。
c.系统各操作的示意和导向明确,要针对目标用户群进行必要调整。
d.要着眼于怎样能使系统真正帮助企业实现更多的价值。
e.根据需要做好外部交互和接口。
f.可移植的系统。(根据不同客户的已有资源进行环境搭建,如果整个系统只是针对个别用户定制则此条忽略)

可暂时忽略:
a.超高性能系统构建
b.玄酷的用户界面
c.集群和并行扩展能力(如确无需要)


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

软件研发工作最重要的就是流程和规范的贯彻和执行。
具体流程略,研发流程是否高效往往取决于团队管理的合理性。
从团队管理方面建议从几方面考虑:
a.关注木桶原则,注重团队中每位成员,尤其是水平较低人员的培训和技能提高。
b.明确开发方式和流程,并严格贯彻执行。
c.制定开发中的各种规范,并根据规范严格要求每位成员,必要时进行培训。
d.建立良好的代码测试、审查和责任制度,严格绩效管理。

这方面的关键点和瓶颈均存在于贯彻执行上,如果执行不力则任何流程规范都会形同虚设。这就需要团队管理者拥有较强的执行力甚至是自我约束力。


我挺佩服这位仁兄的,由衷的佩服。

方便告诉我们,你现在的职位,有多少年工作经验,还有如果方便的话可以把年薪贴出来,让看帖的人有点参考。

谢谢,非常羡慕你。


我将近5年经验,目前在一家外派公司供职,被外派到一家外企做Developer(开发员是我的职位),在职务上做过Team Leader、一线架构师和研发经理(在客户面前这么叫而已)。在现在这个项目组只是作为一名普通的开发者。
至于薪资,很普通,属于中等水平,肯定没有这里的牛人们待遇好。
很高兴认识LZ。
40 楼 岳乡成 2010-01-29  
freej 写道
wb17534806 写道
公司在招一个对口的人才,找的不是牛人!

我认为



同意,而且考是解决问题的思路,而非实现细节.



我也同意以上观点,但是我觉得这个题出的本身就是考察解决问题的经验和解决问题的思路多点,所有我觉得这份面试还是值得思考一下的。
39 楼 岳乡成 2010-01-29  
lonelybug 写道
首先,想问问,这是什么公司,招什么样职位的人?
你连这个前提都不给出来,谁知道有的问题如何回答!?



或者是web框架师

这是我猜的。

呵呵


38 楼 pipilu 2010-01-29  
chao0010 写道
个人觉得如果3 4年的工作时间内一直做开发的话,以上问题不一定能答的很好,即使能答出来基本上也是在各种资料上看到的,并不是自己的理解,就像本人现在就答不出来。真正能用自己的理解去回答这几个问题,并且能答的很好我觉得应该至少需要6 7年的工作经验吧,而且不仅仅是做开发。


我觉得经验是一方面,有6、7 年经验,但是对技术发展的历史不了解的话(比如CGI,那个路由器的web应用就可以用CGI来做),也不容易答好。
我自己感觉真有必要了解一下技术发展的历史,不然看问题面太小了。知识也不系统。一些技术牛人也给我提过这样的建议。
37 楼 岳乡成 2010-01-29  
lonelybug 写道
首先,想问问,这是什么公司,招什么样职位的人?
你连这个前提都不给出来,谁知道有的问题如何回答!?



高级软件工程师

相关推荐

Global site tag (gtag.js) - Google Analytics