本书介绍了如何在硅谷求职,以及剖析了具有代表性的43 道热门硅谷公司的面试题,从面试技巧、基础知识、解题思路和效率优化等方面总结面试和解题规律。全书分为四部分共15 章,包含出国工作途径、IT 求职准备、实战访谈,以及常见数据结构、算法、大数据、系统设计等方面的题目和解题思路,并提炼出解题的5 个步骤:复述/提问、举例、观察、编码和测试。本书精选出的面试题是硅谷热门公司的高频题,可以用来作为面试前的练习。对于每道题,本书尽可能给出多种解法,对于解决日常工作中遇到的问题也有一定启发性。
硅谷求职和技术移民美国一本通
随着越来越多IT 工程师寻找国外工作机会,介绍和总结国外热门IT 公司面试过程及面试内容的需求变得越来越迫切。美国最新移民改革CIR 方案更倾向于技术移民,这将使得今后会有更多国内程序员去美国工作。笔者亲身参与了国内和美国一些热门IT 公司的面试,同时也作为面试官面试过不少人,熟知海内外IT 公司招聘流程和面试方式。通常来说,去美国IT 公司工作有三种途径。
? ●直接申请美国公司职位,拿H1B 签证工作。不少热门IT 公司直接在国内招人,比如Facebook、Amazon、Microsoft、Google 等。越来越多的程序员选择这条路,一方面是因为美国签证的条件放宽了,另一方面是因为硅谷公司面试并没有比国内公司难多少。
? ●在国内的跨国公司工作一年后,内部转组到美国的分部,使用L1 签证。例如,从微软中国转至微软西雅图总部工作。
●申请攻读美国学校的计算机科学硕士或博士学位,毕业后再找工作,即由F1 签证转为H1B 签证。
这三种途径都需要成功通过公司的技术面试。热门IT 企业的面试方式大致相同:1 或2 轮电话面试,通过之后,又有4 或5 轮的现场面谈。其中80%的面试是技术面试,每轮技术面试大约45 分钟,扣除双方自我介绍和提问时间,花在技术面试的时间大约为30 分钟。由于技术面试时间的限制,面试的题目一般不会太难,比大学生编程比赛(ACM)的题目简单很多,但是,面试者需要具备一些编程面试技巧,并对算法、数据结构熟练掌握才能在限定时间内完成。这对要求在白板上写程序和无Bug(Bug free)的公司来说尤其重要,比如Facebook。
在编程面试过程中,光有解法却写不出来代码是行不通的,这只会让面试官觉得你夸夸其谈,不会实际编程。在编程面试里,切记“让代码说话”这条准则。在本书面试题相关的章节中,笔者贴出了面试题的全部代码,是为了更多时候让代码来说话。针对每道面试题,我们通常会有如下步骤。
? ●复述/提问:用自己的话复述面试官的题目,以免偏题。面试官给出的面试题并非一开始就很明确,需要多次问答来确定题意、边界条件、时间和数据结构限制等。
? ●举例:可以与提问同步进行,主要用来确认输入和输出结果。
?● 观察:通过举例来总结规律,思考可能使用到的结构和算法,然后设计一种你认为最优的算法。
? ●编码:和面试官沟通你的算法之后,开始在白板编码。
? ●测试:使用个别例子,把你的代码测试一遍。
在以上5 个步骤里,看时间是否充裕,有些步骤可以省略。比如,如果面试官已经把问题说得很清楚了,那么复述可以省略。在本书当中,笔者也会按照这5 个步骤的解题技巧来阐述面试题的解题方案。
笔者根据自身作为面试官的多年经历,并收集了网上众多的热门IT 公司面试题目,精选了43 道题来代表当前热门和高频的面试题。本书内容覆盖了基础的数据结构:数组、链表、树、堆栈、字符串等,以及高频率出现的算法,如动态规划、俩指针、排列组合、优先遍历等。此外,还覆盖了系统设计解题思路和案例分析。涂峰加入了再版的写作,以自身“肉身翻墙”的经历为本书丰富了求职准备、实战访谈、系统设计等章节。本书的内容分为以下四个部分。
? ●硅谷求职:硅谷公司文化、技术移民、简历、面试、录用谈判和职业发展。
? ●实战访谈:先行者所传授的出国途径、面试技巧、硅谷企业文化、职业规划。
? ●算法面试:动态规划、俩指针、优先遍历、哈希、排列组合。
? ●系统设计:实战技巧、案例分析、阅读推荐。
此外,附录还提供了数据结构和算法总结及海量数据分析,以供读者快速查阅。
本书有以下几个特点。
? ●介绍硅谷求职和技术移民美国。
? ●对已实现技术移民美国的先行者进行访谈。
? ●精选出的面试题是硅谷各家热门公司的高频题,极其具有代表性。
? ●完整介绍了系统设计题的实战技巧,对应聘高级职位者很有借鉴意义。
? ●总结了常见数据结构的对应算法,提炼出一套解题规律。对于类似题目,有很强的借鉴意义。
? ●本书提供了完整的可运行的源代码。
? ●对于每道题,本书尽可能给出多种解法,对解决我们在日常工作中遇到的问题有一定启发性。
虽然本书大部分的代码是用Java 编写的,但很容易转化为C++/.NET 代码,因此,本书也适合C++/.NET 程序员阅读。由于本人水平有限,书中的题目并不能完全代表当前热门公司的编程面试的各个方面,虽然经过多轮审核,不少解法依然可能有漏洞或者错误,希望广
大读者能给予指正。
在本书的写作过程中,我得到了很多朋友、同事的帮忙,包括汪纯子、周泽勇、俞明辉、吴盛萱、杨超、尹杭锋和于东东等。感谢他们帮忙校对文字、审核代码。同时,感谢电子工业出版社的工作人员,尤其是符隆美——大到全书的架构,小到文字的推敲,她都给予了我极大的帮助,从而使本书的质量有了极大的提升。
最后,我要衷心地感谢我的妻子Emily。感谢她在过去几年中对我的理解和支持,为我营造了一个温馨而浪漫的家,让我能够心无旁骛地写书。谨以此书献给她以及我们的女儿Ella。
陈东锋
2015 年11 月于上海张江