2019年互联网秋招已经接近尾声,个人情况:中等985小硕一枚,经过一段时间的准备,勉强拿到了还算理想的offer。特此整理下过程中的一些感悟,不涉及面试题目,有一些资料和想法分享给大家。祝大家都有美好的前途。
先上资料吧,这是我各处搜集的 pdf 版的书籍等(过程曲折而艰辛,有些还是付费的,个人习惯在 pdf 上做笔记什么的,比纸质版方便),是秋招准备过程中的主要资源,在这里分享给大家:
-> http://uee.me/a2NQV
准备阶段
工欲善其事必先利其器。
春招时候尽管实验室原则上不允许外出实习,还是尝试投了几家大厂,BAT等。可是春节回来没多久就开始春招的提前批面试了,都还没怎么准备,结果可想而知,挂得很惨。
痛定思痛,去操场跑了个痛快,然后躺着想该怎么办。后面大致准备了个计划,包括复习各模块的内容、刷题两个部分。
首先,复习基础内容,内容涉及这几个大的模块:OS、网络、数据结构/算法、数据库,这几部分内容是最为关键的,去牛客网上随便看一篇面经,基本都是这几块内容,先系统性地过各模块的经典书,像 OS 的 APUE、TLPI、LKD 等,网络的 TCP/IP、UNP 等,数据结构/算法的 Algorithms(普林斯顿那本红色经典)、Introduction to Algorithms,数据库的话,只看 MySQL 相关的就差不多了,像 MySQL 技术内幕-InnoDB 存储引擎、数据库索引设计与优化等,这些书都是非常经典的,就面试经历来看,无出其右,当然不能全看——也看不完,挑重要章节看(后面说关于“重要章节”)。
其次,语言方面,由于我个人是认同“语言不应该成为科班程序员的障碍”的,所以我个人是 Java、C++ 为主(都不算特别深入,但都能聊那种,这恐怕就是我阿里挂掉的原因:不够深入),也用一点python。如果你也熟悉一些前端的东西,那再好不过了。这方面,书就很多,推荐也老套,不说也罢,每种语言的经典书,选 top2 个人觉得足矣,多了没用。所有的书,能直接读英文版最好,不能的话,也最好备有英文版,因为偶尔会遇到翻译问题,搞不懂,反而对比原版就豁然开朗(亲身体会)。
再就是刷题了,我英文一般,所以就选了 LintCode,很多题目都是从 LeetCode 上翻译搬过来的,个人觉得足够了,目前刷了 200 多道,中等难度为主,简单题可以尝试直接在页面上写(我是 IDE 重度用户,不习惯手撕代码,所以在牛客网做笔试时候就不太习惯,如果不给跳转本地 IDE 的话,基本写不下去),偶尔来一道难一点的题目,体验一把绞尽脑汁的感觉。个人觉得,刷题,分类刷比较好,LintCode 上题目本来就有 tag,可以按照不同类型过滤,挺方便的。再就是坚持,比如我是每天至少一道题,白天时间不允许,就晚上定时抽出一定时间,专门刷题,有同学一起更好。
按计划行事
no pains, no gains
备好以上的资料之后,就开始了秋招准备。有的人厉害,随便刷刷题翻翻书就能拿到心仪的 offer,而自认为比较笨拙,所以就尽可能多花些时间喽。
看书方面,容易找不到重点,这是我看了 OS 模块之后的看法。于是改变策略:去牛客网翻面经,以 OS 模块为例,看面经只看和它相关的题目,记录一下涉及的知识点(进程/线程、epoll/poll/select、IPC 等),总结下来常见的问题也就这么多,然后逐个知识点去翻书翻博客,进行系统地整理,同时作好笔记如涉及到的书目章节/比较好的博客链接,以及常见题目和常规回答。这里推荐用 markdown 写笔记,然后生成博客或者页面都行,很方便。感觉 OS 这一模块看得差不多了,就再找些面经里相关的问题,看能否比较顺畅地给出思路和解答,遇到仍不清晰的问题,就再反复前面的过程,继续翻书记录。其他模块内容也类似,包括数据结构,更要好好理解,比如常见排序的时间/空间复杂度,要从算法的角度理解并牢记,手撕代码也是必要的。
刷题方面,这个没啥,前面说得差不多了。坚持刷,效果还是非常明显的,并且过程中自己就会总结一些适合个人的方式方法,正所谓实践出真知嘛。
以上都是知易行难,这其实是大多数“计划”难以被执行的症结。我的做法就比较极端:抽出很多实验室常规时间(本属于看论文搞科研的时间),用来看书总结知识点;晚上固定时间段看一个面经题目并查看相关书籍博客、整理相关答案;然后刷至少一道题,规定时间做不出来就搜答案,把别人的思路理清楚,复现一遍,做好记录。done.
当然以上是个人做法,因人而异,找到适合自己的并坚持执行才是关键。
结语
不要焦虑,不要制造焦虑。
这是秋招期间,给自己的忠告。
祝大家都能拿到理想的 offer _