程序员面试要准备哪些方面的内容?

为啥好多面试都是一个劲的问某个API叫什么名字,某个参数是干啥用的这种?我还以为就上来问个两三题,好几家第一轮都几乎全是这种问题,毫无疑问,比如昨天刚…
关注者
2,203
被浏览
183,417

69 个回答

我近5年在T社也面过不少校招社招(包括游戏和非游戏的程序员职位),也提供过笔试题,应该可以回答一下。

我不问API问题。

我会先问一些可以即时推导的简单问题,通常是和数学应用有关。问题其实都不太难,主要是想看思考分析过程,以及能否发现一些需要特别处理的 corner cases。我发觉在校学生通常都不错,反而工作多年的会比较差一点。

另外,会给定一些需求让候选人尝试做一个软件设计(如候选人认识的话会要求以UML表示),再问该设计的优缺点,能否改善缺点,trade off是什么等。如果能合适地套用设计模式,方便沟通,可能会加印象分。

编程语言方面,很多时候笔试已经考过。所以我主要会和候选人讨论一些概念,以及编译器/程序库/运行时一般会怎样实现那些功能(或想像可以怎么实现)。如果候选人声称精通某些语言,就会尝试问得深入一些。

如果是有领域经验的,我更希望谈多些相关话题。相对于我问一些我了解而候选人不太了解的问题,我更希望候选人能告诉我一些我不知道的事情。如果能简单清楚地描述一些较深入的技术、创新点,那就最好不过。

面试是为了双方了解是否适合对方,候选人最好也准备一两条希望知道、但不能简单在搜寻引擎中得到答案的问题,好的面试官应该会给与发问机会并尽力回答。

前阵子,我司的职业顾问们以程序员为例,整理了一份「准备面试七步走」攻略,在之前举办的知乎live 如何更好地准备下一次跳槽? 里分享过,这里重新整理下分享给大家,干货满满,拿走不谢。



第1步:你要知道你是谁


参加面试前,要给自己的角色和职位做一个定位。其中你最应该关注的是你自己的岗位职责还有技能是什么,你在这个领域沉淀了什么。只有详细地分析清楚了这些,之后才能在面试中更加自信地表现你自己。


第2步:你要知道你想要什么


你的目标岗位是什么?基于你之前的工作经历和行业趋势,给自己制定一个至少3年的规划,其中包括业务、技术上的提升计划。还有综合能力的提升规划,比如协调能力、沟通能力、执行能力等。

这个规划不是执行很久都一成不变,而是根据实际情况不断微调,以适应最近情况,让自己的职业规划可以衔接下去。


比如在程序员中有一个比较常见的话题:应该走技术路线还是管理路线?尤其是一些工作了6、7年的程序员会面临这个烦恼。

该如何权衡?首先,你需要了解技术和管理职位的区别,其次,要结合自己的性格和特长做选择。

比如你是一个极客型工程师,狂爱技术,就应该坚持技术路线、往架构师方向发展。

如果你更擅长团队方向、技术规划、和人打交道,擅长处理业务问题、协调推动、业务落地和创新,愿意做工程师的幕后资源支持等工作,也可以转型技术管理。


我们见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。

其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。


第3步:回顾和总结你有什么


这里面包括你的基本功,你擅长的开发技能,之前的技能等都要做梳理。

首先,一定要用自己使用比较多的开发语言作为核心开发语言。一般核心开发语言不超过两个,必须精通才行,深入到原理层。


其次,把自己所在的公司,参与过的核心项目都梳理清楚。把跟自己求职岗位相关的公司经历和项目重点做一次回顾,尤其是业务细节非常重要。


下面是我们总结的梳理项目的参考步骤:


1.项目背景

2.项目怎么设计的

3.技术选型和对比

4.实现的细节

5.项目最终的效果


第4步:了解企业想要什么样的人


可以通过研究岗位职责、职位描述、浏览公司网站、app产品等方式判断产品的用户量,可能用到的技术,从而做相应的准备。


第5步:了解对方公司和岗位怎么样


全面深入地了解对方的公司,包括公司业务发展历程、产品愿景、迭代周期、团队风格、技术氛围、公司目前遇到的问题和挑战等。

如果准备充足,面试官是可以感受到的,这也会给面试官留下很好的印象。

毕竟跳槽是双向选择,你需要对去面试的公司有充分的了解,在面试中可以提出一些比较有深度的问题,把所有疑惑都在面试中解决掉 。

