这里有你在编程面试中取得成功所需的技巧和方法...

 程序员是互联网时代的主要建设者,其薪资待遇遥遥领先于其他行业。虽然我国

各项IT 技术的人才缺口较多,但是由于人口基数大的客观现实和信息技术教育的日益

普及,岗位竞聘显得极其激烈。如今连小学生都在学习Python 编程,不难想象,日后

会有多少个程序员!若要在应聘中脱颖而出,除了有过硬的技术本领,还应做好哪些

准备呢?答案就在本书中!

从内容上来看:

本书是面试的指南针,无论读者处在什么阶段——胸有成竹或一脸茫然、高校新

晋或职场老手、兴趣使然或宏图大志,本书从求职之前的准备工作开始,事无巨细地

在每一个分岔点做好守候。读者适合什么岗位、知识如何储备、包装如何到位、心态

如何控制、与人事管理人员如何交流、在面试官面前如何表现,均有建议。

本书是编程知识的百宝箱,无论读者是闲来无事还是临时烧香,所喜或所需的门

道——基本数据结构、经典算法、编程语言特征、设计模式、当下主流技术,甚至活

跃解题思维的脑筋急转弯,本书都为读者逐一备好,开篇引进门,再拓宽知识领域,

以字里行间对面试解题的刨根究底,激发读者对编程的兴趣和热情。

本书是事业的助推器,书中描述的面试过程或编程知识能与读者的切身经历回响

共鸣。本书从第1 版至今,已逾十年。时光荏苒,有什么编程知识还依旧重要,有什

么经验教训还依旧实用,本书积淀下来,就是为了对读者的事业再添一把力。

另外,通过翻译本书,我还发现了本书具有如下特色:

(1) 知识涵盖面广。除了剖析求职准备、求职过程、电话面试的关键步骤和关注重

点外,还分别讲解了二十余项面试重点,包括链表、树、图、数组和字符串、递归、

排序、并发、面向对象编程、设计模式、数据库、图形和位运算、数据科学、随机数、

人工智能、数理统计、脑筋急转弯、知识方面和非技术方面的问题等。

(2) 题型具有典型性。若读者掌握了应对书中题型的技巧,就能在面试时触类旁通,

处变不惊。

(3) 讲解具有启发性。与一般教科书不同,本书不是给出问题后马上提供并解释答

案,而是通过模拟真实面试的场景,引导读者获得线索,找到问题切入点,最终得到

答案。在引导过程中锻炼读者的编程思维。

本书久经打磨,是多种IT 技术职位竞聘不可多得的好书。尽管如此,我还是敬请

读者在掌握本书要义之后,继续扩大知识面,特别是要关注和钻研与应聘职位相关的

专业知识,方能稳操胜券。

本书主要由程钢翻译,在翻译过程中力求“信、达、雅”,但是鉴于译者水平有限,

错误和失误在所难免,如有任何意见和建议,请不吝指正,感激不尽!

  

节选自《斩获Offer:IT名企面试策略与编程笔试精解》一书

-----------------------------------------------图书基本信息------------------------------------------------------

书名:《斩获Offer:IT名企面试策略与编程笔试精解》

ISBN:9787302526711

定价:59.8元

出版时间:2019年4月

------------------------------------------------------试读样章--------------------------------------------------------

求 职 之 前

动身求职前需要准备充分。如果不知道自己想要什么样的工作,就不应该提出申

请。如果只想做一名好的程序员,是不够的。必须了解市场的需求,并懂得如何提高

和包装看家本领,以确保得到意向公司的青睐。

1.1 了解自己

与刻板的程序不同,所有程序员都是不一样的。了解自己是什么样的程序员对于

找到合适的工作至关重要。短期内做一些自己不喜欢的事情还凑合,但使人甘愿长期

投入的还是那些能触发兴趣点和兴奋点的工作。优秀的程序员对其工作往往充满热情,

若其乐稍逊,则不能全情投入。

如果不确定自己的兴趣,那么可以试着回答以下问题:

● 你是系统程序员还是应用开发人员?系统程序员致力于使计算机系统保持运

