第1章 面试的流程
第2章 面试需要的基础知识
第3章 高质量的代码
第4章 解决面试题的思路
第5章 优化时间和空间效率
第6章 面试中的各项能力
第7章 两个面试案例
6.2 沟通能力和学习能力
1.沟通能力
随着软件、系统功能越来越复杂,开发团队的规模也随之扩张,开发者、测试者和项目经理之间的沟通交流也变得越来越重要。也正因为此,很多公司在面试的时候都会注意考查应聘者的沟通能力。这就要求应聘者无论是在介绍项目经验还是介绍解题思路的时候,都需要逻辑清晰明了,语言详略得当,表述的时候重点突出、观点明确。
我们不能把好的沟通能力理解成夸夸其谈。在面试的时候,知之为知之,不知为不知,对于不清楚的知识点,要勇敢承认,千万别不懂装懂。通常当应聘者说自己很懂某一领域的时候,面试官都会跟进几个问题。如果应聘者在不懂装懂,面试官迟早会发现,他可能就会觉得应聘者在其他的地方也有浮报虚夸的成分,这将是得不偿失的。
有意向加入外企的应聘者要注意提高自己英文交流的能力。不少外企的面试部分甚至全部采用英语面试,这对英语的要求就很高。我们通过了英语的四六级考试未必能用英语对话。如果觉得自己英语的听说能力还不够好,建议花更多的时间来提高自己的听力。英语面试中最重要的是我们要听懂面试官的问题。通常采用英文面试的面试官自己的英语都比较好,即使我们的发音不够标准,对方一般也能听懂。这和我们能听懂普通话不标准的老外说中文的道理是一样的。但如果面试官的问题没有听明白,那我们就是说得再清楚也无济于事了。
2.学习能力
计算机是一门更新速度很快的学科,每年都有新的技术不断涌现。因此作为这个领域从业人员的软件工程师们需要要具备很强的学习能力,否则时间一长就会跟不上技术进步的步伐。也正是因为这个原因,IT公司在面试的时候,面试官都会重视应聘者的学习能力。只有具备很强的学习能力及学习愿望的人,才能不断完善自己的知识结构,不断学习新的先进技术,让自己的职业生涯保持长久的生命力。
通常面试官有两种办法考查应聘者的学习能力。第一种方法是询问应聘者最近在看什么书或者在做什么项目、从中学到了哪些新技术。面试官可以用这个问题了解应聘者的学习愿望和学习能力。学习能力强的人对各种新技术充满了兴趣,随时学习、吸收新知识,并把知识转换为自己的技能。第二种方法是抛出一个新概念,接下来观察应聘者能不能在较短时间内理解这个新概念并解决相关的问题。本书收集的面试题涉及诸如数组的旋转(面试题8)、二叉树的镜像(面试题19)、丑数(面试题34)、逆序对(面试题36)等新概念。当面试官提出这些新概念的时候,他期待应聘者能够通过思考、提问、再思考的过程,理解它们并最终解决问题。
3.善于学习、沟通的人也善于提问
面试官有一个很重要的任务就是考查应聘者的学习愿望及学习能力。学习能力怎么体现呢?面试官提出一个新概念,应聘者没有听说过它,于是他在已有的理解的基础上提出进一步的问题,得到面试官的答复之后,思考再提问,几个来回之后掌握了这个概念。这个过程能够体现应聘者的学习能力。通常学习能力强的人具有主动积极的态度,对未知的领域有强烈的求知欲望。因此建议应聘者在面试过程中遇到不明白的地方多提问,这样面试官就会觉得你态度积极、求知欲望强烈,会给面试结果加分。
面试小提示:
面试是一个双向交流的过程,面试官可以问应聘者问题,同样应聘者也可以向面试官提问。如果应聘者能够针对面试题主动地提出几个高质量的问题,面试官就会觉得他有很强的沟通能力和学习能力。
举个例子,Google曾经有一道面试题:找出第1500个丑数。很多人都不知道丑数是什么。不知道怎么办?面试官就坐在对面,可以问他。面试官会告诉你只含有2、3、5三个因子的数就是丑数。你听了后,觉得听明白了,但不太确定,于是可以举几个例子并让面试官确认你的理解是不是正确:6、8、10、12都是丑数,但14就不是,对吗?当面试官给出肯定的答复,你就知道自己的理解是对。问题问的是第1500个丑数,与顺序有关。可是哪个数字是第一个丑数呢,1是不是第一个?这个你可能也不能确定,怎么办?还是问面试官,他会告诉你1是或者不是丑数。题目是他出的,他有责任把题目解释清楚。
有些面试官故意一开始不把题目描述清楚,让题目存在一定的二义性。他期待应聘者能够一步步通过提问来弄明白题目的要求。这也是在考查应聘者的沟通能力。为什么要这样考查?因为实际工作也是这样,不是一开始项目需求就定义得很清楚,程序员需要多次与项目经理甚至客户反复沟通才能把需求弄清楚。如果没有一定的沟通能力,当程序员面对一个模糊的客户需求时他就会觉得无从下手。
比如最近很流行的一个面试题,面试官最开始问:如何求树中两个结点的最低公共祖先。此时面试官对题目中的树的特点完全没有给出描述,他希望应聘者在听到问题后会提出几个问题,比如这棵树是二叉树还是普通的树。
如果面试官说是二叉树,应聘者可以继续问该树是不是排序的二叉树。面试官回答是排序的。听到这里,应聘者才能确定思路:从树的根结点出发遍历树,如果当前结点都大于输入的两个结点,则下一步遍历当前结点的左子树;如果当前结点小于输入的两个结点,则下一步遍历当前结点的右子树。一直遍历到当前结点比一个输入结点大而比另一个小的时候,此时当前结点就是符合要求的最低公共祖先。
在应聘者问树是不是二叉树的时候如果面试官回答是任意的树,此时应聘者可以接着提问在树结点中有没有指向父结点的指针。如果面试官给出肯定的回答,也就是树的结点中有指向父结点的指针,此时从输入的结点出发,沿着指向父结点的指针一直到树的根结点,可以看做一个链表,因此这个题目的解法就和求两个链表的第一个公共结点的解法是一样的了。如果面试官给出的是否定的回答,也就是树的结点没有指向父结点的指针,那么我们可以在遍历的时候用一个栈来保存从根结点到当前结点的路径,最终把它转化成求两个路径的最后一个公共结点。详细的解题过程请参考本书的7.2节。
面试官给出不同的条件,这将是3个完全不一样的题目。如果一开始应聘者没有弄清楚面试官的意图就贸然动手解题,那结果很有可能是离题千里。从中我们也可以看出在面试过程中沟通的重要性。当觉得题目的条件、要求不够明确的时候,我们一定要多提问以消除自己的疑惑。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论