读书人

从面试题看高级程序员需具备的技艺(附

发布时间: 2012-07-02 17:46:22 作者: rapoo

从面试题看高级软件工程师需具备的技艺(附最后两题的详细说明)
1.B/S方面,
简要介绍企业内部系统的设计需要注意哪些问题.
然后就提到的性能,安全,可扩展性,可用性等非功能性特性中的一点或几点深入的讨论

2.数据库性能问题
数据库设计一般需要注意哪些
索引如何设计
如何快速定位在较高负载时造成性能问题的存储过程或查询语句
你自己一个功能较复杂的存储过程,如何评估它的效能,以及达到什么样的标准才签入到产品中

3.设计
关于组件对外提供的接口,需要注意哪些
工作中用过哪些设计模式及面向对象设计的原则,有过有用过的话,有没有相对较难但效果很好的实际应用

4.测试
有过自动化测试的经验吗,如果有的话,简单介绍下具体操作.

5.解决问题
如果忽然碰到很棘手,而且从来没接触过的问题,你一般会怎么解决
详述如忽然要你做一个OCR,64位兼容,硬件调用等问题,简要讨论怎么解决

6.其他
有没有看过一些给你触动很大的面向对象设计的书籍,有的话简单介绍一下该书的大致内容以及印象很深刻的一部分

如果之前承诺的发布日期就在两周后,但你发现你负责的模块需要三周才能完成.你会怎么做
假如你想申请延期或砍功能,你怎么说服经理

某测试小组成员老将测试你负责部分中出现的Bug直接提交到高层,且经常在你比较忙的时候请教你负责模块的内容.对于这种情况,你打算如何处理

---------分割线-----------------------------------
上面的问题都是我在三月份左右面试的真实问题,当然不会全部问到。
面试或者说是面谈是一个交互的过程,谈论的话题也并非都有正误之分。目的只是让双方有个相互了解,一是公司需要什么样的人,什么样的技术;二是应聘者能否认同公司的工作方式。

公司需要的是对设计尤其是面向对象设计要有较深刻的理解和实际的工作经历。同时需要开发者对自己的负责模块的数据库设计负责,还可能会有一些未知的难题负责,同时需要对代码的质量负责,有自动化的单元测试更好。

另外倒数第二题,讨论项目会延期的问题。我先介绍下我们公司目前的发布流程,我们产品一般会在3个月左右发布一个小的版本(比如6.1到6.2版)一年左右一个主版本(如6.x到7.0),版本的发布期限相对有规律,而主要的需求在该版本开始前就会确定,当然开发的过程中会有所变更,但不会是大的变更。

就怎么说服上层,就我以前常用的办法。无非是晓之以理,列明厉害关系。提供上层决策需要的资料。就我以前的经历来看,几乎没有失手过。但非常重要的一点就是你要从多过方面准备资料,并且确实是站在符合产品大目标的角度来阐述。
另外,我们这基本不加班。而且你私底下把问题消化而不提交给你的经理,我认为反而是最不好的。一是经理或更上层根本就不知道这个风险,也就不会有应对的计划和措施了。二是加班赶出来的进度质量一般都不大可能比正常工作的好。三是你可以加班不代表测试团队,市场部门都会乐意陪你加班。
当然,你要是能早点提出问题,不在发布前不久才提出问题就更好了。



关于最后一题,关于核测试团队合作的讨论。就更没大家想的那么复杂了。也说下上下文,之前测试团队找到Bug是有奖励的;同时Bug多到临界数目时,开发成员必须停下来处理Bug。
所以呢,测试成员乐于提交Bug涉及到两个问题,一是以数量论英雄的方式和沟通的问题。二是如何更好的协作。
Bug的提交奖励我们后来略作修改,Bug也带上价值从0到5个星。最后产品的最终成功也和测试成员的绩效相关,也就是你测试的模块最后按时高质量的完成了.你的绩效也就高
另外,测试成员提交所有未经考虑或评估的所有问题,对开发成员当然有影响,一个是声誉一个是中途停下来处理Bug势必影响开发进度.但同时对测试成员也会有影响的,老是低质量的bug飞来飞去浪费大家时间.所以你可以和一些还不熟悉的测试成员说明利害,让他提交之前做些考虑,同时可以参照别人的Bug.最重要的一点你要他将bug抄送给你,将一些常见的不是bug的种类告诉他,让他在提交之前一定要先考虑.

关于测试成员老在你工作时打搅你,这个想问的是你如何处理工作干扰.这个问题楼下有个回答很好,留单独的时间讨论.
我自己的做法是,提醒测试成员先将所有问题先记下来,并邮件发送过来.汇总之后抽时间一块讨论.当然如果测试成员无法继续工作(测试)时,你还是不能让他干等一个上午的.

其实,说到底就是如何和测试成员共同工作.如果能让他的工作能提升你的效率就更好了.反正大家都是为了产品销量更好,互相配合才是最好的.



31 楼 拥抱变化之美 2010-03-29 抛出异常的爱 写道celine 写道您“找工作”是双向选择
but很多人其实是在“求职”单向被选择

有救火能力的人,每家公司都需要吧,谁能保准不出任何意外呢
but以救火为荣-->不在乎起火,反正有救火的-->故意放火,然后救火显摆。。。就恐怖了。。。

gigix 写道抛出异常的爱 写道我一直认为需要设身处地的去想。。。所以老进死胡同。
孙子兵法说了,有对手三倍兵力就跟他打,有对手五倍兵力就把他围起来,这是用兵的正道。
说到做项目,我追求的是让项目不起火,大家安安稳稳舒舒服服把事情做好。如果经常都要救火,我就会觉得这个事情很傻逼。
所以如果有人问我怎么救火,我就会多加个心眼:这是不是表示起火是这个公司的常态?
那我就要利用他这个问题多探一探他的情况和他对这件事的看法。
如果这家公司本身就是以救火为荣的,那我就可以先闪了。

我早年也是作过救火队。
不过不想再作这种工作了。
不会有满足感的
都是失败感与挫折感。

PS:倒数第二题,倒数第一题。都在项目中遇到过。。。。
每次解决都很勉强

倒数第二题:
我有一次对老板说计划是你说了算。
完的成完不成还不是程序员说了算?
忘了你说的结束日期吧。
哪个项目没延过呢?
倒数第一题:
让他们回去看文档是最差的办法(尝试过)
在开始QA之前
找个会议室与他单独把所有的功能review一下
把他写的所有的CASE再REVIEW一下。
这样功能等级就不会太离谱.
主要还是有人品问题在里面。谁写的代码能没BUG呢?

让自己有的选也是我看书学习的主要原因。
当然我是想找个办法去解决问题,
从没像GIGIX那样想找个工作不用去考虑这种问题

人家的题目是测试员把bug直接提交到高层,不管这个bug是不是真正的bug,你也被毁了。 32 楼 拥抱变化之美 2010-03-29 抛出异常的爱 写道拥抱变化之美 写道抛出异常的爱 写道1-6很感性。。。。对了错了就那个样子。

后面的两题很致命。
估计我答有一半折的概率

倒数第二题:
先找思路,要知道如何下手,从哪下手。

倒数第一题:
引用假如你想申请延期或砍功能,你怎么说服经理
讲清利害关系,他自己就会让你延期或砍功能


引用某测试小组成员老将测试你负责部分中出现的Bug直接提交到高层且经常在你比较忙的时候请教你负责模块的内容.对于这种情况,你打算如何处理
原来这个家伙既不守规矩也不懂业务,换个测试员吧。
我有一半可能。你是一点可能没有。。。

没错或许是一点可能也没有,不过遇到这样不切实际的领导和不守规矩的员工,我还是躲远点儿吧。 33 楼 httpclient_bd 2010-03-29 我也试着答一下:

倒数三:一方面通知市场、汇报给直接领导,告诉他们最坏的情况,并告诉他们项目可能延迟多久发布,做好延期发布的心理准备和补救措施。另一方面就是安排加班,再想办法跟老板为兄弟们争取点激励,争取早日兑现承诺。

倒数二:既然是经理负责决策,我只需要告诉他每个策略的后果是什么就OK了。

倒数一:私下沟通。如果不行的话,根据公司规定来。如果实在让我很不爽的话就尽快想办法换别人来做,要不时间一长造成高层对PM的不信任的话,工作就不好开展了。

gigix的看法很独特,经验大牛。 34 楼 lkj107 2010-03-29 对于需求与期限之间的关系:
正规一点的需求文档都有关于优先级的问题,当按照目前状态出现有延期的情况下,首先看你的开发任务是不是可以分解,能够通过增加人手来解决这个问题,如果不能,看客户能不能接受延期,不能接受,就按照需求的优先级别砍需求

对于提高bug到高层:
首先是与项目经理交流,看这个bug的级别提交是怎么确定的,如果确实是,那么就按照执行,如果不行,那么就让项目经理与测试人员,甚至测试部门的经理去沟通。(PS:如果高层不是特别关注和这个bug的话,早就找那个人谈话了);忙的时候来问问题,可以说稍等,这个是两个人的沟通问题了。 35 楼 jmu 2010-03-29 这个是高工的技能吗? 感觉是系统分析师的技能啊
高工的技能是精通 算法/oo设计/数据结构/软件工程
根据侧重点可以掌握 UML/数据库/各种API/WEB 36 楼 seeckt 2010-03-29 我来答下看:
引用如果之前承诺的发布日期就在两周后,但你发现你负责的模块需要三周才能完成.你会怎么做
假如你想申请延期或砍功能,你怎么说服经理

首先看之前工作量是如何评估的,现在发现完不成是由于内外部情况发生变化还是自己评估出现严重偏差
如果是情况发生变化可以向经理说明,因为这个是“不可抗力”,最好事先想好个经理的建议,例如如何给中高层领导或者客户解释,补救策略是什么
如果是自己评估发生偏差主动承认错误,作为自己的教训
并且给经理建议如何补救,加班或者延期、调入资源等等


引用 某测试小组成员老将测试你负责部分中出现的Bug直接提交到高层,且经常在你比较忙的时候请教你负责模块的内容.对于这种情况,你打算如何处理

首先看这个是否确实是缺陷,自己的缺陷率是否过高? 有可能是该测试认为自己的缺陷率过高,需要提醒领导注意
其次看这个测试是否与你有过节或者自己的考虑,摸清楚他的内心想法
再后和自己的领导(项目、产品负责人)沟通,说明这部分报告的问题原因和后续解决方法,领导了解解决方法后,自然会提醒测试人员不要越级报告(如果他还算负责的话),并且在向中高层说明项目运行情况时,解释这些发现的缺陷

以上假设自己的经理还算不错,不管对人还是对事
否则的话主动跑路

gigix 的意见我稍有不同意
我是在高程的角度回答开发经理,面试时经理往往代表经理自己
并不是代表公司,而且工作中经理对自己的影响是最大的,往往决定了以后的日子



37 楼 拥抱变化之美 2010-03-29 我现在做的就是救火项目,感觉极其不爽。 38 楼 抛出异常的爱 2010-03-29 seeckt 写道我来答下看:
引用如果之前承诺的发布日期就在两周后,但你发现你负责的模块需要三周才能完成.你会怎么做
假如你想申请延期或砍功能,你怎么说服经理

首先看之前工作量是如何评估的,现在发现完不成是由于内外部情况发生变化还是自己评估出现严重偏差
如果是情况发生变化可以向经理说明,因为这个是“不可抗力”,最好事先想好个经理的建议,例如如何给中高层领导或者客户解释,补救策略是什么
如果是自己评估发生偏差主动承认错误,作为自己的教训
并且给经理建议如何补救,加班或者延期、调入资源等等


引用 某测试小组成员老将测试你负责部分中出现的Bug直接提交到高层,且经常在你比较忙的时候请教你负责模块的内容.对于这种情况,你打算如何处理

首先看这个是否确实是缺陷,自己的缺陷率是否过高? 有可能是该测试认为自己的缺陷率过高,需要提醒领导注意
其次看这个测试是否与你有过节或者自己的考虑,摸清楚他的内心想法
再后和自己的领导(项目、产品负责人)沟通,说明这部分报告的问题原因和后续解决方法,领导了解解决方法后,自然会提醒测试人员不要越级报告(如果他还算负责的话),并且在向中高层说明项目运行情况时,解释这些发现的缺陷

以上假设自己的经理还算不错,不管对人还是对事
否则的话主动跑路

gigix 的意见我稍有不同意
我是在高程的角度回答开发经理,面试时经理往往代表经理自己
并不是代表公司,而且工作中经理对自己的影响是最大的,往往决定了以后的日子





你可以看一下这个再说
http://www.iteye.com/topic/581139#1351841

PS:又想了一下。
BUG提到高层是好事
需要用个软件把所有发现的BUG自动发到老大的邮箱里去。
当然BUGfree有这个功能。
不需要你再写代码。 39 楼 seeckt 2010-03-30 不明白要看那个帖子是什么意思
那个是说部门间的政治,本帖是说团队内部的政治,
没有共同点
如果团队内的成员目标和利益很不一致
完全是团队领导的责任,他应该来平衡
部门间的利益不一致则是高层来平衡 40 楼 jerry.chen 2010-05-13 呵呵 我也从没遇到过这样的面试题,,最近面试都是做笔试了,估计做得不怎么好 也面试了几家 都没给人看上了 奋斗中, 41 楼 shin- 2010-05-15 gigix 写道抛出异常的爱 写道我一直认为需要设身处地的去想。。。所以老进死胡同。
孙子兵法说了,有对手三倍兵力就跟他打,有对手五倍兵力就把他围起来,这是用兵的正道。
说到做项目,我追求的是让项目不起火,大家安安稳稳舒舒服服把事情做好。如果经常都要救火,我就会觉得这个事情很傻逼。
所以如果有人问我怎么救火,我就会多加个心眼:这是不是表示起火是这个公司的常态?
那我就要利用他这个问题多探一探他的情况和他对这件事的看法。
如果这家公司本身就是以救火为荣的,那我就可以先闪了。

说到做项目,我追求的是让项目不起火,大家安安稳稳舒舒服服把事情做好。如果经常都要救火,我就会觉得这个事情很傻逼。

这一点我是非常赞成的.有计划,按计划的悠闲地的把项目完成是比较舒服的.

但面谈还是要有一个情景的,如果能想到更大的环境(如公司的制度有问题),当然是最好的了.但我不是很喜欢说的太过的.比如你什么理由也不说,也不问具体的情况就直接批驳说是这个有问题,那个很不行.我往下问就说不出具体理由就没意思了.

另外,就我个人提问的话,很多问题是没有标准答案的,也没有问倒被问倒的说法.如果讨论让双方都有所启发当然是最好的.

当然两个人观点不一定要相同.所谓君子和而不同.不同的观点碰撞才会有火花. 42 楼 shin- 2010-05-15 sg552 写道其实我心里不喜欢这样的面试题目。特别是那种性能问题,上来就要优化,我想说,如果你觉得JAVA , MYSQL 慢,为什么不直接找个写汇编的人来? 如果真的有性能慢的问题,能不能把体现这个问题的LOG给我看.看.先?


我发现自己的很多精华投票是冲着回复的。。。





兄台可能没仔细看题,我当时真正的问题其实只有两个
1.如何定位导致阻塞的SQl语句
2.如何分析指定sql语句/存储过程的性能问题



而没有上升到Java,MySQL性能不足的层次来,而仅仅停留在如何写好SQL语句这个层次

43 楼 shin- 2010-05-15 小小龙猫 写道某测试小组成员老将测试你负责部分中出现的Bug直接提交到高层,且经常在你比较忙的时候请教你负责模块的内容.对于这种情况,你打算如何处理


头一条是沟通,接着是时间管理。我会和测试人员沟通:不反对直接提交给任何人,因为本身确实是bug,不过我需要同时被抄送. 第二点双方协议安排好固定的时间给他们答疑,自己安排其他事的时候避开答疑时间。


非常同意你的观点,我当时的问题就是想了解如何处理协作和干扰的问题

读书人网 >其他相关

热点推荐