Shopee 前端实习一面面经

Shopee 一面(1.1h

在牛客上面的

自我介绍

那先来问几道 vue 相关的题目吧

1. Vue 的响应式原理

2. Proxy 的原理了解吗

3. 由模板变为真实 dom 的过程(ast?还没去了解)

4. Virtual Dom 是什么

5. 更新视图的过程(diffpatch

下面来问问基础

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 后面会联系我

#shopee前端面经##Shopee##前端工程师##实习##面经#
全部评论
校友校友
1 回复 分享
发布于 2020-06-09 20:32
最后那题 fibonacci 怎么优化呀,有没有大神愿意提供下思路
点赞 回复 分享
发布于 2020-06-09 20:05
实习吗
点赞 回复 分享
发布于 2020-06-10 03:35

相关推荐

10-21 12:35
已编辑
电子科技大学 前端工程师
百度 前端实习 200+20餐补+1600房补
点赞 评论 收藏
分享
7 38 评论
分享
牛客网
牛客企业服务