完美世界一面2022/4/6
面了半小时,自我介绍后问我什么时候开始学的,怎么学的,面试官直接给了反馈感觉不是科班出身,然后就开始面试了。
- http状态码
- 缓存机制
- 对跨域的理解
- 浏览器的存储方式
- css元素居中
- 弹性布局实现左固定,右自适应
- 虚拟dom和真实dom是在哪生成的
- v-if和v-show的区别
- 识别数组的方法
- 深拷贝和浅拷贝
- 箭头函数和普通函数的区别
- 对闭包的理解
- 快速排序,时间复杂度
浏览器访问一个网页资源时,会向服务器发送请求,网页资源所在服务器会向浏览器返回一个包含HTTP状态码的信息头,常见的HTTP状态码:
| 分类 | 分类描述 |
|---|---|
| 1** | 信息,服务器收到请求,需要请求者继续执行操作 |
| 2** | 成功,操作被成功接收并处理 |
| 3** | 重定向,需要进一步的操作以完成请求 |
| 4** | 客户端错误,请求包含语法错误或无法完成请求 |
| 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
200-请求成功,一般用于get和post请求 301-资源被永久转移到其他URL 304-协商缓存,资源未更改 403-Forbidden,服务器理解请求但拒绝执行此请求 404-请求资源不存在 405-客户端请求中的方法被禁止 500-内部服务器错误
[强、协商缓存](强缓存和协商缓存 - 简书 (jianshu.com))
[强、协商缓存](深入理解浏览器的缓存机制 - 简书 (jianshu.com))
1.缓存和本地存储localStorage,cookie的区别是
缓存是为了减少请求服务器的次数,一般存储文件,本地存储存储的数据量较小,为了记录数据。
2.浏览器发起请求后发生了什么
浏览器会现在浏览器缓存中查找请求的结果和缓存标识,浏览器每次拿到新的请求结果都会将请求结果和缓存标识存入浏览器缓存中。
3.强缓存和协商缓存的区别
(浏览器每次拿到新的请求结果都会将请求结果和缓存标识存入浏览器缓存中),标识一般就是验证这个资源是否过期,时间戳,或者直接给出最长使用期限,过期后,浏览器会向服务器发送请求,这个就是协商缓存,返回状态码304,没有过期直接从缓存中返回结果,状态码是200.
4.访问刷新分析
- 输入url进入:根据实际设计的缓存策略去判断,没有就默认强缓存。
- 按刷新键,缓存设置过期,直接协商缓存
- ctrl+F5强制刷新,直接访问服务器,获取最新的资源。所以缓存的协议字段都清除了,设置了no-cache。
[箭头函数额普通函数的区别](ES6 - 箭头函数、箭头函数与普通函数的区别 - 掘金 (juejin.cn)) 箭头函数没有原型prototype
快速排序
function qucikSort(arr){
if (arr.length <= 1) { return arr; }
let m = Math.floor(arr.length / 2);
let del = arr.splice(m,1)[0];
let rArr=[],lArr=[];
for(let i = 0; i<arr.length; i++){
if(arr[i]>del){
rArr.push(arr[i]);
}else{
lArr.push(arr[i]);
}
console.log(i, lArr, rArr);
}
return qucikSort(lArr).concat(del, qucikSort(rArr))
}
console.log(qucikSort([1,56,34,37, 99, 3, 2,78]));
时间复杂度,最好O(n),平均O(nlogn)
总结
面试题考察的很基础,但回忆的时候发现自己答题答的很表层,大都停留在概念理解层面,遇到没见过的题目有些慌场,不假思索地答题习惯不好,另外有一些题目考察的知识点可能要循序渐进的答,但我就直奔着某个知识点展开了。比如深拷贝和浅拷贝的理解,我直接回答浅拷贝赋值的是地址,深拷贝开辟来了一块新的内存,过后意识到我直奔着复杂数据类型了,那对于基础数据类型,赋值的就是值。