百度前端一面
- 自我介绍, 说一下vdom
- 你说一下闭包,闭包的应用场景以及缺陷,当时没答上来缺陷,后面查了一下
常驻内存,增加内存使用量。
使用不当会很容易造成内存泄露。
- 说一下函数柯里化,以及应用场景,答的马马虎虎吧
// 木易杨
const add = (...args) => args.reduce((a, b) => a + b);
// 简化写法
function currying(func) {
const args = [];
return function result(...rest) {
if (rest.length === 0) {
return func(...args);
} else {
args.push(...rest);
return result;
}
}
}
const sum = currying(add);
sum(1,2)(3); // 未真正求值
sum(4); // 未真正求值
sum(); // 输出 10
-
你用webpack吗?我说不用,我用vite,对webpack不怎么了解,面试官问:你说一下vite的优化 我说了esbuild预构建,以及缓存LRU,以及相比于webpack的bundless优势
-
commonjs与esm的区别,然后又问我真不知道tree shaking,说一下它的原理
-
http2比http1.1好在哪里
-
你知道深拷贝和浅拷贝吗?说一下怎么实现深拷贝
-
vuex和localStorage的区别,以及如何实现一个响应式的localStorage
-
手写快排,手写一维数组中出现次数最多的数字
-
说一下Map和WeakMap的区别,以及key有什么不同?
-
说一下vue响应式原理以及vue怎么知道我更新了一个响应式数据后就会进行rerender呢?
我说因为渲染器是这样设计的,render返回一个对象,对象内的响应式变量发生变化触发effect收集activeEffectFn,然后execute它再进行两次diff比较
effect(() => render())
面试官:那他是怎么更新到页面的呢? 我说diff完后vue会拿到当前的组件实例下有个$el属性,通过这个属性去更新dom,我不知道他有没有听明白,就一直在问这一点