当前位置: 锐智首页 > 就业指导 > 正文

程序员面试流程

时间:2022-12-14 10:30 来源:dfrz

1 面试的三种形式

应聘者通过简历筛选以及笔试后,接下来便进入面试环节。现场面试是所有公司都有的环节,电话面试国内大IT公司几乎都有,共享桌面远程面试只有少数几家大公司会有。大概流程是:电话面试–>共享桌面远程面试–>现场面试。


1.1 电话面试

顾名思义,电话面试是面试官以打电话的形式考查应聘者,有时会提前预约有时会突然打过来,所以应聘者最好在投出简历或者通过笔试后一两个礼拜内尽量别去嘈杂的地方,而且手机尽量备足电。电话面试时声音是唯一的沟通手段,应聘者应尽可能用形象的语言把细节说清楚,如果在英语面试时没有听清或者没有听懂面试官的问题,应聘者要敢于说pardon.


1.2 共享桌面远程面试

共享桌面远程面试是指利用一些共享桌面的软件,应聘者把自己的桌面共享给远程的面试官,然后面试官就能观看应聘者编程和调试的过程。此种方式主要考查应聘者的编程习惯以及调试能力,包括以下几点


思考清楚后再开始编码;

良好的代码命名和缩进对齐习惯;

能够进行单元测试。


1.3 现场面试

现场面试是整个面试流程中的重头戏,在于考察应聘者的沟通能力、学习能力、编程能力等综合实力,所以应聘者面试之前得做足准备,具体细节在下一节介绍。除此之外,当天参加面试前还得做好以下几点准备:


规划好路线并估算好时间;

穿着得体的衣服;

注意面试流程,有可能有很多轮,这时就得备好食物及提神的饮料;

准备好问面试官的问题。

2 现场面试的具体流程

现场面试通常会有好几轮,每一轮面试分为3个环节:首先是行为面试,面试官参照简历了解应聘者的过往经验;然后是技术面试,这一环节很有可能会要求应聘者现场写代码;最后一个环节是应聘者问几个自己感兴趣的问题


2.1 行为面试环节

面试开始的5~10分钟通常是行为面试环节,此环节面试官会注意应聘者的性格特点,深入了解简历中列举的项目经历。最开始面试官一般会叫应聘者做一个简短的自我介绍,这时我们只需用30秒到1分钟介绍自己的主要学习、工作经历即可,之后面试官一般会从以下几点了解应聘者的过往:


应聘者的项目经验

在介绍项目经验(包括在简历上介绍和面试时口头介绍)时,应聘者不必详述项目的背景,而要突出介绍自己完成的工作及取得的成绩。具体的每一个项目一般可由以下4部分组成:

简短的项目背景,最好一句话概括;

自己完成的任务,注意区分“参与”和“负责”;

为了完成任务自己做了哪些工作,是怎么做的;

自己的贡献,比如按时完成了多少功能,性能提高了多少,修改了多少Bug

另外,面试官最常问的问题有以下3类:

你在该项目中碰到的最大的问题是什么,你是怎么解决的?

你从这个项目中学到了什么?

什么时候会和其他团队成员有什么样的冲突,你们是怎么解决冲突的?

应聘者掌握的技能

不管是简历上还是口头上都要注意使用“了解”、“熟悉”和“精通”。

“了解”指对某一个技术只是上过课或者看过书,但没有做过实践的项目。通常不建议在简历中列出只是肤浅地了解一点的技能,除非这项技术应聘的职位的确需要。

简历中我们描述技能的掌握程度大部分应该是“熟悉”。如果我们在实际项目中使用某一项技术已经有较长的时间,通过查阅相关的文档可以独立解决大部分问题,我们就熟悉它了。

如果我们队一项技术使用得得心应手,在项目开发过程中当同学或者同事向我们请教这个领域的问题时我们都有信心也有能力解决 ,那就可以说自己“精通”这门技术。

回答“为什么跳槽”

对于还未参加过工作的同学可以将这个问题换成“为什么选择这个公司/岗位”。已经参加过工作的应聘者回答这个问题时不要抱怨,也不要流露出负面情绪,尽量避免以下4个原因:老板太苛刻、同事太难相处、加班太频繁、工资太低。注意回答这个问题以及进入后面应聘者提问环节之前应聘者都应该做足准备,包括了解公司近况、项目情况、这个岗位的具体内容与作用等。建议回答的时候尽量说以前的岗位成长有限、没兴趣继续深入下去、目前做的事情已经无法让自己成长了等等,然后说说贵公司的贵岗位主要做啥的(这个就要提前做好调查否则容易适得其反)并且该岗位刚好是自己想要挑战和成长的方向。


2.2 技术面试环节

一轮1小时的面试通常技术面试会占据40~50分钟,对面试的结果起决定性作用。面试官主要关注应聘者5方面素质:


扎实的基础知识,包括编程语言、数据结构、算法等

编程语言以C++为例,面试官会经常问到指针与const、传入值参数与传入引用参数、多态等;数据结构上需要熟练掌握链表、树、栈、队列和哈希表等数据结构;算法上则主要考察查找、排序类基础算法,重点掌握二分查找、归并排序和快速排序。

能写出正确的、完整的、鲁棒的高质量代码

面试过程中,面试官总会格外关注边界条件、特殊输入(如空指针、空字符串等)、错误与异常处理等看似细枝末节但实质至关重要的地方。通常越是简单的问题,面试官的期望值就越高。最好在动手写代码之前想好测试用例,把各种可能的输入想清楚,然后在代码里对各种情况都做了相应的处理,写完后先在心里默默运行,确定之前的各种测试用例都能得到合理输出时,再交给面试官。

能思路清晰的分析、解决复杂问题

相比于给出完整答案,面试官通常更看重应聘者能否短时间内形成清晰的思路并解决问题。遇到复杂问题,首先可以用几个简单的具体例子让自己理解问题,甚至可以想想自己之前是否遇到类似的问题;其次可以试着用图表分析问题,将抽象的问题具现化;最后可以尝试把复杂的问题分解成若干简单的子问题,也可以先用几个最简单的输入与输出看看是否能找出规律。

能从时间、空间复杂度两方面优化算法效率

想要优化时间或者空间效率,我们需要知道如何分析算法效率;熟知各种数据结构的优缺点,并能选择合适的数据结构解决问题;熟练掌握常用算法,如查找和排序。

具备优秀的沟通能力、学习能力、发散思维能力等

在面试过程中,面试官会通过多种途径考查应聘者的综合能力:

观察应聘者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰来以此考查其沟通能力的强弱;

从应聘者说话的神态和语气来判断其是否有团队合作意识;

询问应聘者最近看什么书、学到了哪些新技术或者抛出一个新概念看应聘者如何理解来考查应聘者的学习能力;

先通过问简单问题然后问一个复杂但和前面相关的问题来考查应聘者的知识迁移能力;

出一些抽象的算法题目来考查应聘者抽象建模能力和发散思维能力。


2.3 应聘者提问环节

在结束面试前的5~10分钟一般会进入应聘者提问环节。面试官让应聘者问问题主要是想了解应聘者最关心的问题有哪些,合适的问题能够增加印象分。有些问题不适合在这个环节提出,比如和自己职位无关的问题,薪水问题,面试结果等。推荐的问题是与招聘的职位或者项目相关的问题,这可通过提前收集或者面试过程中留心面试官说过的话获得。

以下是几个问题可作参考:


你们团队组建多久了?有多少人?新人占比怎么样?

你们项目具体做啥?处于啥阶段?面临啥挑战?有啥技术前进方向?我进去具体做啥?