电话:
您当前的位置:首页 > 职场资讯 > 面试技巧

程序员面试:从面试官角度反思及总结面试问题与目标

来源:网络整理 时间:2025-06-23 作者:原作者 浏览量:

程序员面试官反思_张小龙面试百度云_面试目标与工作能力关联

程序员面试一直是社区乐于讨论的热门话题。

本文系面试官视角下,对程序员面试问题所进行的阶段性思考与心得汇总。

【目标】

如同众多朋友那样,在积累了几年的职场经验晋升为高级工程师之后,便开启了面试他人的历程。在起初的这段时期,作者仅是依据个人设想,将“寻找到基础扎实的程序员”、“觅得算法能力卓越的程序员”、“找寻具备Android开发经验的程序员”等设定为面试的核心目标。然而,作者从实际经历中得知,尤其是那些按照“基础扎实”、“算法能力强”等标准招募进来的人,最终的表现并不理想。例如,有些面试者在基础知识及算法掌握上表现尚可,对于进程、线程、内存等基本概念理解清晰,对基本的哈希、二叉树、快速排序等数据结构和算法也较为熟悉,但入职后在实际工作中却表现得不尽如人意。作者后来意识到,问题出在面试目标设定上。他先前采用的面试方式,更像是大学里的算法或操作系统期末考试。这种面试方式导致许多不合适的人得以通过,同时也可能让许多合适的人失去了机会。

随后,作者进行了深思熟虑,认为从企业立场来看,面试的核心任务是寻觅那些“能胜任岗位”的员工,至于“学历高”、“算法能力强”、“基础扎实”、“经验丰富”这些特点,实则只是外在表现,并非本质所在,它们与“工作表现优异”之间并不存在必然的联系。

【方法】

明确了目标,然而,接下来的挑战在于,若将面试者视作一个黑盒系统,那么“工作表现优异”这一指标并非直观可见。你所能够直接观察到的变量则包括基础能力、算法运用、工作经验、教育背景、个性特征、言谈举止以及年龄等因素。因此,实际上,你只能依据“基础扎实”,“算法精湛”等易于观察的指标来估算“工作出色”的可能性,这本质上是一个在“X方面表现良好”的前提下,“工作出色”的条件概率问题,即P(工作出色 | X良好)。

依据该模型,面试需关注的考察点一目了然,即需挑选最具差异性的方面进行评估。以面试者的体型为例,这一特征并不具备显著区分度;因为无论是高矮、胖瘦,被选中工作的概率均相仿;因此,体型特征并非面试关注的焦点。

面试官需根据岗位的具体需求,清晰界定哪些条件能较好地区分应聘者。以招聘一位技术要求较高的3D游戏引擎开发工程师为例,面试者A在3D游戏引擎开发领域有实践经验,但在基础知识和算法测试中表现平平;而面试者B则在基础知识和算法测试中表现出色,却缺乏游戏开发的经验。在这种情况下,你只能从中挑选一位。您该选择哪位候选人呢?实际上,这涉及两个基于不同条件的概率问题:一是P(工作表现佳|具备丰富经验、一般基础、一般算法能力),二是P(工作表现佳|缺乏经验、良好基础、优秀算法能力)。这需要由面试官来做出判断。就我个人观点来说,对于那些技术要求高且需要技术积累的岗位,经验显得尤为重要,因此我更看好面试者A。

下面,作者再结合自己的经验谈谈对面试中常见方面的看法。

【算法】

Google和MS等大型企业在面试时,算法往往是他们关注的焦点。作者对算法情有独钟,曾参与ACM/ICPC竞赛并荣获北京赛区第13名的好成绩。然而,根据作者的个人经验,在大多数开发岗位的招聘过程中,算法并非衡量面试者优劣的关键要素。对于一般性的非算法开发岗位,评估面试者的算法能力,就如同评判其乒乓球技艺一般,与能否胜任工作的关联性相当有限。根据作者的个人体会,大约有50%的概率,即算法能力优秀的面试者同样可能工作表现不佳,因此算法面试的区分度并不高。

甚至,有一种不良现象在擅长算法的面试者中尤为常见,作者将其比喻为“只磨刀,不砍柴”。这究竟是什么意思呢?这类人只对A*算法、异步编程、JVM类加载机制等纯技术性问题感兴趣,对满足用户需求却毫无热情。他们看似具备一定的技术实力,但对公司而言,其贡献微乎其微,甚至不如那些技术能力一般但认真负责的人。因此,每当遇到面试者的算法能力出众,作者便会格外关注,试图探究他们是否属于那种“只磨刀,不砍柴”的类型的人。

