此文是我作为一个面试官关于如何在技术面试中出奇制胜的经验总结。现今大多数的面试都遵循一定的模式。如果你能够理解面试官的问题,按照他的方式回答,那么任何面试都将不是问题。如果你觉得学这些技巧无关紧要,那我也无话可说,不过如果你各方面已经“各就各位”,那么此文必将助你发挥出所有的潜能。
如果你自认为技术娴熟,那么唯一会面试失败的原因就是准备不足。你可能无所不知,但是你仍然需要阅读书籍、论文文章等做好准备,这些资料可能并不能教给你什么新鲜的资讯,但是能让你有效地组织已经知道的知识和内容。而有效组织的内容,有助于面试官的理解。另外,我补充一下,阅读应该成为一种习惯,而不光光是一种面试的准备,这能让你将来的工作做得更好、职业生涯更上一层楼。
大多数的面试目的是面试官为了找到那种能一起工作的人,当然,空缺的岗位有可能是在其他团队,但是面试官还是会按照自己的评价标准来择取。本文主要涉及一些通用技巧,主要针对拥有2到6年工作经验的软件工程师。
Top 1 诚实,不要虚张声势
自信地回答问题,如果你不知道,那就坦诚地说“我不知道,但是我认为……”。知之为知之,不知为不知,不要理直气壮地讲述一个错误的答案,这会让面试官怀疑你前面那些正确的答案搞不好也是胡诌的,功亏一篑。虽然这句措辞也不是万金油,但是却能显示你积极思考的能力和永不放弃的态度。对面试官提出的所有问题都要做一番努力,不要一句“我不知道”就轻易打发。
Top 2 做好写代码的准备
如果要你写代码,那就要小心了,千万别忘记遵循基本规则。我常听那些应聘人员一脸茫然地说“呀,我忘记语法了……”,我一看,原来是忘记for循环的语法了。我们不希望你在面试的时候记得所有的东西,但是一些基本的,像循环、if条件、主方法、异常,这些要是忘记了,太不应该了。看到这里,如果你一时间也没法想起这些,不妨复习一下。写代码的时候要注重空格和缩进,那些字写的不好的可要注意了!
Top 3 做好解释项目的准备
软件工程师在写代码之前就应该对业务需求了如指掌。所以,你得能解释项目中一一对应的流程分别是什么。写个三四行代码就深层次解释一下,然后听听非团队人员的意见和建议。当局者迷,旁观者清。看看和客户交流的内部营销记录,找找线索。可以先找个朋友练习一下,确保自己能说到点子上。
一旦你解释完相关的业务需求,那么接下来面试官通常会问你关于这个项目的技术架构。所有你还必须准备架构图,以显示项目中的各个组件是如何相互作用的。架构图不需要任何特定的UML格式,但是你得确保画在上面的东西你都能解释得通。举个例子,如果你正在做一个可以显示数据是如何从用户界面到数据库的Web应用程序。那么你就得展示涉及的不同layers 、使用的技术,等等。而最重要的是,你应该清楚你正在做什么,不要讲到后来,乱七八糟,答非所问。
Top 4 将争论转换为交谈
即使你知道对方错了,也不要争论,试着以“ok,不过我不是很确定这是否正确,我回去再查阅一下”这样的言语继续话题。这能让双方都有一个愉快的心情。在面试的时候要认真听对方的话中之意,回答的时候要以自己的经验为依据,不要天马行空。
Top 5 事先对各种WHY做好准备
大公司的面试关于问“Why?”的肯定很多,搞不好甚至是以“Why?”开头,以“Why?”结束,一路“Why?”下去。例如经典的Java问题“String和StringBuffer的区别是什么?”,后面往往还会有“为什么String……?”又或者“如何才能……?”事先做好如何回答这些“How?”和“Why?”问题的准备。
Top 6 讲述自己最大的成就
在自己以往的工作中,总会有个你认为是最棒的成就。你得学会将这个成就描绘得“天花乱坠”,让面试官觉得这是一个超级不平凡的成绩。所以准备一个励志生动又可信的故事以展示你的能力是如何一步步让你完成那个艰巨的任务的。之所以要事先准备好是因为担心事到临头你搞不好会忘东忘西有所遗漏不说,最怕就是语言不连贯,让面试官无法理解。
Top 7 你有什么问题要问的吗?
好吧,这个问题几乎每个面试都会出现。问问题并不是说你要知道这些答案,但是问某些“聪明”的问题能让面试官对你的印象加分。《The Five Best Questions a Job Candidate Can Ask》或许能为你开拓一些思路,助你面试成功。