「架构师训练营第 1 期」第十一周作业

用户头像
张国荣
关注
发布于: 2020 年 12 月 06 日
  • 导致系统不可用的原因有哪些?

  1. 硬件故障:宕机、网路线路故障、机房故障。

  2. 软件Bug

  3. 系统发布:系统发布未进行流程摘除、灰度,导致发布过程中服务不可用。

  4. 并发压力:并发导致服务负载过高,如锁竞争、线程池拒绝。

  5. 网络攻击:DDOS

  6. 外部灾害

  • 保障系统稳定高可用的方案有哪些?

  1. 解耦

  2. 高内聚、低耦合的组件设计原则。

  3. 面向对象基本设计原则

  4. 面向对象设计模式

  5. 领域驱动设计模式

  6. 隔离

  7. 业务于子系统隔离

  8. 微服务于中台架构

  9. 生产者消费者隔离

  10. 虚拟机与容器隔离

  11. 异步

  12. 多线程编程

  13. 反应式编程

  14. 异步通信网络编程

  15. 事件驱动异步编程

  16. 备份

  17. 集群设计

  18. 数据库复制

  19. 失效转移

  20. 数据库主主失效转移

  21. 负载均衡失效转移

  22. 设计无状态服务

  23. 幂等

  24. 事务补偿

  25. 重试

  26. 熔断

  27. 限流

  28. 降级

  29. 异地多活

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

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class CheckPassword {
static String SALT = "this is a salt String";
public static final String KEY_MD5 = "MD5";
boolean checkPW(String username, String password, String passwordEncrypt) throws NoSuchAlgorithmException {
String passwordAddSalt = getPasswordEncrypt(username, password);
return passwordEncrypt.equals(passwordAddSalt);
}
private String getPasswordEncrypt(String username, String pwd) throws NoSuchAlgorithmException {
//获取加密算法
MessageDigest md = getEncryptMethod(username);
//获取盐
String salt = getSalt(username);
md.update((pwd + salt).getBytes());
BigInteger PasswordEncrypt = new BigInteger(md.digest());
//返回密文
return PasswordEncrypt.toString(16);
}
private String getSalt(String username) {
return username + SALT;
}
private MessageDigest getEncryptMethod(String username) throws NoSuchAlgorithmException {
return MessageDigest.getInstance(KEY_MD5);
}
}



用户头像

张国荣

关注

还未添加个人签名 2018.06.26 加入

还未添加个人简介

评论

发布
暂无评论
「架构师训练营第 1 期」第十一周作业