尽管作者本人对谷歌和微软并不熟悉,然而,他对这两家公司特别强调算法能力的面试方法持有疑虑。即便是在这些全球知名企业,算法固然关键,但可以预见,在项目执行过程中遭遇的诸多问题中,算法难题往往并非最关键的障碍,通常不至于要求每个人都必须是算法专家。实际上,绝大多数项目的真正挑战并非局限于个别算法的瓶颈,甚至并非单一技术的障碍,而是涉及系统性的组织、协调、设计以及开发难题。这其中包含了许多看似技术含量不高的繁琐工作,同时,许多问题也源于信息的不充分,即便技术能力再强,也未必能够克服这些困难。理想的团队应具备成员间优势的互补,其中不乏算法领域的佼佼者,业务分析能力出众者,擅长后端服务的技术专家,以及精通前端界面的设计师。团队成员既有智慧之选,也有稳重之才,这样的组合堪称完美。若仅以“算法优秀”这一单一标准来选拔人才,必然会导致众多杰出人才被排除在外。

在深入掌握了诸如Google和Facebook等顶尖企业面试的具体情况后,作者对这一问题的看法发生了转变。实际上,这些公司在面试阶段并非单纯看重那些技巧性较强的算法,而是更加强调编程技能。然而,在实施编程测试时,他们通常是通过一些基础的算法题目来进行的。作者对这种面试方式愈发青睐,且已将其作为公司面试流程中的关键步骤。编码技能的检验至关重要,其价值是单纯的知识性问题所无法比拟的。若面试者连“如何判断一个字符串是否为另一个字符串的子串”这类问题都难以准确且迅速地解决,那么其录用可能性几乎为零。作者在此处着重指出,我们无需深入探讨复杂算法问题,但这并不意味着我们轻视对编程技能的检测,敬请读者切勿产生误解。

程序员面试官反思_面试目标与工作能力关联_张小龙面试百度云

【基础】

基础面试主要涉及对指针操作、进程与线程等基础理论知识的考察,其形式与大学期末考试题目颇为相似。作者一度认为这类面试至关重要,但现在的看法有所不同。工作时的根基固然关键,然而在求职面试中,若想其具备价值,就必须具备一定的辨识度,换言之,即需提高P(表现优异|基础扎实)的几率。换言之,若要考察指针操作、进程与线程的区分等基础问题,它们才真正具有价值。根据作者的实际经验,基础知识的面试往往难以展现出明显的区分度,与算法面试类似,大概有P(表现优异|基础扎实)= 50%的几率。基础面试相对简单,易于准备;中国人拥有丰富的应试教育背景,面对几个涉及指针操作的问题,自然游刃有余。

作者曾遇见一位面试者,此人对C语言的根基以及编译、链接等核心原理理解得相当透彻,给作者留下了深刻印象。面试结果如下:尽管知识面相对有限,专精于C语言,但其基础极为扎实,故建议予以录用。然而,事态的发展却验证了作者对知识面局限性的判断准确无误,但“建议录用”这一决定却出现了偏差。他在实际工作中表现极差,对需求与整体架构缺乏理解;与此同时,他并未将工作时间用于项目,反而在阅读《程序员的自作者修养》等书籍上耗费了时光。最终,这位同事因长期无法产出成果而离开了公司。

基础并非无足轻重,然而仅仅“基础扎实”并不能充分证明面试者能够胜任工作,这是因为基础更多是关于局部性知识的掌握,而实际工作中所需的则是综合性的能力,这两者之间存在着巨大的差距。在大学里,我们并不少见那些C语言、操作系统成绩优异却无法编写程序的学生。软件开发就好比建造房屋,其中综合能力负责设计和构建结构,而基础知识则相当于砌筑墙体。张小龙最初开发的Foxmail是基于Delphi语言的,他对C#并不熟悉。若要招聘一位擅长开发.NET Email客户端的人才,评估其是否精通CLR是否还有价值?难道让张小龙负责开发C#版本的Foxmail会遭遇重重困难吗?难道聘请一位精通C#却缺乏Email客户端开发经验的人,其可靠性真的会比张小龙更高吗?

作者提出基础知识并不关键,这与古人所言“不积跬步无以至千里”的观点似乎相悖。实则不然!跬步与千里的关系是可累积的,然而,无论积累多少基础知识,都无法合成一项综合能力。学习软件开发的过程,应将之视为持续集成的实践,一开始就要构建一个完整的系统;尽管其规模可能不大,且问题众多,但正如麻雀虽小五脏俱全所言,它具备了所有必要的元素。从小型系统到大型系统,从简单到复杂,这一过程是逐步演化的。

因此,仅凭基础扎实并不能充分揭示问题实质,还需对综合能力进行深入评估。对于那些在基础面试中表现不佳的应聘者,即便时间有限,也应继续考察。实际上,有些应聘者具备相应能力,只是缺乏充分的准备。最理想的情形是基础与综合能力均出色,若两者难以兼得,则应优先考虑综合能力。

