写点什么

Week11 作业

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

1.并发压力,压垮应用,方案:利用消息队列进行分割隔离核心组件,分批消费消息,减缓压力。

2.数据库资源耗尽,导致应用不可用。方案:做数据库集群,如 mysql 的主主,mongo 集群等,及时做好数据备份。

3.应用代码逻辑异常,没有做异常处理,导致整个应用奔溃。方案:做分布式部署,多部署代码应用副本数,用负载均衡做流量接入,也可以用类似 docker 或者监控程序,发现应用主进程奔溃后,重启主进程。


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

from werkzeug.security import generate_password_hash, \    check_password_hash

class User: def __init__(self, username, password): self.username = username self._password_hash_ = generate_password_hash(password)
@property def password(self): raise Exception('不能读取密码')
@password.setter def password(self, value): self._password_hash_ = generate_password_hash(value)
def check_PW(self, value): return check_password_hash(self._password_hash_, value)

if __name__ == '__main__': user = User('user01', 'password') print(user.check_PW('password'))
复制代码

如上,采用 werkzeug 库的 hash 加随机盐的方式,进行加密,保证每个用户即使源密码明文相同,加密后的密码也不同,这是网上广为流传的方式,不过实际使用上也是存在问题的,因为加密的密码包含了加密的算法,盐和 hash 值,只要数据库泄露了,加上这个库的算法公开,很容易破解。

用户头像

lggl

关注

还未添加个人签名 2018.08.28 加入

还未添加个人简介

评论

发布
暂无评论
Week11作业