刚刚完成了cvte的线上笔试,趁热做一下总结。文章将从下面几个方面进行讲述。
1.总体体会。
2.涉及的陌生知识点的总结。
3.面试心得总结。
总体体会
总的来说,面试的题目难度还是可以接受,不过涉及的知识面有点广,所以对于比较陌生的知识点可能把握的不是很好。笔试选择题涉及到CSS(定位,Dom操作,隐藏), JS(原型 proto),闭包,异步(async 和 await), ES6(生成器),算法(主要有插排和快排,环形队列),计算机网络(很简单,就考了个分层),正则表达式。编程题一道是数组操作,一道是包装localStorage使其存储具备生命期,难度适中。
涉及到陌生知识点总结
1__proto__: 关于 __proto__
描述直接看这里
主要是理解两点:一是__proto__
本质是一个访问器,即具有get和set方法;二是其指向问题: 'to the value of its constructor’s "prototype" ' (指向其构造函数的prototype)。下面通过几个例子说明一下。
var f = new F();
//于是有
f.__proto__ === F.prototype //true
//又因为
F.prototype === o;//true
//所以
f.__proto__ === o;
let p = {
a: function () {
console.log('aaa');
}
};
shape.prototype.__proto__ = p;//说明其具有set方法,`__proto__`对应constructor的prototype,即shape.prototype.constructor.prototype=>shape.prototype,所以方法a就是shape.prototype.a,显然可以被new shape出的示例访问。
let circle = new shape();
circle.a();//aaa
console.log(shape.prototype === circle.__proto__);//true
-
async
和await
:需要注意一下几个方面。我们将通过例子一一讲述。
async是异步函数声明的标志,如果把整个函数打印出来,将显示函数的所有代码。
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
var a = async function asyncCall() {
console.log('calling');
var result = await resolveAfter2Seconds();
// expected output: "resolved"
};
console.log(a);
//async function asyncCall() {
// console.log('calling');
// var result = await resolveAfter2Seconds();
// // expected output: "resolved"
//};
调用async函数时返回一个Promise对象。
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
var result = await resolveAfter2Seconds();
// expected output: "resolved"
};
var a = asyncCall();
console.log(a);//[obeject promise]
await 会使asnyc暂停执行,等待 await 部分执行完毕返回结果,所以一般而言await后面接异步执行函数,这个函数的输出结果要及时反馈出来。当然await后面也可以不接异步函数。
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
var result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall();//calling(2s后)resolved,可以看出如果需要在下面引用到resolveAfter2Seconds的执行结果,await是非常方便的操作的。
如果删去await,将会看到result 为 [object Promise],而不是函数执行结果的返回值。
面试心得
总体来讲,编程题难度不大,而且第一道题还是leetcode上一道题的简化版。继续做leetcode 吧。其次,mdn 要多看看,特别是javascript核心部分,还有CSS定位部分,以及DOM操作部分。基础的数据结构和算法也是很重要的,也要作为复习重点。
以上。