面试目标与工作能力关联_程序员面试官反思_张小龙面试百度云

【经验】

此处所指的并非以工作年限为标准来评估,而是侧重于面试者的实际经验,例如是否曾独立完成一个软件,或是作为核心成员参与了一个项目的开发。这种经验的价值在于它能够体现一个人的综合素质。通过考察项目的性质、规模以及难度,面试官可以大致评估出面试者的整体能力水平。面试者若长期在大企业担任单一模块的开发与维护工作,则通常难以具备独立领导或作为核心开发者承担项目的实力,此类人才更适合在另一家大型企业从事类似岗位。特别是对于那些要求深厚技术积累、门槛较高的职位,过往的相关经验显得尤为关键。例如,从事Linux内核开发、JVM开发、游戏引擎开发、数据库构建以及高级用户体验设计等领域的工作。对于此类岗位,即便面试者具备出色的综合素质,若缺乏相关经验,也需要经过一段时间的深入学习和经验积累方能胜任。因此,若你的岗位确实属于此类,那么相关经验无疑是首要考虑的因素;换言之,拥有相关经验的人更有可能胜任工作。

项目经验在评估面试者表现方面比单纯的基础知识和算法测试更具可信度,因此,在面试环节,面试官理应投入更多时间倾听面试者分享其项目经历,并展开深入的讨论与交流,从而全面掌握面试者的知识广度、思维深度以及沟通技巧。在面试过程中,可以针对项目经验提出一些基础知识和算法相关的问题。例如,若面试者有C++项目的经验,可以询问他关于内存管理的具体做法,是否了解智能指针的使用。若面试者的回答未能达到预期,那么可以初步判断他的项目实施可能不够出色。

需注意的是,经验本身便是一个多面的概念。以C++股票交易中间件系统为例,它涵盖了C++编程语言、中间件技术以及股票交易这三个不同的层面。若面试者A具备C++股票交易客户端的开发经验,而面试者B则拥有C语言股票交易中间件的开发背景。从语言层面来看,A选项最为契合,而在项目特性方面,B选项更为合适。那么,你将如何作出抉择?这实际上是在探讨在众多考量因素中,哪一项更为关键。以本例为例,作者个人更偏爱B选项,其理由在于作者认为中间件开发的经验才是核心问题,而由C语言转向C++则并非难题。因此,面试官必须明确哪种经验占据主导地位,哪种则是辅助的。作者们在招聘Android应用开发者时,虽然该岗位对Android技术的掌握要求并不严格,但真正的挑战在于如何打造优质的用户体验。因此,即使面试者缺乏Android开发经验,他们也能予以考虑。然而,作者们期望求职者在用户体验方面有所建树,至少应具备在其他平台进行移动应用开发的经历。

【性格】

如今,作者开始探讨作者认为最为关键的因素——性格。这一点,或许会让众多初次担任面试官的朋友们感到意外,性格为何会如此重要呢?坦白讲,当作者本人意识到这一点时,作者也感到颇为惊讶!简而言之,毕竟在“工作好”与“性格好”两者之间,选择“性格好”的概率无疑更高。作者的亲身实践表明,若某人性格优良,其出色完成工作的几率极大;在诸多因素中,性格的优良远胜于扎实的功底和精湛的算法。

若某人在技术层面存在短板,经验上有所欠缺,但性格上尚可,那么他在团队中往往能被他人所补充,同时他自己也能逐步提升;反之,若一个人性格不佳,即便其技术或经验优势明显,也可能无法发挥,甚至可能产生负面影响,而且其性格上的不足往往难以改正。作者持续强调,实际工作中所需的是全面的能力,而在这些能力的综合运用中,性格的作用尤为关键。在项目执行过程中,我们不仅会遭遇技术难题,还需面对沟通与协调的挑战。不同个体与部门间既有协作也有冲突,妥善处理这些复杂情况,离不开良好的性格特质。事实上,在开发团队中,区分你的并非毕业院校或过往经历,而是你的性格特点。

自然,性格构成复杂,涵盖诸多要素,并非所有要素在程序员面试时都需加以重视。作者根据自身经验,建议我们重点关注以下几个维度:

面试者的态度是积极还是消极,这一点可以从他们的言谈举止中直观感受到。有些人谈话间便流露出积极向上的气息,或者从他们的过往经历中,你也能发现他们身上的积极特质,这些往往并不难辨认。然而,也有些面试者,你能够明显察觉到他们身上的消极情绪。在职场中,保持积极的态度至关重要,积极的人能够为团队注入活力,同时也更容易与他人协作。一般来说,一旦确认面试者的态度是正面的,那么他顺利通过作者这一阶段的几率便会显著提升;反之,若判定其态度消极,即便技术实力相当出色,作者也会持谨慎态度。

