互联网公司在校招招聘程序员时,非常喜欢让面试者在白板或者白纸上写算法题,有人戏称校招就是“面试造航母,工作拧螺丝”。其实,这种面试是有原因的,因为应届生没有什么工作经验,招到公司之后也是需要进行一定时间的培养锻炼才能适应岗位的需求,因此公司在面试的时候更希望能找到基础更加牢固,不是仅仅上过两三个月的培训班的员工。而算法题作为计算机学科的基础,在这方面的区分度还是比较高的。所以,如果想去心仪的互联网公司,算法题是一定要准备好的。
尽管现在有很多的练习算法的网站,如leetcode等,但是上面的题目非常多,同时算法又有很多的知识点,很难有精力全都刷完。本篇文章总结了一些算法题目的常见类型,会了这些,基本上80%的算法题都可以写出来。
排序算法
排序算法 排序算法其实有很多,从最简单的冒泡排序,到插入排序,快速排序等等,这一部分的内容考起来比较固定,只要将几个排序算法的原理理解了,然后记住这几个算法,面起来基本没什么压力。二分搜索 这个也是比较基础的面试题了,但是细节一定要搞清楚,数组左边和右边的边界是什么,是开区间还是闭区间。只要这个可以搞清楚,基本上不是很难。链表相关 在我面试的经历里面,链表类题目的出现频率基本上能达到60%~70%。我们需要理解指针的原理,这样其实链表就非常容易理解了。最常见的链表类算法就是:链表翻转,链表删除,链表插入等,leetcode上的链表类题目基本可以覆盖面试的内容。
二叉树
树相关的算法 树也是面试官特别喜欢考的知识点。常见的面试题有:树的遍历,二叉树的性质,树的节点的交换等等。这一部分的题目相对来说比较难一些,需要在leetcode上面多刷一些题。动态规划 动态规划在面试中出现的频率比较低,但是一般来说比较有区分度,可能你被录取与否,就取决于这种题目。动态规划的关键是可以找到状态转移方程。可以通过练习几个经典的动态规划题目来进行学习。 其实只要有充足的时间多刷算法题,基本上常见的题目都可以很快的作答。这里有个小技巧跟,如果一个题目真的从来没有见过,也完全不会的话,可以和面试官多交流多讨论,讲一下你对这个题目的看法思路,能做到哪里就做到哪。千万不能就埋头想不交流,这会给面试官留下一个非常不好的印象。希望同学们在校招季都可以拿一个好的offer!