写点什么

架构师训练营第十一章作业

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

不可用原因:

1、内存泄露:大量内存不可回收,占据老年代空间,当内存空间大于设置的空间,则会产生宕机;

2、并发:大量并发请求过来,导致系统处理不了请求,cpu飙高,导致系统假死状态;

3、代码异常:代码中写了不合适的代码比如退出系统或者闭关上下文之类的代码;

4、磁盘空间不足:比如大量的日志文件产生,没有回收,导致磁盘空间爆满,导致服务器宕机;

5、连接的服务不可用:应用连接的其它服务由于某些原因不可用;

6、断电断网:其它其它原因造成断电断网的情况也会导致系统不可用;

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

1、性能调优:解决内存泄露的问题;

2、集群处理:用集群的方式保证系统的高可用,当一台机器宕机的时候,切换另外一台机器;

3、限流:当大并发流量进来时,进行流量降级和拒绝策略;

4、缓存:将频繁读取的数据加到缓存,不要频繁的操作数据库;

5、异常:在高峰期削峰填谷,以应用自身处理的能力消费;

5、硬件:保证足够的内存和权限,保证服务的可用性;

6、异地灾备:防止断电断网;



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



boolean checkPW(String userId,String password,String pwd) throws Exception {
if(!userId.equals("zhangsan")){
return false;
}
String encode = shaEncode(password);
if(encode.equals(pwd)){
return true;
}else{
return false;
}
}
/**
* @Comment SHA1实现
* @Author Ron
* @Date 2017年9月13日 下午3:30:36
* @return
*/
private String shaEncode(String inStr) throws Exception {
MessageDigest sha = null;
try {
sha = MessageDigest.getInstance("SHA");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}

byte[] byteArray = inStr.getBytes("UTF-8");
byte[] md5Bytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}



@Test
public void test1() throws Exception {
Pwd pwd = new Pwd();
boolean check = pwd.checkPW("zhangsan", "123456", "7c4a8d09ca3762af61e59520943dc26494f8941b");
Assert.assertTrue(check);
}
@Test
public void test2() throws Exception {
Pwd pwd = new Pwd();
boolean check = pwd.checkPW("lisi", "123456", "7c4a8d09ca3762af61e59520943dc26494f8941b");
Assert.assertFalse(check);
}
@Test
public void test3() throws Exception {
Pwd pwd = new Pwd();
boolean check = pwd.checkPW("lisi", "1234566", "7c4a8d09ca3762af61e59520943dc26494f8941b");
Assert.assertFalse(check);
}
@Test
public void test4() throws Exception {
Pwd pwd = new Pwd();
boolean check = pwd.checkPW("lisi", "123456", "7c4a8d09ca3762af61e59520943dc26494f89412");
Assert.assertFalse(check);
}



用户头像

叮叮董董

关注

还未添加个人签名 2020.04.08 加入

还未添加个人简介

评论 (1 条评论)

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