题图 | Silicon Valley

导读

近日,互联网大厂的「裁员」话题上了热搜,据说有的公司裁员数量高达总员工数的30%。在目前僧多肉少、行业内卷加剧的背景下,出现这种情况并不意外。但不论怎样,生活还得继续,不管是经历裁员的人,还是在主动寻求其他工作的人,都在观望新的机会。

有人认为,只要是人才,就不怕找不到工作。但是技术水平高也不一定能帮你拿下工作机会。最关键的还是如何闯过面试这一关。今天给大家分享一篇文章,谈一谈程序员面试的技巧,希望对大家有所帮助。

作者:Edward Guiness

译者:石宗尧

通常来说,面试过程和人的行为一样,都是难以预测的,你永远不知道会发生什么。充分的准备是你的秘密武器。虽然面试的过程无法预测,但如果你有所准备,就可以轻松搞定面试。

1

面试前的准备

想要在面试前做到万事俱备,就不要只关注技术类问题。技术类问题只是面试的一部分,还有很多其他种类的问题,有些是有关团队精神、执行力的,还有些用于测试你和企业文化的匹配度。除了技术,面试官可能还想看看你的抗压能力、表达能力,以及面对批评时的反应。

如果面试官只关心你的编码能力,只在网络上做在线测试就足够了。面对面的面试远不止技术能力评估。虽然很多公司都对外宣称只录用“最好的程序员”,但实际情况并非如此,技术最强未必能帮你赢得职位。尽管看起来很不公平,但这就是现实。

图/Silicon Valley

1.1  了解充分

公司的高层人员会决定企业文化的基调。如果公司高层非常随意、友好,这种态度就可能会成为企业文化;如果高层人员非常严肃、认真,那么其他人也会受影响,不论在办公室还是休息室,都能感受到这种氛围。小公司的氛围一般不如大公司严肃,但公司的规模不是决定性因素。

对于微软、谷歌、亚马逊这类大型公司的企业文化,你可能已经非常了解,但对于那些非知名公司的企业文化,你就需要做些调查了。

想了解一家公司的企业文化,最好的方法是和该公司的员工直接对话。如果你很幸运,恰好有朋友在那里工作,我建议你请他吃顿饭,然后一股脑地问他100个问题。如果不认识其中的员工,就要另想办法了。

首先,要上网搜索公司信息。刚开始,你会发现很多有关公司商业形象的信息,但用不了多久,就能找到公司企业文化的线索。如果够幸运,你还能找到公司理念的官方声明,甚至是公司的官方博客。如果你能查到公司高层的名单,就可以搜到他们的新闻。新闻里可能引用了他们说过的话,对你而言,这些话是相当有用的。

如果你委托了招聘中介找工作,那就咨询一下中介,搞清楚该公司的企业文化是什么。好的中介会有第一手的信息资源,虽然不是公司员工,但仍能给你提供一些有用的信息。

如果上述方法都失败了,那就直接给公司打电话。不要觉得难为情,这是个合情合理的咨询电话。

最坏的情况是对方不想帮这个忙,但这一般并不是针对你的,而是出于公司规定的考虑。如果遇到这种情况,那就要求对方把电话转到人事部门,或者直接转到你应聘的部门。请记住,不论对方态度如何,你都要保持礼貌和尊重。

在调查完公司的企业文化之后,你应该把注意力转移到招聘经理身上。同样,向认识的人打听,在网络上搜索,咨询招聘中介。对于直接打电话给招聘经理这件事,笔者持谨慎态度;但如果你想打这个电话,就应该问更多的事情,包括面试流程如何进行。

至少,你应该把面试的安排搞清楚:

  • 面试会持续多久?

  • 现场面试是一次还是多次?

  • 有技术测试吗?如果有,会以何种形式进行?

  • 在面试中需要写代码吗?

  • 有多少人参加面试?都是什么人?

  • 有什么特殊事项需要注意吗?

1.2  做足功课

