Shopee 一面(1.1h)
在牛客上面的
自我介绍
那先来问几道 vue 相关的题目吧
1. Vue 的响应式原理
2. Proxy 的原理了解吗
3. 由模板变为真实 dom 的过程(ast?还没去了解)
4. Virtual Dom 是什么
5. 更新视图的过程(diff、patch)
下面来问问基础
1. 往页面里面插入 10000 个元素,怎么优化(documentFragment + requestAnimationFrame)
2. documentFragment 是什么?用它跟直接操作 dom 的区别是什么(提到回流)
然后直接做题
1. promise 有了解过吗,async await 有了解过吗
给你看看一个题,看输出结果
事件循环相关的
跟这个差不多,然后解释为什么(心心念念的事件循环啊,终于被问到了)
2. 闭包相关的
var result = [], a = 3, total = 0 function f (a) { var i = 0; for (; i < 3; i = i + 1) { result[i] = function () { total += a * i } } } f(1) result[0]() // ? result[1]() // ? result[2]() // ?
3. 继承相关的
function A() { this.name = 'a' this.color = ['yello', 'blue'] } function B() {} B.prototype = new A() var b1 = new B() var b2 = new B() b1.name = 'bbb' b1.color.push('black') console.log(b1.name) // ? console.log(b2.name) // ? console.log(b1.color) // ? console.log(b2.color) // ?
4. 数组扁平化
(用递归实现了,面试官问我能不能优化,然后说让我后面去好好想想,就下一题了)
5. 实现斐波那契数列
// fibonacci(1) // 0 // fibonacci(2) // 0 1 // fibonacci(3) // 0 1 2 // fibonacci(4) // 0 1 2 3 // fibonacci(5) // 0 1 2 3 5
要求优化,比如计算 fibonacci(100) 之后,再计算 fibonacci(99) ,要求不用做重复运算,
不能把缓存放在全局
(立即执行函数,通过闭包进行缓存)
我最终的答案:
const fibonacci = (function() { let dp = [] dp[0] = 0 dp[1] = 1 return function(n) { if (n <= dp.length) return dp.slice(0, n + 1) for (let i = dp.length; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2] } return dp } })() console.log(fibonacci(1000))
面试官让我计算 1000,结果牛客上运行后显示不出结果,尴尬,然后他让我好好想想为什么会这样,我解释到数越大,dp 数组就越大,所以…,面试官说其实 1000 或者 10000 也不算大,让我好好想想。
面试结束,说 hr 后面会联系我
全部评论
(3) 回帖