笔者目前就职于谷歌,担任软件工程师。与很多开发人员一样,笔者在面试前也进行了充分的准备,其中“刷题”似乎格外令人痛苦和感到疲惫。然而笔者发现,虽然刷题的过程很痛苦,但也有很多收获。首先,现在写出来的代码更加简洁,编程也更高效。其次,提升了自己的系统设计能力,在面对实际问题时更有思路。最后,因为准备充分、发挥平稳,最终拿到了比一般软件工程师更高的待遇。
在准备面试的过程中,笔者总结了一些经验,现在把自己的经验写出来,分享给广大读者。
有一点需要说明:为什么本书使用Python语言呢?Python与C++相比更加简洁,可以方便地调用很多函数。使用Python“刷题”,可以不必纠结烦琐的细节。
本书分为四个部分,第一部分介绍硅谷公司面试流程,第二~四部分对应一般面试需要考查的三个基本技能。
❑数据结构:主要介绍关于列表、堆栈、队列、优先队列、字典、集合、链表,以及树和图的一些基本应用。
❑算法:主要介绍二分搜索、双指针法、动态规划、深度优先搜索、回溯、广度优先搜索等算法,并提供了面试真题的实战训练。
❑系统设计:包括系统设计理论和实战,介绍了多线程编程设计,也介绍了机器学习的系统设计案例,包括搜索排名系统和Netflix电影推荐系统等。
本书具有以下特色。
❑内容新颖:大多数案例都是目前大公司经常面试的实战题目。
❑免费代码:附有大量经过测试的代码。
❑经验总结:全面归纳和整理笔者积累的面试经验。
❑内容实用:结合大量实例进行讲解。
本书的完成离不开恩师蒋立源教授的鼓励,虽然他已经离开了这个世界,但是没有他,笔者不会产生写书的念头。谨以此书献给敬爱的蒋老师!
感谢师妹杜亚勤博士,她在百忙之中阅读了全书并做了修改。
任建峰
于美国圣地亚哥