调查之后,你搜集到了很多有关公司文化的信息,也从招聘经理那里得到了一些面试信息。有了这些信息,你就可以开始练习了。

如果你面试的公司是家技术型公司,就要集中精力练习数据结构和算法,以及如何设计软件的可扩展性。小规模的技术型公司可能会要求程序员具备广阔的知识面,因此你需要复习服务器管理,网络故障排查,数据库配置等相关知识。在大公司,由于有专门的团队负责维护服务器和设备,因此你不需要具备这方面的知识。

有件事你可能不喜欢,但一定要去做:问自己最害怕的问题。

图/insights.dice.com

说实话,什么问题会让你在面试中颜面无存?也许你对排序算法感到非常恐惧;也许你不太理解广度优先搜索算法和深度优先搜索算法的区别;也许你因为顶撞团队领导而不得不辞职;也许你持有一些有争议的观点,例如,觉得代码注释是代码冗余的另一种形式。

如果你平时不去直面这些问题,在面试中就必须面对,明眼人都能看到这点。因此,在面试前就搞定这些问题。

1.3  着装得体

在直面并战胜恐惧心理之后,就是时候选择一套合适的衣服了。

实话实说,我不太喜欢那些铺天盖地的着装建议,但有一点要承认,你的着装的确会影响其他人对你的看法。

首先,看看你目标公司的着装要求是什么。如果不远,可以在午饭时间直接去那里转转,看看人们都穿些什么。如果去不了公司,就问问公司的职员、招聘中介,或者直接打电话过去。

如果你真的不知道该穿什么,那就穿普通的正装吧。对男士来说,穿一件带领子的白衬衫,不要穿牛仔裤和运动装。千万别穿得太张扬。对女士来说也是一样,一套女式衬衫和裙子(不是超短裙)或者裤子。

对男士来说,尽量打上领带。但也要知道,在有些公司,特别是有极客文化的公司,人们都不太把时间花在穿衣服打领带上。如果你不确定面试中要不要打领带,那就先把领带装进包里,在需要的情况下打上领带。

最后,无论你穿什么衣服,都要尽量舒适。你在面试中会遇到很多挑战,不要让衣服增添麻烦。如果你因为外套太厚而满头大汗,就先礼貌地征得同意,然后脱掉它。不要默默忍受,你真的不必要因此而分神。

1.4  搞定不同类型的问题

总体来说,面试问题可以划分为以下几大类。回答问题的方式取决于问题的类别。

(1)技术对话——不要有所保留

在面试过程中,你可能会发现面试官不如你想象的那么擅长技术。不要错误地认为你需要降低对话的专业度,否则面试官将你同其他面试者进行比较的时候,这会置你于不利之地。他可能并不理解你说的每句话,但他对你的印象会被你的用语所影响。

如果非技术背景的面试官问了你一个技术问题,那么他期望的回答就是技术性的。面试官的手中可能有一张“小抄”,列出了所有问题和对应的答案。

如果同技术面试官打交道,更不要有所保留,应尽可能地仔细回答问题。如果非技术的面试官想让你从非技术角度解释一些东西,你可以用比喻的方法。

例如,面试官要求你用非技术语言解释什么是IP地址。维基百科对IP地址的定义如下:

网络协议地址(IP地址)是每个设备(计算机、打印机等)在计算机网络中所分配的一组数字标签,使用网络协议进行通信。

你想到的第一种比喻应该是IP地址很像通信地址。送信需要通信地址,而传递数据包需要有IP地址,因此这种比喻是说得通的。但是,不同国家的通信地址在格式和风格上有所不同,而IP地址则严格遵循全世界通用的一套标准。或许对IP地址更好的比喻是由经度和纬度构成的地理坐标?

比喻能够帮助非技术人员理解一些技术问题,但这种方式并不完美,存在很多局限。因此,使用比喻不要无限度。

图/iglu

(2)行为性问题

理论上,行为性问题是为了评估你在不同情形下的行为模式。

