写点什么

架构师训练营 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周