IT面试经验:程序员面试什么最重要

作者&投稿:郁侄 (若有异议请与网页底部的电邮联系)
面试中的优缺点程序员面试什么最重要~

工作经验,个人能力,工作态度,自学能力,逻辑思维,外企还需要对应的外语


程序员面试一直是社区乐于讨论的热门话题。我自己从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) 在各种因素中,性格 > 经验 > 基础 > 算法。性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变;经验体现了一个人的综合能力,你可以从面试者过去的经历中判断他能从事哪种工作,不能从事哪种工作;基础和算法则主要起到辅助参考的作用,基础好的程序员一般适应性比较强,学新技术更快,但是切忌单纯从基础来判断一个人的能力。


chatbott会取代程序员吗?
chatgpt不会取代程序员。chatgpt终究只是ai人工智能,它即使学会编程也无法掌握所有程序员的技能和知识,硬要说的话只是会影响到一些技术水平较差的程序员。事实上在科技发展的过程中,总是会有机器取代人工的声音出现,这一现象从工业革命就开始了,不过新的科技和产业自然也带来了新的职业,因此完全不...

学编程的要求有哪些?
又想做程序员,应该怎么学英语呢?我下面说的方法有两个前提,一是你的英文至少达到高中毕业水平,也就是语法基本都学完了,即使用得不熟练也知道有那么回事儿,二是你希望尽快在工作中用上英语,写程序够用就行,而不是有考T考G这样的更高要求。学习英语有听说读写四个方面的要求,做程序员至少需要读和写非常流畅,...

java程序员需要学习什么
没有想过几天后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比价严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几加公司,终于功夫不负有心人,我终于面试上了一家民营的企业。公司规模比较小,我的职务是Java程序员。我想我...

华为英语口语面试需要怎样准备?
我相信,我的管理经验对贵公司会是项资产。面试小技巧 Here are good answers to some of the tougher questions asked in job interviews. If you can ...(我干了五年的电脑程序员。具体地说,我做系统分析,解决问题以及软件供应方面的支持。) Q:Why did you leave your last job?(你为什么离职呢?) A: ...

thinkpad笔记本E系列和T系列那种更适合程序员? 只作为工作使用。_百 ...
thinkpad笔记本T系列更适合程序员。对于ThinkPad来说,T系列作为ThinkPad的精髓,适用于在办公室或商务旅行途中工作的移动计算用户,完美演绎了旅行的思维和轻量化概念。T系列是ThinkPad笔记本中最具代表性的高配置笔记本产品。在配置上采用了很多新技术,产品设计完美经典。T系列是ThinkPad最经典的机型。ThinkPad...

程序员年中工作总结及下半年工作计划2019
我们需要向客户提出要求客户提供所有涉及该项目的资料,每次与客户见面都需要熟悉业务与程序的最少一至两个程序员随时记录需求。3、工作中,有一个无论是技术,还是经验都比较让人肯定的前辈带领,将任务详细化,详细到,每个页面、甚至是一个页面中的图片什么时候做好,做到什么程度,这样把工作进度有计划有方向的赞定下来...

程序员涨工资大多数靠跳槽吗?
程序员涨工资大多数不是靠跳槽,大多数程序员涨工资靠的是自己的工作能力。

戴尔latitude,惠普elitebook,thinkpad T哪款最适合程序员
好盘是程序员的刚需,同时ThinkPad稳定性高,问题的概率低,要不也不会中美的太空舱里都使用ThinkPad。另外,性能均衡,长期来看残值最高的系列。这个二手淘宝上去看看就知道了,高残值那是TP和Mac的天下。第六代intel的均衡款T460,2017款T470(第七代CPU)还要等上市 更喜欢轻薄的,选择T460s 更喜欢...

程序员为什么要加班呢?
你好,首先程序员加班是一个常态化状态。加班我们分两种情况,第一公司业务确实比较好,在有限的人员中开发量很大,这个没有办法只能加班;另外一个就是自己负责的模块变化很多,比如bug太多,业务逻辑不严谨等。这样的解决办法是多学习知识来填充自己,下面是部分学习知识点,希望能帮到你。索引在遍历过程...

普通的程序员和大神级的程序员有什么区别?
多隆在公司大多数时间是沉默的,从2000年加入阿里以来只专注于写代码,现在多隆在阿里的层级是P11。多隆不爱带团队,团队一般沟通成本高、水平参差不齐,而他一个人就能顶一个高效顶尖的团队。作为淘宝最早的程序员之一,很多产品早期就是他一个人开发维护的,文件系统tfs、key-value系统tair,cache、搜索...