“在你的项目组里,有的人认为代码应该用空格对齐,有的认为应该用tab对齐,你怎么处理这种分歧?”

你的答案应该尽量直接,并且有事实佐证。这类问题是开放式的,没有固定的答案。但在编程技术面试中,回答问题的方式就不能太发散了。

“我觉得用哪种代码格式都没关系,只要保持一致就好。在Acme工作的时候,我们用SpaceMeister来确保代码格式的统一。因此,我觉得我会用采用这个方法来解决团队内的问题。”

(3)设计类问题

想回答设计类问题,就要对分析模式有一定的了解。面试官并不指望你给出一个“正确”答案,因为不存在适用于所有情况的正确答案。他希望你能展示思考的过程,以及设计的可行性分析。

如何辨认出设计类问题?有两种情况:当面试官着重使用“设计”这一字眼的时候;当问题看起来非常难或者含糊不清的时候。如果出现其中一种情况,就很有可能是设计问题。

“请设计一个算法,计算国际援助基金会如何均分资金给受益人。”

回答这类问题的唯一方式是把你自己的疑惑问出来。你需要向面试官证明自己的问题分析能力。如果问得恰到好处,答案就会越来越清晰(或者最后发现根本没有答案),这样就可以继续设计了(或者把得不到优秀设计的原因弄清楚)。

(4)技术突击测试

有些面试官很喜欢进行技术突击测试,你可以很轻易地辨别出这类问题。因为这类问题要么是非常模糊的,要么是非常具体的。

“在.NET4.5中,Tuple.Create方法被重载了多少次?”

这类问题无法提前准备,除非你的记忆力非常好,否则只能尽量给一个相对令人满意的答案:

(5)智力测试

另一种越来越少被问到的问题类型是智力测试。即使是在特定的情境(心理健康评估)下,这种问题也不好辨别。在程序员面试中,则更难辨别。有些面试官热衷于这类问题,希望程序员能顺利通过智商(IQ)测试,以此找出“最聪明”的程序员。

智商测试题的形式都差不多,稍加练习就可以找到规律。如果你知道面试官对这种问题情有独钟,就可以提前作准备,多找些问题勤加练习,以便在面试中轻松应对。

(6)压力面试

每位程序员都应该练习压力面试。压力面测试练习需要一位朋友帮忙,最好是一位咄咄逼人、声音洪亮的程序员。让你的大嗓门朋友找到(或者写下)一系列难题,模拟一次面试。你扮演求职者角色,朋友扮演不讲情面的面试官角色,面试时间为一个小时以上,把所有问题都问个遍。你的朋友需要表现出“残酷无情”的一面。这种练习的目的不是让你给出正确答案(当然,你应该尽量给出正确答案),而是锻炼你对真实面试环境的忍耐力。

图/pabu

2

最重要的事

接下来讨论如何与面试官建立默契,以及你可以在面试中做出的其他努力。

2.1  如何与面试官建立默契?

如果求职者想和面试官建立默契,该怎么做?

让我们从基本要素谈起。默契往往建立在共同目标的基础上。从表面上看,面试官在寻找适合职位的最佳人选,而求职者想说服面试官,让对方相信自己就是最适合的人选。但这并不是一个理想的切入点,因为这让求职者看起来像个推销员,在把自己作为商品推销给面试官。只有面试官和求职者能找到一些共同点,才是一个更好的开始。

其实面试官和求职者有太多的共同点。他们都想知道这份工作适不适合求职者,都想看看求职者的能力和职位描述有多少一致的地方,都想知道求职者在这个职位上能给出什么样的表现。

请不要误会,我不是说面试官和求职者的地位是完全平等的。我只是非常确信面试官和求职者考虑问题的出发点是相当一致的,这对建立默契非常有用。在根本上,面试官和求职者的目的是相同的,但在思考方式上,求职者应该作一个细微但重要的改变:不要口口声声地说自己完全符合职位需求,应该以合作的姿态,和面试官一起看看自己到底有多适合这份工作。这是令面试有效的根本出发点。