行的代码,例如框架、工具、编译器、驱动程序、服务器等。其他程序员是他

们的主要受众,因此系统程序员很少与非程序员互动——而且这项工作通常与

用户界面关系不大或者无关。另一方面,应用开发人员负责用代码实现那些非

程序员工作中需要代劳的部分,并且通常会与非技术人员进行更多的互动。

很多应用开发人员觉得与非技术人员就技术话题进行沟通困难重重,但与此

同时,他们又希望自己的作品有人捧场,并且期待那些捧场的人不只是其他

程序员。

● 你喜欢编写用户界面吗?用户界面设计——也称为用户体验(User eXperience,

UX)或人机交互(Human Computer Interaction,HCI)——是一种涉及各种技能的

工作,包括编程、图形设计和心理学。这项工作非常引人注目,因为用户界面

是各种应用中可见度最高的部分。用户界面设计在移动应用开发中尤为重要,

因为移动设备的限制条件要求我们有更好的创意和创新。如果你拥有相关技能

并喜欢这项工作,那么你将成就一家精英公司:不过,不少程序员觉得这项工

作很有讲究,难以做好,而且老被人挑刺,特别是涉及国际化和易用性的时候。

● 你是调试能手吗?如果你认为在自己的代码中发现问题很困难,那么想象一下

给别人的代码解决问题是什么感觉。调试工作需要强大的分析和解决问题的能

力。找到并修复问题本身是非常有益的。你需要确定你是否乐意一直扑在维护

工作上(当然,维护自己的代码义不容辞,毕竟程序员都必须精通调试)。大多

数情况下,特别是在老公司中,维护编程工作主要涉及现在被认为已过时或不

再流行的旧技术。依靠旧的技术经验和技能找工作路子不宽,但由于与旧技术

有关的能人稀缺,因此为数不多的几家依赖旧程序的公司仍会求贤若渴。

● 你喜欢测试吗?测试——也称为质量保证(Quality Assurance,QA)——要求具备

对各种细节的缜密观察能力,以确保涵盖程序的每个可能的使用场景,并且要

求具备创造力,通过尝试开发人员从未考虑过的输入组合来发现程序中的问

题。熟练的测试员十分稀缺,编写工具和自动化测试用例需要良好的编程能力。

● 你是架构师还是编码员?每个编码工作都包括一些设计,但每个工作都更侧重

于自己那一面。如果你喜欢设计,特别是为大型项目设计结构,那么软件架构

师的职位可能比以编码为主的工作更具吸引力。虽然成为好架构师需要很好地

理解如何编写代码,但架构师这个职位会涉及大量会议和人际交往,很少或根

本没有机会编码。除非受过软件架构方面的正式培训,否则成为架构师的通常

办法是先做好编码工作,然后展示出对项目各个部分的设计和装配才能。

上面的问题与编程的类型有关,但有吸引力的非编程职位和心仪的工作环境同样

值得考虑:

● 你对管理感兴趣吗?成为项目经理是一些程序员的长期目标,而另一些程序员

一想到此却感到畏惧。如果将管理定为目标,则需要培养领导才能,并展示出

在应对技术方面的同时能处理好软件开发中有关人的问题。如果不将管理定为

目标,那么可以找一家提供良好技术职业发展途径的公司,这样能避免晋升后

被迫管理别人(无论选择哪种职业途径,领导能力仍然是获得晋升的必要条件,

但领导能力与人员管理能力是有区别的)。

● 你想为大公司工作吗?在大公司工作有利有弊。例如,大公司能提供更好的工

作稳定性(只是在经济衰退期间裁员是常事)和某种职业途径。公司品牌能得到

非技术人员的认可。另一方面,大公司常见的官僚作风、严格制度和公司内部

竞争可能让人感到窒息。

● 你想为小公司工作吗?薪酬可能会低些,但随着公司步入正轨,底层角色是可

以开创出一番天地的(报酬可能也会有惊喜)。此外,小公司的工作环境通常比

大公司随意些。当然,缺点是大多数创业都会失败,失业可能就在一两年间,

届时可不像大公司,很可能没有遣散费。

