架构师训练营 0 期 11 周

用户头像
WW
关注
发布于: 2020 年 08 月 28 日

作业一:

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

1、硬件故障,比如之前工作中遇到过数据库服务器2块硬盘故障,导致停服3天,期间请厂商专业数据恢复人员解决问题。事后增加服务器资源,对数据库全库做全量备份和增量备份。可采用多集群部署,做好灾备,异地多活等方案保障系统稳定性高可用。

2、高并发。可采用限流、熔断的方式降级方案。

3、网络攻击。防火墙,敏感数据加密保障数据安全,应用程序做好防护。

4、系统代码有bug。增强单元测试和全面测试。



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

package com.data;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
public class Md5Test {
/***
* 当前用户ID
*/
static String cUserId = "zhangsan";
public static void main(String[] args) {
Boolean flag = checkPW("zhangsan","123456","e10adc3949ba59abbe56e057f20f883e");
if(flag){
System.out.println("用户名密码相同");
}else{
System.out.println("用户名密码不同");
}
}
/**
* 密码校验函数
* @param userId 用户ID
* @param pwd 密码明文
* @param security 密码密文
* @return
*/
public static Boolean checkPW(String userId,String pwd, String security){
if(Objects.equals(userId,cUserId) && Objects.equals(getMD5(pwd),security)){
return true;
}else{
return false;
}
}
/**
* 获取MD5
* @param plainText 元字符串
* @return 返回字符串
*/
public static String getMD5(String plainText) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例
md.update(plainText.getBytes());//此处传入要加密的byte类型值
byte[] digest = md.digest();//此处得到的是md5加密后的byte类型值
int i;
StringBuilder sb = new StringBuilder();
for (int offset = 0; offset < digest.length; offset++) {
i = digest[offset];
if (i < 0)
i += 256;
if (i < 16)
sb.append(0);
sb.append(Integer.toHexString(i));//通过Integer.toHexString方法把值变为16进制
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}



用户头像

WW

关注

还未添加个人签名 2019.06.04 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营0期11周