|
学习算法,切忌一上来就啃《算法导论》,我宁可你看的是 《Cracking The Coding Interview》。
不是算法导论不够全面,更不是写书的大佬不够牛逼,而是因为面试算法≠算法!
我在《九章算法班》上提过面试算法和算法的五大区别,让你脱离只会刷题的“高级趣味”,目前我已经帮助500+人拿到心仪的offer!
准备算法面试,要学会功利的刷题
很多人会选择看《算法导论》这类大部头,或是疯狂刷题来提升编程能力。但是《算法导论》全书共1180页,LintCode则是搜集了2000道编程练习题,假设我们一天能刷5道题,1年多就能刷完了呢~
所以,我整理算法和数据结构的常考知识点,越红考得越多,灰色的不考或是考的概率小于千分之一,直接帮你筛掉一半以上的编程题。
展开来说一下:
①字符串处理:考得很多,主要注重代码实现能力,算法上没有太多难点,通常是处理麻烦。
②双指针算法:高频算法之王,变形特别多,算法不算特别难,但能快速想到和写好不容易。
③二分法:考察频率中等,能写好写对不容易,二分答案的问题甚至很难想到算法,要背模板。
④分治法:考察频率中等,一般和二叉树一起出现和考察,题一般不难。
⑤动态规划:国内大厂基本都考、北美主要是G/F喜欢考,其他公司考得比较少。
⑥拓扑排序算法:考察频率中等、但每个公司基本都有一个这个算法的题。
⑦链表:中小公司考得多,大公司近年来考得少,题目一般不难,主要考察reference。
⑧堆:高频,经常会用到,原理必须掌握,但不用掌握代码实现,应用必须掌握代码。
⑨树状数组:不太考,与其学这个不如学线段树。
⑩红黑树:只有G可能会问到,也只是问大致原理,能干啥,Java会用TreeMap就行。
更多算法和数据结构的考察情况,可以移步我的讲座《FB面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题》,我会在讲座中跟大家具体分析。
代码通过了,也不要忽视代码质量
代码就像一件艺术品,越是高级的程序员,越有代码洁癖。越是高级别的面试官,越在意你的代码质量。拥有好的代码质量,会让面试官在心里为你默默加分。如果质量很差,面试官会在心里为你默默扣分,最终是否导致 Hire / No Hire,就是一个量变引起质变的问题。
在刷题的过程中,不要觉得代码通过了就一劳永逸了,还要注重提升代码质量。我这里抛砖引玉提几个:
二元运算符两边加空格,单元运算符不加空格
花括号和 for, if 之间要加空格(Java),圆括号和 if 之间要加空格
用空行分隔开不同的逻辑块
逗号后面加空格
把面试官当做你的Partner,学会正确沟通
把算法学得炉火纯青,也不能保证你能找到工作。其实在招聘市场中,用人单位更愿意招一个各方面能力都比较均衡的“普通人”,而不是一个编程能力逆天,却难以沟通交流的“天才”。
在面试中,你要学会把面试官当作 Co-worker而不是考官,让面试官愿意和你一起工作。
我总结了一些面试tips:
①做一个题之前,先沟通清楚,得到面试官肯定,再开始写代码,写完以后再解释
②不要闷头写 也不要一边写一边解释太多(容易写不完)
③可以要提示,经过提示做出来的题,也是可以拿到 Hire 的,但是先自己努力想一下,别太容易放弃,容易让人觉得不会主动思考问题。
④别和面试官吵架。面试官带着答案来面试你的,不同意见在大部分情况下,都是你自己想错了。
⑤会就会,不会就不会,不要遮遮掩掩,坦诚很重要,容易让人觉得和你沟通“不顺畅” 。
⑥做过的题就说做过,不要故意说没做过。因为他既然已经怀疑你做过了,即使你说没有,他也无法打消这个顾虑,还不如让他换题。
通过实践,不断提升自己的算法能力
接下来就是一个理论指导实践的过程。在你学完了《算法导论》等理论知识后,应该主动去实践,不断提升自己的算法能力。
首先,多刷题。在刷题的过程中深入理解算法和数据结构。
LintCode是一个程序员刷题网站,覆盖了近2000道企业面试真题。在学完一个知识点后,可以及时来刷题巩固,提升自己的算法能力。
其次,学会总结思考,才能扛住面试官的follow up。
很多人觉得自己刷完题并通过了就一劳永逸了,然而在真实的面试场景中,面试官会抓住你代码的某些点来进行提问,如果没有及时进行总结和反思,则很难通过面试。给大家一点方向:
①思考写出的代码还有没有优化的空间。比如变量命名是否规范、空格是否对齐,代码能否更简洁。
②思考是否能做到一题多解和多题一解。比如这道题用了二分法,是否能用DFS;A题的DP解法,能否用在相似的B题上。
③找个人帮你mock,学会站在面试官的角度思考问题。
做好面试前的准备,学会看菜下碟
很多人会问我:“去BATJ等大厂需要刷多少题才够?”,实际上不同公司和岗位对算法面试的要求也不同,有针对性的准备才是性价比最高的方式。
按公司面试难度刷题:
①像是字节、美团、Google、微软这类竞争激烈的公司,必须要刷难题。算法考察范围很广,特别喜欢DP和红黑树 Red-black Tree,线段树 Segment Tree。
②其他一线大厂,比如腾讯、阿里、Facebook刷中等题就够了。
③其他中小厂,比如搜狗、爱奇艺、蘑菇街,刷中等题就够了,算法面试考察范围很窄,Binary Tree, LinkedList, String, Array 这些基本数据结构相关的题掌握即可。
按岗位面试难度刷题:
不同的岗位算法面试难度不同,越后端越难,越前端越简单。
难度排序(从易到难):
Data Scientist / Data Analyst / Data Engineer
Web Frontend Engineer / Mobile Engineer
Software Development Engineer
Product Engineer
Infrastructure Engineer / Software Reliability Engineer
Machine Learning Engineer
关于算法面试的方方面面,我在《九章算法班》里讲得很详尽了。现在还开放了前四节体验课程,感兴趣的小伙伴可以来免费试听。
最后,我整理了2020年大厂高频面试题,感兴趣的小伙伴记得收藏。
阿里巴巴:
牛牌
连接字符串
同和分割数组
有效的括号字符串
路径和
数组评分
字节跳动:
删除字符
矩阵中的最长递增路径
恢复数组
食物组合
组合新数字
最大点的集合
腾讯:
最短休息日
解压字符串
中位数
移除箱子
最小分解
歌曲时间
百度:
等差切片
祖玛游戏
生命游戏
字符至少出现K次的最长子串
整数替换
拆分子数组
美团:
考试策略
字符串划分
区间极值异或
月份天数
关联查询
字符删除 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|