大厂面试喜欢考算法,该怎么破?
这两年的软件工程师面试可谓神仙打架!
有些 985、211 院校毕业的高材生都没有拿到满意的 Offer。国内一些大公司的门槛也越来越高,这里的门槛很大程度上体现为对算法能力的要求。
很多人因为算法能力不过关而丧失了自己满意的 Offer。
然而,虽然算法能力的门槛越来越高,但是面试题的类型和底层逻辑是不变的,甚至不少公司考察的都是 LeetCode 原题,这其中也包括了国内 ATM 等大公司。
算法面试都考什么?
如果从大的方向,可以将考察点分成两类。第一类是数据结构与算法基础知识,第二类是算法思想。
数据结构与算法基础知识
这部分,我又做了一个小小的细分,将其分为两个小点。
(1)各种数据结构的特性与基本操作
比如数组、队列、栈、链表、树、图等。尤其需要掌握的栈和树。这是因为使用到栈和树的地方实在太多了。比如 DOM 树(虚拟 DOM 树)、树形选择器、浏览器执行栈、浏览器历史记录栈,等等。
另外,围绕栈和树的题目也相当多,从最简单直接的树形数据结构转化复杂一点的数据结构解析,基本上用“栈+DFS”就可以实现,而做 DFS 时通常都围绕树型结构进行递归求解。
所以这两个数据结构非常重要。面试频率非常高,这里要敲一下重点,希望大家认真对待这部分。
(2)复杂度分析
复杂度分析是学习数据结构与算法的基础,也是核心。建议大家一定要先学会分析算法的复杂度,再去学习具体算法。
这部分内容包括时间复杂度和空间复杂度分析,其中每一种复杂度都有最好、最坏及均摊复杂度。而一般我们使用最坏复杂度比较多。
另外,分析复杂度除了分析迭代,也要会分析递归,递归栈的空间开销经常被大家所忽略,这点值得引起大家的注意。
算法思想(80%考点)
对于算法思想,需要大家在掌握了上面内容基础上进一步学习。
这里列举了五个考点,它们分别是:
• 搜索(BFS、DFS、回溯、二分等);
• 暴力优化(双指针、单调栈、前缀和等);
• 动态规划;
• 分治;
• 贪心。
以上内容覆盖了算法面试 80%的考点。一些比较“冷门”的知识比如二分图、跳表、蓄水池抽样算法等考察的频率很低,就没有列出来。
希望大家集中精力将重心投入这 80% 考点中。其他知识点大家可以根据自己的情况学习。
如何科学高效地准备算法面试
科学的学习路线和良好的刷题技巧是最重要的两个因素。
有一个科学的学习路线就不会迷茫,也不至于发生由于学习顺序不当导致自信心被打击的情况。有良好的刷题技巧就不至于反复踩坑,刷了又忘,忘了又刷,以至于最后什么都没有学到。
《算法通关之路》这本书就很好地解决了以上两个问题。
它不仅提供了完整的学习路线,内容覆盖面试的大部分考点。还浓缩了作者刷了数千道题目总结出来的核心知识点以及刷题技巧,帮助大家在有限的时间内搞定算法面试。
《算法通关之路》一书的最后一章就是专门讨论刷题技巧的,比如如何根据数据规模反推算法复杂度,以及数据预处理等,都是非常实用的刷题技巧。
这本书由多位作者编写。他们大多来自名校,在算法比赛中都有不错的成绩。另外还特别善于写题解,传达自己的思想。整理的算法题解和算法思想放到了 GitHub 进行开源,累计获取 4 万多 star,帮助了无数的程序员获得满意的 Offer。
相比于其他同类图书, 这本书有三个特点:
01. 题目范围广泛,基本上覆盖了大部分的常见题型。题目全部来源于力扣的高频经典题,值得大家投入经历学习。
02. 题目之间不是孤立的,而是有一定的相关性和难度梯度。旨在通过若干关联题目的讲解,让读者深入理解题目背后的逻辑,做到即使遇到新的题目也可以游刃有余。
03. 大多数题目的讲解非常详细,而不是一笔带过,除此之外,还配有大量图片,非常适合新手学习。
评论