09/14 一面
- 自我介绍,前端经历
- 长列表渲染优化,异步加载节点信息。元素不定高场景下怎么做虚拟列表。
- 性能优化的指标。
- XSS注入和SQL注入排查修复。
- 微前端技术,qiankun框架,spa和mpa,js隔离、样式隔离。
- 通用上传组件,中间件机制洋葱模型。
- 低代码平台优势劣势。(问了低代码协议相关,没看过)
- 进程线程协程概念及区别。线程共享进程中哪些资源。
- 如何写一个死锁。
- ES6新增特性,js作用域和块级作用域。
- 闭包和箭头函数特性。箭头函数编译后的es5产物(不会QAQ)。
- 原型与原型链,es6的class编译成es5的产物。
- CommonJS和ESModule区别
- Vue3响应式原理,vue2中怎么解决新增属性的响应式。
- 跨域解决方法。
- 反问。
09/19 笔试
- 第一题不记得了,比较简单
- 第二题:以下数据结构中,id 代表部门编号,name 是部门名称,parentId 是父部门编号,为 0 代表一级部门,现在要求实现一个 convert 方法,把原始 list 转换成树形结构,parentId 为多少就挂载在该 id 的属性 children 数组下,结构如下:
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
}
]
}
]
},
···
];
09/27 二面
基础八股:
- TCP为什么三次握手,为什么四次挥手
- 跨域解决什么问题,为什么
script、img等标签
还是可以跨域,只对ajax、dom等有跨域限制。(不太懂) - HTTP缓存,强缓存和协商缓存分别节省了哪些东西。
- XSS防御方法、CSRF相关
- HTML语义化
- TS泛型,有什么作用
- 原型链,es6 class 的编译产物(两次了,看来这个一定得会)
- 垃圾回收机制,引用计数法、标记清楚法。
简历项目相关:
- 微前端作用及优势,spa 、mpa优缺点。为什么不用 iframe 而用 qiankun。微前端带来了哪些额外工作。
- webpack 插件相关。打包过程静态资源自动上传 cdn。
- 通用上传组件重构维护,分片上传并发控制。(这里扯了好久,问异步任务的并发控制有什么意义,不是真正的并发)应用场景、优化的效果等等。
- 反问。
感觉最后没答好,等结果了。
#前端面经#