面试官向你提的问题很多是基于公司目前实际情况提的问题。毫无准备会处于比较浅的层次,了解的话面试沟通的质量会更高,回答问题更有针对性。

那么如何获取信息呢?你可以上网查,比如知乎、谷歌,也可以问身边了解那家公司的朋友,如果你是我们平台的用户,也可以通过咨询我司的职业顾问去了解,他们比较熟悉行业内很多公司的内部情况。


第6步:你要知道你求职的岗位面试流程是什么


一般公司都有3-4轮面试。

一面技术面试,考察技术基本功。

二面业务面试或者项目面试,通过不同项目考核你的技术广度和实践能力。这种提问会根据你的简历做结构化面试,比如请你梳理你之前做过的项目,这个要遵循STAR法则:Situation ,Task, Action, Result。从项目背景、任务、采取了什么行动、最终结果如何去回顾,梳理自己的业务亮点。分析一下现在回想起来,当时是不是可以有更好的解决方案。

三面是综合面,会考察技术以外的其他能力,比如软性技能:执行、沟通、协调等。

最后一面是HR面,会比较关注你的离职原因、求职动机、薪资期望,这些要提前想清楚,避免回答的时候逻辑混乱。


第7步:你要准备几个问题去问面试官


面试到最后,面试官通常会问:你有什么问题想问我们的吗?

这时候不提问题是不可取的,会给人一种不够积极的印象。其实,面试官让你提问是有目的的:一方面,他可能想知道哪些问题是你最关心和重视的 ;另一方面,给你一个机会提问,可以突显你的专业和态度。问得好的话,有加分的可能。

如果完全不问面试官问题,对方可能会认为你不是那么想进这家公司,或者对这份工作的积极性并不高。


同时最后的提问也要讲究技巧。

有的人问的问题格局太小,比如:几点上班几点下班?有没有加班费?有没有微波炉热便当等。这些不是重要问题,应该在问完与工作相关的问题后再问。

就算要问也要讲究方法。比如:我比较遵循时间,喜欢按时上下班,请问贵公司在上下班时间上有没有什么要求?


再就是,提什么问题比较正确?

一定要提和工作相关的问题。比如更细节的工作内容有哪些?胜任这个职位需要具备哪些条件?主管的管理风格如何?公司未来的发展规划?

这些问题都比较切题,会给面试官留下很好的印象,他会认为你是很想进入这家公司,才会问这么多细节。


关于具体可以问哪些问题,下面总结了几个还不错的问题供大家参考:

  • 这个职位在公司的具体职责是什么,目前最紧要的任务是什么?
  • 公司对我面试的这个岗位的定位是什么,最希望这个人达成的工作指标有哪些?
  • 如果我有幸加入,公司您希望我三个月完成哪些工作?
  • 公司希望通过这个职位实现的长期目标是什么?
  • 公司的价值观和愿景是什么?
  • 公司未来一年的发展计划和团队规划?
  • 公司是一群什么样的小伙伴,这个岗位所在的的团队是什么氛围?
  • 通过刚才和我沟通,您对我的评价是什么,您觉得我的优势和劣势是什么?



最后再补充一点,有的面试官在考察完硬性技能后,还会考察你的软性技能,比如学习能力、团队协作与沟通能力、自我驱动能力等。



如何展现你的软技能呢?

我们有一些tips供你参考:

如何考察学习能力?大部分情况下,面试官会追溯你所描述过往经验的细节来判断。比如有一个项目你花了半年来完成,别人却用了一年,这说明你的学习能力比较强;再比如你做了一个开源项目,在github上很多人点赞;或者以你的资历来说,你掌握的技能高出行业平均水平。

如何考察目标导向?面试官可能会问你做这个项目的目标是什么。他会问你目标后再追溯你做这件事情的过程,如果你做的过程并不是围绕着目标展开的,或者后来做的事情偏离了目标,说明你不是一个目标导向的人。

如何考察团队协作能力?有两个问题专门用来考察团队协作能力,比如:

你有没有做过团队其他成员的决定? 当时是怎样的情况?你是如何和其他成员沟通的?最终结果如何?

每个人都会和难搞的人工作过?为什么这个人难搞?你是如何处理与他之间的关系的?后面通过哪些方法影响这个人?


以上是面试官在考察这些能力时通常会用的方法,大家可以根据这些问题在面试前提前做好相应的准备,不至于在面试时语无伦次。

以上,是「准备面试七步走」的全部干货,坚持看到这里的朋友们,你们真的不点个赞吗?