快手一、二、三面面经(已意向)
一面:
实现元素水平垂直居中
实现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