架构师训练营 1 期 - 第 十一周作业(vaik)

用户头像
行之
关注
发布于: 2020 年 12 月 06 日
架构师训练营 1 期 - 第 十一周作业(vaik)

作业:

  • 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

导致系统不可用的原因主要有以下几大类

  • 硬件故障

  • 软件 bug

  • 系统发布

  • 并发压力

  • 网络攻击

  • 外部灾害

保障系统稳定高可用的方案有

  • 解耦

  • 隔离

  • 异步

  • 备份

  • Failover(失效转移)

  • 幂等

  • 事务补偿

  • 重试

  • 熔断

  • 限流

  • 降级

  • 异地多活



  • 请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文),返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。

import java.math.BigInteger;
import java.security.MessageDigest;
public class Authenticate {
//加密算法名
public static final String KEY_SHA = "SHA";
//加盐固定字符串
public static final String KEY_SALT = "FJLA2345&^";
/*
userId:用户ID
password:用户明文密码
shaPassword:用户加密后密文
*/
public boolean checkPW(String userId,String password,String shaPassword){
boolean bl = false;
String shaPwd = getPasswordSHA(userId,password);
//对比算后的密文是否和保存的密文相等
if(shaPwd.equals(shaPassword)){
bl=true;
}
return bl;
}
/*
userId:用户ID
password:用户明文密码
*/
public String getPasswordSHA(String userId,String password){
//简单的salt算法,采用SHA(固定字符+userId)生成
String salt = SHA(KEY_SALT+userId);
//加盐后算出sha
String shaPwd = SHA(SHA(password)+salt);
return shaPwd;
}
/*
inputStr:加密字符串
*/
public String SHA(String inputStr)
{
BigInteger sha =null;
byte[] inputData = inputStr.getBytes();
try {
MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA);
messageDigest.update(inputData);
sha = new BigInteger(messageDigest.digest());
} catch (Exception e) {e.printStackTrace();}
return sha.toString(32);
}



用户头像

行之

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 - 第 十一周作业(vaik)