便利蜂2019秋季web前端笔试题v2.6

便利蜂2019秋季(11月)web前端笔试题
前端技能试题v2.6


一、单选题(总共8分,每题2分)
1、以下不属于HTTP缓存控制协议头是( )
A. Cache-Control    B. Content-Type   C.Etag   D.Vary
考点:web缓存只http技术
答案:B
分析:已经系统了解了web缓存策略,总结了笔记,可以点此查看。Content-Type是响应头告诉浏览器返回的资源的MIME类型。

2、cookie特性下列说法正确的是( )
A. cookie没有长度限制,可以无限存储
B. 浏览器可以获取任一域名的cookie   
C. cookie不需要手动处理,请求时会自动携带
D. 浏览器请求image时不会携带cookie
考点:web缓存只本地存储技术中的 cookie
答案:D
分析:cookie的个小、条数都有限制。不同浏览器表现也不一值。
大概都给4kb空间,每个域名50条左右。超出这阀门后,将会被忽略
cookie获取有严格限制,不同域名(domain)下无法取的,同域名不同路径下(pach)下也不能取得。必须是同域名,和同路径(以及父子路径)
只要设置了cookie,浏览器每次请求均会自己携带。所以c对,d不对

3、cors中不属于简单请求的请求类型是()
A. GET    B. HEAD  C.POST   D.DELETE
考点:跨域技术之cors
答案:C
分析:CORS即跨来源资源共享,通俗说就是我们所熟知的跨域请求。
众所周知,在以前,跨域可以采用代理、JSONP等方式,而在Modern浏览器面前,这些终将成为过去式,因为有了CORS。
CORS可以分成两种:简单请求、复杂请求。一个简单的请求大致如下

// HTTP方法是下列之一
HEAD
GET
POST

// HTTP头信息不超出以下几种字段
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type,但仅能是下列之一
application/x-www-form-urlencoded
multipart/form-data
text/plain

4、关于https以下描述错误的是()
A. http是超文本传输协议,信息是明文传输。https则是具有安全性的ssl/tsl加密传输协议
B. https一直使用非对称加密协议来保证数据安全   
C. http默认使用80端口,https默认使用443端口来进行通信
D. https公钥默认使用CA证书进行签名方式防止被修改
考点:网络传输协议之https
答案:D
分析:考察https相关知识点。https证书需要自己申请,默认没有

二、多选题(总分20分,每题4分)
1、已知

// finally方法的回调函数不接受任何参数,所以data参数无意义,永远是undefined
fn.finally((data)=>{
    console.log(data);
});

请选择正确的fn,保证打印输出为‘我爱中国’()
A. 

fn = new Promise((res,rej)=>{
    setTimeout(()=>{
        res('我爱中国');
    });
    // 第一步:
    // promise一旦状态改变就不会再变,所以上边定时器没有意义,将只会执行rej,
    // 加了个return是防止构造函数内之后的代码执行,这里return后边没代码,所以没有意义,干扰视觉
    return rej('我爱中国'); 
}).then(
    data => {
        return Promise.resolve(data); 
    },
    data => {
        // 第二步:
        // 这里抛出的异常,又没有catch处理,所以会报错,此函数内程序终止,但是不影响外边的(比如finally)
        throw 'I LOVE CHINA'; 
    }
)
//第三步执行题目代码finally
// 最终执行结果:先打印undefined,再报错

B. 

//没有then处理状态改变,所以resolve也无意义,最后执行题目的finally
fn =  Promise.resolve('我爱中国'); 
// 最终执行结果:打印undefined

C.

//触发了reject状态,
//但是then却没有第二个回调(其实连then都没有),所以会走到catch,并将值传入catch的回调内
fn = Promise.reject('我爱中国').catch((data)=>{//所以data是'我爱中国'
    Promise.resolve(data);//但是这里又定义了个promise对象,最后也没人使用,所以这个也没有意义
})
//接着走题目的finally
//最终执行结果:打印undefined

D.

//没有then的第二个参数,也没有catch,所以只会执行finall,最终打印undefined
fn =  Promise.reject('我爱中国'); 

答案:这题是个坑,没有一个对的选项
分析:

/*
Promise有三种状态,pending(进行中)、fulfilled(已成功,也叫做resolve)和rejected(已失败)
其状态一旦改变,就不会再变
 */
let pm = new Promise((resolve,reject)=>{

});

/*
Promise有3个实例方法then、catch、finally
then:状态变更会执行此函数,此函数传入两个回调(非必须全传)
 */
pm
.then(()=>{
    //状态为resolve的回调
},()=>{
    //状态为rejected的回调
})
.catch((e)=>{
    //用于补货构造及其3个实例函数的异常,需要注意的是如果then中没有第二个参数也会走到catch
})
.finally(()=>{
    //不管promise最后的状态,在执行完then或catch指定的回调后,都会执行finally方法指定的回调
})

考点:es6的Promise

三、简答题(总分52分)

1、有如下代码

const MENU = {
    'FE':'前端开发工程师',
    'DEV':'后端开发工程师',
    'QA':'测试开发工程师'
};

function getTestScore(...args){ //第一步:“数组的扩展运算符,将一个个参数反转为数组
    const [userInfo = {}, type = 'FE'] = args; //第二步:数组的解构赋值,解构赋值时的默认值。
    const { userId } = userInfo; //第三步:解构userInfo对象里边的userId属性
    consle.log(`我的名字叫${userId},职位是${MENU[type]}`); // 第四步:打印 
};


请根据要求,分析答案。(如有异常,填写报错并指出报错代码段)

(1)getTestScore(); //我的名字叫undefined,职位是前端开发工程师
(2)getTestScore('DEV');//我的名字叫undefined,职位是前端开发工程师
(3)getTestScore(null,'QA');//Cannot destructure property `userId` of 'undefined' or 'null'

考点:es6 变量的解构运算符、es6的扩展运算符
答案:已在题目后标出
分析:一段针对一个分析,下边是具体
没有任何参数,所以第二步解构的无果,均用默认值。 所以userInfo解构的userId为undefined,type为FE
只有DEV一个参数,这个参数将会被映射到userInfo上,而type依然是默认值。因为UserInfo被解构为字符串DEV所以会再被隐式转换为对象去解构userId,为undefined。type为FE
第三种情况,null不能被解构,直接挂了



猜你喜欢

转载自www.cnblogs.com/dshvv/p/11830928.html