疫情之后,算法会在面试中怎么考
Posted 纵横千里,捭阖四方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了疫情之后,算法会在面试中怎么考相关的知识,希望对你有一定的参考价值。
盼望着,盼望着,新冠终于和冬天一样慢慢走了,各行各业也逐步迎来了新生。很多人苟了一年之后,有的人希望升职加薪,还有很多人是“毕业”之后终于能出来面试找机会了。不管哪一种,有个问题必须要再次审视了——算法面试!如果想去好点的公司或者高薪的岗位,现场算法几乎是绕不开的问题。很多人平时感觉自己还挺聪明的,一到算法就智商归零, 该咋办呢?
首先,我们要明确为什么要考算法?很多人觉得学算法对工作非常有用,所以要好好刷LeetCode。我可以告诉你LeetCode里的算法是没啥用的,更不能直接用到工程里。你在工作中有写过链表吗?有写过二叉树吗?有自己实现过回溯吗,有写过动态规划吗?反正我从来没有。因为这种代码不易扩展 ,很难维护,如果在工作中写,一定会被骂。但是在算法里是绝对的重点,因为这些问题短小精悍,可以快速考察人的思维能力。
为啥要写算法,说好听的叫“考察思维能力”,说不好听的就是“刷人”。算法的一个大问题是题目难易相差太大,有的题目特别难。之前我曾面过北京的很多公司,根据我的经验,如果公司有意愿要你,会以中等题目为主。而那些题目很晦涩难写的情况,八成是公司本来也不想要你,只是想用个难题将你打发走。所以我在算法课里一直和大家说平时用20%的时间将80%的问题掌握好就够了。如果面试题真的太难,先尽力而为,不行就直接走人,人家本来也不想要你,纠结也没用。所以平时大家也不要被网上类似的噪音吓到,尽力准备就是了。
其次,前面说要掌握80%的算法,那这80%的算法是指什么呢?很多人总感觉算法是玄学,没有规律,更不知道怎么准备,面试基本靠蒙。这是因为你不懂算法的基础脉络,这里笔者就将算法的几条重要线路告诉你。
第一条线:数组->双指针->滑动窗口。数组的特别是非常灵活,而且是大量高级算法的载体,因此是个看似简单, 但是极难准备的专题。建议你将重点放在如何控制游标以及处理边界情况上,这是个极易在运行时翻车的问题。数组中不允许元素之间有空位置,这导致很多场景的问题要大量频繁移动元素,双指针思想可以很好的解决此类问题,通过双指针可以进一步引申出滑动窗口思想 。这两个专题就引申出了一大批高频算法题。
第二条线:链表,链表是准备算法过程中最值得刷的专题 ,因为其题目的数量是有限的,而且极少做为其他算法的载体,只要将链表的基本构造、反转问题等搞清楚就不怕了。在这其中,反转是最重要最热门的题目,长期霸占算法考题第一名。反转还要注意几个变形问题,例如指定区间反转、K个一组反转、两两反转等等。
第三条主线:二叉树,二叉树是算法体系中绝对的重点,是算法是否过关的重点标志。二叉树的考察又可以细分为几个子专题,而且每个子专题又都有自己的模板,是非常值得刷的问题:
*1.层次遍历(BFS问题),全部的层次遍历几乎就一个模板,本身也不难,之前经常看到有人面试遇到这类问题就直接走人,实在可惜。
* 2.树的前序和后序是整个二叉树中的重点,其根基都是递归,好在只要掌握十几道相关的经典题目就可以了。另外在排序算法中有两个最为重要:归并排序和快速排序,而这两者的代码框架就是树的前序和后序。
* 3.如果将二分查找的搜索过程画成图,那与二叉树中序遍历完全一样,两者本质是一样的。因此二分查找要闭着眼都能写出来。除此之外二分查找还有不少的拓展问题,这里就不列举了。
* 4.还有很多特殊结构的树,例如平衡树、红黑树、堆、并查集、字典树等等,这些都是为了解决特定问题而产生的,不过这写类型一般能将解决方法说清楚即可,不需要现场写代码。例如“如何在32GB的数据中找到第K大的元素”等等。
第四条主线是:位运算、数学与数字,以及字符串问题。这三个不是数据结构,但都是常用的结构,在算法里也大量出现。题目有些也是非常难的,不过好在大部分都是有解决模板的,例如数字的溢出模板、数字反转模板、位计数模板等等。掌握这些,我们就足以应对大部分常见的问题了。
第五条主线:递归和回溯,我相信很多人至今搞不清回溯到底是什么意思,那遇到这类型问题一定是歇菜的。回溯主要是解决那些暴力也搞不定的问题,主要解决组合、排列、子集、分割等类型的问题。相关理论比较难解释,我们用一个例子描述:假如你要解决单身问题,用递归法该怎么做呢?应该是先和人家聊聊天,逛逛街,感觉确实不错,再表白。如果用回溯法追呢?在街上点蜡烛,路过一个女孩子就抓住表白,回溯就是这么局部暴力尝试的。被拒了就赶紧清理现场换下一个,这就是为什么回溯必须有一个撤销的操作。在课堂里我就这么给大家解释回溯的,在逗乐大家的同时也真正理解了晦涩的回溯理论。
第六条主线,递归和动态规划,我详细所有人都知道动态规划难, 但是很多不知道动态规划到底难在哪里。其理论,例如“重复子问题”、“状态转移”等等也是比较复杂的。其实动态规划就是渣男谈恋爱,先和一个女孩子确立关系了,之后遇到一个条件更好的,立马喜新厌旧。如果之后遇到条件更好的,依然如此。动态规划就是在更新一个数组,从比较小的位置开始,逐步向外延伸,如果遇到更佳的结果就更新已有位置,这也是为什么动态规划代码里有大量的Max、Min这类型的代码。
上面这些主题一共要做多少题目呢?你要相信面试官也是刷题过来的,因此他原来经常刷的题也是你需要刷的,上述几种类型加起来,高频题目也不过300道左右,远没有想的那么多。例如LeetCode真正有价值的都在前500道里,后面的那些大部分刷的意义并不大。
第三,算法的考察方式
新冠三年,很多人都习惯了线上生活,求职面试也更倾向线上。这就给算法考察带来一个巨大的挑战——要能运行起来,在此之前,一般要求能在白纸上将基本代码写对就行了。因此算法过关的成功率自然低了很多。
反过来,算法考察对面试官来说则更加轻松了,只要将题目抛给你,你自己写就行了,他仍然可以边工作边面你。这种情况会在疫情之后继续下去。
所以,疫情之后,算法的准备要更有章法,学习要更有效果,不要无目标地乱刷题,特别是不要太关注高深难懂的问题,否则心里安慰的作用都没有了。
总结
前面已经将准备的基本思路和内容说清楚了,这里简单总结一下。互联网仍然是僧多肉少的状态,招聘难度仍然不低,而算法是刷人的最好武器,因此心里上务必重视,提前准备,不要临时抱佛脚。准备的时候以专题为单位,学习要扎实,有效果,不要盲目乱刷。练习的时候要注意能否正确执行出来,还要注意如果让你现场重新写,你多久能写出来。
以上是关于疫情之后,算法会在面试中怎么考的主要内容,如果未能解决你的问题,请参考以下文章