写点什么

第十一周作业

用户头像
MR.X
关注
发布于: 2021 年 03 月 14 日
  • (1)导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

答:导致系统不可用的原因有:

1.黑客攻击,要做好服务器防火墙,拦截非法请求,禁用敏感端口,防止 dos 攻击;

2.SQL 注入,程序代码要用参数代替拼接 SQL,对请求参数进行关键词过滤,如:delete,drop,update 等有操作数据的关键词;

3.数据被篡改,要使用加密,对密码等重要信息要使用加密技术如:对称加密,非对称加密,保证数据安全,不被解析替换;

4.发生故障,对系统服务器硬件,软件,参数指标进行监控,达到预设指标立即通知告警,及时解决故障问题;

5.单一中心故障,使用异地多活,当一个数据中心发生意外,导致不可用时,可以通过跳转其他的数据中心来保持可用;

6.请求并发压力过大导致系统瘫痪,可以增加服务器扩容,宽带,限流,添加服务负载,服务断路器,失效转移,降级;

7,系统设计缺陷,可以分离应用,细化模块边界,解耦,减少服务依赖,不同应用场景可以隔离部署,彼此互不影响,保证最小影响率;

8,自动化运维管理,从代码管理,测试,开发环境部署,到开发测试,再到准生产环境部署测试,最后到正式生产部署发布,采用 Jenkins 自动构建,gitlab 代码管理,k8s 服务编排,容器化部署管理等


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


package com.xgx.hash.user;
import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.HashMap;import java.util.Map;import java.util.Scanner;
/** * @author guixian.xi * @date 2021-03-14 16:12. * @desc */public class Index {
private final static Logger LOGGER = LoggerFactory.getLogger(Index.class); /* *模拟数据库保存用户加密密码 */ private static final Map<String, String> encryptMap = new HashMap<>();

/** * 登录 * * @param username * @param password */ public void login(String username, String password) throws UnsupportedEncodingException {
String encrypt = new String(SHAEncrypt(password.getBytes("UTF-8"))); if (checkPW(username, encrypt)) { LOGGER.info("登录成功"); } else { LOGGER.info("登录失败"); }
}
/** * 验证密码 * * @param username * @param encrypt * @return */ public boolean checkPW(String username, String encrypt) {
String value = encryptMap.get(username); if (StringUtils.isNotBlank(value)) { if (value.equals(encrypt)) { return true; } } return false; }
/** * 注册保存密码 * * @param username * @param password */ public void register(String username, String password) throws UnsupportedEncodingException {
String encrypt = new String(SHAEncrypt(password.getBytes("UTF-8")));
encryptMap.put(username, encrypt);
LOGGER.info("注册成功,用户名:{} ,密码:{}", username, encrypt); }
/** * SHA加密算法 * * @param data 要加密的数据 */ public byte[] SHAEncrypt(byte[] data) { byte[] b = null; try { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(data); b = md.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return b; }
public static void main(String[] args) throws IOException { boolean repeat = false; do {
LOGGER.info("按照提示操作:键盘输入完成操作"); Index index = new Index(); LOGGER.info("==============1.注册================"); System.out.println("请输入:用户名"); Scanner sc = new Scanner(System.in); String username = sc.nextLine(); System.out.println("请输入:用户密码"); sc = new Scanner(System.in); String password = sc.nextLine(); System.out.println("开始注册:"); index.register(username, password);
LOGGER.info("==============2.登录================");
System.out.println("请输入登录用户名"); sc = new Scanner(System.in); username = sc.nextLine(); System.out.println("请输入登录密码"); sc = new Scanner(System.in); password = sc.nextLine(); System.out.println("开始登录:"); index.login(username, password);

LOGGER.info("==============3.提示================"); LOGGER.info("=>输入:1 重新操作================"); LOGGER.info("=>输入:回车结束操作================"); sc = new Scanner(System.in); String in = sc.nextLine(); if (in.equals("1")) { repeat = true; } else { repeat = false; LOGGER.info("==============结束================"); } } while (repeat); }}
复制代码

测试结果:



用户头像

MR.X

关注

还未添加个人签名 2020.12.01 加入

还未添加个人简介

评论

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