第1章 面试的流程

剑指offer

本来不想读,但是由于“真香定律”操控,还是读了。为了算法提升,认知进阶,还是有必要去认真阅读。
第1章 面试的流程_第1张图片

考虑书的内容还是比较多,那么就按照2周的节奏读完

面试官谈面试

  • 对于初级程序员,我一般会偏向考查算法和数据结构,看应聘者的基本功;对于高级程序员,我会多关注专业技能和项目经验
    --何幸杰(SAP,高级工程师)
  • 应聘者要事先做好准备,对公司近况、项目情况有所了解,对所应聘的工作很有热情,另外,应聘者还要准备好合适的问题问面试官
    --韩伟东(盛大,高级研究员)
  • 应聘者在面试过程中首先需要放松,不雅过于紧张,这有助于后面解决问题时开拓思路。其次不要急于编写完成,应该了解清楚所要解决的问题。这个时候最好和面试官先多做沟通,然后开始做一些整体设计和规划,这有助于编写高质量和高可读性的代码。完成代码后不要马上提交,最好自己检查并且借助一些测试用例来测试几遍代码,找出可能出现的错误
    --尧敏(淘宝,资深经理)
  • 神马都是浮云,应聘技术岗位就是踏实写程序
    --田超(微软,SDE II)
一、面试的三种形式
1、电话面试

特点:见不到对方,双方沟通只能依靠声音
1、应聘者尽尽可能用形象化语言把细节说清楚
2、约好面试时间,面对突然袭击,提前保证手机电量和周围环境安静
3、如果没有听懂或听清楚面试官问题,千万不要不懂装懂,答非所问
4、当不确定面试官问题时,一定要大胆向面试官多提问,直到弄清楚面试官意图为止
5、外企会有英语面试

2、共享远程桌面面试(少数大公司)

利用一些共享桌面的软件(Skype,WebEx),应聘者把自己电脑桌面共享给远程面试官

关注点:应聘者的编程习惯及调试能力

  • 思考清楚再开始编码
    没有形成清晰思路之前写出的代码通常漏洞百出,被面试官发现后,应聘者容易慌张,代码越改越乱,导致面试结果不理想。

  • 良好的代码命名和缩进对齐习惯
    一目了然的变量和函数名,加以合理的缩进和括号对齐,会让面试官觉得应聘者有参与大型项目的开发经验

  • 能够进行单元测试
    如果应聘者能够在定义函数之后,立即对该函数进行全面单元测试,那就相当于向面试官证明自己有专业软件开发经验。如果应聘者先写单元测试用例,再写解决问题函数,会刮目相看

  • 调试能力
    当发现运行结果不对之后反应,也是面试官关注重点。此时反应体现他的调试功底,若熟练设置断点、单步跟踪、查看内存、分析调用栈,快速发现问题根源并解决,面试官会觉得开发经验丰富,调试能力是书本学不到的

现场面试
  • 规划好路线并估算出行时间。
    提前半个小时,迟到会扣印象分
  • 准备好得体的衣服
    IT公司通常衣着随意,一般舒服干净的衣服都可以
  • 注意面试邀请函里面的面试流程
    如果面试有好几轮,时间也很长,那么在你面试过程中可能出现疲劳和思维迟钝,准备一些提神饮料或者食品
  • 准备几个问题
    每一轮面试的最后,面试官都会让应聘者问几个问题,应聘者都可以提前准备好问题。

现场面试考察沟通能力、学习能力、编程能力等综合能力

面试的3个环节

行为面试--》技术面试--》应聘者提问

1.3.1行为面试环节

简短的自我介绍,自我学习经历、工作经历即可,面试官会针对性提出几个问题了解

  • 1、应聘者的项目经验
    采用STAR模型描述项目经历
第1章 面试的流程_第2张图片
STAR模型
  • Situation :短暂的项目背景
    比如项目的规模,开发的软件功能、目标用户等

  • Task:自己完成的任务
    这个要写详细,让面试官对自己工作一目了然。注意用词区分“参与”和负责。负责涉及项目的总体架构设计、核心算法、团队合作问题,“参与”的人员很难负责

  • Action:为完成任务自己做了哪些工作,是怎么做的
    做系统人员,可以介绍系统架构特点,软件开发可以写基于什么工具应用那些技术,做软件测试的,可以写手工测试,还是自动化测试,白盒还是黑盒测试

  • Result :自己的贡献
    最好用数字加以说明,参与功能开发,则说按时完成多少功能,做优化,性能提高百分比,维护可以说改正多少bug

  • 举例
    Winforms是微软.NET中的一个成熟的UI平台(Situation)。本人的工作是在添加少量新功能之外主要负责维护已有的功能(Task)。新的功能主要是让WinForms的控件风格的Vista、Windows 7风格保持一致。在维护方面,对于较难问题,我用WinDbg等工具进行调试(Action)。在过去两年中,我共修改了超过200个Bug(Result)

常问问题

  • 你在该项目中碰到最大的问题是什么,你是如何解决的?
  • 从这个项目中你学到了什么?
  • 什么时候会和其他团队成员有什么样子冲突,你们是如何解决冲突的?

