两年教训前端滴滴出行一面复盘,仅为复盘,不含正确答案。
1、你说你应用的次要技术是 vue,介绍一下 vue 是怎么实现数据绑定的?V
说了 Vue 的响应式原理。
2、vue 怎么实现虚构 DOM,比原生 DOM 好在哪里?
用一个蕴含 tag,data 等属性的对象示意虚构节点,而后所有对实在 DOM 的操作都在这个虚构 DOM 上实现,而后再一次性更新到实在 DOM 下面。
缩小了 DOM 操作,节俭了工夫。
3、介绍一下 vue 的 diff 算法?X
4、介绍一下 http/1.1 和 http/2 的个性?V
说了 http/1.1 长连贯,管道化;http/2 多路复用及原理,header 压缩,服务器推送。
5、对于 http/1.1 中的多个申请浏览器是怎么解决的,是串行还是并行?V
浏览器会为每个域名建设多个 TCP 连贯来实现并发申请,开发者甚至还能够应用域名分片技术来进一步提高并发数。
6、http 有哪些响应状态码?V
7、200 和 304 有什么区别?X
内容协商和协商缓存记岔了,而后乱答了一通。
8、协商缓存如何实现,用到了哪些音讯头?X
cache-control: no-cache… 不记得了。
9、介绍一下事件循环?V
10、介绍一下防抖和节流?V
11、怎么跨域?V
12、jsonp 的实现?X
由使用者提供一个函数……因为理论开发没用过,忘了。
13、你说本人相熟 webpack。介绍一下 webpack 中 loader 和 plugin 的区别?V
loader 是加载器,用于在加载模块时对模块的源代码进行转换。webpack 自身只能了解 Js 和 JSON 文件,而 loader 能够将其余类型的文件转换为 js 模块,以供 webpack 应用。
而 plugin 的作用则更加宽泛,它容许用户间接染指 webpack 的编译过程,在编译的不同事件节点上执行自定义的操作,比方资源管理、打包优化。
14、DllPlugin 的作用,具体是用哪些 Plugin 来实现的?
DllPlugin 能够独自编译第三方库,缩小构建工夫。webpack.DllPlugin 和 R…Re…其实我理论开发时没用过。
15、介绍一下 publicPath?V
用户通过它通知 webpack 本人会把利用部署在哪里,而后 webpack 会据此设置资源的加载门路。
16、介绍一下 SplitChunks?V
SplitChunks 是用来拆散代码的。举个例子,如果有两个入口引入了同一个模块,那么最初在打包的时候就会将这个模块同时打包到两个 bundle 中,这个时候咱们就能够应用 SplitChunks 将这个公共模块拆散到独自的 chunk 中。
17、编程题:每个节点的 pid 示意本人的父节点的 id,其中根节点 id 为 0,给每个节点增加一个 children 数组属性示意本人的所有孩子,请示意出蕴含节点父子关系的树结构。V
var data = [{ id: 1, name: "办公治理", pid: 0},
{id: 2, name: "销假申请", pid: 1},
{id: 3, name: "出差申请", pid: 1},
{id: 4, name: "销假记录", pid: 2},
{id: 5, name: "零碎设置", pid: 0},
{id: 6, name: "权限治理", pid: 5},
{id: 7, name: "用户角色", pid: 6},
{id: 8, name: "菜单设置", pid: 6},
];
这次是视频面试,因为挪动端 APP 不能屏幕共享,所以我长期跑去下载客户端,害得面试官整整等了我 10 分钟,心愿大家从我身上吸取教训。。。
最初我的答案:
var childrenArr = [];
for (let item of data) {childrenArr[item.pid] = childrenArr[item.pid] || [];
childrenArr[item.pid].push(item);
}
addChildren(childrenArr[0]);
console.log(childrenArr[0]);
function addChildren(arr) {for (let i = 0; i < arr.length; i++) {let item = arr[i];
item.children = childrenArr[item.id] || [];
addChildren(item.children);
}
}
总结:总共 6 答题没答好,其中 http 缓存和 vue diff 算法没答出来是最伤的。
后果:一面过了,然而前面的二面没过,二面问的技术比拟少,次要是问集体状况。