两年教训前端滴滴出行一面复盘,仅为复盘,不含正确答案。

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 算法没答出来是最伤的。
后果:一面过了,然而前面的二面没过,二面问的技术比拟少,次要是问集体状况。