● 你想做开源项目吗?绝大多数编程工作曾经都涉及专利和闭源项目,这让一些

程序员感到不满。现在一些公司在观念上有所调整,倾向于更开放的软件开发

模式。大家可以基于开源项目,并且能因这种参与形式而拿到报酬。值得注

意的是,如果你觉得自己的工作项目是开源的这一点很重要,那么最好去找

已参与开源的公司。试图在传统软件公司中捍卫开源通常只会得到挫败感和

一场空。

● 你想参与长期项目还是短期项目?一些程序员渴望改变,在每个项目上最多愿

意花费几个月的时间。如果你喜欢短期项目并且不介意出差,那么在咨询公司

工作可能比在更为传统的公司中工作更有意义。

其实,这些问题没有普适的答案,回答的方法也没有正确或错误之分。给出的回

答越真实,觅得的职位才越能称心如意。

1.2 了解市场

了解自己想要什么工作固然好,但不要过于狭隘。我们还需要了解当前的就业市

场以及它如何限制你寻找“理想”的工作,特别是在经济衰退期间——例如20 世纪90

年代末的互联网泡沫,以及2010 年前后全球房地产和银行业的崩溃。

1.2.1 基本的市场情况

想了解开发人员就业市场的情况,有很多信息来源,包括以下方面:

● 社交网络。像LinkedIn 和Facebook 等社交网络如今正迅猛成长,已经成为各

类大小企业的虚拟招聘市场。LinkedIn 尤为值得关注。其他社交网络可以间接

展现市场“脉搏”,也可以为新的甚至是潜在的职位发布提供有价值的线索。

● 在线求职网站。研究哪份工作好时可以参考两类网站。一种是罗列型网站——

例如Dice(专注于技术相关的职业列表)和Monster(各种职位列表的网站)——能

展示当前招聘中的岗位。另一种是评论型网站(如Glassdoor),会交流谈论工作

条件、薪水、奖金、津贴以及其他有助于找到称心公司的信息。

● 书店。尽管越来越多的程序员资料可以在线获得,但无论是印刷版还是下载版,

专业出版的书籍仍然很重要。以各种主题出版的书籍的数量很好地表明了编程

社区对该主题的兴趣程度。特别需要注意那些突然成为主流的高精尖话题,但

要知道在大多数公司中,主流技术的应用滞后于书中的美好图景好几年。

● 专业发展课程。职业院校和大学致力于掌握企业招人的前沿情况,并围绕招聘

需求建立专业发展课程。

如果你已经毕业,那么可以从母校或者当地培训机构了解计算机科学专业的学生

需要掌握的计算机语言和技术。虽然学校讲授的并不总是与企业想要的一致,但教育

机构试图灌输给学生的是企业用得着的实用技能。

1.2.2 关于外包

外包和离岸外包——把任务托付给其他公司或者外国部门——是技术类就业市场

的重要组成部分。工资管理和物业维护等辅助业务活动的外包已经存在了几十年。近

来,得益于廉价计算机的兴起、廉价长途通信在互联网上的实现,以及低薪发展中国

家技术型劳动力的能力被认可,外包已经扩展到编程领域。在2005 年左右,出现了一

阵外包,特别是离岸外包。在过去的几年里,这已经算不上热门了,因为大多数打算

外包的公司已经外包了他们所能外包的一切。此外,随着发展中国家(特别是印度和中

国)的工资上涨,离岸外包的成本也随之上升。由于不同文化背景的劳动力工作进度不

同,会带来隐性的劳动力协调成本,因此意识到这一点的公司将以前外包的工作转为

内包。尽管如此,外包和离岸外包仍有可能存在,例如一些公司正在发展,觉得这个

办法可以削减成本,又如一些公司成立后会考虑是否因为一直雇用本地劳动力而付出

了太多代价。

如果觉得外包(特别是离岸外包)很困扰,那么要考虑采取措施以避免所从事的工作

可能在将来的某个时候被外包。以下是一些建议:

● 为软件开发公司工作。软件公司的存在理由是它所开发的知识产权。虽然大中

