职场干货 | 程序员如何应对应聘中的面试、简历及offer

2018-10-17 16:04

其实每个工程师都讨厌Bug、代码不整洁、性能太差、用户界面不人性化等,这些都是一些技术细节,是可以慢慢体会和提高,总能找到答案去改进的。但在工作中,我应该学习和使用什么样的技术?为什么要自动化测试?如何搭建一个产品,看起来比较靠谱?我怎么去选择一份工作?如果我在一家大公司工作,如何跳槽到创业公司?我如何谈判取得更多的薪金或奖金?什么是股票激励?


整个招聘流程主要如下:申请某个公司你感兴趣的职位,投出你的简历。HR从简历库中筛选符合要求的简历,安排面试。面试主要分为电话面试和现场面试,如果面试表现优秀,HR会同你讨论待遇、福利、起始时间等具体信息。针对上述流程,让我们一一分析其中的关键环节。


demo.jpg


一、简历


简历是求职的第一关,尽管简历不能决定最后的录取结果,但是一份结构清晰、内容充实且具有针对性的简历,可以给你带来宝贵的面试机会。如果你真的需要这么多简历以应对不同职位,则应当考虑下自己的优势在哪些方面,适当减少求职目标。注意,下文的描述注重在北美求职的简历结构,其中大部分要点具有普适性,但是如果在国内求职,有些地方可能需要根据实际要求进行更改。


1、格式


除非你想面试用户体验或者设计相关的职位,否则简历的格式尽量以简介清晰为主。标题及名字等重要信息可以适当加粗或者增大字体,其他文字描述尽量统一字号。字体选定一种即可,不建议用不同的字体去突出不同的内容:不同的字体会显得版面杂乱,并且对排版造成困难。英文简历Calibri是比较适宜的字体,中文可以用宋体。简历可以用Word、Latex、Pages或者InDesign制作,但是最后务必导出成PDF,确保在不同的平台上,对方看到的格式一致。


2、内容安排


简历是一个提供信息、展示自己的平台。对于刚毕业、没有什么工作经验的人来说,简历一般控制在一页为宜,如果是PhD,需要适当列举一些相关的文章发表信息,那么简历可以扩展至两页。这里就给一个示例,它在一页纸的长度中精炼地描述了求职者的教育背景、实习经历、技能和专业背景。


demo.jpg


简历的第一要务是让对方能够认识并联系上你,所以名字、邮件、电话、地址等基本信息缺一不可。现在绝大部分面试过程都是通过电话或邮件确定,除了最后给你发Offer,招聘的中间部分都不会给你提供地址寄送任何文件。如果公司决定给你Offer,你也完全有机会和HR确认/更新你的实际地址。


基本信息之外,对于刚毕业的学生而言最重要的信息包括学校、专业和学位。学习成绩对于大部分公司而言只是加分项。


简历中另一个十分关键的内容是之前做过的项目描述,包括工作经历、实习经历或者课程项目经历,这些部分的目的在于展示你具有相关经验,具有较强的技术实力,能够加入团队一起完成一个复杂的项目。就项目内容而言,你需要优先选择和职位描述相关的项目,相关性包括:需要相似的知识,需要使用相同的软件或开发环境,需要类似的编程语言或编程模式,需要实现类似的功能等等。这些项目最能体现你的价值,使得你从一堆申请者中脱颖而出。如果没有相似的经历,那么你可以列举一些比较复杂的项目,突出你的综合能力。这些可以包括:毕业设计、课程的学期作业、网上参与合作的开源项目等。列举的目的主要是突出你的技术水准优秀,具有与他人合作的能力。就项目种类而言,你需要优先选择业界的工作实习经历,只要它们和你所求职位的描述大体在同一个行业即可。毕竟,有实际的工作经验可以传达下列信息:你对业界有一定的了解,熟悉业界的开发模式和开发周期,能够适应公司的工作环境。


3、描述技巧


描述的技巧主要体现在项目描述方面。项目描述主要突出你做了什么,实现了什么样的目的。项目名称一般需要让读者大致了解你做了什么,然后以如下模版,“通过……开发方式(或者技术),做了……,最终实现了……的结果”,描述项目的具体内容。就英文简历而言,一般以过去时为主,以动词开头,描述你做过了什么,实现了什么目的。


