进军硅谷
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

随着越来越多IT工程师寻找国外工作机会,介绍和总结国外热门IT公司面试过程及面试内容的需求尤为迫切。美国最新移民改革CIR方案更倾向于技术移民,这将使得今后会有更多国内程序员去美国工作。笔者亲身参与了国内和美国一些热门IT公司的面试,同时也作为面试官面试过不少人,熟知海内外IT公司招聘流程和面试方式。通常来说,去美国IT公司工作有三种途径。

● 直接申请美国公司职位,拿H1B签证工作。不少热门IT公司直接在国内招人,比如Facebook、Twitter、Microsoft、Google等。越来越多的程序员选择这条路,一方面是因为美国签证放宽了,另一方面是硅谷公司面试并没有比国内公司难多少。

● 在国内的跨国公司工作一年后,内部转组到美国的分部,使用L1签证。例如,从微软中国转至微软西雅图总部工作。

● 申请攻读美国学校的计算机科学硕士或博士学位,毕业后再找工作,即由F1签证转为H1B签证。

这三种途径都需要成功通过公司技术面试。热门IT企业的面试方式大致相同:1~2轮电话面试,通过之后,又有4~5轮的现场面谈。其中80%的面试是技术面试,每轮技术面试大约45分钟,扣除双方自我介绍和提问时间,花在技术面试的时间大约为30分钟。由于技术面试时间的限制,面试的题目一般不会太难,比大学生编程比赛(ACM)的题目简单很多,但是,面试者需要一些编程面试技巧,以及对算法、数据结构熟练掌握才能在限定时间内完成。这对要求在白板上写程序和无Bug(Bug free)的公司来说尤其重要,比如Facebook。

在编程面试过程中,光有解法却写不出来代码是行不通的,这只会让面试官觉得你只会夸夸其谈,不会编程而已。在编程面试里,切记“让代码说话”这条准则。在本书面试题相关的章节中,笔者贴出了面试题的全部代码,是为了更多时候让代码来说话。针对每道面试题,我们通常会有如下步骤。

复述/提问:用自己的话复述面试官的题目,以免偏题。面试官给出的面试题并非一开始就很明确,需要多次问答来确定题意、边界条件、时间和数据结构限制等。

举例:可以与提问同步进行,主要用来确认输入和输出结果。

观察:通过举例来总结规律,思考可能使用到的结构和算法,然后设计一种你认为最优的算法。

编码:和面试官沟通你的算法之后,开始在白板编码。

测试:使用个别例子,把你的代码测试一遍。

在以上5个步骤里,看时间是否充裕,有些步骤可以省略。比如,如果面试官已经把问题说得很清楚了,那么复述可以省略。在本书当中,笔者也会按照这5个步骤的解题技巧来阐述面试题的解题方案。

笔者根据自身作为面试官的多年经历,并收集了网上众多的热门IT公司面试题目,精选了150道题来代表当前热门和高频的面试题。本书内容覆盖了基础的数据结构:数组、链表、树、堆栈、字符串等,以及高频率出现的算法,如动态规划、俩指针、排列组合、优先遍历等。本书的内容分为以下四个部分。

● 硅谷求职和面试:硅谷公司文化、技术移民、简历、面试和录用谈判。

● 常见数据结构:数组、链表、树和图、堆栈、字符串。

● 算法:动态规划、俩指针、优先遍历、哈希、排列组合。

● 杂项:系统设计、海量数据分析、面向对象设计、数学和位操作。

此外,附录还提供了数据结构和算法总结以及海量数据分析,以供读者快速查阅。

本书含有以下几个特点。

● 本书是市面上第一本介绍硅谷求职和技术移民美国的书。

● 精选出的面试题是硅谷各家热门公司的高频题,极其具有代表性。

● 总结了常见数据结构的对应算法,提炼出一套解题规律。对于类似题目,有着强烈的借鉴意义。

● 本书提供了完整的可运行的源代码。

● 对于每道题,本书尽可能给出多种解法,对我们在日常工作中遇到问题时有一定启发性。

虽然本书大部分的代码是用Java编写,但很容易转化为C++/.NET代码,因此,本书也适合C++/.NET程序员阅读。

由于本人水平有限,书中的题目并不能完全代表当前热门公司的编程面试的各个方面,虽然经过多轮审核,不少解法依然可能有漏洞或者错误,希望广大读者能给予指正。我已经搭建了一个关于程序员出国工作的网站“i码工”(http://www.imagong.com)和读者交流。

在本书的写作过程中,我得到了很多朋友、同事的帮忙,包括汪纯子、周泽勇、俞明辉、吴盛萱、杨超、尹杭锋和于东东等。感谢他们帮忙校对文字、审核代码。同时,感谢电子工业出版社的工作人员,尤其是符隆美的帮助。感谢她从大到全书的架构,小到文字的推敲,都给予了我极大的帮助,从而使本书的质量有了极大的提升。

最后,我要衷心地感谢我的妻子徐淼。感谢她在过去几年中对我的理解和支持,为我营造了一个温馨而浪漫的家,让我能够心无旁骛地写书。谨以此书献给她以及我们的女儿Ella。

陈东锋

2013年10月于上海张江