用合作的态度同面试官交流,你看到的东西也会不一样。你会真的对职位细节感兴趣,而不是被动等待面试官刁难,这样你就可以评估自己能否胜任这份工作。你不会担心面试官问你各式各样的理论问题,而是会试图了解自己的经验能否适应实际工作环境。你会注意到自己在技术上的弱项,意识到哪些知识需要在工作中加强。

这种态度非常重要,它可以让面试官感到放松。你在降低他们工作的难度,帮他们卸下“审讯官”的负担。尽管有些人并不介意扮演这个角色,但若想同面试官建立有效的默契,这是最快捷的方法。

2.2  其他努力

如果一个态度上的改变就能让面试非常顺利,那未免太过简单。实际上,我们还有很多工作要做。虽然你可能是个天生健谈的人,但如果能遵循以下原则,也会受益匪浅。

(1)用心倾听

永远不要贸然打断别人说话。如果你不得不这么做,至少应该先道歉。

认真倾听不只是安静地坐着。有技巧的倾听者可以用自己的语言复述所听到的内容,这让面试官非常安心,因为他能确认你在认真听他讲话,并且理解他想表达的内容。

(2)学会提问

请记住,面试是个信息交互的过程,你在回答问题的时候也要提出问题。和主动式倾听类似,有选择的提问也会让面试官感到放心,因为他知道你在听他说话,并且对话题的细节很感兴趣。

(3)模仿面试官的行为

有时候,有意识地模仿面试官的某些动作和行为,可能会收到意想不到的效果。他们坐下,你也坐下;他们向后靠,你也向后靠。我并不是让你去演一出即兴的无声喜剧,而是希望你同面试官建立起潜意识里的默契。经证实,这种技巧很有效,可以帮助面试官放松心情。

(4)寻找互动的方式

如果你天生内向,这很正常;许多软件工程师都比较内向,你的面试官也有可能很内向。但请记住,内向并不是腼腆的借口。

寻找共同点,找机会谈论你感兴趣的事物。如果你天生腼腆,至少试着保持眼神接触一到两次,头脑要清醒,吐字要清晰,语速要慢下来,在恰当的地方有所停顿。

3

同样重要的事

如果面试官不认可你作为程序员的能力,再好的默契也是白搭。因此,同样重要的事就是在恰当的时机展示你的才能。

3.1  表达要清晰

正常来说,面试官应该尽量鼓励求职者多说话。但是据我观察,很多面试官的话比求职者还多。如果你碰到一个口若悬河的面试官,那除了打断他,你没有任何机会表达自己的看法。注意听他的说话内容,寻找能把自己的工作经验与职位联系在一起的机会,有礼貌地打断他。如果面试官正在陈述自己的观点,那么最好等他说完。如果你倒霉透顶,碰上一个超级话匣子,那就用他讲话的时间作好准备,保持注意力的集中,趁面试官喘气的间隙打断他,加入到对话中。

3.2  掌控面试时间

通常来说,你会提前知道面试的时间长度。如果面试时间很短,那你就应该集中精力谈论最有价值的工作经验,因为那些经验和职位的关系最大。如果不清楚哪些要求是核心要求(正常来说,应该是清楚的),那你在面试前应该咨询一下面试官:“这个职位最需要的技能都是什么?”

3.3  用事实说话

你应该尽可能地把答案和自己的实践经验、成就联系起来。你可以通过事实来说明你的经验,但不要脱离实际去胡编乱造。如果为了阐述一个观点,而去编造一个故事,这确实可以让人听得津津有味,但问题就来了:面试官会记住你讲的那些事,但那些事是你没有做过的。

图/software guild

4

有效交流

在面试中,如果你想清晰地表达观点,就需要了解一些简单而实用的技巧。这些花招(我并不想这么叫)可以让你的交流变得异常有效。

