写点什么

第十一周 - 命题作业

用户头像
molly
关注
发布于: 2020 年 08 月 26 日
  1. 导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

导致系统不可用的原因有:硬件故障、软件 bug、系统发布、并发压力、网络攻击、外部灾害。

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

1) 架构思路

* 解耦 - 即逻辑层面进行隔离;

* 高内聚、低耦合的组件设计原则

* 面向对象基本设计原则

* 面向对象设计模式

* 领域驱动设计建模

* 隔离 - 物理层面进行隔离;

* 业务与子系统隔离

* 微服务与中台架构

* 生产者消费者隔离

* 虚拟机与容器隔离

* 异步

* 多线程编程

* 反应式编程

* 异步通信网络编程

* 事件驱动异步架构

* 备份

* 集群设计

* 数据库复制

* CAP 原理

* Failover(失效转移)

* 数据库主主失效转移

* 负载均衡失效转移



2) 原则思想

* 幂等

* 事务补偿

* 重试

* 熔断

* 限流

* 降级

* 异地多活



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



PasswordUtil.java

package com.imolly.pwd;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordUtil {
/**
* 验证用户密码是否正确
* @param userId 用户ID
* @param originPwd 原始密码
* @param encryptPwd 加密后的密码
* @return
*/
public static boolean checkPwd(String userId,String originPwd,String encryptPwd){
return encrypt(userId + originPwd).equals(encryptPwd);
}
/**
* 加载用户密码
* @param userId 用户ID
* @param pwd 原始密码
* @return
*/
public static String encryptUserPwd(String userId,String pwd){
return encrypt(userId + pwd);
}
private static String encrypt(String str){
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(str.getBytes(StandardCharsets.UTF_8));
byte[] result = md.digest();
return new BigInteger(1,result).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}



PasswordUtilTest.java

package com.imolly.pwd;
import org.junit.Test;
public class PasswordUtilTest {
@Test
public void testCheckPwd(){
String userId = "0001";
String originPwd = "123456789qwerty";
String encryptPwd = PasswordUtil.encryptUserPwd(userId,originPwd);
boolean isOk = PasswordUtil.checkPwd(userId,originPwd,encryptPwd);
String result = isOk?"正确":"不正确";
System.out.println("用户ID:" + userId);
System.out.println("原始密码:" + originPwd);
System.out.println("加密后的密码:" + encryptPwd);
System.out.println("密码验证结果:密码" + result);
}
}



运行结果

用户ID:0001
原始密码:123456789qwerty
加密后的密码:9f4e5c1448ff000f7b896fa6d37518ba55663b4d8fadcb96758dc9ef538174ec
密码验证结果:密码正确



用户头像

molly

关注

还未添加个人签名 2017.12.14 加入

还未添加个人简介

评论

发布
暂无评论
第十一周 - 命题作业