一.自我介绍
这个我从学校、实习、项目介绍的,然后面试官问了很久的项目
二.开始问题
2.1 你学前端有哪几个阶段?
这个我答了从学校,到自学,从浅学到深入相关的。
2.2 你为面试做了哪些准备?
我复习了HTML/CSS/JS/VUE/NODE/网络。(但感觉不能这样说)
2.3 说说网络缓存吧
我答得下面这段:
浏览器第一次加载资源,服务器返回200,浏览器从服务器下载资源文件,并缓存资源文件与response header,以供下次加载时对比使用;下一次加载资源时,由于强制缓存优先级较高,先比较当前时间与上一次返回200时的时间差,如果没有超过cache-control设置的max-age,则没有过期,并命中强缓存,直接从本地读取资源。如果浏览器不支持HTTP1.1,则使用expires头判断是否过期。如果资源已过期,则表明强制缓存没有被命中,则开始协商缓存,向服务器发送带有If-None-Match和If-Modified-Since的请求。服务器收到请求后,优先根据Etag的值判断被请求的文件有没有被做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;如果浏览器收到的请求没有Etag值,则将if-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200
2.3.1 那你说说服务器是如何知道是哪个请求需要缓存呢
这个我到现在也不知道。
2.4说说JS让你印象最深刻的吧
说了原型和原型链,然后可以实现继承(举了例子)。(太多了,在这儿我就不写了)
三.笔试
3.1 笔试第一题
const shape = {
radius:10,
Perimeter: function () {
return this.radius * 2
},
k: radius * Math.PI * 2
}
(Perimeter => Perimeter()) (shape.Perimeter) // 报错,箭头函数没有this
(s => s()) (shape) // 报错,shape不是函数,不能用shape()
3.2 笔试第二题
JS实现两个字符串相加(无限大,并且两个数为字符串),这个题拿到之后,我一直在把字符串转为数字去相加,面试官说不能这样做。 建议看看这个博主的