Dubbo入门
Nginx 高并发高性能实现
Nginx 集群
Java MyBatis
1. MyBatis 有什么特点?
MyBatis 中的 SQL 语句和主要业务代码分离,我们一般会把 MyBatis 中的 SQL 语句统一放在 XML 配置文件中,便于统一维护。
解除 SQL 与程序代码的耦合,通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。SQL 和代码的分离,提高了可维护性。
MyBatis 比较简单和轻量:本身就很小且简单。没有任何第三方依赖,只要通过配置 jar 包,或者如果使用 Maven 项目的话只需要配置 Maven 以来就可以。易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
屏蔽样板代码:MyBatis 会屏蔽原始的 JDBC 样板代码,让你把更多的精力专注于 SQL 的书写和属性-字段映射上。
编写原生 SQL,支持多表关联:MyBatis 最主要的特点就是可以手动编写 SQL 语句,能够支持多表关联查询。
提供映射标签,支持对象与数据库的 ORM 字段关系映射
对象关系映射(Object Relational Mapping,简称ORM) ,是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
提供 XML 标签,支持编写动态 SQL。可以使用 MyBatis XML 标签,起到 SQL 模版的效果,减少繁杂的 SQL 语句,便于维护。
Docker常见问题
缓存
缓存的基本思想
缓存的基本思想其实很简单,就是我们非常熟悉的空间换时间。它的确对系统的性能提升的性价比非常高。
其实,在使用缓存的时候,你发现缓存的思想实际在操作系统或者其他地方都被大量用到。 比如 CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。 再比如操作系统在页表方案基础之上引入了快表来加速虚拟地址到物理地址的转换。可以把快表理解为一种特殊的高速缓冲存储器(Cache)。
回归到业务系统来说:为了避免用户在请求数据的时候获取速度过于缓慢,所以在数据库之上增加了缓存这一层来弥补。
缓存特征
命中率
当某个请求能够通过访问缓存而得到响应时,称为缓存命中。
缓存命中率越高,缓存的利用率也就越高。
Spring Boot 使用 Swagger2-UI 实现在线接口文档
项目经验
1. 数据库
- 数据表分类可以通过添加
parent_id
以及“第几级分类”字段来进行级别划分,避免一个级别建一个数据表的操作。 - 使用业务无关自增 id 作为主键:
- 防止后期业务发生变化需要重构某个字段(方便业务扩展);
- 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。如果不是自增主键,那么可能会在中间插入,在中间插入,B+ 树为了维持平衡,引起B+ 树的节点分裂。 总的来说用自增主键是可以提高查询和插入的性能。(性能考量)
- 课程模块:
- 课程分类作为一张表
- 课程作为一个单独的表
- 课程内容表(一个课程对应多集课程内容)
- 课程练习表(一集对应多道练习题:选择、填空)
- 课程评价表
- 用户模块
- 用户信息表
- 用户订单表
- 用户观看历史表
- 用户答题信息表
- 题库模块
- 试卷信息表
- 题目信息表(所属试卷,题型题号,正确答案等)
- 选项信息表
2. 项目使用的技术
使用 Redis
项目中使用 Redis 实现短信验证码的存储验证以及观看视频历史缓存。