《剑指offer》序——面试流程及面试须知

通常,面试是从电话面试开始的。接下来可能有一两轮共享桌面远程面试,面试官通过桌面共享软件远程考查应聘者的编程和调试能力。如果应聘者的表现足够优秀,那么公司将邀请他到公司去接收现场面试。

通常,面试官会认可应聘者的几种编程习惯

  • 思考清楚再开始编码。应聘者应先想清楚解决问题的思路,如算法的时间、空间复杂度各是什么,有哪些特殊情况需要处理等,然后动手编写代码。
  • 良好的代码命名和缩进对齐习惯。良好的代码命名和缩进对齐的习惯会让面试官觉得应聘者有参与大型项目的开发经验。
  • 能够进行单元测试。如果应聘者先写单元测试用例,再写解决问题的函数,那么我相信面试官定会对你刮目相看,因为能做到测试在前、开发在后的程序员实在太稀缺了,他会毫不犹豫地抛出橄榄枝的。

当我们在写代码的时候遇到问题的表现

当应聘者运行代码发现结果不对之后的表现,也是面试官关注的重点,因为应聘者此时的反应、采取的措施都能体现出他的调试功底。如果应聘者能够熟练地设置断点、单步跟踪、查看内存、分析调用栈,就能很快发现问题的根源并最终解决问题,那么面试官将会觉得他的开发经验很丰富。

在共享桌面远程面试过程中,面试官最关心的是应聘者的编程习惯和调试能力。

现场面试需要注意:

在去公司参加现场面试之前,应聘者应做好以下几点准备:

  • 规划好路线并估算出行时间。如果面试迟到,那至少印象分会大打折扣。
  • 准备好得体的衣服。IT公司通常衣着比较随意,应聘者通常没有必要穿着正装,一般舒适干净的衣服都可以。
  • 注意面试邀请函里的面试流程。
  • 准备几个问题。每一轮面试的最后,面试官都会让应聘者问几个问题,应聘者可以提前准备好问题。

面试3环节

面试的3个环节:行为面试、技术面试、应聘者提问

一、行为面试

面试开始的5~10分钟是行为面试时间,面试官会注意应聘者的性格特点,深入地了解简历中列举的项目经历。这一环节一般不会问技术难题,因此也是一个暖场的过程。
不少面试官会让应聘者做一个简短的自我介绍,由于面试官手中拿着应聘者的简历,而那里有应聘者的详细信息,因此此时的自我介绍不用花很多时间,用30秒到1分钟介绍自己的主要学习、工作经历即可。如果面试官对你的某一段经历或者某一个项目有兴趣,那么他会有针对性地提几个问题详细了解。

应聘者的项目经验

应聘者自我介绍之后,面试官接着会对照应聘者的简历去详细了解感兴趣的项目。应聘者在准备简历时,建议按照如下的STAR模型描述自己经历过的每一个项目。

  • Situation:简短的项目背景,比如项目的功能,开发的软件的功能、目标用户等。
  • Task:自己完成的任务。在用词上区分“参与”和“负责”。如果应聘者“负责”了某个项目,那么面试官可能会问项目的总体框架设计、核心算法、团队合作等问题。
  • Action:为完成任务自己做了哪些工作,是怎么做的。这里可以详细介绍,做软件开发的,可以写基于什么工具在哪个平台下应用了哪些技术。
  • Result:自己的贡献。这方面的信息可以写得详细些,最好能用数字加以说明。如果是参与功能开发,则可以说按时完成了多少功能。

在介绍项目经验时,一拧着不必详述项目的背景,而要突出介绍自己完成的工作及取得的成绩。

面试官针对项目经验最常问的问题包括如下几个类型

  • 你在项目中碰到的最大问题是什么,你是怎么解决的?
  • 从这个项目中,你学到了什么?
  • 什么时候会和其他团队成员(包括开发人员、测试人员、设计人员)有什么样的冲突,你们是怎么解决冲突的?(与前端合作,共同探讨,相互理解)

应聘者掌握的技能

描述技能掌握程度时注意“了解”、“熟悉”和“精通”的区别。

  • “了解”指对某项技术只是上过课或者看过书,但没有做过实际的项目。通常不建议在简历中列出只是肤浅地了解一点的技能。简历中我们描述技能的掌握程度大部分应该是“熟悉”。
二、技术面试

一轮1小时的面试,通常技术面试会占据40~50分钟,这是面试的重头戏,对面试的结果起决定性作用。

技术面试需要具备的5种素质

  • 基础知识扎实全面,包括编程语言、数据结构、算法等
  • 能写出正确的、完整的、鲁棒的高质量代码
  • 能思路清晰地分析、解决复杂问题
  • 能从时间、空间复杂度两方面优化算法效率
  • 具备优秀的沟通能力、学习能力、发散思维能力等

面试时如果遇到简单的问题,则应聘者一定要注重细节,写出完整,鲁棒的代码。如果遇到复杂的问题,则可以通过画图、举具体例子分析和分解复杂问题等方法先理清思路再动手编程。

1、扎实的基础知识

通常基本功在编程面试环节体现在3个方面:编程语言、数据结构和算法。编程语言的关键字特性等。
数据结构通常是编程面试过程中考察的重点。在参加面试之前,有需要熟练掌握链表、树、栈、队列和哈希表等数据结构,以及他们的操作。留意各大公司的面试题,会发现与链表和二叉树相关的问题是很多面试官喜欢问的问题。
要做到事先对链表的插入和删除节点了如指掌,对二叉树的各种遍历方法的循环和递归写法都烂熟于心,这样到真正面试的时候也就游刃有余了。
最后,各大公司都会注重考查查找、排序等算法。应聘者在了解各种查找和排序算法的基础上,重点掌握二分查找、归并排序和快速排序。