镇宁布依族苗族自治县18284963835: 程序员面试什么最重要 -
只欣桂枝: 程序员面试,考官最注重的两个问题:1、技术水平,一般通过笔试题和技术总监的形式完成.2、职业素质,一般由HR完成.如果两项都非常棒,那入职时无疑的(PS,有的企业要求学习,但是在绝对优秀的前提下,学习就不那么大了.)作为职业教育,磨砺营针对这两点在课程安排中都有很大比重的涉及.程序员就业不仅仅是考察技术能力,谨记,职业素质也很重要.

镇宁布依族苗族自治县18284963835: 实用求职攻略丨程序员面试什么最重要 -
只欣桂枝: 个人的技术能力与职位要求的匹配程度.1、技术水平,一般通过笔试题和技术总监的形式完成.2、职业素质,一般由HR完成.如果两项都非常棒,那入职时无疑的(PS,有的企业要求学习,但是在绝对优秀的前提下,学习就不那么大了.)程序员就业不仅仅是考察技术能力,谨记,职业素质也很重要.

镇宁布依族苗族自治县18284963835: 程序员面试什么最重要?
只欣桂枝: 解决问题的能力

镇宁布依族苗族自治县18284963835: 程序员面试需要准备什么 -
只欣桂枝: 1、把自己简历上的东西记清楚,尤其是简历上有水分的,不要在面试的时候露馅啦; 2、找一些面试方面的资料,就是面试官会问到的技术上和为人处世方面的问题,就是要对面试官问的一些问题要做的心中有数.这些资料可以上网上找,也可以问面试的那家公司的人(如果你认识的话). 3、还有就是面试的时候,最好谦虚点、有礼貌点,给面试官一个好的印象.但同时,也要有自信,对自己懂的知识,可以稍微夸张点.

镇宁布依族苗族自治县18284963835: 你要面试一个程序员,应该问他什么问题 -
只欣桂枝: 首先面试程序员分有没有经验 面试没有经验的程序员就随便问问点ssm,ssh五大框架问题,多线程什么的,再问问是否会点前端技术 有经验就看看他的简历,问他简历项目上的问题,可以围绕着简历上的项目问,通过他的回答涉及到的技术点之类的,拓展出去问其他的

镇宁布依族苗族自治县18284963835: 程序员应该如何面试,程序员面试问什么技术 -
只欣桂枝: 3年以下的面试 面试主要看两个方面:一、通过沟通交流,一些简单的问题,了解的你的逻辑思维,个人性格.二、一些常用的技术是否了解,根据你的回答问几个典型的问题.这个阶段面试技术并不是最重点的,主要还是逻辑思维是否敏捷,为人处事是否好相处,技术是可以培养的,基本带一周就可以很好的干活了.3年以上就麻烦了 一、技术会问的很详细,没有扎实的功底,挡不住啊.二、超过3年的招聘,一般都是有一定目的性的,比如需要搭建项目构架,或者需要专攻数据库的,或者需要比较全能的技术大牛来解决问题,所以应该针对面试方的一些需求去准备.以上都是瞎掰,看看就行了.

镇宁布依族苗族自治县18284963835: 程序员面试怎么准备,面试技巧有哪些 -
只欣桂枝: 1.勇敢开口要求,否则永远不会是你的.通常人力主管在招募新进人员的时候,不会主动给予新进人员较高的薪水、福利,因为这对他们来说是一种负担,只会按照公司既有制度,一切照旧.当我们在面试时,不要吝啬提出你的要求,这样让人...

镇宁布依族苗族自治县18284963835: 程序员面试要注意什么 -
只欣桂枝: 工作经验很重要,其次是技能! 因为面试会问你什么,这是你不能尽善的! 我当年找工作,他问我有没有经验,做没做过,我说没有!刚毕业!我觉得我太诚实了,但是我也是实话实说!后来他和我说话就不耐烦了,什么都不问,就说我们公...

镇宁布依族苗族自治县18284963835: 面试中的优缺点程序员面试什么最重要 -
只欣桂枝: 工作经验,个人能力,工作态度,自学能力,逻辑思维,外企还需要对应的外语

镇宁布依族苗族自治县18284963835: 面试一年经验的程序员,会问哪些问题 -
只欣桂枝: 在当今的互联网大军中,不少人顺应时代潮流,选择了PHP开发作为自己的发展方向,进行PHP培训.技术很重要,面试技巧也很重要,讲一下:Java程序员面试失败的5大原因.一、说得太少 尤其是那些开放式的问题,如“请介绍下你自己”...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网