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