作者指出,通常情况下,智商较高者在职场上的表现更为出色。在面试过程中,评估应聘者的智商并非必须像Google和Microsoft那样设计专门的智力测试题目。实际上,我们只需观察应聘者在讨论问题时是否具备逻辑性,以及他们的思考和言辞是否敏捷,便能对他们的智商作出大致的判断。眼睛被视为心灵的窗户,它们能够表达一个人的智慧程度。然而,智慧并非总是值得称道,例如,在面临公司或项目的挑战时,往往是那些聪明的人率先选择离开,而那些智商平平的人却选择留下来坚持。

程序员在项目中沟通的流畅与否,很大程度上取决于他们的语言表达能力,这一点尤为关键。面试官可以通过观察面试者是否能够用简洁的语言清晰地描述过往的项目经验,是否能够准确把握重点,以及是否能够考虑到听众的背景知识。通常情况下,具备出色语言表达能力的人,其综合素质也往往不会太差。(来源:面试网 www.mian4.net)

程序员是否具备用户观念?有人认为程序员只负责研发,与用户无关,只有销售和市场人员才会与用户互动。然而,这种看法是完全错误的。即便你编写了一个模块,甚至是一个API接口,只要有人在使用,那么这些人就成为了你的用户。有些程序员在设计和开发模块或软件时,总是从使用者的立场出发,力求让使用者更加便捷,这种做法正体现了良好的用户意识。具备较强用户意识的人往往能更周全地考虑到他人的情感与全局需求,而非仅从个人或局部利益出发进行思考。在面试过程中,当应聘者提及过往项目经历时,面试官往往倾向于从用户视角出发进行提问,通过这一环节来评估其是否真正具备良好的用户意识。

面试官在面试过程中,应对面试者的回答和过往项目实施深入探讨,观察其处理问题的能力。例如,有位面试者提及自己曾负责游戏登录服务器的开发,作者便提问:“若服务器出现故障,该如何应对?”面试者回应称,尽管之前未曾考虑到这一点,但他提出了相应的改进措施。事实上,众人皆知项目难免存在瑕疵,其成因亦多,关键在于面对质疑与压力时,能够保持镇定,积极寻求改进之道,无需刻意隐瞒不足,更不应流露负面情绪。作者曾遇见过一些面试者,若对其项目提出疑问,他们便会迅速表现出抵触或不满,要么是拒绝承认问题存在,这种情绪很容易被察觉。这样的人在工作中往往无法接受质疑和批评,因此与他们合作往往颇为不易。

面试者往往在简历中标注自己“熟练掌握C++和Linux”,这样的表述让人感到平淡无奇。然而,若有人用“热爱C++和Linux”来描述,则会给作者带来耳目一新的感觉。“精通”一词缺乏情感色彩,而“热爱”则透露出面试者的个人特质,作者更倾向于看到这种个性展现。作者深信,对于某物的真挚热爱,其重要性远超你对它的现有理解。实际上,多年的经验向作者们揭示,即便同班同学或同一项目组的同仁,每日所学知识和接触的工作内容一致,他们的成绩和表现却存在显著差异。那么,这种根本性的差异究竟是什么?答案很简单,那就是每个人的个性。个性差异导致人们在业余时间有不同的爱好,如有人热衷于打篮球,有人则偏爱阅读书籍,有的人钟爱Linux系统,而有的人更青睐Mac。在团队中,个人的角色同样与其个性紧密相连。面试官需引导应聘者充分展示个人特质,并评估这些特质是否能够为团队带来积极影响。

【总结】

最后总结起来,作者的经验是:

面试官的目的是甄选那些“工作能力强”的候选人,面试过程必须紧密围绕这一核心目标展开。若将面试视作类似算法或操作系统的期末考试,则偏离了正确的方向。

面试环节主要依据应聘者的学历背景、个性特征、基础知识、实践经验和算法能力等可衡量的要素,全面评估其具备“胜任工作”的可能性。

3) 在各种因素中,性格 > 经验 > 基础 > 算法。性格至关重要,一旦性格不佳,即便技术能力再强也会大受影响,而技术上的不足尚可弥补,性格上的缺陷却难以纠正;经验则是衡量一个人综合实力的标尺,通过观察面试者的过往经历,我们可以推断出他适合从事何种工作,不适合从事何种工作;至于基础和算法,它们主要起到辅助参考的作用,基础扎实的程序员通常具有较强的适应性,学习新技术也更加迅速,然而,我们应避免仅凭基础来评判一个人的能力。

分享到:
客服服务热线
关于我们
产品与服务
收费与推广
网站特色
咨询反馈
微信公众号
手机浏览

Copyright © 2018 All Rights Reserved 版权所有 宁国人才网 苏ICP备2024139598号-6

地址:安徽省合肥市瑶海区 EMAIL:

Powered by PHPYun.

用微信扫一扫