去年十一月我开启了暑期实习的准备。一边准备实习一边被逼着写一篇不属于我的论文,每天在刷题、看八股、做实验、写论文、讨论之间循环,超高的强度让我濒临崩溃。
万幸的是结果还算满意,拿到了美团、百度、阿里云的暑期实习offer。
有了准备暑期实习的积累后,秋招的准备就顺畅了很多。经过一番挣扎后拿到了阿里云、蚂蚁、美团、百度、科大讯飞等正式offer。
我将实习和秋招的整个准备过程总结为一个思维导图,并根据我的面试经验,加上了每个知识点的出现频率,大的分为四块,刷题、八股、项目、拓展。
刷题
对于前端来说,刷题包含算法和js手写题。体感上js手写题的出现频率高于算法题。
算法题:我把代码随想录过了两遍,大概有接近200题,然后再补刷了一点力扣hot100。总的来说,应付面试够了,但要想笔试拿到高分,不太行。
js手写题:这个主要是看的掘金和手写题仓库,然后再根据牛客上的面经进行补充,总结出自己的js手写题题库。
这一块我之前是一个小白,对算法的认知停留在课本,谈不上什么技巧,希望能给到同是小白的人一些经验。
八股
这一块是一个非常庞大的话题,我觉得这篇文章总结的非常好,我就是按照他所总结的知识体系进行准备。
对于每一块知识点,比如计算机基础,我的学习方法是先了解整体再看面经的小知识点,比如把计网的应用层、传输层、网络层都整体过一遍,然后再看面经中出现频率高的特定知识点。
计算机基础
前端面试的话计算机基础的考核主要是,计算机网络和操作系统,操作系统出现次数非常非常少。我就只讲讲计网
计算机网络:我是先大概看了下面经,了解到应用层传输层考的比较多,其余相对少一点。接着,就把课本上应用层 传输层 网络层过了一遍。最后,看面经看小林coding进行补充
承蒙于本科时成绩还行,我的计算机基础知识当时学的还可以,所以捡起来也比较快。如果是0基础,我这样会太慢了,建议直接看小林coding,写的很好。
HTML/CSS
HTML和CSS的知识不多,我就合在一起说了
这俩我都是看MDN的Web前端教程学的。我在面字节时,看MDN这个学习方式被面试官小夸了一下,所以建议大家也看看,写的挺好的,有一些新颖的知识点。
JS
JS在一面中几乎是90%出现,这一块我准备时间最早,准备时间最长。
- 第一步:在现代 JavaScript 教程上完整过了一遍语言基础。我超级推荐这个教程,写的非常好。一些比较难的知识点,比如原型异步闭包,写的深入浅出,尤其是闭包写的真是好,并且还有一些题可以练习。MDN上的JS教程就不推荐了。
- 第二步:看了《你不知道的JavaScript》这本书,看完这个书会对原型对象,有了更深理解。
- 第三步:看牛客上的面经、前端面试官系列、高级前端进阶,总结JS高频知识点, 有了第一步的系统性学习,会懂得把零碎知识融会贯通。
如果时间比较紧张。我觉得第二步可以省略,看书获得的收益不大。
框架
这一块我的准备时间也很久,仅次于JS,并且完全是小白,应该会有一点参考价值。
准备暑期实习时 我重点关注vue 准备秋招时 我重点关注react
vue:看视频学习,b站最热门的那个视频。看完还不够,面试通常会考你原理性的东西,我再辅以前端面试官网站+技术帖理解原理。后面发现了这个源码解析网站,感觉写的很好,但却没时间看了。
react:在阿里云实习的时候用的react,准备秋招时就补充八股知识。基础知识都是看视频和公司技术帖学的。深入理解全靠这个react技术揭秘教程,原理性的东西写的巨好,看完这个什么fiber原理、hook原理不在话下。
浏览器和网络安全
这两块的知识很散,但却很重要,由于简历原因,我网络安全知识出现频率较高,但我又老是记不住,痛苦死。。。
没办法全靠技术帖+总结+理解记忆,没啥特别经验之谈
工程化
暑期实习这一块我完全0准备,面试时大大方方说不会,面试官也不会为难你
秋招时准备了一下,看视频学完了前端工程化起源,以及webpack。当时看的几个学习网站【不是特别推荐 感觉写的不是特别好】
- webpack-loader github.com/axuebin/art…
- webpack视频教程 www.bilibili.com/video/BV1kP…
- 深入浅出webpack webpack.wuhaolin.cn/
这一块不是我的强项,面试时会尽量避免往这个方向考核
性能优化
性能优化类型有很多:
- 首屏性能优化
- 长列表渲染性能优化
- SVG渲染性能优化
- Canvas渲染性能优化
- 等等
一般来说,首屏性能优化是需要了解一下的,这个掘金上的帖子非常多了。如果想做深入一下,比如在项目上体现出难点,可以往其他类型的性能优化上思考。
项目
暑期实习时写了三个项目or科研:实验室和企业合作项目、论文、竞赛项目
我是吃了项目的亏,实际上第一个和第二个项目都更偏研究性质,与前端相关的比较少,竞赛项目是小程序不是web。导致我被大量面试官质疑缺乏工程经验。
所以我觉得最优的项目经历是:能体现前端能力且有成果的项目,最好是实习项目。
不过这对于没有实习的人太难了,所以我强烈建议没有项目经历的人,找一个实习,不管什么大小公司,通过实习获得项目经历是最好的。
另外肯定要系统梳理项目,包括但不限于
- 项目主要内容
- 项目负责内容
- 项目难点以及如何攻克
- 涉及到的八股知识
拓展(数据可视化)
由于我硕士生的研究方向比较特殊,是数据可视化,天生就带有前端性质。所以我特地准备了一下可视化方面的八股。
包括:
- SVG: 看完了《SVG精髓》这本书,不过面试问的并不多
- Canvas: 看完了《HTML5 Canvas核心技术》这本书,面试问的比SVG稍微多一点
- D3: 看完了《数据可视化实战》这本书,问的也不多
- 可视化应用:问的超级多,幸好自己有调研过一些出名的基建库以及一些出名的应用
- 技术前沿关注:
- Antv白皮书
- Antv语雀 www.yuque.com/mo-college/…
- 图可视化知多少 www.yuque.com/antv/g6-blo…
- 大学的可视化实验室,比如zjuvag.org/blog/
这一块知识大多数面试官问的只是皮毛,我只有在一场面试被问到很多可视化的理论知识,比如视觉通道,图形语法啥的。
长达接近一年的校招历程就算结束了,有人说今年变暖有人说今年依旧很寒,作为只参与过24届校招的人,不敢去评论今年形势如何,自我感觉结果还算满意。
这个过程我反思了自己不足
- 缺乏开源,我是一个爱写的人,自己的私人笔记有10w+字数,但却没有博客没有开源贡献,有点可惜
- 实习很少,暑期实习时被面试官定义工程能力不足,这可能也是我最后倒在字节三面的原因
- 算法和代码能力有待加强,秋招的准备我有些懈怠,刷题被搁置了,导致有的面试竟然AC不了,有些遗憾。