程序员如何做好应聘简历面试和Off

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

《程序员面试白皮书》是一本我希望自己在大学就能看到的一本书。在我读大学的时候,跟很多同学一样也走过不少弯路:艰难地啃着计算机必修课,被里面的指针和对象搞的晕头转向,对i++和++i区别死活不理解,为操作系统的调度策略而抓狂,很难对专业书产生兴趣,只是想着去应付考试和学分。当我们毕业后,虽然有了计算机学位和实际工作经历,但其实还是不知道最想得到什么。我当时心中有个情节,就是希望能去最好的公司,比如Google,因为听说那里面都是最聪明的人,有着最好的待遇和福利,做着最有影响力的事情。当我鼓起勇气去尝试的时候,我失败了,并且要进入6个月的冷藏期(失去在一段时期内继续面试的机会)。而我发现当时的面试表现是那么的稚嫩和糟糕,我开始懊恼,开始反省,开始重新准备,这样才有了我下一个面试机会和其他的Offer。当然如果一切可以重新再来,我可以更有自信更好地发挥我的能力,也许当时的理想公司就会给我Offer。

点击图片购书

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

简历

简历是求职的第一关,尽管简历不能决定最后的录取结果,但是一份结构清晰、内容充实且具有针对性的简历,可以给你带来宝贵的面试机会。本节将从格式、内容安排和描述技巧等方面介绍如何生成一份对HR有吸引力的简历。可以根据不同的职位描述适当更改简历的某些内容,但不建议准备太多份区别过大的简历,以免自己投递的时候产生错误。如果你真的需要这么多简历以应对不同职位,则应当考虑下自己的优势在哪些方面,适当减少求职目标。注意,下文的描述注重在北美求职的简历结构,其中大部分要点具有普适性,但是如果在国内求职,有些地方可能需要根据实际要求进行更改。

1.1.1格式

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

1.1.2内容安排

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

图1-1一页纸的简历

简历的第一要务是让对方能够认识并联系上你,所以名字、邮件、电话、地址等基本信息缺一不可。特别的,对于在美国本地求职的人而言,邮编很重要,因为网上的申请系统往往会根据邮编将申请者按地域划分。对于很多公司而言,他们会优先考虑本地的申请者。所以当你申请的公司在当地有总部/分部时,务必写上本地的邮编。

这里有个小技巧,由于绝大部分科技公司都在加州,特别是北加州硅谷附近,所以如果有朋友在加州的话不妨写朋友的地址。这样做的确可以提高被选中面试的几率,甚至有些小公司可能会跳过一轮电话面试直接邀请你去公司面试。现在绝大部分面试过程都是通过电话或邮件确定,除了最后给你发Offer,招聘的中间部分都不会给你提供地址寄送任何文件。如果公司决定给你Offer,你也完全有机会和HR确认/更新你的实际地址。这样做的缺点是,可能去公司面试的时候你需要自己安排机票住宿,如果真到了这一步,权且就当花钱买个机会了。

基本信息之外,对于刚毕业的学生而言最重要的信息包括学校、专业和学位。学习成绩对于大部分公司而言只是加分项,如果GPA低于3.3,可以考虑不包括成绩。当然,如果GPA是你的亮点之一,那也完全可以包含此信息。在这方面,Oracle是出了名的名校控,如果你高GPA、名校出身,基本上半只脚已经踏入了Oracle。相对而言,其他公司并没有这样的要求。此外,对学生而言可以列举一些在校学过的相关课程。只需要列举课程名即可,内容数量以5项左右为宜,课程名尽量选择大家熟知的,比如算法、数据结构、操作系统等,如果是研究生课程,可以加上“高级(advanced)”关键字。

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

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

1.1.3描述技巧

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

SoftwareEngineeringInternship,XXCompany,6/1/–9/1/

Internedwiththeserverteam.

ImplementedadistributedaccesscontrolalgorithminC++,whichimprovedlogintimebyaround50%.

英文简历常见的另一个问题是如何翻译专有名词,比如在国内大学获得的种种荣誉等。此时,一定要参考网络资料,确保读者的理解和你想要表达的意思一致。甚至可以用一句话简单描述这是怎样的荣誉,或者用百分比表示只有top的学生才能获得该项荣誉。举例如下:

ExcellentStudentAward(top3%)

Grantedtorecognizeoveralloutstandingperformance.

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

面试

根据面试的不同对象,在招聘过程中你可能需要面对HR、技术面试官和老板。针对不同的角色,你应该准备不同的面试方式。具体分析如图1-2所示。

面试官他想要知道可以向其询问

人力资源

你是谁?你的职业兴趣是什么?

公司的整体信息和组织结构;开放的职位

工程经理

你做过什么项目?具备什么技能?对什么项目感兴趣?

团队的职责是什么?团队目前和将来会做什么项目?团队在找什么样的人?

产品经理

对公司产品的观点/反馈/建议。如果让你设计一款产品,你会怎么做?

公司的下一步产品是什么?公司面临的关键性挑战是什么?公司中的工程师如何与产品经理交互?

午餐面试者

你之前或当前公司/学校的团队怎么样?你喜欢他们吗?为什么?你怎样融入公司的文化?

公司中的团队是怎么样的?他们有哪些团队构建活动?

工程师

如果你能够提出合理的清晰的问题,如果你能够有效地表达你解决问题的规划,如果你最终能够解决这个问题——那么,请展示你的代码

一般的工作流程是怎样的?公司使用的技术栈是什么?

架构师

你是否能够以可扩展的方式解决问题?你是否能够认清系统设计中的关键权衡?

公司使用的技术栈是什么?公司如何使用这些技术来解决现实世界的问题?

图1-2面试须知

1.2.1HR

HR是你与公司的连接点。通常,HR负责安排协调面试,主要通过邮件联系。HR也有可能会直接打电话联系你,目的是了解你的基本情况,包括身份、毕业/离职时间等。HR通常会介绍职位要求和公司的基本情况,并且在面试当天接待你,了解你是否有其他面试安排或者其他公司的Offer。此外,HR还负责面试你的沟通能力,向老板反馈性格方面与团队的契合度以及对公司感兴趣的程度。因此,每次与HR的沟通也需要热情、职业。适合向HR了解的信息包括:公司的整体氛围、面试的流程安排、最近公司人员流动情况等。

1.2.2技术面试官

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.2.3老板

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

另外,准备一些常见的行为问题:比如你有没有过失败的经历,如果你老板给你不喜欢的任务怎么办,你想象中要成为什么样的人。这里一方面可以结合自身精力,另一方面多







































北京儿童医院看白癜风
初期白癜风能治愈吗



转载请注明:http://www.jinqiancaoc.com/dxgs/3362.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了