记录一下面试遇到的一些笔试题和面试题

227 阅读1分钟

1.给定一个数组const arr = [1,2,[3,4,5,[6,7,8]],9],实现扁平化

const arr = [1,2,[3,4,5,[6,7,8]],9]

(1)forEach递归

const resultArr = []
const flatten = function (arr) {
	arr.forEach(item => {
    	if(Array.isArray(item)) {
        	flatten(item)
        }else {
        	resultArr.push(item)
        }
    })
    return resultArr
}

(2)reduce递归

const flatten = (arr) => {
	return arr.reduce((pre, cur) => {
    	return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
    },[])
}

(3)数组方法实现

arr.join(',').split(',').map(item => ~~item)

2. 看输出

let flag = true
const timeout = setTimeout(() => {
	flag = false
}, 3000)
while(flag) {} // 答案是不会输出
alert('2')

3. 如何开启javascript的多线程?

我答的是 new webWorker()

4.还有几道基础算法题

写一个方法 : 给定一个数组,找出arr[i]+arr[j] = arr[k],如果找出返回true, 找不出返回false, 例如:

const arr = [4,6,10,2]
arr[0] + arr[1] = arr[2] // 返回true
const arr1 = [3,2,6,10]
// 找不到 返回false

原本题目忘记怎么写的了,希望各位看的明白, 在下算法很菜, 还在这种题可以for循环直接解, 只会for循环, 打扰了.

5.手写promise核心

6.口喷js单例模式

7.label编译,假如在babel编译过程中, 只编译了一般, 要如何处理

8.说说vdom实现

9.说说babel如何把javascript高阶语法转译成低阶语法的

基本上印象深刻的就这么多, 篇幅原因,答案就不详细写了, 网上一查一大堆答案, 二面的leader, 几乎所有问题都是围绕vue生命周期运行, nexttick实现,偏向原理, 这次面试因为是裸面, 再加上面试前一晚刚通宵加班做小程序, 状态欠佳, 对自己表现也不是很满意, 还在等结果。桑心呢....