剑指offer笔记(一)

12 篇文章 0 订阅

第一章 面试的流程

面试官谈面试


  • 对于初级程序员,一般会偏向考察算法和数据结构,看应聘者的基本功;对于高级程序员,会多关注专业技能和项目经验

  • 应聘者要事先做好准备,对公司近况、项目情况有所了解,对应聘的工作很有热情。另外,应聘者还要准备好合适的问题问面试官。

  • 应聘者在面试过程中首先需要放松,不要过于紧张,这有助于后面解决问题时开拓思路其次不要急于编写代码,应该先了解清楚所要解决的问题。这时候最好先和面试官多做沟通,然后开始做一些整体的设计和规划,这有助于编写高质量和高可读性的代码写完代码后不要马上提交,最好自己检查借助一些测试用例来测试几遍代码,找出可能出现的错误

面试的三种形式


  • 大部分公司的面试都是从电话面试开始的。通过电话面试之后,有些公司还会有一两轮远程面试。面试官让应聘者共享自己的桌面,远程观察应聘者编写及调试代码的过程。如果前面的面试都很顺利,应聘者就会收到现场面试的邀请信,请他去公司接受面对面的面试。

电话面试

  • 有些面试官会先和应聘者预约电话面试的时间,而有些面试官却喜欢搞突然袭击,一个电话打过去就开始面试。

    • 应聘者在投出简历之后的一两个星期之内,要保证手机电池能至少连续通话一小时;
    • 应聘者不要长时间待在很嘈杂的地方,避免因听不清而尴尬。
  • 应聘者在电话面试的时候应尽可能用形象化的语言把细节说清楚。

  • 很多外企在电话面试时都会加上英语面试的环节,甚至有些公司全部面试都会用英语进行,这对应聘者的听力提出了更高的要求。

    • 如果应聘者在面试的时候没有听清楚或者听懂面试官的问题,则千万不要不懂装懂、答非所问,这是面试的大忌;
    • 当不确定面试官的问题的时候,应聘者一定要大胆地向面试官多提问,直到弄清楚面试官的意图为止。

共享桌面远程面试

  • 这种形式的面试,面试官最关心的是应聘者的编程习惯及调试能力

  • 优秀的编程习惯

    • 思考清楚再开始编码:应聘者应该先想清楚解决问题的思路,如算法的时间、空间复杂度各是什么,有哪些特殊情况需要处理等,然后再动手编写代码;
    • 良好的代码命名和缩进对齐习惯;
    • 能够进行单元测试:先写单元测试用例,再写解决问题的函数,即测试在前,开发在后。
  • 通常写代码的时候都会遇到问题,如果应聘者能够熟练地设置断点单步跟踪查看内存分析调用栈,就能很快发现问题的根源并最终解决问题。

现场面试

  • 现场面试前的准备
    • 规划好路线并估算出行时间;
    • 准备好得体的衣服;
    • 注意面试邀请函里的面试流程;
    • 准备几个问题。

面试的三个环节


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

行为面试环节

  • 在行为面试这个环节里,面试官会注意应聘者的性格特点,深入地了解简历中列举的项目经历。

    • 不少面试官会让应聘者做一个简单的自我介绍;
    • 如果面试官对你的某一段经历或者参与的某一个项目很感兴趣,那么他会针对性地提几个问题详细了解。
  • 应聘者的项目经验

    • 应聘者在准备简历的时候,可以使用 STAR 模型描述自己经历过的每一个项目;
    • Situation:简短的项目背景
      • 比如项目的规模;
      • 开发软件的功能、目标客户。
    • Task:自己完成的任务
      • 要写详细,让面试官对自己的工作一目了然;
      • 如果只是加入某一个开发团队写了几行代码就用“参与”,如果对项目的总体框架设计、核心算法、团队合作等比较熟悉,就用“负责”。
    • Action:为完成任务自己做了哪些工作 ,是怎么做的
      • 做系统设计的,可以介绍系统架构的特点;
      • 做软件开发的,可以写基于什么工具在哪个平台下应用了哪些技术;
      • 做软件测试的,可以写是手工测试还是自动化测试、是白盒测试还是黑盒测试。
    • Result:自己的贡献
      • 这方面要写的具体,最好用数字加以说明;
      • 如果参与功能开发,则可以说按时完成了多少功能;
      • 如果做优化,则可以说性能提高的百分比是多少;
      • 如果是维护,则可以说修改了多少个 bug。
  • 面试官针对项目经验最常问的问题

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

    • 描述技能掌握程度时要注意“了解”、“熟悉”和“精通”的区别;
    • “了解”指对某项技术只是上过课或者看过书,但没有做过实际的项目;
    • 如果在实际项目中使用某项技术已经有较长的时间,通过查阅相关的文档可以独立解决大部分的问题,那么就是“熟悉”;
    • 如果对一项技术使用得得心应手,在项目开发过程中,当别人请教你这个领域的问题时,你都有信心也有能力解决,这个时候就可以说自己“精通”。
  • 回答“为什么跳槽”

    • 在回答这个问题时不要抱怨,也不要流露出负面的情绪;
    • 应聘者应尽量避免以下4个原因:
      • 老板太苛刻;
      • 同事太难相处;
      • 加班太频繁;
      • 工资太低。

技术面试环节

  • 应聘者需要的五种素质

    • 扎实的基础知识:基础知识扎实全面,包括编程语言、数据结构、算法等;
    • 能写高质量的代码:能写出正确的、完整的、鲁棒的高质量代码
    • 分析问题时思路清晰:能思路清晰地分析、解决复杂问题;
    • 能优化时间效率和空间效率 :能从时间、空间复杂度两方面去优化算法效率;
    • 学习沟通能力:具备优秀的沟通能力、学习能力、发散思维能力等。
  • 应聘者在面试之前需要做足准备,对编程语言、数据结构和算法等基础知识有全面的了解。

  • 面试时如果遇到简单的问题,则应聘者一定要注重细节,写出完整、鲁棒的代码;如果遇到复杂的问题,则应聘者可以通过画图、举具体例子分析和分解复杂问题等方法先厘清思路再动手编程;除此之外,应聘者还应该不断优化时间和空间效率,力求找到最优的解法;在面试过程中,应聘者还应该主动提问,以弄清楚题目的要求,表现自己的沟通能力;当面试官前后问的两个问题有相关性的时候,尽量把前面问题的思路迁移到后面的问题中去,展示自己良好的学习能力。

  • 面试官除了希望应聘者的代码能够完成基本的功能,还会关注应聘者是否考虑了边界条件、特殊输入(如 nullptr 指针、空字符串等)及错误处理。

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

应聘者提问环节

  • 有些问题是不适合在技术面试这个环节里问的:
    • 首先,不要问和自己职位没有关系的问题,比如“公司未来五年的发展战略是什么?”;
    • 其次,不要问薪水
    • 再次,不要立即打听面试结果,比如“您觉得我能拿到 offer 吗?”;
    • 最后,推荐问的问题是与应聘的职位或者项目相关的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值