型公司可能会在世界其他地方开设开发中心,但精明的公司不太可能将其所有

业务转移到其他国家,也不会将其未来托付给外部公司。即便如此,一些公司

还是会出于成本或其他原因将项目的全部或大部分外包给其他国家。因此,应

聘时研究一个公司的行为和政策是值得的。

● 为外包商工作。出于五花八门的原因,许多外包公司会在美国这样的国家雇用

员工。

● 沿程序员食物链往上走。面向设计的工作不太可能外包。代码员相对廉价且数

量众多,而优秀的设计师难找(这得假设公司承认良好的设计技能与良好的编码

技能是分开的)。另一种让自己更难以被替代的方法是掌握领域专业知识——与

你编写的程序相关的专业知识,但其又在编程领域之外。例如,如果有人开发

财务软件,其除了编程之外还涉及会计技能的应用,那么外包给这个人的工作

要比这个人纯粹是一个程序员困难得多。

● 做管理工作。管理工作可以免于被外包,因此以管理为导向的职业途径是一个

值得考虑的选择。

在所有这些选择中,沿食物链往上走通常是最好的方法。工作需要的非编程知识

越多,或者与客户的互动越多,被外包的可能性就越小。当然,自己的工作永远不会

被外包是不可能的,自己的工作永远都能保住也是不可能的。毕竟,公司可能会在任

何时候缩紧或关闭正在推进的项目,并让雇员失业。因此,在整个职业生涯中练就一

招鲜的本领和顺应市场的技能非常重要。

1.3 培养顺应市场的技能

附录部分讨论了简历,它是获取面试机会的营销工具。大家都想要的东西往往是

最叫座的,所以让潜在老板满意的重点是掌握顺应市场的技能。

要在笔试和面试中脱颖而出,积攒实力和成果是必需的,特别是第一次走进就业

市场。以下是一些方法建议:

● 提升资本。像谷歌这样的公司以偏爱研究生学位求职者而闻名。获得硕士或博

士学位是提升资本的一个途径。此外,还有其他途径,例如参加大学或专业培

训,以及参加编程竞赛。

● 不为证书烦恼。本书的作者认为编程证书价值有限,因为极少工作需要看证

书。此外,顶级企业中几乎所有程序员都没有正式的编程证书,而面试/评估

你的就是这些人。与其花时间考证,不如试试其他可取途径(例如参加业余项

目或培训)。

● 参加业余项目。拓展技能集的一个好办法是参加与主营工作或学习重点无直接

关系的项目。发起或加入开源项目开发是一种方法。或者,如果已经就职,那

么就看公司是否会让你参与辅助项目。

● 学生时代好好表现。虽然成绩不代表一切,但却是公司选拔没有工作经验的应

届毕业生的凭据。成绩越好,特别是在计算机科学和数学方面成绩好,越能给

潜在的雇主留下深刻的印象。

● 不断学习。正规教育的结束并不意味着应该停止学习,尤其是当有条件从各种

来源获得有关编程的大量信息时。无论书本还是博客,也无论编程种类,总有

办法将学识维持在最新状态。这也是扩展视野和发掘其他爱好的好方法。这种

学习方法无法在简历里体现,但在技术面试中可以凸显出来。

● 参加实习。能够在课余参加实习的应届毕业生——特别是那些参加合作教育项

目的人——与尚未走上社会的同行相比占有巨大优势。现实世界的软件开发通

常与学术环境中的软件开发不同,潜在的雇主也明白这一点。

● 参加代码竞赛。TopCoder、HackerRank、CodeWars 和几个类似的网站会让开

发人员“面对面”解决编程问题。如果取得优胜,那么意味着你比竞争对手或

机器人能更快地解决问题,可以让自己的排名上升并获得更高评价,这一点可

以在简历中体现出来,让大家知道。而且,即使输了,这些也都是应对编程面

试的绝佳实践。这些网站的大多数盈利模式都围绕着推荐候选人和收取招聘费

用展开,所以如果表现优秀,则好的工作机会将接踵而来。一些公司试图暗自

