架构师训练营 - 第十一周 - 命题作业

用户头像
sljoai
关注
发布于: 2020 年 08 月 26 日
架构师训练营-第十一周-命题作业

作业一

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

  1. 导致系统不可用的原因:

  2. 硬件故障;

  3. 负载压力过大;

  4. 网络安全导致无法访问;

  5. 保障系统高可用的方案

  6. 采用主备架构,当主节点出现异常时,请求可以及时切换到备份节点上;

  7. 采用微服务技术,当系统达到一定负载压力时,可以选择限流、降级的办法,来避免系统奔溃;

作业二

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

import java.security.MessageDigest;
import java.util.UUID;
public class SaltSecurityTest {
private static String salt;
public static void main(String[] args) {
salt = salt();
String passwdMingW = "123456";
String passwdMiW = md5(passwdMingW+salt);
System.out.println(checkPW("5203",passwdMingW,passwdMiW));
}
private static String md5(String s){
try {
// 实例化MessageDigest的MD5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 通过digest方法返回哈希计算后的字节数组
byte[] bytes = md.digest(s.getBytes("utf-8"));
// 将字节数组转换为16进制字符串并返回
return toHex(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String salt(){
//利用UUID生成随机盐
UUID uuid = UUID.randomUUID();
//返回a2c64597-232f-4782-ab2d-9dfeb9d76932
String[] arr = uuid.toString().split("-");
return arr[0];
}
private static String toHex(byte[] bytes) {
final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i=0; i<bytes.length; i++) {
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
private static boolean checkPW(String userID,String passwdMingW,String passwdMiW){
String passwdMiWTemp = md5(passwdMingW+salt);
return passwdMiWTemp.equals(passwdMiW);
}
}



发布于: 2020 年 08 月 26 日 阅读数: 28
用户头像

sljoai

关注

还未添加个人签名 2017.11.09 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
请添加“极客大学架构师训练营”标签,便于分类
2020 年 08 月 27 日 09:55
回复
没有更多了
架构师训练营-第十一周-命题作业