另一个很好学习途径,就是去看一些优秀人士的个人主页,特别是你想去的公司的工程师的背景。一般都会很清晰地构建他的目标和过去经历,不需要照搬内容,但可以给你启发,当你去投这些公司时,你就知道什么样的简历更容易被他们欣赏。


简历的最后部分可以用来列举你的技能,包括熟悉的编程语言、开发环境、技术强项等。这部分的目的在于让HR能够从简历库中匹配到你的信息。通常,每个职位都有一些技术要求,HR会通过查询关键字,从简历库中选择匹配程度高的简历。这部分可以大大增加简历被匹配上的可能性。列举的原则是,并不需要特别熟悉,只要实际用过就可以在此列举。注意,如果你有幸被安排了面试,一定要回到这个部分,确保你所列举的部分至少都能回答一些基本的问题,千万不要给人做假的感觉。往往,HR并不一定了解你项目部分的描述是否与职位要求一致,因此,你这部分所列举的技能需要尽量用业界标准的语言,列举名词即可。


二、面试


根据面试的不同对象,在招聘过程中你可能需要面对 HR、技术面试官和老板。针对不同的角色,你应该准备不同的面试方式。


demo.jpg


1、HR


HR是你与公司的连接点。通常,HR负责安排协调面试,主要通过邮件联系。HR也有可能会直接打电话联系你,目的是了解你的基本情况,包括身份、毕业/离职时间等。HR通常会介绍职位要求和公司的基本情况,并且在面试当天接待你,了解你是否有其他面试安排或者其他公司的Offer。


此外,HR还负责面试你的沟通能力,向老板反馈性格方面与团队的契合度以及对公司感兴趣的程度。因此,每次与HR的沟通也需要热情、职业。适合向HR了解的信息包括:公司的整体氛围、面试的流程安排、最近公司人员流动情况等。


2、技术面试官


技术面试官主要负责衡量你的技术水平,以及判断你是否符合职位要求。总体而言,对科技公司,技术面试官的意见最为重要。技术面试包括电话面试和现场面试,前者主要偏向概念性的问答,也包括通过协作网站直接写代码等。现场面试通常包括白板写代码,解决一个算法问题或者设计问题等。本书的主要目的就是帮助你通过这轮面试。


一些面试的小技巧如下:一定要先沟通,明确自己了解题意,不要过分考虑或者欠考虑。首先可以给出一个比较容易想到、但并不是最优的解决方案,再逐步优化。在思考的时候也要把思路讲出来,哪怕不是很成熟的方案。一旦遇到困难,可以先自己设法解决,如果五分钟没有思路,可以向面试官求助。适当的提示并不会影响你面试的最终结果。当开始写程序的时候,尽量注意语法格式、变量命名等,避免写伪代码,越接近真实代码越好。写完以后自己检查下有没有明显的错误,可以列举几个简单的测试数据,与面试官一起检验一下整个运行过程。


面试是一个合作解决问题的过程,沟通一定是面试的关键:需要通过沟通展示你的逻辑性、理解能力和表达能力。在面试的最后,通常对方会给你提问的机会,你可以问的问题包括:团队平时使用什么样的技术,通常的工作压力和工作时间,公司最让人兴奋的地方;在当前职位工作了多少年,面试官之前的工作经历与现在相比有什么异同等。


面试考察的基本功,包括以下方面:


程序风格:能正确使用缩进,括号要对齐,变量名可以起的有意义;


编码习惯:异常检查,边界处理;


沟通:让面试官时刻明白你的意图,不要闭着眼睛不停地写。因为你的算法未必对。对了你也未必写得出来。中间稍微有点问题,你就失败了。对于面试官来说,他根本不知道你的解题进行到哪一步了;


测试:主动写出合理的测试用例(Test case),一些常见的用例,如null检查。一般你没写的话,面试官会让你写,但如果你主动写出来,说明你有好的习惯,容易加分。


技术面试的流程通常如下,可供参考。


当你拿到一个具体问题时,可以按照以下流程回答:


