本周事情总结
本周的核心重点是编码的避坑指南,以及集合和并发编程,权限框架。主要完成了项目的车次管理功能,购票功能。
知识小结
1. 避坑指南
该章中,主要学习了关于浮点数据的处理、日期数据的处理、控制语句的避坑、怎么优雅的面对对象。
浮点数据在进制的处理中会出现进度丢失的问题,所以要慎用。
日期类型推荐要使用新特性里面的时间类型,因为新的时间类型是线程安全的,并且有一系列对应的工具方法。
控制语句要遵循最佳实践来编写,具体可以参考JAVA开发手册。
2.集合和并发编程
该章主要针对于集合的规约以及怎么解决秒杀场景下系统库存的扣减
集合规约中,主要说明了HashMap的大小是怎么初始化的,HashMap的初始化大小一般都是2的指数性大小。
并且在SubList场景中,subList方法返回的不是一个ArrayList,而是一个ArrayList的内部类subList,所以要谨防这里的报错。
并发编程这章介绍了AQS。Lock,AQS以及AOS的区别,并且揭露了线程和线程池的奥秘,最好还讲解了一个例子,在sql的编写中如何有效的发防止库存穿透,通过在update的时候添加库存的判断,可以防止库存在高并发的情况下被穿透。
3.OAuth2权限框架
这章老师主要讲解了OAuth2框架是什么,该怎么使用。 OAuth2包含了四种授权模式
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式 其中授权码模式是安全性最高的测试,一般的第三方qq登录就是使用的授权码模式,我们要使用的就是密码模式。
4. 开发
这周主要完成了车次的管理,购票功能。这些功能看上去简单,其实底层的校验是非常复杂的,在做开发的时候,因为都是使用的自定的ICurdService以及BaseController父类来做公共的方法配置,所以在写自定义方法的时候,在Service中使用this.baseMapper.dao方法的时候会报错,此时使用 CrudServiceImpl<ITrainOrderDao, TrainOrder> 使其添加dao的泛型解决了该问题。但是后面在开发的过程中还对怎么选权限资源服务器有一点的疑问。因为按照我的理解,权限的校验都是放在网关层去判断的,授权通过后才会去具体的服务端,但是实际开发过程中,无法在网关层添加检验,后面还需要研究下。