2、高质量的代码

在面试过程中,面试官总会格外关注边界条件、特殊输入、错误处理等看似细枝末节但实则至关重要的地方,以考查应聘者是否注重代码质量。

通常越是简单的问题,面试官的期望值就会越高。如果题目很简单,面试官就会期待应聘者能够很完整地解决问题,除完成基本功能之外,还要考虑到边界条件、错误处理等各个方面。
除问题考虑不全之外,还有一个面试官不能容忍的错误就是程序不够鲁棒。如输入一个null会直接导致程序崩溃等问题。这样的代码如果加入到软件当中,那么将是灾难。因此,当面试官看到代码没有对null值进行判断并特殊处理的时候,通常他连往下看的兴趣都没有。
有的程序是否有鲁棒性并不是那么明显,举例如下:

求链表中的倒数第k个节点

方法是使用两个指针,第一个指针先走k-1步,然后两个指针一起走,当第一个指针走到尾节点的时候,第二个指针所在位置就是倒数第k个节点。
该题中需要特别注意的问题是:当链表中的节点总数小于k,或者当输入的k是0时,会引起程序的崩溃。这点小细节将很可能会决定面试的成败。
要想很好地解决这样的问题,最好的办法是在动手写代码之前想好测试用例。只有把各种可能的输入实现都想好了,才能在写代码的时候把各种情况都进行相应的处理。写完代码之后,也不要立刻给面试官检查,而是先在心里默默地运行。当输入之前想好的所有测试用例都能得到合理的输出时,再把代码交给面试官。做到了这一步,通过面试拿到offer就是顺理成章的事情了。

3、清晰的思路

在面试时,有时面试官会有意出一些复杂的问题,以考查应聘者能否在短时间内形成清晰的思路并解决问题。对于确实很复杂的问题,面试官甚至不期待应聘者能在面试不到一小时的时间里给出完整的答案,他更看重的可能还是应聘者是否有清晰的思路。面试官通常不喜欢应聘者在没有形成清晰思路之前就草率地开始写代码,这样写出来的代码容易逻辑混乱,错误百出。
应聘者可以用几个简单的方法帮助自己形成清晰的思路:

  • 首先,举几个简单的例子让自己理解问题。
  • 其次,可以试着用图形表示抽象的数据结构。
  • 最后,可以试着把复杂的问题分解成若干简单的子问题,再一一解决。

如果在面试的时候遇到难题,我们有3种办法分析、解决复杂问题:画图能使抽象问题形象化,举例能使抽象问题具体化,分解使复杂问题简单化。

4、优化效率的能力

当面试官出的题目有多种解法时,通常他会期待应聘者能够找到最优解

当面试官提示还有更好的解法的时候,应聘者不能放弃思考,而应该努力寻找在时间或者空间消耗上可以优化的地方。

如何优化时间或者空间效率?

  • 首先要知道如何分析效率。如求斐波拉契数列,如果使用递归,分析它的递归调用树,会发现它有大量的重复计算,时间复杂度以n的指数增加。而如果使用循环求解,那么时间效率就只有O(n)。
  • 其次还要数值各种数据结构的优缺点,并能选择合适的数据结构解决问题。
  • 要想优化代码效率,我们也要熟练掌握常用的算法。
5、优秀的综合能力

在面试过程中,应聘者的软技能,如沟通能力和学习能力也相当重要。
在面试过程中,面试官会观察应聘者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰,并以此判断其沟通能力的强弱。
通常面试官有两种办法考查应聘者的学习能力。

  • 第一种是询问应聘者最近在看什么书、从中学到了那些新技术。面试官可以用这个问题了解应聘者的学习愿望和学习能力。
  • 第二种方法是抛出一个新概念,接下来他会观察应聘者能不能在较短的时间内理解这个新概念并解决相关问题。

只是迁移能力是一种特殊的学习能力。面试官经常会先问一个简单的问题,再问一个复杂但和前面的简单问题相关的问题。这时候面试官期待应聘者能够从简单问题中得到启示,从而找到解决复杂问题的窍门。

三、应聘者提问环节

在结束面试前的5到10分钟,面试官会给应聘者机会问几个问题,应聘者的问题的质量对面试的结果也有一定的影响。应聘者可以在每一轮面试前准备2~3个问题,这样到提问环节就可以游刃有余了。
面试官让应聘者问几个问题,主要是想了解他最关心的问题有哪些,因此应聘者至少要问一两个问题。
有些问题是不适合在技术面试这个环节问的。

  • 首先,不要问和自己职位不相关的问题,如“公司未来五年的发展战略是什么”
  • 其次,不要问薪水。技术面试不是谈薪水的时候,要谈工资要等通过面试之后和HR谈。
  • 再次,不要立即打听面试的结果。现在大部分公司的面试都有好几轮,最终决定的是几轮面试的综合评价。
  • 最后,推荐问的问题是与应聘的职位或者项目相关的问题。如果这种类型的问题问得很到位,那么面试官会觉得你对应聘的职位或者项目的背景有一定了解。

我们可以通过两方面去了解相关的信息:一是面试前做足功课,到网上去搜集一些相关信息,做到对公司成立时间、主要业务、职位要求等都了然于胸;二是面试过程中留心面试官说过的话。有不少面试官在面试之前会简单介绍与招聘职位相关的项目,其中会包含从其他渠道无法得知的消息,比如项目进展情况等。应聘者可以从中找出一两个点,然后向面试官提问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值