前言
秋招宣告结束,面试了接近20家公司,有幸拿到offer,感谢这段时间一起找工作面试的朋友和陪伴我的人。这是一段难忘的经历,相信不亚于当年的高考吧,也许现在想起来高考不算什么,也许只有经历过秋招的人才懂得找工作的艰辛,offer的来之不易。秋招值得回忆,故借写此篇文章来整理一些资料和心得。
知识点
数据结构和算法
数据结构和算法是不用多说了,基本上好一点的公司都会问。
- 堆栈、二叉树、平衡二叉树、链表
- 图的暂时还没遇到过,可能问的比较少吧
- 哈希表
- 各种基本排序算法(准备过程尽量能手写出来,尤其注意快速排序、归并排序、堆排序),它们的最优、最差、平均复杂度
计算机网络
前端方面重点准备TCP/IP协议,HTTP协议,HTTPS
- 前端缓存:强缓存,协商缓存,各种字段的理解和区别
- HTTP的各种请求头含义和作用。
- HTTP各种版本的优缺点,应用场景,及对应的优化。如针对http1.0的优化
- TCP三次握手,四次挥手,最好能记住每一次握手和挥手包含哪些字段,为什么要第三次握手和四次挥手。
- 一道常考的题目
html
- 了解HTML语义化
- HTML各种新特性
- HTML4.0和HTML5.0的区别,如何解决HTML5的兼容性问题
CSS
CSS这里主要会问布局相关,了解各种CSS3新特性,CSS3动画等
javascript
这部分的内容比较多,也是自己准备得比较多的部分,不具体罗列,直接上自己准备过的资料
- es6相关,这部分很重要,基本会问的
- 深度解析原型中的各个难点
- 几道前端面试题,这里可以详细看看事件循环那部分,面试容易问
- 个人感觉笔试必备书籍《你不知道的JavaScript》上中卷,里面能够讲到很多细节的地方,看完笔试能避免很多坑
- 前端跨域,跨域补充,思考各种跨域方式的优缺点,限制条件,应用场景。如jsonp跨域应用场景,为什么jsonp不安全?
- 目前看过非常详细的闭包讲解
前端安全
错误监控:这里有总结过:
- 即时运行错误:(1)使用try...catch捕获;(2)使用window.onerror方法捕获;
- 资源加载错误:1)使用object.onerror方法捕获,为什么不能用window.onerror呢?因为资源加载错误不会冒泡到window对象;2)使用performance.getEntries,使用该方法获取所有已经加载的资源,跟所有资源对比,看哪些没有加载成功;3)Error事件捕获;
- 跨域js报错怎么捕获?即“Script error”,解决方法1.script标签添加crossorigin字段,2.添加跨域 HTTP 响应头,
Access-Control-Allow-Origin: *
- 错误上报:1.采用ajax技术;2.利用Image对象上报错误(面试应该把这个答到)
前端性能优化
- 这方面是重点,但好像没有看过特别的文章,“雅虎35条军规”,能背多少就背多少,理解最好。可以扯上浏览器渲染原理。
其他资料
心得体会
前面的都是一部分资料,可能有点乱,但有些也记不住了。很多时候都看论坛和博客,和面试之前突击相关公司的面经。接下来总结一下面试过程中的心得和体会
- 当面试官问你一个问题时,不要只回答一个问题,而应该尽可能把跟这个问题相关的知识点都说出来,前提是你了解的,懂的。比如面试管问你React,你可以把React的相关特性,应用场景和局限性,和其他框架之间的区别,甚至React全家桶都可以说。再比如面试官问你前端缓存,那你应该把你知道的前端缓存相关的都说出来,比如强缓存,协商缓存,缓存头,no-store和no-cache区别等等说出来,也许面试官就不会再继续问你相关的问题了,这种情况我确实有遇到过。
- 面试过程一定要自信,在前期面试的时候,由于心理有压力面试不是很自信吃了不少亏,面试官也有提醒过
- 关于实习和项目,这两个可以说是重点,一定要提前整理好在实习或项目过程中遇到的难点。在述说过程中一定要展现你发问题,思考问题和解决问题的过程。说话模式简单总结类似为:在实践过程中我使用XX工具或者通过XX方法,发现了XX问题,通过xx方法解决了这个问题。然后通过对比说说为什么用这个方法,例如因为这个方法跟其他方法相比有xx优势,另外如果用到了库,那么也要说说这个库的实现原理是什么。总之,要体现你发现问题和解决问题的能力。
- 整理难点问题,可以写在一张纸上,在面试前自己想好面试官可能会问你什么问题,然后查找相关资料,把答案整理一遍,每次面试完后不断反思完善自己的答案。一定要提前准备好,不然面试官叫你说遇到的难点,或者直接问问题时可能会懵逼。
- 务必记住:在准备过程中,多思考应用场景,优缺点,局限性等。回答问题时能答上这些最好。比如你项目用来mongodb,那面试官很可能就会问你为什么要用mongodb,它的优缺点是什么,跟mysql相比有什么优势。
- 多思考更好的解决方案,比如React使用redux状态管理,那么如果不允许使用redux,或者感觉redux太麻烦了,你会有什么方案替代它?再比如Vuex呢?