1、按需加载怎么实现,具体原理
2、webpack插件原理
3、vue性能瓶颈
4、react setState异步更新时间
5、css图片垂直居中基线位置
1、Koa中间层,ejs模板,服务端渲染,之后重构到nuxt服务端渲染
2、为什么重构到nuxt
3、Vue3做了哪些性能优化,编译阶段,犹雨溪分享
4、compositionAPI和hook解决的痛点
5、Vue3用tree-shaking剪枝,编译过程中减掉不用的代码
只有import支持,require是不支持的,所以Vue2没法用tree-shaking优化
6、引申说明import和require区别
7、vue3监控数据变化的proxy和vue2的defineproperty的区别
—————以上是从自我介绍引申的技术点
8、详细说明浏览器渲染出页面的过程
9、上边说到缓存,详细说明缓存过程
10、强制缓存的实现,有三个字段,cache-control和max-press,一个是相对时间,一个是绝对时间格林尼治时间,
为什么会有两个时间字段判断缓存,可能是因为怕相对时间客户端时间和服务器时间不同步,所以绝对时间优先级高于相对时间
11、协商缓存的判断,详细过程,last-modefined和e-tag两个字段,因为last-modefined是秒级别的,不能监控一秒内资源的修改,所以需要e-tag字段区分,e-tag是文件的md5值类似的字符串
12、304协商缓存,301临时重定向,302永久重定向
13、http和https的区别,https详细的浏览器和服务器非对称加密和对称加密过程,签名的验证
14、浏览器安全性问题有多少
· xss攻击,预防办法转义
· csrf攻击,钓鱼网站攻击,预防办法增加验证码或者自定义header头token
· 第三方拦截抓包,修改请求体之类的
代码题
以下数据结构中,id 代表部门编号,name 是部门名称,parentId 是父部门编号,为 0 代表一级部门,现在要求实现一个 convert 方法,把原始 list 转换成树形结构,parentId 为多少就挂载在该 id 的属性 children 数组下,结构如下:
// 原始 list 如下
let list =[ {id:1,name:'部门A',parentId:0},
{id:2,name:'部门B',parentId:0},
{id:3,name:'部门C',parentId:1},
{id:4,name:'部门D',parentId:1},
{id:5,name:'部门E',parentId:2},
{id:6,name:'部门F',parentId:3},
{id:7,name:'部门G',parentId:2},
{id:8,name:'部门H',parentId:4}
];
const result = convert(list, ...);
// 转换后的结果如下
let result = [ {
id: 1,
name: '部门A',
parentId: 0,
children: [ {
id: 3,
name: '部门C',
parentId: 1,
children: [ {
id: 6,
name: '部门F',
parentId: 3
}, {
id: 16,
name: '部门L',
parentId: 3
}
]
},
{
id: 4,
name: '部门D',
parentId: 1,
children: [ {
id: 8,
name: '部门H',
parentId: 4
}
]
}
]
},
···
];
第二题
var a = 1;
(() => {
console.log(a);
a = 2;
})();
// 输出 undefined,变量声明提升
var a = 1;
(() => {
console.log(a);
var a = 2;
})();
// 输出 undefined
var a = 1;
(() => {
console.log(a);
let a = 2;
})();
// 输出 报错
这是昨天头条面试的过程