获得徽章 27
最近面试高频的问题,手撕 Promise ,其中包括实现 then、catch、all、race、race、retry 等方法,最近面试的小伙伴记得好好准备一下。
之前无意投递了广州 CVTE 希沃的前端开发岗位,第一轮技术面试感觉好不错,第二轮 HR 面试也不错,第三轮技术面试还是感觉不错,但是第四轮是一个 HR VP 面试。真的有被恶心到,一直 PUA 我,一直 PUA 我,一直 PUA 我。提醒大家谨慎选择。
一道面试题:有一个多维数组,请从前往后、从后往下、从下往前、从前往上,螺旋遍历这个数组,遍历过的元素不需要在遍历。
例如:
[
[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18],
[19,20,21,22,23,24],
]
输出:
[1,2,3,4,5,6,12,18,24,23,22,21,20,19,13,7,8,9,10,11,17,16,15,14]
上周五面试了广州微信,最后面试官让半小时写两个笔试题,分享给大家。
分析一个简单的 this 的面试题,看看大家知道答案吗?
```
var obj = {
val: 'test',
sayHi: () => {
console.log(this.val);
},
sayHi2() {
(() => {
console.log(this.val);
})();
},
sayHi3() {
console.log(this.val);
},
}
obj.sayHi();
obj.sayHi2();
obj.sayHi3();
const { sayHi3: sayHi4 } = obj;
sayHi4();
```
之前在网上刷面经说面试中遇到要手写 Promise,我当时还半信半疑。不过,现在我信了。
分享一个小注意点:
new Array(m + 1).fill(new Array(n + 1).fill(0));
new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));
大家看看这两种方式生成的数组有什么不一样?
面试小知识:大家肯定知道 Vue 中使用 Object.defineProperty 来对我们写的数据进行拦截,进而实现双向绑定。但是 Object.defineProperty 还有一些地方也会被考察到。
第一个:const 创建的变量不能被修改指针,如果让你用 es5 实现,你会怎么实现?其实就是间接在考察你对 Object.defineProperty 的理解。
```
var _const = function (data, value) {
Object.defineProperty(window, data, {
enumerable: false,
configurable: false,
get: function() {
return value;
},
set: function(v) {
if (v !== value) {
throw Error('xxx.')
} else {
return value;
}
}
})
}
```
第二个:ES6 新增了 Object.is 方法来解决 ES5 中 ==、=== 存在的问题(前者类型转变,后者不能判断 NaN 是否等于 NaN 以及误判 -0 等于 +0)。Object.is 用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。不同之处只有两个:一是 +0 不等于 -0 ,二是 NaN 等于自身。
如果让你用 es5 实现 Object.is ,你会怎么实现?其实也是在间接考察你对 Object.defineProperty 的理解。
```
Object.defineProperty(Object, 'is', {
value: function(x, y) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
}
return x !== x && y !== y;
},
configurable: true,
enumerable: false,
writable: true
});
```
下一页