字节前端一面,等通知(大概率凉凉)
知道内推,准备了20天左右,剑指也没刷完,之前刷的leet也忘的差不多了,还是不太好,感觉要一轮游,主要就想说牛客面经还是可靠的,但是有些问题最好还是自己查一查,因为参考回答有的不太完整。
1. CDN是如何优化静态资源加载速度的。
其实不知道,答了印象里的CDN原理,还不是很全。然后追问是怎么进行缓存优化的。这个一脸懵了,然后强行问是不是强缓存和协商缓存,最后就强行改变了题目。
2. 强缓存和协商缓存。
先答了两个的原理和相应的请求过程。然后追问了强缓存和协商缓存的优先级,和除了设置cache-control的maxage还可以怎么设置缓存,答了使用expire字段,然后又追问cache-control和expire的优先级,然后追问ETag和last-modified优先级。
3. get和post的区别(准备时记得还好,答得时候不太完整,提示了传参长度有没有区别)
4. https加密原理是什么,简单介绍一下加密过程(这个答得还可以)
5. 举一个常见的网络攻击方式(有两种xss和csrf,答得csrf,然后追问怎么解决,忘掉了一种方法)
6. 第一道代码题,两个参数的深度克隆22分钟左右结束,由于题目中有个参数不太明白意思,写的过程中有提示,然后边问边提示勉强写完。
实现深度拷贝函数,并支持自定义拷贝
// target 为任意类型的值。
// customize 是一个函数,接受参数为深度拷贝过程中的属性(prop)、值(value),函数返回任意值作为当前属性的拷贝。
function deepCopy(target, customize) {
// your code
}
7. 二叉树所有根到叶子节点路径上所有节点,组成的数字之和。(想了6分钟左右没思路换题)
二叉树每个节点的value范围是1-9,例如:(格式不对就按层次遍历顺序构造这颗树)
1
2 3
4 5
从根到叶子共3条:1->2->4, 1->2->5, 1->3
构成的数字为124,125,13,求和124 + 125 + 13 = 262即为所求
8. Semantic Versioning 是一个前端通用的版本定义规范。格式为“{MAJOR}.{MINOR}.{PATCH}-{alpha|beta|rc}.{number}”,要求实现 compare(a, b) 方法,比较 a, b 两个版本大小。(讲了下思路,写了一半,改了个写法然后被提醒那样有问题,然后就没有了,继续问问题,整个过程13分钟左右)
当 a > b 是返回 1;
当 a = b 是返回 0;
当 a < b 是返回 -1;
其中,rc > beta > alpha,major > minor > patch;
例子,1.2.3 < 1.2.4 < 1.3.0.alpha.1 < 1.3.0.alpha.2 < 1.3.0.beta.1 < 1.3.0.rc.1 < 1.3.0
9. js有哪些数据类型。
10. 双等号和三等号的区别。
11. 重排和重绘。追问一个display:none的元素更改后会重绘或重排吗?
12. 伪类伪元素的区别(没答上来,面经里有相关的,没在意)
13. var let const三者的区别(答得不全)
14. 箭头函数和普通函数的区别(只答了this指向的不同,问还有没有其它的,不知道)
15. 浏览器的时间循环,宏任务队列和微任务队列的执行顺序,追问哪些属于宏任务,哪些属于微任务。
16. react有哪些生命周期(答得还可以),追问,react16里废弃了哪些生命周期(不知道),又追问reacthook有了解不(没有)