组织编程邀请赛来跳过中间人,邀请对象可能是那些在公司网站上举动特别的

人,例如他们曾经在公司网站上搜索过编程相关的主题。

不管处于职业生涯的哪一步,不断学习是关键。一夜之间练就顺应市场的技能是

不可能的。每一步虽然需要自觉和努力的倾注,但它可以让你的职业生涯一路受益。

1.4 完成任务

公司需要能够完成任务的软件开发人员。在技能和教育方面,即便纸面上显得很

优秀,但证书和知识不能造出产品和服务供公司销售。能成事是真正从其他候选人中

脱颖而出的能力。

获得博士学位等高级学位、成为广泛使用的开源项目的可信赖贡献者或带着从酝

酿到发布都参与的产品都是重大成就。但小成就同样重要,例如增加产品功能、明显

地提升产品性能、启动并完成业余项目,或者针对一个专题开发出好用的程序。这些

都表明一个人有完成任务的能力。

招聘人员和招聘委员希望看到一个应聘者有多项成就——一种能完成任务的表

现。高水平的、经验丰富的开发人员的表现大都如此。在简历和网上个人资料中展示

这些成就是必需的。无论成就大小,都要随时准备好介绍它们的机智和自信。这非常

重要!确保面对非技术人员也能够清楚简洁地描述本质问题以及自己的项目是如何解

决问题的。表现出对编程的热爱是绝对可取的面试招数。清楚地表达那份热情如何驱

使自己做出供人使用的产品和服务将能实实在在地让自己在面试者中脱颖而出。

1.5 准备好网上个人资料

网上个人资料——网上公开的各种关于自己的东西——和简历一样重要。招聘者会

通过网上个人简介寻找合适的候选人。筛选者通过它们来清除不需要的申请人,而面

试官通过它们来准备深入交流的问题。

网上个人资料由以下一些或所有内容组成:

● 应聘者名字的谷歌搜索结果。它会成为潜在老板和同事的第一印象。

● LinkedIn 个人简介。LinkedIn 是一个用于跟踪专业人士之间联系的社交网络。

可以免费加入其中,并创建一个关于自己的详细介绍,包括工作和教育情况——

本质上就是在线简历。同事和客户可以公然地核实你或你的工作,这会非常有

价值。

● GitHub 个人主页。许多雇主会在见到真人之前通过GitHub 个人主页评估应聘

者的工作,因此有必要花点时间清理GitHub 个人主页,以便它反映自己最好

的代码。在隐私设置中删除或更改不完整的或质量不高的版本。如果没有多少

公开项目,则请将自己最得意的代码开放,以便明确表示自己写过重要的代码

且拥有GitHub 的使用经验。

● Stack Overflow 网站。该网站会在Google 搜索结果中显示,也许会被人力资源

部门查到。如果你最近问过的基本问题反映出自己学识浅薄,则可能需要将这

些问题删掉。如果还没有在该网站建立个人简介,那么建议置办一下,特别是

在几个月的求职时间里,你可以花时间解答一下他人的问题。

● 天使投资者的网站。这些网站不仅将投资者与创业公司联系起来,还将创业公

司与潜在的雇员联系起来。AngelList 网站是这一类别中的重要角色。建议在其

中创建反映个人兴趣和专业技能的个人资料。

● 其他社交网络的个人资料。其他社交网络(如Facebook、Twitter 或Snapchat)可

能会被查看,具体取决于隐私设置。确保清理和收紧个人资料,防止不专业的

痕迹公之于众。

● 个人网站。这是更深入反映个人特点和个人兴趣的潜在情报源。如果发表过关

于政治或有争议话题的言论,那么可能得在求职期间去掉它们。

● 文章和博客帖子。如果写过与编程有关的主题,那么这可是招聘人员评估个人

经验的好依据。

● 评论和论坛帖子。它们提供了另一种方式来深入表现个人编程水平以及个人对

技术和技术公司的一般态度。

雇主从网上个人资料中获得的印象将影响录用的机会。如果一个人在简历中表示

自己在C#方面有丰富经验,而论坛帖子表明那个人6 个月前曾发帖询问在C#中如何打

