Java秒杀系统优化的工程要点
这篇博客是笔者学习慕课网若鱼老师的《Java秒杀系统方案优化 高性能高并发实战》课程的学习笔记。若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持。 本文记录课程中的注意点,方便以后code review。此外,本文将注意点相关的优质讲解链接在了一起,方便初学者系统学习。 > 本文并非单纯介绍秒杀系统特有的技术点,不适合高手。进阶学习的话,极客时间有个不错的小专栏——如何设计一个秒杀系统,阿里高级技术专家讲解秒杀系统的设计要点,那个课程挺干货的。 设计秒杀系统的技术要点 1. 登录的密码传输: 用户的数据库表设计,需要增加一字段保存密码的Salt值 两次MD5操作( 敏感数据一定要使用https协议传输 ): 客户端:将明文password和客户端硬编码的Salt值进行拼接,然后进行MD5操作。 > 不用盐的话,MD5字符串有可能会被彩虹表或者社工库破解 服务端:将客户端传过来的MD5字符串和数据库用户对应的Salt字段进行拼接。然后进行MD5操作。 > 这次加盐MD5,可以有效防止内部员工泄露或者数据库被拖库后,明文密码泄露 2. 自定义JSR303的校验器 可以参照javax.validation.constraints.NotNull注解,自定义自己的校验器,将校验代码与业务代码分离。不过由于校验失败会输出BindException异常,所以最好配合全局捕获异常进行友好的输出。