程序员应该去的网站怎样去面试

注册 | 登录
产品经理一枚,伪文艺青年。
从零开始学运营,10年运营老司机带路,2天线下集训+1年在线学习,做个优秀的运营人。
程序员面试一直是社区乐于讨论的热门话题。我自己从06年实习以来,先后经历了4家软件公司,全部是外企,其中有世界500强的通信企业,有从事期权期货交易的欧洲中等规模的金融公司,也有为大型汽车制造商开发Android智能汽车的新兴公司。跨入IT行业以来,我在求职过程中经历过多次面试,最近两年也有过多次面试别人的经验。我感觉现在到了对这个问题发表自己看法的时候,这篇文章是我站在面试官角度对于程序员面试问题的一个阶段性反思和经验总结。
相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历。我在最初这个阶段只是按照自己的想象把”找到基础好的程序员“,”找到算法能力优秀的程序员“,”找到有Android开发经验的程序员“等作为面试的目标。但是,实际的经历告诉我,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好。比如,有的面试者基础知识和算法掌握情况不错,进程、线程、内存等概念清晰,基本的Hash,二叉树,快速排序等数据结构和算法也比较熟悉,但是进公司后在实际工作中表现得很糟糕。后来,我才发现原来是我的面试目标出了问题,我原先的面试方法更像是大学的算法或操作系统期末考试,按照这种方法让许多并不合适的人通过了面试,同时也可能错过了许多合适的人。
后来,我的反思是,从公司的角度讲,面试的根本目的是找到”能够干好工作“的人,而“高学历”,“算法好”,“基础好”,“有经验”这些都是表象而不是根本,它们并不能直接和“工作好”划等号。
目标明确了,但接下来的问题是假设面试者是一个黑盒系统,“工作好”不是直接可观测变量,你所能直接观测的变量是基础、算法、经验、学历、性格、谈吐、年龄等等。所以,实际上,你只能从“基础好”,“算法好”等可以直接观测的量去推测“工作好”的概率,这就是一个在“X好“条件下”工作好“的条件概率问题:P(工作好 | X好)。
根据这个模型,面试所应该考察哪些方面就很明显了,那就是选择那种最具有区分性的方面来考察。比如,考察面试者的体型特征没有太大意义,因为P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,体型特征不具有区分性,这不是面试所应该关注的内容。
面试官应当结合职位的要求明确哪些因素具有比较好的区分性。比如,如果要招一名技术门槛比较高的3D游戏引擎开发工程师,面试者A具有3D游戏引擎开发的经验,但是在基础知识和算法面试方面表现一般;面试者B相反,基础知识和算法面试表现很好,但没有游戏开发经验,而你只能选择其一。你选谁呢?其实,这就是两个条件概率问题P(工作好|经验好,基础一般,算法一般)和P(工作好|没经验,基础好,算法好)。这个问题就留给面试官来判断了,就我个人而言,对于技术门槛较高需要技术积累的职位,经验更加说明问题,因此,我更倾向于面试者A。
下面,我再结合自己的经验谈谈对面试中常见方面的看法。
算法是Google和MS等大公司面试所重点考察的内容。我个人很喜欢算法,曾经参加ACM/ICPC拿过北京赛区的13名。但是,就个人经验来看,我所接触过的绝大多数开发职位而言,算法都不适合作为考察面试者优劣的主要因素。对于普通的非算法性开发职位,考察面试者的算法就相当于考察他打乒乓球好不好一样,与目标“工作好”的相关性太低。就我个人的经验来看,差不多P(工作好|算法好)=50%,也就是算法面试没有太大的区分性。
甚至,还有一种很不好的情况特别多地出现在算法好的面试者身上,我称之为“只磨刀,不砍柴”。什么意思呢?有类人只对什么A*算法,异步编程,JVM类加载机制这种纯技术问题感兴趣,对实现用户需求毫无兴趣。这类人看起来有一定的技术能力,但是对公司来讲贡献十分有限,甚至不如技术一般但认真负责的人。所以,一旦遇到面试者算法好,我就特别留意考察会不会是这种“只磨刀,不砍柴”的人。
另外,虽然我个人不了解Google和MS,但我对于其特别重视考察算法能力的面试策略是持怀疑态度的。即使在这样的世界级大公司,算法虽然重要,但可以想象在项目实施过程所遇到的各种各样问题中,算法问题绝大多数时候不会是主要瓶颈,没有到那种需要每个人都是算法高手的情况。实际上,绝大多数项目真正难点并不是一两个算法瓶颈,甚至也不是单点的技术瓶颈,而是系统性的组织、协调、设计、开发问题,有大量的看起来不是那么有技术含量的脏活累活,也有许多问题是由于信息不足,并不是技术能力强就能克服这些困难。一个团队最好优势互补,有人算法强,有人业务分析能力强,有人擅长后端服务,有人擅长前端界面,有人聪明,有人踏实,这是最好的。如果按照“算法好”的单一标准选材,必定会把许多优秀的人才拒之门外。
基础面试是指考察诸如指针使用、进程线程概念等基础知识的面试,十分类似于大学期末考试题。我曾经以为基础面试十分重要,但是现在不这么看了。在工作中基础的确是重要的,但是在面试过程中,它必须具有区分性才有意义,也就是说P(工作好|基础好)的概率要高,那么考察指针使用,进程线程区别这样的基础题目才有它的意义。我的实际经验是,基础面试并不具有很好的区分性,和算法一样, 差不多P(工作好|基础好) = 50%。同时,基础面试是最容易准备的,中国人有长期的应试教育经验,要准备几个把玩指针题目太容易了。
我曾经遇到过这样的面试者,他的C语言基础和编译、链接等原理掌握得非常好,给我留下了深刻的印象,我给的面试结论是:知识面不宽,只会C语言,但基础很扎实,建议录用。后来的事情证明了那个结论的前半部分是对的,但是”建议录用“错了。他在实际工作中表现得一塌糊涂,不理解需求,不理解整体架构;同时,上班时间不是花在项目上,而是花在阅读诸如《程序员的自我修养》之类的书籍上。最后,这位同事由于长期“不出活”离开了公司。
基础不是不重要,而是“基础好”不足以说明面试者能干好工作,因为基础是属于局部性知识,而实际工作需要综合性能力,二者有天壤之别。C语言、操作系统能考高分,但是不会写程序的人在大学我们还见得少吗? 软件开发就像盖房子,综合能力是设计和搭骨架,基础知识是码砖。张小龙原先Foxmail是Delphi开发的,他它不懂C#,你如果要招聘一个开发.NET Email客户端的人,你考察他对CLR掌握得好不好有意义吗? 让张小龙来开发一个C#版的Foxmail真的会有困难吗? 你招一个精通C#但没有Email客户端开发经验的人来真的比张小龙靠谱吗?
我说基础知识不重要,和古人说的“不积洼步无以至千里”是不是矛盾呢?不矛盾!“洼步”与“千里”是一种可累加关系,但再多的“基础知识”都累加不成“综合能力”。学习软件开发要像持续集成一样,一开始就是一个完整的系统,虽然规模不大,问题很多,但它麻雀虽小五脏俱全,从小系统到大系统,从简单系统到复杂系统逐步演化。
所以,基础好本身不足以说明太多的问题,必须进一步考察综合能力。对于基础面试表现不好的面试者,如果时间允许也要进一步考察,有的面试者其实是有能力的,只是没有进行充分的准备。最理想的状态当然是基础和综合能力俱佳,若不能兼顾,应当综合能力优先。
这里所说的经验不是通过工作了多少年来衡量的,而主要是指面试者的经历,比如,是否完整地实现过一个软件,或作为主要开发者完成过一个项目。经验的重要性在于它能说明一个人的综合能力。从项目的性质、规模和难度,面试官就可以大致判断出面试者的综合能力。如果一个面试者一直在大公司负责一个小模块的开发维护,那么基本可以判断他不具备独立或作为主要开发者承担一个项目的能力,只适合在另一家大公司做类似的事情。对于门槛较高需要长期技术积累的职位,相关经验更显得尤为重要,比如,Linux内核开发,JVM开发,游戏引擎开发,数据库实现,高级UX等。对于这类职位,没有经验的面试者即使综合素质不错也是需要长时间的学习和积累才能胜任。所以,基本上如果确定了你的职位属于此类,那么相关经验毫无疑问应该成为首选因素,换句话说,P(工作好 | 相关经验好)的概率是非常高的。
通过项目经验判断面试者的优劣比通过基础和算法测试更加靠谱,所以,面试过程中面试官应该花比较多的时间听面试者介绍项目经验,并进行深入地探讨交流,了解面试者的知识面、思维能力、表达能力等。同时,可以结合项目提一些基础知识和算法的问题,比如,如果面试者做过C++相关的项目,那就可以问他如何进行内存管理?是否熟悉智能指针?如果面试者的回答不能令人满意,那么就基本上可以判断他的项目做得不是很好。
要注意的是,经验也是一个多维度的事物。比如,C++股票交易中间件系统,这就涉及(C++,中间件,股票) 3个维度。假如面试者A做过C++股票交易客户端,面试者B做过C的股票交易中间件。从语言角度看,A最匹配,从项目性质看,B最匹配,你如何选择?这就是在多个维度中,哪个维度更重要的问题,就这个例子而言,我个人更倾向于B,因为我认为中间件开发经验是主要矛盾,而从C切换到C++并不是问题。所以,面试官需要判断哪一种经验是主要的,而哪一种经验是次要的。比如,我们招聘Android应用开发,这个职位的Android技术门槛并不高,它的真正难点在于做出好的用户体验(UX)。所以,如果一个面试者没有Android的经验我们是可以接受的,但是我希望他在UX方面有经验,至少做过其他平台的移动应用开发。
现在,我来谈我认为最重要的因素:性格。这可能是许多初为面试官的朋友所难以想象的,怎么会是性格最重要呢?说实话,当我意识到这一点时,我自己也很惊讶!说白了,还是 P(工作好|性格好)的概率最高啊。我的实际经验是,如果一个人的性格好,他能把工作做好的可能性是最高的,性格好远比基础好、算法好要靠谱。
一个人如果技术上有缺陷,经验上有不足,但性格好,在团队中是很容易由其他人来补位的,他自己也很容易逐渐补起来;相反,如果一个人的性格不好,所有的技术优势经验优势都发挥不出来,甚至还会起到负作用,而且性格缺点很难改变。我一直谈到实际工作所需要的是综合性的能力,这种综合能力的发挥中性格是至关重要的。项目中不止会遇到技术问题,要涉及沟通、协调,不同的人不同的部门既有合作又有磨擦,如何处理这些事情都需要一个良好的性格。可以说,在开发团队里让你与众不同的不是你从哪个学校毕业,也不是你过去的经验,而是你的性格。
当然,性格是一个复杂的东西,它包含了很多的方面,并非所有方面都是程序员面试所需要关注的。我的经验是可以重点考察这些方面:
1) 态度积极还是消极。有的面试者在谈吐中就会自然给你一种积极上进的感觉,或者你可以在他的经历中发现他积极的因素,这些都不是太难看出来的。相反,有的面试者你能明显感觉到他的消极情绪。积极性在工作中是十分重要的,积极的人能给团队带来朝气,也更易于合作。基本上,如果确定面试者属于态度积极的,他通过我这一关的可能性就会大大增加;相反,如果确定属于态度消极的,即使技术能力不错我也会十分谨慎。
2) IQ。我的经验是,总体来看,聪明的人在工作中的表现更为优秀。在面试中要考察一个人是否聪明并不一定要像Google和MS那样找些专门测试IQ的智力题,其实,你只需要看他讨论问题是不是很有逻辑性,思考和说话是不是反应敏捷就可以做出大致的判断。另外,眼睛是人心灵的窗户,一个人聪明与否,眼睛是会说话的。不过,聪明也不完全是优点,比如,当公司或项目遇到困难时,往往是聪明人先跑掉了,坚守的往往是IQ一般的人。
3) 语言表达能力。语言表达能力也是程序员十分重要的一项素质,它关系到项目中的沟通是否顺畅。面试官可以看看面试者能否用简明的语言介绍清楚曾经做过的项目,能否抓住要点,能否考虑到听者的相关背景。一般来讲,语言表达能力强的人综合能力都不会太差。
4) 是否具有用户意识。有人说程序员是做研发的,哪来什么用户?只有销售、市场人员才会和用户打交道。其实,这是完完全全的错误认识。你写一个模块,甚至一个API,只要有别人用,他就是你的用户。有的程序员设计一个模块或是一个软件总是习惯于从使用者的角度来考虑,尽量地方便使用者,这就是一种良好的用户意识。具有良好的用户意识的人更能考虑别人的感受和整体的需要,而不是单纯地从自己和局部来思考问题。当面试者谈及过去的项目经验时,面试官可以常常站在用户的角度对其进行提问,从这个过程中观察其是否具有良好的用户意识。
5) 如何应对质疑和压力。面试官应该对面试者的回答以及以往项目进行合理的质疑,看看他如何应对。曾经有一位面试者谈到做游戏登录服务器的经历,我就问:“如果登录服务器挂了,怎么办呢”?他说原先虽然没有考虑这个问题,但是可以怎么怎么改进。其实,大家都理解项目中有各种不完美,这里面原因很多,只要面对质疑和压力能从容应对努力往好的方向思考解决就可以了,不需要掩饰缺陷,更不应该有情绪。我遇到过有的面试者,一旦你对其项目提出质疑,他马上产生反抗情绪,或不高兴,或不承认有问题,这很容易一下子看出来他在工作中容不得质疑和批评,这种人要想合作就很困难。
6) 个性特点。许多面试者喜欢在简历上写“精通C++/Linux“,这些字眼看得人麻木,如果有人写”喜欢C++/Linux“,我就会有一种眼前一亮的感觉。“精通”是没有感情色彩的叙述,而“喜欢”包含了面试者的个性,我更愿意看到面试者的个性。我相信对某样东西真正的热情远比你当前对它的掌握程度更为重要。其实,N年的经历告诉我们,同一个班的同学,同一个项目组的同事,虽然每天所学的知识,所接触的工作都是相同的,但其实每个人的成绩和表现差异是十分明显的。那么,到底本质的差异是什么呢?其实,就是每个人的个性。是个性使得有的人业余时间去打球,有的人业余时间去看书,有的人喜欢Linux,有的人喜欢Mac。一个人在团队中扮演的角色也和他的个性有很大的关系。面试官应该引导面试者展现自己的个性,并判断其是否有益于团队。
最后总结起来,我的经验是: 1) 面试官的目标是找到”工作好“的人,一定要围绕这个目标来进行面试,如果把面试当成了算法或操作系统期末考试这就走入了误区;2) 面试过程是通过学历、性格、基础、经验、算法等可以测试的因素去综合判断面试者“工作好”的概率;3) 在各种因素中,性格 & 经验 & 基础 & 算法。性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变;经验体现了一个人的综合能力,你可以从面试者过去的经历中判断他能从事哪种工作,不能从事哪种工作;基础和算法则主要起到辅助参考的作用,基础好的程序员一般适应性比较强,学新技术更快,但是切忌单纯从基础来判断一个人的能力。
赞赏是对原创者的最大认可
收藏已收藏 | 1赞已赞 | 0
产品经理一枚,伪文艺青年。
产品经理群
运营交流群
AI产品经理群
文案交流群
Axure交流群
关注微信公众号
大家都在问
8个回答10人关注
15个回答54人关注
19个回答24人关注
16个回答18人关注
7个回答27人关注
72个回答62人关注程序员应该怎样去面试?看看这些细节你注意到没有程序员应该怎样去面试?看看这些细节你注意到没有山西晚报新媒体百家号嗨,亲爱的程序员朋友们,如果你是工作好几年的人了,那么你一定经历过面试吧,今天我以个人的视角总结了一下怎么才能有一次成功的面试,希望对你有所帮助。如果你已经开始看了,那么你一定看完哦,只有有耐心的人儿才能成大事,如果看了一半,这篇文章对你来说是没有任何收获的,反而却浪费了你宝贵的时间。
关于简历的制作每个技术面试官每天要阅览几百甚至上千份简历,阅读一封简历的时间可能不超过10秒,你的简历就是茫茫大海中的一滴水,如果能让面试官从一大摞简历中选出你的简历,那么就需要从简历制作上下功夫了。
图片来之互联网这里我说下我的感受,我也阅过几万份程序员的简历了,我就来说一下我是怎么筛选简历的,我主要看这几个地方:学历 (这个我个人并不太看重,不过有的公司是硬性要求,比如说必须招本科以上的)
工作年限毕业学校项目经验所用过的技术以上5点前3点如实填写即可,这个已经是无法改变的事实了,因此不要虚假填写,那样一旦查出,你懂得,后果很严重。关于项目经验主要写自己做过的项目,把认为最重要的项目与现在公司业务相关的放在上面,不要将一些无用的项目在上面罗列,那样只会把有用的项目埋没在里面,面试官在那10秒钟之内没发现,这样你就被筛选掉了,十分的遗憾。同样第5点所用过的技术也是需要挑重点的写,写这公司要用到的技术,还有一点需要注意,这些技术一定是你自己会的,不会的就别写了,那样面试时被问到后会很尴尬。
关于自我介绍其实在这之前,面试官都已经看过你的简历了,这时候自我介绍就要言简意核,突出亮点,切忌一大堆废话哦。介绍自己的少一点,重点说一些自己得意的项目,要挑几个典型性的项目来说,不要说几个同类型的项目,没有什么特色的就别提了。总之,在最短的时间让面试官了解你。图片来之互联网关于技术面试技术面试基本上分以下三种情况。
笔试上机笔试加上机和面试官直接聊技术如果是笔试就认真的在试卷作答了,把自己知道的都写上,这个就是看自己的基本功了,没什么好说的,切忌不懂的试题不要乱答哦。同样上机也是硬功夫,是需要平时去培养的。这里主要说一下怎么和面试官聊技术,首先有一点可以明确的,面试官问你的技术他是熟悉的,因此对于他的问题,你不会的,千万不要去猜测,你可以说这方面没有过多关注过,以后需要补补,然后引入一个相似的问题并且是自己熟悉的,就这样轻松过渡过去了,把问题从面试官的熟悉的范围引到你自己的熟悉范围,如果这个范围面试官熟悉了,他会听你说说,会有一些发问,一些互动,如果面试面试官不熟悉,就听听就过去了。还有一点最忌讳的是如果不懂的问题,千万不要说一堆废话去搪塞,这样的话也会被看穿的。
图片来之互联网其它除了以上几种情况,再说说其他需要注意的情况,这些都是些细节,也是需要注意的哦。面试前收到面试邀请邮件,一定要回复一下哦,你只是心里知道不行,要回复,如“收到,一定会按时参加面试,谢谢”不要吝啬说一声谢谢,这些细节都能给对方留下一些印象。面试一定不要迟到,也不要提前,最好是准时出现。大部分公司的面试都是按时间段去安排的,比如8:00~9:00 是一个应聘者,9:00~10:00是一个应聘者,这些时间都是人家规划好的,一定要按时,不要打乱人家的计划。每个面试官也有自己的事情,如果你来的不是时候,人家那时可能正忙着呢。不管需不需要,这几样东西最好是带着,打印几份自己的简历带着,准备一支签字笔,准备一个u盘,里面有自己得意的作品。遇到不会的技术问题时不要乱说,可以说这方面没有接触过,需要过后研究一下。与面试官聊天时要保持语速,不要说的太快,显的过于激动,要保持平静。面对面试官问的每一个问题,要快速的去想,然后慢速的回答,一字一顿的说清楚了,声音不需要太大,对方能听清楚就行了,保持一个相对舒适的氛围。
这些细节直接体现一个人的修养,始终要记着面试不单单是到公司面试那一会,面试前,面试后的所有交流都算是面试的环节。图片来之互联网各位可以仔细琢磨一下上面的几种场景,有时没有经历过这种场景,可能没法对上面的描述做到感同身受,看了之后就会一带而过了,建议收藏此文,以后遇到类似情况了,可以把这篇文章找出来看看,相信会对你有所帮助,最后祝各位程序员朋友们都能找到自己心仪的工作!
大家好,我是“上世是朵花”。如果你有什么好的看法或者观点可以在评论区展现你的才华,互动交流,如果想进一步了解我,那就关注我吧。
转载自百家号作者:上世是朵花本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。山西晚报新媒体百家号最近更新:简介:山西最权威,最快速,最全面的媒体平台作者最新文章相关文章1,571被浏览1,331,204分享邀请回答1.7K215 条评论分享收藏感谢收起29752 条评论分享收藏感谢收起怎么面试(社招)程序员?
怎么面试(社招)程序员?
来源: | 时间: 14:05:55 | 阅读数:
[导读] 最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经。公司里一下子面试的任务多了起来。正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下。
最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经。公司里一下子面试的任务多了起来。正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下。
当好一个面试官其实也很不容易,不但要练就一双火眼金睛,把优秀的人才和水货在短短的面试的几十分钟里分辨出来,同时面试官本身就是候选人观察公司的一个窗口。在面试中,面试官还要注意很多接人待物的细节,既能彰显公司求贤若渴、对人才的尊重,又能将公司的技术水平和文化氛围展露一二,以求给候选人留下良好的印象。
社招某种意义上比校园招聘更困难。面对形形色色的社招候选人,首先一个要想清楚的问题就是我们到底该招什么样的人?简单的说就一句话,适合自己公司的人。每个公司都有独特的文化和特定的业务需求,更有各自的业务发展阶段。就算同样是招程序员,也应该因地制宜,有所侧重。拿我现在所在的公司(某大型外企驻华研发机构)、所在的行业(瞬息万变的互联网)来说,我觉得最重要的就是下面几点:
第一,聪明。作为大公司,尤其是外企,总部的制约总是一定程度的存在,互联网行业更是一个日新月异的行业。这时,项目背景和知识远没有能力靠谱。如果一个人的工作业绩,是来自无数岁月一脉相承而延续下来的知识体系,是积累到某种程度的知识土壤上很自然的发芽、开花、结果,那么在这种充满未知、充满变化的行业和工作中,一旦项目发生较大变化,那么你在适应新任务、新角色、新挑战时就会出现很大的落差甚至困难,最后的结果通常是工作效率显著下降,严重的甚至只能一拍两散。公司花这么大的力气招聘和培养人才,如果仅仅因为项目变化就发生大规模的离职,想来从公司角度是非常不划算的。所以,在我参与的面试中,我最提倡招聪明人,要招比自己聪明的人,招能适应各种新技术、新行业、接受新挑战的人,招和自己不一样的人。当然,这也是由公司的特点决定的。我们公司的特点是组织机构调整、项目变化频繁,公司规模很大、业务范围很宽,对正式员工相对较负责,内部培训较完善,裁人比较慎重,发生各种变化时内部换岗机会多。其他公司未必可以参考,但可以结合自己的需求和特点对号入座。
为了测试一个人的聪明程度,我通常会给他一道算法类的题目,让候选人尝试给出一个经过优化的解。选题时,我通常会选择那些不同思路、不同水平的解非常多的题目。我一般并不指望候选人一下子把最优解做出来(实际上也有个别能做到的特别优秀的候选人,但同时也要小心他以前做过类似的题)。我会通过交流去尝试理解他的优化思路,然后适时的沿着他的思路给点提示,看看他能不能有什么进展。在交流中,我主要观察一个人的逻辑思维的严密性、考虑问题是否全面,思考是否迅捷,能不能突破既有思路的框框。我还要观察候选人能否在解题过程中很好的理解问题,对问题能否进行系统性的有条理的分析。俗话说文无第一、武无第二,其实任何最优解都有一些充分限定的条件或假设作为前提,除非用数学公式的风格严谨的出题,常规意义的完美解是很少存在的。一个人,如果能突破常规,能对问题有很好的分析,取得一定进展,我觉得在有限的时间和面试的压力下,能做到这些已经难能可贵了,面试官也并不一定有必要盲目的追求最优解。
在这里,也要顺道提醒参加面试的候选人。解题时,要留意面试官的问题和提示(如果有的话)。我记得见过一些候选人在面试中完全封闭在自己的世界里,从面试官的角度来说,他们完全没有任何进展的憋在那里,甚至在面试官主动帮助他的时候也没有取得任何有意义的反馈。纵使候选人天赋异禀、聪明绝顶,但如果在面试中与面试官都无法顺利协作,那么实际工作中又会如何呢?面试官既然花费时间参加面试,从内心深处都是非常希望找到合适候选人的,面试官也希望被面试的你通过面试。所以,从心态上不要简单的把面试当作一个非黑即白、相互对立的考试。从某种意义上说,我更不仅仅是一次考试,他更像相亲,呵呵。
第二,技术深度。作为软件工程师,毕竟还是一个技术性岗位。不管你有多聪明,如果你的个性和主观意愿上决定了,你并没有在技术上钻研到一定深度的意愿或能力,那么公司派你冲锋陷阵的时候就要考虑一下了。毕竟就算对你来说是新领域,从互联网公司的需求来说,公司通常要你在最短的时间帮助他们提高产品技术水平,以便有机会能在残酷的市场上取得有利的竞争地位。并非公司没有耐心等你慢慢成长,而是外部环境、那些虎视眈眈的竞争者不允许。如果你个人没有追求卓越的习惯,不能在有限时间将你学习和掌握的技术钻研到足够的深度,那么公司将无法在残酷的市场竞争中生存,公司雇佣你、留住你的意义又何在?所以,我觉得公司需要的人才是这样的,他们有追求卓越的意愿,有独立探索、不断学习和自我进步的能力,他们哪怕从事的是全新的领域,只要给他一点合理的适应和探索的时间,他都可以做的比很多人、比其他公司更好。
在技术深度的面试中,我通常会通过候选人以前做的项目、读过的书或者熟悉的编程语言,围绕着这些话题来出题。面试官当然不可能什么都懂得很深,所以面试题也不需要过于刁钻、古怪。拿以项目背景为主的话题为例,可以通过不断深入的去了解对方的角色和职责,看看他对项目中的各种技术、架构和具体实现是否熟悉。如果发现系统设计上的瑕疵或挑战,还可以更深入的探讨,看看候选人的反应。有些候选人号称是核心开发人员或者项目主管,但实际上问他很多细节问题根本回答不出来,这种候选人或许浮在上面做管理工作太多、技术上不是特别擅长,要么就是简历中水分太大并没有多少真金白银。谈谈熟悉的编程语言或技术书籍也是不错的选择,但要注意别考很偏的问题,因为那是在考知识,不是考能力。知识对于聪明人来说是可以学习的,面试中要侧重对知识的运用。很多技术涉猎不深的程序员,常常是知其然不知其所以然,更谈不上活学活用。当然实际上知其然恐怕有不少候选人都做不到,这类人特别是工作年限很长的就算了,说明他缺少对技术的理解还是很浅,难以承担重任。很遗憾在这里不能通过面试题举例一二,以后方便的时候再跟大家交流吧。
第三,技术沟通能力。排除个性和常规的沟通技巧等因素,很好的技术沟通能力实际上在日常工作中非常重要。我们需要优秀的工程师不但能孤军奋战,也能团队协作。这就要求大家能抓住问题要旨,在交流和对话中完全没有沟通障碍的可以并肩战斗的伙伴。而良好的技术沟通能力,实际上需要很多素质,包括即时反应能力、很强的技术理解力、系统性的思考和分析能力、总结和概括能力以及具象化的展示和表达能力,实际上当真是很难得的。在面试中要格外关注候选人在交流中所表现出来的种种行为特征和模式,比如木讷、啰嗦、跑题、抢话、傲慢等等。对有比较严重的沟通缺陷的候选人,纵使其它各项面试表现良好,也要格外慎重,否则极有可能会拖累团队的效率。
第四,代码。归根到底,程序员特别是基层是用代码说话的职业。我很难想象一个事业上成功的优秀的程序员,居然不能再面试中写出清晰、严谨、高效的代码。我个人是建议算法题和代码题分开,最好混在一起。我的代码题一般重点考察两点:候选人的代码风格如何,包括函数和变量的命名,包括程序逻辑是否存在大量的冗余,包括一些个人的编程习惯如何;此外,还会考察候选人的程序逻辑上是否严密,对输入有无断言或正确性验证,对各种逻辑上的边界条件能否正确处理,特别是写好程序后有没有自我测试的过程,通过合适的测试用例验证程序的正确性。即便对于那些面向基层管理职位和架构师职位的人我也是一视同仁的,在我看来没能力用代码说话的技术人员,是很难做好基层的项目管理、研发管理等职位的,除个别妖孽外我也很难想象一个没能力写好代码的人能做好架构层面的设计。归根到底,这一切都是相通的,是程序员的基本功,说的或许不贴切,但至少我没见过初等数学一团糟但微积分非常出色的人。
第五,品味和兴趣。通常我开始了解一个候选人的技术品味的时候,他已经通过了面试,而且我对他的面试成绩一定是非常满意的。在这个层面,我会问问他最近在业余时间读了什么技术书籍,探索了什么有趣的新技术,或者经常去什么网站学习。一方面,一个人的技术水平的提高除了来自工作时间公司项目里身边的这些同事,也来自他业余时间自己的个人涉猎,这时候他的兴趣和品味会为他选择最适合他的渠道。如果一个候选人足够优秀,我常常会问他这方面的问题,一方面我可以借机学习,多多参考他公司之外的学习之道;另一方面,也可以更全面掌握他的知识结构和兴趣爱好,看看有没有给面试加分的或者适配于工作需要的地方。
好了,今天先分享到这。有什么不当和疏漏在所难免,欢迎业界朋友多多指教!
手机扫描下方二维码,关注php100官方微信。
同步官网每日更新,为您带来随时随地的资讯与技术信息。更有不定期的互动抽奖活动,赢取实用贴心的小礼物。
除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接原文地址:
友情链接与合作伙伴
粤ICP备号-3}

我要回帖

更多关于 程序员面试题库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信