提示:
在介绍项目经验时,应聘者不必详述项目背景,而要突出介绍自己完成的工作及取得的成绩

  • 应聘者掌握的技能
    了解:指上过课或者看过书,但没有做过实际项目
    熟悉:在实际项目中使用某项技术已经有较长的时间,通过查阅文档可以独立解决大部分问题
    精通:对一项技术得心应手,开发过程中,请教该领域问题,都有能力解决,精通会让面试官对你期望很高,会调一些比较难的问题来问,除非你是“高人”
回答为什么跳槽

面试官总喜欢问为什么打算跳槽
回答这个问题时不要抱怨,也不要流露出负面的情绪。负面情绪通常是能够传染的,当应聘者总是在抱怨时,面试官就会担心把他招进来,那么他将会成为团队负面情绪的传染源,从而影响整个团队士气。
尽量避免四大原因

  • 老板太苛刻
  • 同事太难相处
  • 加班太频繁
  • 工资太低

前3个原因,会让面试官联想到自身,反而对应聘者产生戒备,后1个原因真实,但是不必要说

作者通常答案:现在的工作做了一段时间,已经没有太多激情了。因此希望寻找一份更有挑战的工作,然后具体论述为什么有些厌倦现在职位

技术面试环节
第1章 面试的流程_第3张图片
  • 1.扎实的基础知识
    扎实的基本功是成为优秀程序员的前提条件,因此面试官关注的是否具备扎实的基础知识。通常基本功体现3个方面:编程语言、数据结构和算法
    首先,要掌握至少一两门编程语言
    其次,数据结构通常是面试过程中考点,应聘者应熟练掌握链表、树、栈、队列和哈希表等数据结构,以及操作。重要集中于链表和二叉树
    最后,重点考查找、排序等算法,如二分查找、归并排序和快速排序,动态规划、贪婪算法

  • 2.高质量的代码
    只有注重质量的程序员,才能写出鲁棒、稳定的大型软件,在面试过程中面试官格外关注边界条件、特殊输入等看似细枝末节但实则至关重要的地方,以考察应聘者是否注重代码质量。很多时候面试官发现应聘者写出的代码只能完成最基本的功能,一旦输入特殊边界条件参数,就会错误百出甚至崩溃
    提示:面试官除了希望应聘者代码能够完成基本功能,还会关注应聘者是否考虑边界条件,特殊输入(空指针,空字符串)及错误处理

  • 3.清晰的思路
    只有思路清晰,应聘者才有可能在面试过程中解决复杂的问题。
    解决复杂问题方案:画图能使抽象问题形象化,举例使抽象问题具体化,分解使复杂问题简单化

  • 4.优化效率的能力
    优秀的程序员对时间和内存消耗锱铢必较,他们很有激情地不断优化自己代码,当面试官出题目有很多解法时候,通常期待应聘者最终能够找打最优解
    想要优化时间或者空间效率,首先知道如何分析效率
    想要优化代码效率,我们需要知道各种数据结构和算法的优缺点

    1. 优秀的综合能力
      应聘者除了要展示自己编程能力和技术功底,还需要展示自己软技能(Soft Skills),诸如自己的沟通能力和学习能力
      如何考察学习能力:第一种,面试官会问应聘者最近在看什么书,从中学习那些新技术,了解应聘者的学习愿望和学习能力
      第二种:抛出一个新概念,接下来他会观察应聘者能不能在短时间内理解这个概念并解决相关问题
      知识迁移能力是一种特殊的学习能力
      考察应聘者的抽象建模能力和发散思维能力,考察应聘者能不能将生活中所遇到问题抽象成合理的数据结构和算法
应聘者提问环节

在结束面试前510分钟,面试官会给应聘者问几个问题,应聘者问题质量对面试结果有影响,有些人沟通能力强,马上就能想到有意思的问题。一般建议提前准备23的问题,应对提问 环节

面试官让应聘者问几个问题,主要是了解他最关心的问题有哪些,应聘者至少要问一两个问题,否则面试官觉得你对我们公司不感兴趣,问得合适是个加分项,问题不得当,印象分会大打折扣

禁忌
1、不要问和自己的职位没有关系的问题,比如“公司未来五年发展战略是什么?”
2、不要问薪水,技术面试不是谈薪水的时候,谈工资要等通过面试之后和HR谈
3、不要打听面试结果,最终决定应聘者能不能通过面试,是要把所有面试官的评价综合起来,问了等于白问,会让面试官觉得你没有自我评估能力

推荐:
推荐问题是与应聘的职位或者项目相关问题,如果这种类型问题问得很到位,那么面试官就会觉得你对应聘职位很有兴趣
如何提问好:

  • 1、首先要对应聘的职位或者项目背景有一定了解
    1)面试前做足功课,到网上搜集相关信息,做到对公司成立时间,主营业务,职位要求了然于胸
    2)面试过程中留意面试官说过的话,不少面试官会简单介绍招聘职位和相关项目,其中也包含从其他渠道无法得到信息,找出一两点,对面试官提问
总结

重点介绍面试流程,从电话面试开始,接下来远程桌面面试,到现场面试
现场面试,包含三部分,行为面试环节,技术面试环节,应聘者提问环节

其中面试官关注应聘者5个方面的素质
1、基础知识
2、写出高质量代码
3、解决问题思路清晰
4、优化效率的能力
5、综合素质,即软技能(学习能力,沟通能力)

5种能力是后续专门深入探讨

剑指offer2 git地址

https://github.com/yinlingchaoliu/SwordOffer

你可能感兴趣的:(第1章 面试的流程)