前端面试每日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

正则:

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

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

参考答案 (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举例

  1. 需要一个secret(随机数)
  2. 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端
  3. 前端每次request在header中带上token
  4. 后端用同样的算法解密

参考答案 (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)

Last Updated: 1/29/2020, 9:58:38 PM
    asphyxia
    逆时针向