程序丸子的校招个人经验——算法篇

个人废话…

  • 我呢,基于诸多原因,中途不想读研考研,准备秋招去了。因为没什么经验,所以磕磕碰碰。
  • 秋招末尾拿到了满意的大厂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

你可能感兴趣的:(面试经验,面试,算法,职场和发展,求职招聘,java)