楼主是个跨专业选手,从去年9月研究生开学之后,开始学习数据结构与算法,最开始是学的算法导论那本书,边学边敲,课后题也跟着做,当时是第一次接触DFS、BFS、回溯、二分、贪心、动态规划等等算法。算法导论用了一个月左右时间过了一遍,对基本的数据结构和算法有了全新的认识。10月份国庆假期之后,开始刷LeetCode,最开始一天只能刷个2-3道,因为平时还要去教室上研究生的课,利用晚上或者水课带着平板刷题,不得不说,每天过的还是很充实的,没课就去图书馆刷题,有种世界与我无关,我只管刷题上课吃饭睡觉。当然效率不是很高了,因为总有课提前结束要考试或者交大作业的,而且没有找工作的那种紧迫感。
算法题自己一直在坚持刷,LeetCode上搞了三个进度条,刷题数分别是456、165、306。这里解释下,第一个进度条是最远刷到的题数,后面两个进度条是重新从头开始刷,第二个是重刷了一下热题100和剑指offer,第三个是今年6月份开始重新按专题刷。因为好多题是看题解做的,做完就忘了,我不是很开窍的那种,所以我能做的就是反复刷,光剑指offer我就刷了三遍,勤能补拙,到后来面试的时候,算法题基本都是秒做。还记得快手二面一共三道代码题,十分钟不到就写完了,面试官说,小伙子,算法题没少刷啊,我俩相视一笑,我觉得代码题真是特别重要的,基本上代码题写不出来,这场面试就挂了,代码题写好了,哪怕基础弱点,也能进二面。建议大家早点开始刷题,不用刷太多,我找工作前的两三个月已经不再刷新题了,都是反复刷之前做过的,争取看到题目就能给出思路。
这里还是要感谢下导师,导师是教本科生OS课的,自己报名了导师的助教,平时去教室蹭本科生大三的课,再加上帮本科生改课后作业和实验课,基本上相当于跟着学了一遍OS,不仅有助教的钱拿,还能学东西,何乐而不为,操作系统有一些知识点还是挺难的,比如进程线程区别、进程间共享机制、线程的各种状态以及转化、生产者消费者模型,这个面试有被手撕过,还有文件管理系统、存储系统、磁盘扇区、分页分段段页结合等等,还有一个值得一提的就是LRU进程调度算法,头条一面被考的这个。刚好这边是用Linux来讲解的,就又学了一下Linux。这样后续面试的时候,就很有底气的跟面试官介绍这块的内容,不用怕是自己自学的不好而说不明白。建议没学过OS的,可以看看网课,比如王道的,自己看书总感觉理解不透,也抓不住重点。Linux的话,可以自己搞个虚拟机,来个ubuntu,实际操作一下,很多命令都是敲熟了都能背下来了,常考的命令有:top、chmod、du/df、vim、head、tail、ps、kill、cat、ping、grep、cp、mv、rm、tar、diff、scp、ssh、more/less、mkdir、rmdir等等。