前言
对于大部分的面试者,尤其是对软件开发者来说,没有什么比面试更让人害怕了,尤其是需要在现场白板上写代码的面试【但是如果准备充分、心态平稳,面试实际上也可以成为你向往的机会,以及展现能力和技能的最佳场所】。
一、不同类型的面试
1.1、电话面试
大多数大公司在招聘开发者时,都会确保用电话面试的方式过滤出他们想要参加面试的所有潜在人选,然后再安排真正的面试,以此来节省成本。
电话面试通常问的都是技术性问题,但也可能包含一些非技术问题。你可能会被电话面试两次,一次是技术面试,另一次是非技术面试(电话面试的目的不是决定是否给予你工作机会,而是决定要不要把你淘汰出局。因此如果你想要通过电话面试,就要展示你技术上的能力,而且你还要辨明你不是某种类型的精神病患)。通常电话面试由一些基础的技术问题、资格问题和一些有关性格测试的问题组成,只要你能胜任这份工作,这些面试都不会很难。
1.2、在线技术面试
这种面试方式很像电话面试,但不是通过电话来完成,而是通过视频聊天工具进行。面试中,你会被要求解决一些编程问题,甚至与面试官一起进行结对编程,这样他们就可以在远程快速评估出你的技术能力。也有可能是给你一个编程任务或者一个编程能力评估测试的链接,在那里有一个受控的编程环境,要求你在规定的时间内完成一些编程问题。
1.3、标准技术面试
大部分面试都是这种一个小时左右的面对面的标准技术面试【面试官向我们询问一系列关于我们将要在工作中大量应用的技术问题;这些问题都不会很深入】。
这种浮于表面的面试之所以如此大行其道,是因为大多数当担面试官的软件开发者并不真正知晓如何面试某个人【于是他们只能从谷歌上搜索到一系列常见的面试问题,这些问题涉及他们正在使用的主要技术获编程语言,然后简答粗暴地把这些问题直接提问求职者】。
显然,你也可以做相同的工作来为这种面试做好充分的准备【搜索你求职的技术领域内常见的编程问题,然后背熟答案】。
1.4、小组面试
实话实说,对大多数人来讲,小组面试可能是最难应对的面试之一,尤其是在小组面试与编码面试组合在一起的时候【在小组面试时,你会被几个人组成的小组同时面试。小组成员可以轮流向你发问,或者要求你澄清别人以前提过的问题。你要应对的是技术类型的问题和人格类型的问题的混合体,每个人都会对你的每个答案记下大量笔记】;一定要准备充分。
1.5、编程面试
这是另一种让人觉得可怕的难缠面试,也许是最可怕的【在编码面试中,你将被要求通过编写代码来解决一些算法问题。通常,你会被要求在白板上编写代码,而不是使用任何集成开发环境】大多数没有为这类面试做好针对性准备的软件开发者,都会在这一要求下败下阵来。在白板上写代码会让你感到非常局促不安,特别是当你没有足够的自信心解决被提问的问题的时候。
你最好做好应对编程面试的准备【最好的方法就这为这类面试展开专门的学习】这些挑战需要一种与你的习惯思维不同的思维方式和解决问题的方法【千万别忘了练习、练习、在练习】。
二、面试前你需要知道的内容
2.1、怎么解决编程问题
程序简单的说就是:程序=数据结构+算法;所以掌握牢固数据结构和算法是重中之重。
你应该花些时间掌握解决编码面试所需的技能,让自己善于解决编码问题【让自己对数据结构方面的知识牢牢掌握】掌握这项技能有点难,但回报是巨大的。
多数程序员都无法从容的应对编程面试,也不知道如何解决常见的编程问题;我这里推荐Gayle Laakmann McDowell的名著《程序员面试金典》。
一旦我能攻克编程类型的面试,我就会在其他任何面试中变得非常自信,因为我知道我连面试官向我提出的最难的挑战都能应对自如。
2.2、有关技术专长的常见技术问题
你需要对自己的技术专长范畴内的问题了如指掌(说真正,任何人都能搜索到类似“Java面试问题”,“C#面试问题”之类的内容,如果它属于你的编程语言或者技术范畴,你必须对答如流)。
你应该知晓谷歌上在你的技术专长范围内排名前三的面试问题中的每一个问题的答案(如果你不知道,那完全是你的错,因为这件事本身是很容易的)。
面试官可能时不时地给你下绊儿,但你至少应该对最常见的问题一清二楚(如果你正在申请的职位需要使用面向对象编程语言,那你最好要对封装、继承、多态、数据抽象、接口和抽象基类等概念如数家珍)你可以通过大量的书籍、博客文章和其他资源,找到你在面试中可能被问到的任何编程语言或技术问题列表。
2.3、性格与心理问题
你还应该准备好回答所有常见的性格和心理测试问题(你可以在网上找到很多关于如何回到这类问题的建议)【回答这些问题时你要尽可能真诚,不能透露太多负面细节,你要尽可能保证一切内容都是正能量的【用于承担责任,积极进取成长,不会因为任何事而责怪别人】确保你至少已经思考并且练习了所有这些问题或者其他类似问题的答案,特别是在“为什么你要离开现在的工作岗位”这样的问题上】。
关于“你最大的弱点是什么”这类问题,我该怎么回答?(遵循如下逻辑回答【几乎任何属性都可以从积极与消极的角度来看待】一项优点同时也是一项弱点(如:崇尚完美主义,积极的一面则是极度关注细节;消极的一面是为了让事情臻于完美,有时会忽略大局));你可以用类似下面的方式来回答这个问题(嗯,我倾向于追求完美主义,这很好,因为对细节的极度关注意味着我不会范太多粗心大意的错误,我会创作出高质量的工作产品。但有时我也会为了让事情臻于完美而过分执着)【把优秀品质稍稍转到消极的一面,这样听起来你并不是在说你没有弱点,但同时你也没有暴露自己主要的性格缺陷】。
误区:有些人认为回答这个问题的最好方法就是直截了当的诚实回答,自我揭露自己非常糟糕的一面(不要这样做,当然,我并不鼓励你撒谎,但也没有必要之间告诉面试官,你有懒惰倾向)【总是要把自己最好的一面展现给观众;因此在回答这个问题的时候,展示一下如何把弱点转化为优势的能力】。
三、面试技巧
3.1、衣着得体
很多软件开发公司都允许员工穿人字拖和大裤衩上班,他们甚至会告你面试时也可以如此穿着,但千万不要这么做【面试时,你应该穿比雇主公司着装标准高出两个级别的衣服,如果你是男士,基本上我建议你穿上一套漂亮的西装去面试。如果你是女士,推荐你穿一套正装裙服或高级西装】。
是的,面试官可能会说“你不需要穿西装”或者“你的着装太过正式了”,但是不要相信他们说的话。即使面试官觉得你穿的太正式了,整洁干练而又职业化的着装也会给人留下难以撼动的第一印象【我看不出如果面试官认为你是非常职业化的人对你会有什么坏处。让其他应聘者穿上T恤衫和牛仔裤好了,但你一定要尽量装扮得体,从而有意无意地制造出这样一种认知:你才是更专业、更优秀的候选人】。
3.2、准时出现
提前10分钟准时到场(如果你是开车去面试,那么要计划提前30分钟到那里;如果按照预期提前30分钟到了,那就坐在车里20分钟;这就是所谓的余量)。
如果你一向很难做到准时到场,那么一定要提前30分钟到达,然后在早到的20分钟里面做回复电子邮件、阅读一本书或者其他类似工作(在大楼外面别让别人看到你)。
3.3、不要撒谎
面试的时候说谎或者捏造事实很诱人,但千万不要这么做(你不需要自告奋勇地把自己的每一条负面信息都招供出来,但如果被问到,那么一定要之言相告。别想着把它隐藏起来。特别是在回答技术问题的时候)。如果你不知道答案,你只能诚实回答你不知道,但你有兴趣学习它,回到家之后去找出答案;不要对你不知道的问题胡扯,以为这样就可以蒙混过关。这样做的后果显而易见,面试官对自己提出的问题定是聊如指掌,而你的支支吾吾、东拉西扯只会让你显得不自信、自以为是和愚蠢。
不能对面试官提出的每一个问题都对答如流是可以接受的;这样反而会给面试官留下更好的印象(你为人谦逊,坦然相告自己在某一个领域内缺乏的技能,并且你渴望弥补这个缺陷,而不是用欺骗或者糊弄的方法)。
3.4、不必过分防备
面试时你的压力很大,在这种情况下你可能很容易觉察到自己正在被评判,事实却是如此;但在这种情况下,你还可能会觉得自己陷入人身攻击中,然而事实并非如此【因此,在被问到关于工作经验或者技能的问题时,你会很容易陷入防备心理。当你不知道面试官提问的问题答案时,你很容易陷入一种防御性反应中,你会感到尴尬,或者产生“他们就是想让我看起来像个白痴”的想法】一定要不惜一切代价抵制这种想法(没有什么比一个畏畏缩缩而又心存戒备的人更加缺乏自信了,他不能处理任何对自己有负面影响的事情,进而又被认为对答案一无所知)。
3.5、回答问题时要详尽阐述
回答问题要尽量详尽描述(不要只从表层回答问题,尤其是针对技术性问题;要增加更多的细节。例如:在回答“谈谈你是如何使用这项技术或概念的”这个问题时,要给出你的想法,尤其是有争议的想法。这样,你会被视为深度理解掌握了这一知识,而不只是死记硬背了一堆你并非真正理解的概念和定义。这样,你才会有机会展示自己的个性,展示你平常是如何解释和分享自己想法的)。
虽然不必过分向面试官讲述你的整个人生故事,但是要详细阐述所有重要的问题(这个方法的一项巨大优点是:即使你从技术上的理解是错误的,你也会因为对问题合理有效的分析思考过程而获得赞誉,特别是在你能够大声说出自己想法的时候)。
3.6、真正自信(而不是假装自信)
什么都可以装,但自信是装不出来的,所以不要尝试假装自信(你要以事实上的自信满满来迎接面试。假装的自信令你内心不安,或者盲目自大。真正的自信来自你对你是谁、你在哪里以及自己是否状态良好有着清醒的认知)。
怎么才能自信呢?(当然是准备充分了。你为面试做的准备越充分,参加面试就会越有信心,前期的准备工作之所以要从难从严也是为此)。
3.7、一定要传递出我是善于自我激励的人
一定要传递出【我是善于自我激励的人。我清楚自己该做什么,而且我一定会去做】。
你对面试官说的每一件事情都应该展示出这一项重要特质(企业一般都希望聘请来做事情的人,能够在企业给出最低限度的指导就可以做事情,聘请来的人能够洞悉自己该做什么,然后真正着手去做)。
3.8、练习、练习、再练习
快去做面试练习吧(对着镜子,宠物,做模拟面试练习;让你的家人朋友面试你。出去接受真正的面试,只是为了练习。把自己的练习过程录制下来,观看回放,这样你就可以看到自己的不足)。
亲身实践任何你需要的练习(练习在白板上解决编程问题。练习自己不熟悉的编程算法、数据结构等内容)。