4.1  用热情战胜紧张

几乎每人都体会过紧张情绪。面对有挑战性局面的时候,紧张是人的自然生理反应。

你需要做的,是分散自己的注意力。如果你因为一些事情而感到焦虑,不妨转变一下思维,想一想那些开心、有趣的事情。这可以帮你赶走紧张情绪。你是一位优秀的程序员,你喜欢编程的哪些方面?处理别人写的代码都有什么烦恼?代码对齐应该用tab还是空格?Vim和Emacs,哪个是更好的编辑器?通过这些问题,转换一下思维。注意这么做的时候紧张感是如何消失的。

4.2  使用手势

有可靠研究表明,肢体语言至少和我们说出的话具有相同的重要性。这也符合人与人交流的规律。如果你像考拉一样有气无力地瘫坐在椅子上,就很难表达对工作热情。你应该坐在椅子的边缘,边说话边用手势强调重点。

4.3  放慢语速

如果语速过快,会显得你很紧张。把语速放慢,可以给人镇静、运筹帷幄的感觉。如果你控制不住语速,那就要勤加练习。多听专业演讲者(特别是知名政治家)的发言,你会发现他们几乎从来不会说错话。他们的呼吸和停顿很有规律,举手投足就像摆放花瓶一样优雅。他们的语速很慢,吐字清晰。

4.4  开始和结尾要清晰

如果你说完话,发现有些含糊,那就多重复几次。你要确认自己能听清,并且理解自己说过的话。如果你不注意口齿,面试官就会没耐心去理解你想表达的主要观点。

4.5  重复主要观点

当公众人物想要确保主要信息传达到位的时候,他们会不断重复想强调的信息,但是不要像鹦鹉那样只重复同样的话。

主要信息可以从不同角度来阐述;一个论点可以用很多不同的论据来论述;在不同的时间,可以用不同的方式来重复。

如果你确实想让面试官记住一些信息,也需要不断重复。同时寻找机会,在重复主要观点时与面试官的话联系起来。

4.6  熟能生巧

在面试中,你需要结合自己的经历立刻给出回答。想让答案脱口而出,我的建议是:把答案的原始资料烂熟于心。这要求你必须对简历的内容细节了若指掌,包括简历里提及的技术,证明你能力的事迹,一些解决过的问题,曾经战胜过的挑战,等等。这样,当有表现机会的时候,你才可以信手拈来。

如果你无法自然流畅地表达,那就需要在面试前多加练习。找个朋友陪你一起练,一定要认真。让你的朋友拿着你的简历随意提问,这相当于模拟面试过程,你可以思考如何把自己的经历同问题联系起来。如果你在练习中遇到了无法回答的问题,这非常棒,因为你发现了一个准备工作的疏漏,这样就能在面试前补救这个问题。

练习,练习,再练习。

本文摘编自《智取程序员面试》

相关阅读

60岁代码匠的几篇小作文,解决了大多数程序员的迷茫(上)
60岁代码匠的几篇小作文,解决了大多数程序员的迷茫(下)