(1)明确题意:通过与面试官交流明确需要解答的问题。这部分主要为了让自己放松心态,并且给面试官留下你具有良好团队意识和交流能力的印象。


(2)描述大体思路:描述你打算用什么算法,什么数据结构。主要是为了让面试官了解你的思维过程,如果你给出的解答与他想要的答案偏差太多,可以及时纠正。同时,描述思路也给了你自己思考的机会。


(3)实现算法:先处理边界条件。对于重要的算法模块,加一些注释或者与面试官进行交流。目的是让面试官始终了解你在做什么,算法框架是什么。


(4)跑一个测试:用一个测试用例走一遍你写的程序。目的在于和面试官一起确保你的算法是有效的,可以在过程中及时发现并纠正自己的错误。同时,给面试官留下你有写单元测试(unit test)习惯的良好印象。


(5)描述算法复杂度,回答面试官的问题。


3、老板


团队的老板通常最后一个出场面试,或者陪同面试者一起吃午饭。老板负责收集整理所有人的反馈,并且决定是否发Offer。通常而言,老板可能不会问过于技术的问题,而是侧重考察你的协作沟通能力。老板的问题可能包括:如何面对工作中的难题/压力,你之前做过的项目,为什么适应这个职位等等。与老板沟通需要表现出你对他们团队的热情,并且在回答中尽量体现自己为什么适合这个职位。面试是一个相互的过程,通过与老板的面试,你需要了解这些问题:团队的成员构成,一般情况下项目如何分配,老板对你的期望,老板对团队在公司中发展的一些展望等等。


另外,准备一些常见的行为问题:比如你有没有过失败的经历,如果你老板给你不喜欢的任务怎么办,你想象中要成为什么样的人。这里一方面可以结合自身精力,另一方面多关注公司的介绍页面,包括公司创始人背景、企业文化、招聘的要求。这些都可以提前做好功课,尽量体现出来你的激情、负责、勤奋等优秀品质。


demo.jpg


三、Offer


如果走到这一步,那么祝贺你,你成功了!在这一步,你需要一些谈判技巧,为自己争取更多的利益。首先,你要做的是与HR核对信息,包括你的地址、入职时间等。


通常,HR会简单介绍你的待遇福利,当你确认无误后,HR会生成正式文档让你签名。在这个阶段,你可以让HR解释Offer条约中你不理解的部分,并且协商你的待遇。协商的最常见方式是,当你有其他公司的Offer,你希望最想去的公司能够match其他公司的最高值。注意,在这个阶段,HR是与你站在一条战线上:HR也不希望你轻易地拒绝他们的Offer。因此,你完全有理由提出你自己的要求。一般在你有其他公司Offer的情况下,HR都能争取到一些更多的利益。从争取难度而言,入职时的签字奖金最容易争取,股票和基准工资则比较难有提升。当然,工资待遇是重要的一方面,但在你决定是否接受Offer的时候,综合考虑公司的发展前景、团队在公司中的地位、老板与你交流时你的感受、团队氛围等也是必不可少的因素。


通常情况下,大公司不会轻易裁员,哪怕裁员也会有一定的补助。另一方面,这也说明你可以随时离职,甚至在入职之前,也即毁约。一般来说,不建议这种做法:更合理的做法是尝试与HR沟通,告知对方自己还有其他的面试/Offer,需要推迟一段时间做决定。如果实在万不得已,有其他更好的选择,你需要尽早与HR沟通,希望对方理解。一定不要拖到最后告诉对方自己不去了,这样的做法很不职业,也不礼貌。


当你接受Offer之后,可以向老板要一些材料,自己先准备一下,以便工作开始的时候能够更快上手。一般新到一个公司都会有数周甚至数月的上手时间,团队会专门有人帮助你了解他们的项目。新的旅程就此开始!但这仅仅是开始,未来也许是更大的挑战,能不能融入团队中,能不能抵抗住压力,工作内容是否符合自己的兴趣,这些都是未知数。所以我们说没有绝对正确的选择,只要用你的才华和汗水付出才有实际意义!


Copyright2018贵州自由客网络技术有限公司版权所有 黔ICP备16000950号