对于秒杀系统的总结
- Mybatis 是xml提供sql ; dao接口Mapper
- resultMap/resultType区别:
resultMap:返回自定义映射结果集
当数据库的属性是user_id—>实体类是userId用resultMap
但是如果配置了驼峰映射则mybatis会自动把user_id转化为userId所以这时也可以用resultType
resultType:对应pojo(javabean)实体类
当数据库的属性是userId—>实体类也是userId用resultType - parameterType的作用:数据类型
- 为什么使用springIOC:对象创建统一托管;规范的生命周期管理;灵活的依赖注入;一致的对象获取方式。
- SpringIOC注入场景和方式:
- springIOC 功能理解:
工厂对象–>控制反转是指对象的初始化等过程都交给spring容器去完成,用户自需要调用即可。
依赖管理–>依赖注入是指通过配置文件的配置来决定类之间的引用关系和数据设置。 - spring注解:@Componet代表所有的组件 @Resource用于注解注入到此类的其他类@Repository 一般注解dao @Service注解Service 。
- 使用注解控制事务方法的优点:开发团队达成一致约定,明确标注事务方法的编程风格;保证事务方法的执行时间尽可能短,不要穿插其他的网络操作(RPC/HTTP请求)或者剥离到事务方法外;不是所有的方法都需要事务(如:只有一条修改操作,只读操作等不需要事务控制);
- Spring-web.xml 配置中:
简化配置(mvc:annotation-driven):
(1)自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
(2)提供一系列:数据绑定,数字和日期的format @NumberFormat,@DataTimeFormat,xml,json默认读写支持 - service包存放service接口和实现类—>逻辑实现
- exception存放service接口所需要的异常
- dto包数据传输层—>存放标识数据的类型,关注web和service数据之间的传递。
- 什么时候回滚事物?抛出运行期异常(RuntimeExcption)
- 回滚操作:为了保证数据的一致性和完整性。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
(栗子)为了保证一致性(即10个人 的账号金额总数不变),那在我写代码的时候,如果写了代码:A=A-5000;
那就必须要写上:B=B+5000,或者是C=C+5000。
这样的代码才能保证了数据库的一致性状态。
完整性:逻辑单元中的所有任务必须作为一个整体要么全都完成要么全都失败。
15. Dao层工作为:接口设计+sql编写(并无逻辑实现)
这样写的好处:代码和SQL语句分离,方便review。
16. Js优雅化
将URL单独封装,利于维护,而不用在大量的代码中去寻找修改。
17. 防止用户多次点击 –> 用one绑定而不用click
18. CDN的理解:cdn(内容分发网络)加速用户获取数据的系统;部署在离用户最近的网络节点上;命中的cdn不需要访问后端服务器;互联网公司最近搭建或租用。
19. redis 就是一个数据存在内存中数据库。而内存的读写操作很快,反正用了这个会变快。(gc和网络延迟会减慢的秒杀)
20. Redis在java中不能直接拿到对象。
利用 get–>bytes —>再反序列化 –>Object(对象)
21. 定义存储过程:在mysql中,可以定义一段程序放在数据库中,这种程序称之为存储过程,存储过程是数据库对象之一。
存储过程:
1:存储过程优化:事务行级锁持有的时间
2:不要过度依赖存储过程
3:简单的逻辑可以应用存储过程