两年教训前端滴滴出行一面复盘,仅为复盘,不含正确答案。
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 算法没答出来是最伤的。
后果:一面过了,然而前面的二面没过,二面问的技术比拟少,次要是问集体状况。