《剑指Offer》 -1

何海涛的博客链接 http://zhedahht.blog.163.com/

第一章 面试的流程

面试有三种形式,电话面试,共享桌面远程面试和现场面试。

电话面试

  • 有些面试官喜欢搞突击,一个电话打过去就开始面试。为了应付这种突然袭击,建议应聘者在投出简历之后的一两个星期之内,要保证手机电池能至少连续通话一小时。
  • 如果没听清或者没听懂问题,要敢于说pardon。

共享桌面远程调试

  • 思考清楚再开始编码
  • 良好的代码命名和缩进对齐习惯:一目了然的变量和函数名
  • 能够进行单元测试:定义函数后,立即进行全面的单元测试

应该有的顺序:先写单元测试用例,再写解决问题的函数。测试在前,开发在后。

如果应聘者能够熟练地设置断电、单步跟踪、查看内存,分析调用栈,就能很快发现问题的根源并最终解决问题。调试能力是书本上学不到的,只有通过大量的软件开发实践才能积累出调试技巧。

面试

  • 除了项目经验等信息外,面试官针对项目经验最常问的问题包括如下几个类型:
  • 你在该项目中碰到的最大问题是什么,你是怎么解决的?
  • 从这个项目中你学到了什么?
  • 什么时候会和其他团队成员(包括开发人员、测试人员、设计人员、项目经理等)有什么样的冲突,你们是怎么解决冲突的?

回答“为什么跳槽”时应该尽量避免以下几个原因:

  • 老板太苛刻
  • 同事太难相处
  • 加班太频繁
  • 工资太低(要清楚面试环节还不是谈工资的时候)

笔者在面试的时候通常给出的答案是:现在的工作做了一段时间,已经没有太多激情了,因此希望寻找一份更加有挑战性的工作。

技术面试环节,总体来说他们都会关注应聘者的5种素质:

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

在面试过程中,应聘者还应该主动提问,以弄清楚题目的要求,表现自己的沟通能力。

一些零碎的注意事项:

各大公司面试题中,与链表和二叉树相关的问题是很多面试官喜欢问的问题;

面试官会格外关注边界条件、特殊输入 等看似细枝末节但实则至关重要的地方,以考察应聘者是否注重代码质量;

面试官至少会期待应聘者能够在不需要提示的情况下,考虑到输入的字符串有非数字字符和正负号,要考虑到最大的正整数和最小的负整数以及溢出。

要想很好地解决问题,最好的方法是在动手写代码之前先想好测试用例。只有把各种可能的输入事先都想好了,才能在写代码的时候把各种情况都进行相应的处理。写完代码之后,也不要立刻给面试官检查,而是在心里默默地运行。当输入之前想好的所有测试用例都能得到合理的输出时,再把代码交给面试官。

清晰的思路:

对于一些复杂的问题,面试官甚至不期待应聘者能在面试不到一小时的时间里给出完整答案,他更看重的可能还是应聘者是否有清晰的思路。

形成清晰思路的方法:

1) 首先,列举几个简单的具体例子让自己理解问题;

2) 其次,可以试着用图形表示抽象的数据结构;

3)最后,可以试着把复杂问题分解成若干个简单的子问题,再一解决。

优化效率的能力:

优秀的程序员对时间和内存的消耗锱铢必较,他们很有激情地不断优化自己的代码。

优秀的综合能力:

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

应聘者提问环节:

不建议问的:跟自己职位没有关系的问题、薪水问题、打听面试结果;

推荐问:和应聘的职位或者项目相关的问题。

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

你可能感兴趣的:(《剑指Offer》 -1)