width: 300px;
}
}
第二题.介绍一下token如何加密
jwt举例
-
需要一个secret(随机数)
-
后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端
-
前端每次request在header中带上token
-
后端用同样的算法解密
第三题.输出以下代码运行结果
// example 1
var a={}, b=‘123’, c=123;
a[b]=‘b’;
a[c]=‘c’;
console.log(a[b]);
// example 2
var a={}, b=Symbol(‘123’), c=Symbol(‘123’);
a[b]=‘b’;
a[c]=‘c’;
console.log(a[b]);
// example 3
var a={}, b={key:‘123’}, c={key:‘456’};
a[b]=‘b’;
a[c]=‘c’;
console.log(a[b]);
这题考察的是对象的键名的转换。
-
对象的键名只能是字符串和 Symbol 类型。
-
其他类型的键名会被转换成字符串类型。
-
对象转字符串默认会调用 toString 方法。
// example 1
var a={}, b=‘123’, c=123;
a[b]=‘b’;
// c 的键名会被转换成字符串’123’,这里会把 b 覆盖掉。
a[c]=‘c’;
// 输出 c
console.log(a[b]);
// example 2
var a={}, b=Symbol(‘123’), c=Symbol(‘123’);
// b 是 Symbol 类型,不需要转换。
a[b]=‘b’;
// c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。
a[c]=‘c’;
// 输出 b
console.log(a[b]);
// example 3
var a={}, b={key:‘123’}, c={key:‘456’};
// b 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。
a[b]=‘b’;
// c 不是字符串也不是 Symbol 类型,需要转换成字符串。
// 对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。
a[c]=‘c’;
// 输出 c
console.log(a[b]);
第四题.Vue 的父组件和子组件生命周期钩子执行顺序是什么
- 加载渲染过程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
- 子组件更新过程
父beforeUpdate->子beforeUpdate->子updated->父updated
- 父组件更新过程
父beforeUpdate->父updated
- 销毁过程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
。
第五题.input 搜索如何防抖,如何处理中文输入
当用中文输入法的时候,这时即使我们还在拼写的时候,仍然会触发input事件。
如果你不想还没真正的输入完一个中文就触发input的时候,你可以用这几个原生的api辅助你判断是否真正输入完一个中文:
1.compositionstart,键盘按下的时候触发,此时可能你刚刚按下一个n,但是这个并不是英文输入法的n。
2.compositionupdate,每次输入中文输入法的拼音就会触发,并且这个事件触发会紧接着触发一个input事件。
3.compositionend,输入框的拼音变成中文的时候触发,或者结束中文输入也会触发(在中文输入的时候,按esc或者失去焦点)
因此,你可以在上监听这三个事件,当compositionstart和compositionupdate这两个个事件触发的时候,设置一个boolean值,然后续的input事件不要这么快去做一个逻辑,再compositionend触发时再改变这个boolean值,去操作一些事情了。
var test = document.getElementById(‘test’)
test.addEventListener(‘compositionstart’, function (e) {
console.log(‘compositionstart’)
}, false)
test.addEventListener(‘compositionupdate’, function (e) {
console.log(‘compositionupdate’)
}, false)
test.addEventListener(‘compositionend’, function (e) {
console.log(‘compositionend’)
// 去搜索
}, f
。
第六题.周一算法题之「移动零」
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
-
必须在原数组上操作,不能拷贝额外的数组。
-
尽量减少操作次数。
function zeroMove(array) {
let len = array.length;
let j = 0;
for(let i=0;i<len-j;i++){
if(array[i]===0){
array.push(0);
array.splice(i,1);
i --;
j ++;
}
}
return array;
}
第七题.(京东)写出如下代码的打印结果
function changeObjProperty(o) {
o.siteUrl = “http://www.baidu.com”
o = new Object()
o.siteUrl = “http://www.google.com”
}
let webSite = new Object();
changeObjProperty(webSite);
console.log(webSite.siteUrl);
对象传值传的是引用,但是引用是copy给函数形参。
// 这里把o改成a
// webSite引用地址的值copy给a了
function changeObjProperty(a) {
// 改变对应地址内的对象属性值
a.siteUrl = “http://www.baidu.com”
// 变量a指向新的地址 以后的变动和旧地址无关
a = new Object()
a.siteUrl = “http://www.google.com”
a.name = 456
}
var webSite = new Object();
webSite.name = ‘123’
changeObjProperty(webSite);
console.log(webSite); // {name: 123, siteUrl: ‘http://www.baidu.com’}
第八题.HTTPS 握手过程中,客户端如何验证证书的合法性
还不了解https握手的请先阅读一次安全可靠的通信——HTTPS原理
大家在网络冲浪时, 在访问一些涉及金融/支付/登录/后台等敏感业务时, 会发现这些网站都会重定向到 https:// 的 URL , 例如: