你会打开这本书,一定是被“高效”这个词吸引过来的。作为一名程序员,参加面试最重要的准备工作就是“刷题”,要将大量的时间花在练习算法题上。随着在线练习的题库越来越多,面试者为面试准备的时间也越来越长,而带来的结果则是面试官也需要不断地翻新自己的题库,以防止面试者提前准备了自己选的面试题。
这样一来,面试者和面试官都需要花费大量时间准备面试。而面试者花费了时间和精力准备算法题以后,发现很多题在面试时都没有遇到,在实际工作中对自己也没有帮助。因此帮助面试者在节约准备时间的同时提高业务能力就成为我写这本书的初衷。
我在2018年也因为需要换工作,投递了很多简历,参加了各种企业的面试。花费了大量时间准备却没有在面试中派上用场的挫败感,我深有体会。但是在不断地练习以后,我逐渐有了信心来应对各种算法面试,最终也找到了满意的工作。我想把这段经历中自己结合LeetCode系统地准备面试的经验总结出来,分享给准备面试的各位程序员,包括我自己,让大家在今后的面试准备中少走弯路,于是就有了这本书。
本书的“高效”体现在两个方面。
1.精选适用广泛的算法。既然面试的目的是考核面试者的能力,面试就应该尽量还原工作场景。而只需要用一些常见的算法就可以解决大部分问题,如果最后的算法效率不够高,那么通过白板或实机操作,面试者仍然有机会改进自己的算法。
2.选择最容易写出的代码。程序员喜欢自嘲自己的代码是从GitHub或者Stack Overflow这两个著名的网站上借鉴来的。平时的代码可以引用别人的,面试的时候就应该以快速给出一个正确的实现为目标。
我在准备面试的时候发现,我做一道算法题往往需要半天的时间,这并不是因为我做得慢,而是因为解题过程包括以下步骤。
1.尝试用已有的知识来实现,即使用效率最低的方式也要实现出来。
2.根据LeetCode给出的运行时间和性能测试尝试优化算法。
3.查找相关的资料,比如LeetCode的讨论或相关的理论知识,加深自己的理解。
这些步骤和工作中实现项目功能的步骤一样,首先给出一个正确的方案,然后再进行优化。日常工作中我们可以使用Benchmark或Profiling等工具优化,面试的时候则需要在纸上通过抽象分析来进行优化。
本书的每个问题都会按照这个结构组织,同时也希望读者能按照同样的方式练习算法题,把准备面试的时间花费在更有意义的事情上。
和其他算法书相比,本书显得很“薄”,因为本书专注于“面试”中用到的算法。对于有一定工作经验的面试者来说,面试时很少需要实现排序算法等基础算法,一方面因为它并不是日常的工作内容,另一方面很多语言默认的排序功能需要很长时间的演化才能达到高效和稳定,让面试者在非常短的面试时间内就写出同等质量的代码显然不够合理。如果不凑巧,面试者需要在面试中实现排序算法,那么经过本书的“实现—优化”的练习,面试者仍然可以在面试中写出合格的代码。练习算法题已经成为程序员求职面试准备中非常分散精力但又不得不做的事情,更重要的优化简历、练习自我介绍和总结项目经验等反而没有得到重视,而这些才是让面试官在短时间内了解自己的有效途径。
本书代码使用的编程语言是Python3,在LeetCode提交时需要在语言下拉列表中选择“Python3”,如图0-1所示。
考虑到编程规范的需要,书中的代码和LeetCode的函数名并不一致,读者提交时需要在默认代码中调用书中的函数,如return two_sum(nums,target),如图0-2所示。如果想在LeetCode中模拟白板面试,请读者不要直接复制、粘贴代码,而应该手动敲入代码,这样才能更好地知道自己解题时容易遗漏哪些方面。请记住:我们的目的并不是完成一道题目,而是完全理解该类问题的解题思路。
图0-1
图0-2
视频导向图书是一种创新的内容分发形式,它以我们熟悉的图书为载体,但图书只是一个起点。通过视频导向图书,读者可以很容易地使用手边的智能设备,如手机和平板电脑,从图书出发,和图书背后的创作者建立联系,获取视频、直播甚至线下活动等丰富形式的内容,提升获取信息的效率和体验。
所有视频导向图书上都有两种形式的入口。
(1)二维码
二维码是大家非常熟悉、几乎天天都接触的。本书中的二维码入口如图0-3所示(它真的可以扫描)。
图0-3 二维码入口
为了保证二维码不会失效,我们采用了活码进行跳转。关注微信公众号“内容市场”,使用微信“扫一扫”来扫描书上的二维码,根据页面提示进入微信小程序即可观看讲解视频。也可以使用卷积传媒研发的App——内容市场,来扫描二维码并观看讲解视频。
(2)增强现实触发图
虽然扫描二维码是一种很熟悉的体验,但不得不承认有点太常见,不够酷炫。为此,我们提供了另一种更炫的入口:把一张图直接变成一段视频并就地播放!方法是使用“内容市场”App来扫描触发图,它在本书中如图0-4所示(它真的可以扫描),它位于几乎每一节的开头。
您可以在智能手机上的应用市场等渠道下载和安装“内容市场”App。
图0-4 触发图
单击“内容市场”底部的扫描按钮来扫描触发图,首次识别可能需要等待数秒,但马上您就可以获得相当惊喜的就地播放体验了,而且还可以看到运动跟踪的效果。当然,您不需要一直手持设备并对准触发图,而是随时可以单击“全屏播放”,将视频切换到全屏播放。
“内容市场”为读者提供的内容分为两个部分,一是与图书配套的、在图书上提供入口的增值内容,二是由图书的作者再度创作的、并不在图书上提供入口的订阅内容。
本书的读者都可以免费享用所有的增值内容。如果您看了视频感觉有所收获,也可以将它们分享给好友。
订阅内容也有很多免费的,但有些内容可能需要另外付费购买,这完全取决于您的需求和意愿。
如果读者朋友们在使用软件时遇到了技术故障等问题,可扫描以下二维码咨询客服人员。
图0-5 客服联系方式
卷积传媒