训练营 - 第 11 周

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

不可用的原因有很多。举个例子,在突发大流量下缓存穿透会导致数据库崩溃,从而导致连库的应用大面积崩溃,继而带来各个应用的雪崩效应。

针对这种情况一般是在入口加限流,把底层数据库数据使用redis等缓存来抗压,同时为了防止重复穿透还需要加分布式锁来控制流量打入数据库的频率,应用要分多机房灾备,防止物理环境导致的机器崩溃,等等的。



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

package org.seal.learn.learning.pwd;
import org.apache.tomcat.util.security.MD5Encoder;
import org.springframework.util.StringUtils;
import java.util.Map;
/**
* CheckPasswordDomain简介
*
* @author xiwang
* @date 2020-12-06 01:02
*/
public class CheckPasswordDomain {
/**
* 验证密码密文
* @param userId
* @param pwd
* @return
*/
public Boolean checkPW(String userId, String pwd) {
if (StringUtils.isEmpty(pwd) || StringUtils.isEmpty(userId) ) {
return false;
}
String encodePassword = MD5Encoder.encode(pwd.getBytes());// 获取密码密文
if (StringUtils.isEmpty(encodePassword)) {
return false;
}
UserInfo userInfo = this.getUserInfoFromDatabase(userId);
if (userInfo == null || StringUtils.isEmpty(userInfo.getEncodePassword())) {
return false;
} else if (!userInfo.getEncodePassword().equals(encodePassword)) {
return false;
}
return true;
}
/**
* 假设是从数据库里拿到的
* @param userId
* @return
*/
private UserInfo getUserInfoFromDatabase(String userId) {
return new UserInfo("xiwang", "password");
}
/**
* UserInfo简介 用户信息
*
* @author xiwang
* @date 2020-12-06 01:07
*/
public class UserInfo {
/**
* user
*/
private String user;
/**
* encodePassword
*/
private String encodePassword;
/**
* extInfo
*/
private Map<String, String> extInfo;
public UserInfo() {
}
public UserInfo(String user) {
this.user = user;
}
public UserInfo(String user, String encodePassword) {
this.user = user;
this.encodePassword = encodePassword;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getEncodePassword() {
return encodePassword;
}
public void setEncodePassword(String encodePassword) {
this.encodePassword = encodePassword;
}
public Map<String, String> getExtInfo() {
return extInfo;
}
public void setExtInfo(Map<String, String> extInfo) {
this.extInfo = extInfo;
}
}
}



用户头像

袭望

关注

还未添加个人签名 2018.08.13 加入

还未添加个人简介

评论

发布
暂无评论
训练营 - 第11周