裁员大潮来袭,程序员面试的这些技巧收藏好!相关推荐

  1. Interview:Java岗位面试—面试求职攻略之一个JAVA程序员面试心得(非常值得收藏)

    Interview:Java岗位面试-面试求职攻略之一个JAVA程序员面试心得(非常值得收藏) 导读 据网上资料显示:2018年互联网行业是寒冬,其他行业日子也不好过.各个互联网大厂纷纷缩招减员,严格 ...

  2. 纯干货!程序员面试的超实用技巧

    其实有很多文章说面试相关的问题,有国内也有国外的,但是我相信不少人,特别是新人看完后还是觉得比较虚比较泛,似乎好像懂了,但是一遇到面试还是有些手无足措或者重复犯一些错误.本篇文章正是结合实际经验,为广 ...

  3. Java程序员面试技巧:这样面试通过率增加90%

    公司的面试流程一般是笔试-->技术面试-->HR面试,在大部分应聘测试工程师这种技术岗的应聘者理解中,通常认为通过技术面试了,后面的HR面试基本就是走流程过形式.也正因如此,我们习惯性地把 ...

  4. 好程序员Python培训分享Python程序员面试技巧

    好程序员Python培训分享Python程序员面试技巧,往年的这个时候,"金三银四"的招聘热潮已经扑面而至.今年,因为疫情的影响,各大公司的社招可能跟"2002的第一场雪 ...

  5. 收藏 | 应对程序员面试,你必须知道的8大数据结构

    来源:大数据文摘 本文共2200字,建议阅读6分钟. 本文我们介绍了应对程序员面试过程中,必须掌握的几大数据结构. 瑞士计算机科学家Niklaus Wirth在1976年写了一本书,名为<算法+ ...

  6. 有了这份程序员面试指南,你离大厂 Offer 还远吗?| 附推荐书籍

    作者 | 码农唐磊 来源 | 程序猿石头 在这篇文章<面试 Google, 我失败了 | Google 面经分享>中,石头分享了 Google 中国的面试流程和体验,并分享了 HR 小姐姐 ...

  7. 《.NET程序员面试秘笈》----面试题8 方法的重载和override有什么区别

    本节书摘来自异步社区<.NET程序员面试秘笈>一书中的第1章,面试题8,作者: 张云翯, 更多章节内容可以访问云栖社区"异步社区"公众号查看. 面试题8 方法的重载和o ...

  8. java程序员求职计划_2017年java程序员面试经验(500字)

    1.数据结构 2.OO.按照他的一段描述建模 3.Java和C++在内存管理的不同之处. 4.JAVA的多线程机制. 5.反射机制的作用,以及在哪些方面使用了反射机制 6.网络 7.DesignPat ...

  9. 移动互联网下半场 iOS 程序员面试真经,让你进入 BAT 不再是梦

    前言: 其实说实话,作为程序员,最起码得有 80% 的人都想进入大公司工作,比如:BAT ,小米,滴滴,今日头条,美团等这样的大公司或者移动互联网界的明星企业. 进大公司的好处显而易见,福利好,待遇高 ...

最新文章

  1. Active Directory数据库复制原理
  2. SDN控制器ONOS架构—Vecloud
  3. 06/05/2015
  4. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第3章-系统性能分析
  5. Spring第八发—自动装配及让Spring自动扫描和管理Bean
  6. python不定长参数详解
  7. Android 中的ORM框架
  8. IdentityServer4 SigningCredential(RSA 证书加密)
  9. 使用 vim 开发-编译-查错-运行/测试-调试最佳实践流程
  10. 三十六亿票房的《哪吒》,如何利用 AI 成为国漫界的黑马?
  11. css12个技巧,12个CSS高级技巧汇总
  12. 《软件方法》书中自测题大全-题目全文+分卷自测
  13. Java之JvisualVM简介
  14. wordpress电商独立站模板
  15. FastReport .NET 2022.3.6-新版Crack
  16. python图片转字符画代码_python实现图片转字符画的完整代码
  17. ubuntn 常用命令和快捷键汇总
  18. 《高等数学》 总结 导数、微分、不定积分
  19. ERROR: Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accurately d
  20. 使用 Bumblebee 控制 NVIDIA 双显卡(ubuntu13.04-X64)

热门文章

  1. python numpy array最大长度_python 中 numpy array 中的维度
  2. oracle跨库 导库,Oracle 用dblink 跨库导数据
  3. BZOJ2127happiness——最小割
  4. 031_spark架构原理
  5. js导出生成PDF插件
  6. JavaScript 的参数 arguments 和 return
  7. 25%的游戏通过Steam支持Linux系统
  8. 使用pyjnius和mpxj来读取mpp文件
  9. centos的ssh配置
  10. yolo-mask的损失函数l包含三部分_损失函数总结-应用和trick