个人废话…
- 我呢,基于诸多原因,中途不想读研考研,准备秋招去了。因为没什么经验,所以磕磕碰碰。
- 秋招末尾拿到了满意的大厂offer,觉得有必要将几个月的秋招经验总结总结。
- 去面试,不刷算法怎么行呢
- 相关文章
校招面试个人经验——简历篇
校招面试个人经验——项目篇
校招面试个人经验——八股文篇
校招面试个人经验——面试篇
怎么开始准备算法?
- 算法的话其实不建议直接去刷,可以回顾下数据结构的基础知识点,比如以下几点:
○ 线性表
○ 栈和队
○ 树
○ 图
○ 散列查找
○ 排序
- 此外,要针对所要面试的岗位,选一门语言(比如我面的是Android开发岗,所以选Java语言)。选好语言后,要去记这个语言常用的函数或方法,以及一些规范等等,这些在刷算法题时慢慢总结即可。
- 最后就是找刷题的网站,大伙一般去刷的网站,无非就力扣和牛客。不过这两者有不同的优势,后面我逐一述说。
力扣
- 力扣的话,我觉得比较适合一开始去刷题,因为上面题解很全。通过题解能不断自我总结知识点,归类题的解法,培养各种类型题目的解题思路。
- 我个人比较建议去刷这两套题
○ 剑指offer(第2版)
○ LeetCode 热题 HOT100
首先题解量很多,可以看到很多大佬优秀的解题思路。此外,这两套涵盖的题型算挺全的,而且肥瘦相间(易中难比例刚好)。
- 力扣刷完后,大概就160多道吧,也基本把所有题型尝试过了一次。
牛客
- 至于牛客呢,我觉得写代码的模式更像是笔试和面试时的样子,即有些公司写代码时的界面跟牛客差不多,或有时面试官直接让你在牛客上面敲。所以我觉得晚点去刷比较合适,去适应适应。
- 牛客上的题解我觉得没有力扣上面的清晰了当,但也都是大佬,多看看无妨。
- 我个人比较建议去刷这套题
○ 高频TOP200
照着出题频率一个一个往下刷,不用全刷完。
- 这样力扣和牛客加起来刷了200~300道,其实就差不多啦,一般遇到问题多加思考总能敲出来的。
算法注意事项
- 整个算法包含几个流程
○ 前期刷算法题
○ 笔试敲编程题
○ 面试手撸代码
前期刷算法题
- 首先对所有知识点有个清晰的认识和实现,比如
链表
、动态规划
、DFS
、哈希表
等等。可以每每刷道题就进行归纳总结。
- 刷题时,可以对每道题以自身视角定级别,比如说
○ A:这道题a出来了,下次遇到也一样轻松的a得出来
○ B:这道题a出来了,但解法复杂,或者复杂度不咋地,需要下次再更好的a出来
○ C:这道题思路正确,但代码没实现出来,或有bug,需要下次重新再做一遍
○ D:这道题完全没有思路,看了大佬题解恍然大悟,想下次试试能不能做出来
这样做的目的是,刷题跟背单词一样,人总会忘记,需要隔一段时间去回顾。定了ABCD级别后,可以每隔段时间视题目级别重新再做一遍,直至达到A程度。当然因人而异,大家觉得怎么刷题舒服就怎么去刷题。
- 刷题的过程中遇到需要查百度的,比如
某个函数
、某个定义写法
、某个工具名
,要事后记下来,因为笔试和面试时可不能肆意去查东西哦 。
- 最后就是多思考思考,实在想不出思路就别浪费时间死磕到底,看看题解也是很香的。
笔试敲编程题
- 笔试的话,其实某些公司不只含有编程题,还有基础知识的题目,并且题目还有点偏 ,很不好做(所以笔试题全是编程题时我就很开心hh)
- 有些公司甚至还有综合测试。综合测试我就做过两次,大都是些逻辑题智力题,但要你短时间想出来,反正就做的很难受 ,我也不好说个所以然,就是测你智力什么样。
- 特殊点的还有性格测试,这个就要小心对待了,你选的性格要符合那个公司的选人价值观,并且选项之间不能前后矛盾,否则就挂了。面试过了,性格测试没过,也是拿不到offer的 (我一开始没拿性格测试当回事,乱选,结果面试过了性格测试挂了,还好能再重新测一次) 。
- 笔试的话,一般公司是用自己的笔试编程网页,也有公司用牛客网的去笔试,而前者多少带点坑。比如会遇到以下情况
○ 编程界面不给你模板,啥东西也没有
(即你要自己写引入了什么包、写主类主函数、写输入输出语句什么的)
○ 整个编程界面看不到任何输出,显示的只有结果正确和错误
(编译错误或结果错误时只显示error这个消息提示,当时debug弄的生无可恋)
○ 没有自动补全,所以工具名函数名要记得
- 笔试很重要,会影响简历是否能通过,也会影响最终offer的评分,所以能拿分就尽量拿分。
- 笔试通过到了面试,可能还会复盘笔试的题目,问问你当时的解题思路什么的。
面试手撸代码
- 面试时的敲代码我觉得大体为两种,分别为
写某个知识点的代码
、做算法题
- 对于知识点的代码,比如让你
○ 写出快速排序
○ 写出几种单例模式
○ 用伪代码实现URL爬取网页数据
前两种可以去看八股文,第三种只能通过面经去了解了。
- 那做算法题,有时面试官给的题目条件不清晰时,有可能是故意的,目的是让你去问清楚条件。(有点像接到某个任务,啥也不问清就上手干,而结果可能跟上级想的不一样,那这种人公司可能会再三考虑)
- 代码一定一定要规范,比如
○ 驼峰法
○ 函数名方法名类名变量名要通俗易懂,记住某些常用变量的缩写
(cur、tmp、pre等等)
○ 变量名切忌用拼音
○ 一般不用注释,因为好的代码用不着注释
○ 代码内保持间隔,如下方所示
if(preIndex<0) dp[i]=dp[i-1]+1; \\太密集
if( preIndex < 0 ) dp[i] = dp[i - 1] + 1; \\保持间距
- 敲完代码,或者敲代码前,面试官会让你讲解下思路,所以在平时刷题时,可以用思路较复杂的题练练,试试看怎么讲出来能讲的清晰些,这个也很重要 。(我觉得动态规划里的转移方程是最不好讲解思路的欸)
- 做题时尽量考虑最优解法,一般是最优时间复杂度,其次是空间复杂度。如果你暴力解,或者复杂度是谁都能想出来那种,多半当晚感谢信。
- 要考虑做题时长,就是至少要做出来。如果一开始你想的最优解法无法在规定时间完成,可以直接跟面试官说想法,或者选较次的复杂度完成。(记得有次面试题是会做的,时间复杂度也是网上最优的O(nlogn),说了下思路,但面试官说有没有更优的,陷入了沉思。后面我艰难的想出了个O(n)算法,但太难实现就没在规定时间内敲出来,结果第二天感谢信惨兮兮)
- 看到题目时,如果是之前做过类似的,要假装陷入沉思,拿出纸笔画一画,说“我要想一想怎么做”,让面试官以为你第一次做这道题 ,即不要让面试官认为这道题测不出你的实力(因为之前做过)。如果之前没遇过,那就沉思去吧。
- 代码写完后,不要很快就提交或说我可以了,要在没有编译的情况下review几遍,保证啥也没出错才说ok了。一遍就通过是有点加分的。
- 有的面试官会让你共享屏幕,用自己熟练的编译器去做题。或者共享屏幕,登录你自己的牛客或力扣账号,从中找一道你没做过的题目。
个人废话
- 秋招我刷了两百多道题吧,不多,但因为有些题重复刷了几遍,所以还是有一定量的。而后面做的笔试编程题和面试算法题,也基本都能轻松搞定。
- 我感觉我的算法给面试官留下好的印象,所以拿到了个相对不错的offer
- 这篇文章介绍的当然不一定都是对的,肯定有诸多欠缺和没考虑到的地方,大家可以参考我这个思路,自行判断去准备算法。
- 各位大佬若有好的建议方法或者小弟有哪些不恰当的地方,可以提一提,我会及时修改,共同进步。
- 有被帮助到的就点个赞再走呗hhh