开文件,则此人的经验水平可能被认为是浮夸了,会导致整个简历受到质疑。或者,

如果雇主们看到被认为是令人困扰的网上个人资料,无论简历看着有多好,或者那些

网上资料其实是很久之前写的,他们都可能在面试前把人淘汰掉。没有人会对自己在

高中或大学经历的所有事情津津乐道,除了那些在后互联网时代长大的候选人——由

于涉世不深,让他们忘了那些事情似乎还太早,而大多数年长的候选人没有这方面的

困扰。

在申请工作之前,最好花点时间仔细查看自己的网上个人资料。以公司的眼光查

看有多少信息(好的或坏的)会指向自己和展现自己。如果网上资料有不利于被录用的可

能,则请采取一些措施来整理这些资料。如果可能,则从网页和搜索引擎中删除有问

题的材料。

花一些时间来修饰个人资料中的积极方面。如果无法删除网络上有关自己的不

利材料,那么这一点尤为重要。可以试着学一点关于搜索引擎优化(Search Engine

Optimization,SEO)的内容,并应用其中一些技术来使个人资料的积极方面出现在搜索

结果中较旧的、不太有利的搜索项之前。

最后,可以看看其他有个人简介特点的网上资源,这样做非常有用。大多数院校都

有工作网站,校友可以在该网站上传个人资料。一些公司为前雇员提供了类似的网站。

填写网上个人资料时不要给自己挖坑,要展示最好的自己。

1.6 小结

在正式求职之前,你的所作所为对于找到合适的工作至关重要。考虑到这一点,

要留意以下事项:

● 作为程序员和未来员工,看清自己喜欢什么和不喜欢什么。

● 掌握市场情况,以此寻找并申请最合适的工作。

● 培养顺应市场的、雇主需要的并且有助于职业生涯的技能。

● 管好自己的公开资料,以最佳方式展示自己,并确保不出意外地留住潜在雇主。

一旦以上所有事项就绪,就可以开始求职了。

求 职 过 程

大多数科技公司的面试和招聘程序都是类似的,所以针对需要经历的各个环节,

准备越充分就越容易成功。本章将解析整个求职过程——从联系公司到开始新工作,所

以你不必靠头几次申请栽跟头来学到经验。科技公司的招聘程序通常与传统公司大不

相同,因此即使你工作过一段时间,也会觉得这些信息很有用。

2.1 寻找和联系公司

找工作的第一步是找到感兴趣的公司并与之联系。虽然推荐是找工作的最佳方式,

但与猎头合作或直接联系公司也是可行的。

2.1.1 寻找公司

如果知道自己最想在哪些公司工作,则可以更好地找到目标公司。大公司很容易

找到——有那么十来个国际国内的科技公司名字一拍脑门就能想出来。通过阅读商贸

和本地行业刊物文章,能找到适合的中型(以及大型)公司。许多报纸杂志会定期编制实

力公司名录和优秀办公环境榜(别太相信这些排名,因为大公司的工作生活质量往往

存在很大差异)。大多数榜上有名的公司会在网上求职板块中或多或少地昭示它们的

职位空缺。即使发布的具体工作不合适,这些告示也有助于你从中挑出进一步考虑的

公司。

小公司(特别是早期创业公司)可能更难找到。这些公司通常太小、太新或太隐秘,

无法获得其太多新闻。除自家官网外,它们的资源不足以用于宣传它们的存在,除非

知道公司名称,否则不可能找到它们。找到这些公司的一个好方法是询问熟人和朋友

是否知道有创业公司正在招聘。另一种手段是使用社交网络。此外,还可以查看在线

的职位发布板(如Dice)、天使投资网站(如AngelList)或自己有权访问的目标职位列表(如

校友发布的职位招聘)。

可以使用LinkedIn 之类的网站在某个范围内按专业搜索人员。这类网站上的大多.....

想了解更多关于《斩获Offer:IT名企面试策略与编程笔试精解》内容,请点击:

https://item.jd.com/12778744.html

猜你喜欢

转载自blog.csdn.net/qinghuawenkang/article/details/107695542