快手一、二、三面面经(已意向)
一面:
实现元素水平垂直居中
实现16:9的盒子,不定宽(没写出来)
实现动画,元素先向右移动200px,再返回原点,一共移动n次(animation添加两个属性即可)
对于原型的理解
原型链继承和class区别
闭包的理解
浏览器事件循环机制
详细说一下vue3 composition api
vue2和vue3区别
vue响应性原理(详细说了一下proxy代理)
vue生命周期
watch和computed区别
git常见命令
webpack相关(也就那几个常见问题吧,对这个还不太熟,答得不是很好)
然后问了点项目
findInTree(list: TreeData[], id: number): TreeData
type TreeData = {
id: number
name: string
children: TreeData[]
}
const list = [
{id: 1, name: 'a', children: [
{id: 2, name: 'a1', children: null},
{id: 3, name: 'a2', children: [
{id: 4, name: 'a22', children: null}
]}
]},
{id: 5, name: 'b', children: null}
]
//取出id对应的对象,也就是遍历,可以深度也可以广度 二面:
手撕代码:
const data = [1, 2, 3, 0, 0, 0, 5, 2, 0, 1, 0, 0, 2]; //去除三个及以上相邻的0 //返回结果:[1,2,3,5,2,0,1,0,0,2]
三面:
问了点项目
手撕两道题:
// Example 1
mergeDeepList([{id: 1}, {id: 3, pid: 1}, {id:4}])
//=> [{id:1, children: [{id:3}]}, {id:4}]
// Example 2
mergeDeepList([{id: 3, pid: 1}, {id:4, pid:3},{id: 1}])
//=>[{id:1, chidren: [{id:3, children: [{id:4}]}]}]
// 1. Node => {id, pid} 只关心id和pid即可, pid代表父节点id
// 2. 顺序不定, 但pid一定有对应的id节点存在
// 3. O(n) 时间复杂度解决
//这个题去年快手面经上也有类似的,但是还是答得不好 // 1. 三种括号 {} [] ()
// 2. 要成对闭合
// 3. 可以同级或大小嵌套,不允许小到大嵌套 {} > [] > ()
//判断括号合法性,返回true/false 

查看3道真题和解析