前端面试每日3+2(第39天)
冰洋 1/10/2020 前端100问
当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!
鲁迅说过:
答案仅供参考...
# 1、第 69 题: 如何把一个字符串的大小写取反(大写变小写小写变大写),例如 ’AbC' 变成 'aBc' 。
🌿【解析】🌿
普通法子
function processString(str){
return str.split('').map(item=> item === item.toUpperCase() ? item.toLowerCase() : item.toUpperCase()).join('')
}
console.log(processString('AcbcD'))
1
2
3
4
2
3
4
正则:
function processString(str){
return str.replace(/[a-zA-Z]/g,function(char){
return /[a-z]/.test(char) ? a.toUpperCase() : a.toLowerCase();
})
}
console.log(processString('AcbcD'))
1
2
3
4
5
6
2
3
4
5
6
ascii码
function transStr(str){
let aCharCode = 'a'.charCodeAt() // 97
let zCharCode = 'z'.charCodeAt() // 122
let ACharCode = 'A'.charCodeAt() // 65
let ZCharCode = 'Z'.charCodeAt() // 90
let step = aCharCode - ACharCode // 32
function transCase(char){
const charCode = char.charCodeAt()
const in_a_z = charCode>=aCharCode&&charCode<=zCharCode
const in_A_Z = charCode>=ACharCode&&charCode<=ZCharCode
if(!(in_a_z ||in_A_Z)) return false
if(in_a_z) return String.fromCharCode(charCode - step);
if(in_A_Z) return String.fromCharCode(charCode + step);
}
return str.split('').map(char=>{
return transCase(char) ? transCase(char) : char
}).join('')
}
console.log(transStr('ACDDD[^`ccccc'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
参考答案 (opens new window) --- 感谢【Daily-Interview-Question】 (opens new window)
# 2、第 61 题:介绍下如何实现 token 加密
🌿【解析】🌿 : 什么是Token:
- 用于客户端和服务端身份信息校验的令牌 Token验证流程:
- 用户请求登录,服务端生产一个令牌(token)返回给客户端,并服务端保存令牌或者令牌解密规则。
- 然后每次客户端请求服务端都要携带token,服务端进行校验,判断身份信息是否存在
- 如果存在,进行下面的业务操作。
- 加密方式:jwt、AES、DES...等,或者直接随即数
Token 加密方式:
- 服务器通过私·钥对一部分信息进行加密生成签名,并将签名和数据拼接在一起作为 token 的一部分。例如 JWT。
- 使用客户端的 UA 或其他数据作为干扰码对 token 进行加密。
jwt举例
- 需要一个secret(随机数)
- 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端
- 前端每次request在header中带上token
- 后端用同样的算法解密
参考答案 (opens new window) --- 感谢【Daily-Interview-Question】 (opens new window)
# 3、第 62 题:redux 为什么要把 reducer 设计成纯函数
🌿【解析】🌿
参考答案 (opens new window) --- 感谢【Daily-Interview-Question】 (opens new window)
# 4、第 63 题:如何设计实现无缝轮播
🌿【解析】🌿
参考答案 (opens new window) --- 感谢【Daily-Interview-Question】 (opens new window)
# 5、第 64 题:模拟实现一个 Promise.finally
🌿【解析】🌿
参考答案 (opens new window) --- 感谢【Daily-Interview-Question】 (opens new window)