四阶段
2024-01-20 11:14:20 0 举报
AI智能生成
项目学习阶段总结
作者其他创作
大纲/内容
软件工程
需求分析阶段
<span style="font-size:inherit;">1.对项目需求进行详细的分析,明确项目的目标和范围。</span><br>
<span style="font-size:inherit;">2.与项目相关方进行深入沟通,确保需求的准确性和完整性</span><br>
<span style="font-size:inherit;">3.编写需求文档,作为后续开发阶段的参考依据</span><br>
需求分析阶段的岗位人员包括产品经理、需求分析师、项目经理等<br><br>
设计阶段
对项目的架构、模块、接口等进行详细的设计<br>
确定项目的技术选型、架构方案、模块划分等<br>
编写设计文档,作为后续开发阶段的参考依据<br>
设计阶段的岗位人员包括架构师、设计师、项目经理等<br><br>
开发阶段
根据设计文档进行代码的编写和开发<br>
遵循编码规范和设计文档,保证代码的质量和性能<br>
进行单元测试、集成测试、系统测试等,确保软件的稳定性和可靠性<br>
开发阶段的岗位人员包括开发人员、测试人员、项目经理等
测试阶段
对开发完成的软件进行详细的测试,确保软件的功能和性能符合需求<br>
制定测试计划、测试用例,进行功能测试、性能测试、安全测试等<br>
编写测试报告,作为项目验收的依据<br>
测试阶段的岗位人员包括测试人员、产品经理、项目经理等
上线阶段
将开发完成的软件部署到生产环境中,并对上线结果进行监控和维护<br>
制定上线方案、回滚方案,确保上线过程的顺利进行<br>
编写上线报告,作为项目总结的依据<br>
上线阶段的岗位人员包括运维人员、产品经理、项目经理等
框架学习
依赖管理
<dependencyManagement>/<parent>/<modules>/<properties>
集成mybatis
主模块,子模块pom表添加依赖
在resources里创建mappers文件夹,里面创建xxxMapper.xml
在application.yaml内配置mapper地址
在xxxMapper.xml文件内,编写SQL查询条件
mybatis-plus
主模块,子模块pom表添加依赖
xxxMapper接口继承BaseMapper<T>,泛型为实体类型
在mapper实现类中完成SQL查询
配置文件,通过profiles来选择配置文件 application.yaml/application-local.yanl
项目解耦
参考PO -> BO -> VO 数据库往页面返数据 <br>页面往数据库插数据 新增或者更新的参数<br>Param -> BO -> PO
pageHelper
基于mybatis,无侵入,拦截器 spring有好多的拦截器,验证<br>在执行sql之前,对sql进行了修改
注意⚠️<br>要挨着<br>pageHelper.startPage(arg1,arg2)<br>mapper.list()<br>要挨着
knife4j
测试接口 <br> 生成接口文档
事务处理
全部成功,全部失败
@Transactional 注解<br>类上可以<br>方法上也可以<br>实现类上可以<br>接口上也可以
事务传播机制
事务隔离级别
全局异常处理
我们代码有可能抛出任何异常 ,我们不能或者不想把服务器真实的异常给前端
参数校验
快速失败的概念 编程思想
@Validated Spring实现的
在CategoryAddParam 类上的属性字段 上增加注解<br>@NotBlank //字符串<br>@NotEmpty //集合,数组<br>@NotNull //基本类型<br>三者区别
缓存
不会频繁变化的数据 原来我们是存储在mysql里,为了提高性能,查询的更快,使用了缓存
redis
数据类型及操作
简介
String Map<String,String> <br>List Map<String,List<>> <br>Set Map<String,Set<>> <br>Zset Map<String,TreeSet<>> <br>Hash Map<String,HashMap<>>
redis 你可以理解为底层就是一个大map,所以它的结构是K,V<br>K 上面的那个map的key,String<br>v 支持的5种基本数据类型
基础命令
redis-cli
redis-cli -h 192.168.1.3 -p 6379 -h 地址, -p 端口号
select
默认有16库 从0开始 <br>select 1-15 <br>Select 16 报错
Keys * 学完以后 可以忘记 在线上是不可以使用的.
dbsize 可以获取当前数据库中数据的数量
flush
Flushall 删除所有的数据<br>Flushdb 删除当前数据库的所有数据
expire & ttl<br>
Redis 是个内存数据库<br>意味着很快 ,还有内存容量有限<br>Expire 过期时间
禁忌
keys flushALL flushdb 线上不能用的命令
HGETALL SMEMBERS 消耗时间会随着数据量大小变化
String类型
增加/修改
<b>SET</b>:设置一个键的字符串值。<br><b>SET </b>key value
查询
<b>GET</b>:获取指定键的字符串值。<br><b>GET </b>key
删除
<b>DEL </b>命令用于删除 Redis 中的一个或多个键。<br>命令语法如下:<br><b>DEL </b>key1 [key2 ...]
List 类型
增加
<b>LPUSH</b> 命令:将一个或多个元素插入到列表头部<br><b>LPUSH</b> key value [value ...]<br>
<b>RPUSH</b> 命令:将一个或多个元素插入到列表尾部<br><b>RPUSH </b>key value [value ...]
移除
<b>LPOP </b>命令:移除并返回列表<b>头部</b>元素<br><b>LPOP </b>key
<b>RPOP </b>命令:移除并返回列表<b>尾部</b>元素<br><b>RPOP </b>key
<b>LREM </b>命令用于从列表中移除指定数量的匹配元素。<br>命令语法如下:<br><b>LREM </b>key count value
<span style="font-size:inherit;">key:列表的键名。</span><br><span style="font-size:inherit;">count:要移除的元素数量。可以是正数、负数或零。</span><br><span style="font-size:inherit;"> 正数表示从列表头部开始移除指定数量的匹配元素。</span><br><span style="font-size:inherit;"> 负数表示从列表尾部开始移除指定数量的匹配元素。</span><br><span style="font-size:inherit;"> 零表示移除所有匹配的元素。</span><br><span style="font-size:inherit;">value:要移除的匹配元素。</span><br>
需要注意的是,LREM 命令执行的时候会遍历整个列表,因此在列表长度较长时可能会产生较高的性能开销。
查询
<b>LRANGE </b>命令:获取指定范围内的元素列表<br><b>LRANGE </b>key start stop
<b>LINDEX </b>命令:获取指定索引位置的元素值<br><b>LINDEX </b>key index
<b>LLEN </b>命令:获取列表长度<br><b>LLEN </b>key
插入
<b>LINSERT </b>命令:在列表中插入元素<br><b>LINSERT </b>key BEFORE|AFTER pivot value
key:列表的键名。<br>BEFORE|AFTER:指定在目标元素的前面(BEFORE)或后面(AFTER)插入新元素。<br>pivot:目标元素,即要在其前面或后面插入新元素的元素。<br>value:要插入的新元素。
需要注意的是,如果列表中不存在目标元素 pivot,那么插入操作不会进行,并且命令会返回 -1。
> LRANGE mylist 0 -1<br>1) "one"<br>2) "two"<br>> LINSERT mylist AFTER "two" "three"<br>(integer) 3<br>> LRANGE mylist 0 -1<br>1) "one"<br>2) "two"<br>3) "three"<br>
拆分修剪
<b>LTRIM </b>命令用于对列表进行修剪(Trimming),即只保留列表中指定区间内的元素,而将其他元素全部删除。<br>命令语法如下:<br><b>LTRIM </b>key start stop
key:列表的键名。<br>start:要保留的区间的起始索引位置(包含在内)。<br>stop:要保留的区间的结束索引位置(包含在内)。
需要注意的是,start 和 stop 参数可以是负数,表示从列表尾部开始计算的索引位置。例如,-1 表示列表的最后一个元素。如果指定的区间不合法(例如 start 大于 stop),则会返回一个空列表。
修改
<b>LSET </b>命令用于设置列表中指定索引位置的元素值。<br>命令语法如下:<br><b>LSET </b>key index value
key:列表的键名。<br>index:要设置的元素索引位置。<br>value:要设置的元素值。
需要注意的是,如果指定的索引位置超过了列表的范围,LSET 命令会返回一个错误。
Set类型
增加 Sadd [member ...]
查询 smembers key
单线程阻塞<br>大数据量时查询容易导致redis崩溃
删除 SREM key [member...]
随机取两个成员(重复) SRANDMEMBER key count
随机弹出几个(弹出后集合内不再保留) Spop key count
获取大小 或者是size Scard
取交集 sinter key [key...]
成员是否存在 SISMEMBER key member
SSCAN key cursor [MATCH pattern] [COUNT count]<br>
SSCAN 指令用于迭代集合(Set)或有序集合(Sorted Set)中的元素。它可以帮助你按照指定的模式逐个获取集合中的元素,而无需一次性获取所有元素。
key:要迭代的集合的键名。<br>cursor:游标,表示迭代的起始位置。首次使用时,可以将游标设为 0。<br>MATCH pattern(可选):用于匹配元素的模式。可以使用通配符 * 和 ? 进行模糊匹配。<br>COUNT count(可选):每次返回的元素数量。默认情况下,Redis 会尽可能多地返回元素,但可以使用该选项限制返回的数量。<br>SSCAN 指令的返回值是一个包含两个元素的数组:第一个元素是下一个迭代的游标,第二个元素是一个数组,包含了符合条件的元素。
差集 sdiff key [key ...]
并集 sunion key [key ...]
设置过期时间 EXPIRE key seconds <br> -1表示永不过期
Hash类型
增加
<b>HSET </b>key field value [field value ...]:<br>为哈希表 key 中的字段 field 设置值为 value。<br><br>示例:<b>HSET </b>myhash field1 "Hello"
<b>HINCRBY </b>key field
删除
<b>HDEL </b>key field [field ...]:<br>删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。<br><br>示例:<b>HDEL </b>myhash field1
查询
<b>HGET </b>key field:<br>返回哈希表 key 中给定字段 field 的值。<br><br>示例:<b>HGET </b>myhash field1<br>
<b>HGETALL </b>key:<br>返回哈希表 key 中,所有的字段和值。<br><br>示例:<b>HGETALL </b>myhash
<b>HEXISTS </b>key field:<br>查看哈希表 key 中,指定的字段是否存在。<br><br>示例:<b>HEXISTS </b>myhash field1
<b>HKEYS </b>key:<br>获取哈希表 key 中的所有字段。<br><br>示例:<b>HKEYS </b>myhash
<b>HVALS </b>key:<br>获取哈希表 key 中的所有值。<br><br>示例:<b>HVALS </b>myhash
<b>HLEN </b>key:<br>获取哈希表 key 中字段的数量。<br><br>示例:<b>HLEN </b>myhash
ZSet类型
增加
<b>ZADD </b>key score member [score member ...]:<br>将一个或多个成员元素及其分数值加入到有序集 key 当中。<br><br>示例:<b>ZADD </b>myzset 1 "one"
移除
<b>ZREM </b>key member [member ...]:<br>移除有序集 key 中的一个或多个成员。<br><br>示例:<b>ZREM </b>myzset "one"
修改
<b>ZINCRBY </b>key increment member:<br>有序集 key 中成员 member 的 score 值加上增量 increment 。<br><br>示例:<b>ZINCRBY </b>myzset 2 "two"
查询
<b>ZCARD </b>key:<br>获取有序集 key 集合中元素的数量。<br><br>示例:<b>ZCARD </b>myzset
<b>ZSCORE </b>key member:<br>返回有序集 key 中,成员 member 的 score 值。<br><br>示例:<b>ZSCORE </b>myzset "one"
<b>ZRANGE </b>key start stop [WITHSCORES]:<br>通过索引区间返回有序集合指定区间内的成员。<br><br>示例:<b>ZRANGE </b>myzset 0 -1 WITHSCORES
<b>ZREVRANGE </b>key start stop [WITHSCORES]:<br>返回有序集中指定区间内的成员,通过索引,分数从高到低。<br><br>示例:<b>ZREVRANGE </b>myzset 0 -1 WITHSCORES
<b>ZCOUNT </b>key min max:<br>返回有序集 key 中,score 值在 min 和 max 之间(默认包括score值等于min或max)的成员数量。<br><br>示例:<b>ZCOUNT </b>myzset (0 5
面试题
订单超时未支付
https://mp.weixin.qq.com/s/rFs-KRR_Ft5sRY5S9cBCTw
扩展<br> 1 Redis 底层就是一个大map ,<br>我们读写速度不会因为数据量的大小有明显的变化.结合链表或者排队来理解
1 可以存储非关系型的数据 对象 <br> 2 存数据 可以取数据 put get <br> 3 大小概念 基于内存大小 放更多的数据 <br> 4 持久化该怎么实现,性能足够好的前提下,服务重启了,数据应该尽量不丢<br> 5 快 读写效率高 <br> 数据库 存储数据的仓库
子主题
锁的概念
锁的技术应用 <br>一图了解ConcurrentHashMap底层原理<br>https://www.jianshu.com/p/da0f2a8c749d
业务分析
业务梳理
下单流程梳理
订单服务
用户服务
商品服务
购物车服务
支付服务
配送服务
0 条评论
下一页