优缺点明显,写一点阅读建议
在春招、秋招中,我断断续续的拿过阿里、字节、百度、美团、微软、小米等公司的 offer,算有一些面试经验,不得不承认算法编程题确实是面试中的重要部分。这里希望结合自己的面试经验和这本书的阅读体验,总结一些我看法,希望能帮助到一些人。接下来会分为三个部分:优点、缺点和阅读建议。
优点
这本书最大的优点就是比较全面,基本覆盖了不同的类型和问题,如果你是小白,或者对A 题真的毫无经验,那这本书还是蛮值得一看的,通读一遍基本可以对 A 题这件事比较熟悉。如果你本身就读过一些数据结构和算法的书籍,但缺乏实践,这本书也可以帮助你知行合一,在实践中运用学过的数据结构知识。
缺点
首我想说这本书如果放在 10 年前或者更早,我应该会给 4-5 星。在网络资源不发达的年代,这种全面、专注面试题的书籍确实不可多得。然而,现在互联网如此发达,这本书的内容就显得光彩不显了。
首先,这本书过于追求所谓的架构设计、面向对象了,一道题的解法代码往往被分成多个包装类、功能函数,非常冗长,很多题的解法代码甚至超过一两页,颇有一种杀鸡用牛刀的感觉。实际上,每场面试时间都是固定的(大约 45-60 分钟),算法编程往往都是压轴部分,除去开场的自我介绍、八股问答(如果你有项目或者实习经验,还会问这些),留给算法题的时间一般也就剩下 20-30 分钟。你需要的是在有限的时间里,快速的找到面试题的解法关键,比如排序/二分/回溯/搜索/分治等等,然后用代码正确的实现出来。现在基本都是线上面试,面试系统大多支持程序运行,很多题你即使思路是正确的,也很难一次写出 bug-free 的代码,往往需要你再进行调试。如果你模仿书中的代码风格,会让你的时间更加紧张、调试更加用时,甚至耗费面试官的耐心,毕竟算法考核的关键是你对算法知识的掌握、短时间内解决问题的能力、良好的代码实现能力以及对复杂度的分析,至于面向对象风格或者 OOP 思想真的不是关键。
另外,非常想吐槽的是,这本书里很多题的解法并不是最佳解法或者良好实践!!!试想一下,一道题你在这本书里见过,面试中恰好被问到,你又恰好对书中的解法烂熟于胸,结果当你给出解法后,面试官却问你是否有更高效的解法,还有什么比这更令人崩溃?另外书中的很多解法虽然在时间复杂度上已经是最优的了,但给出的实现也非常差,比如明明可以使用原地空间,却额外申请了内存,如果你遇到代码能力强的面试官,你很可能被要求优化代码。不仅如此,书中的有些解法甚至无法通过 LeetCode 对应题目的 case,这太离谱了。
最后,我必须想吐槽,这本书的中文翻译能走点心吗?翻译的太差太差了,很多时候看书上的解释看不懂,反而要去网上找资料和题解。
阅读建议
强烈建议配合 LeetCode 的题库阅读本书。目前再中国区的 LeetCode 上提供配套的题目,可以提交代码验证,书读十遍,不如动手实现一边,不管书上的解法看的有多明白,一定要动手实现,做到能在 LeetCode 上 AC,这样才是真的弄懂了。而且,可以多看 LeetCode 的评论区和题解区,经常会有比书里更好的解法或者更易懂的解释;