10 2023 档案
《用户故事与敏捷方法》阅读笔记(三)
摘要:用户故事具有多种好处: ①用户故事强调口头沟通:自古以来,口头表达是十分重要的。而且相比于书面书写的易产生歧义,口头表述更见简单明了,需求文档也是如此。 ②人人都可以理解用户故事:相比于一些墨守成规的软件需求里的技术术语,用户故事使用的语言更容易使用户理解,简洁明了,同时更能增强用户对故事的记忆。
2023.10.26
摘要:1、CSV以纯文本形式存储数字和文本数据,以换行符间隔多条记录 2、软件实现数据持久性的最基本途径是文件和数据库 3、影响应用程序选择数据的存储、管理和处理方式的因素包括共享与传输、数据的持久性和使用频次、数据的量及管理、数据的操作方式 4、Java字节流操作的基础类是OutputStream和In
Redis学习之消息队列
摘要:消息队列 JDK阻塞队列可能存在哪些问题? 服务器宕机,内存队列中的订单信息全部丢失 线程处理错误,已取出单个订单信息,但没有入库 受单JVM内存限制 所以,我们需要一个独立的队列来存管订单信息,也就是消息队列。 介绍 存放消息的队列。一种开发中常用的中间件 最简单的消息队列模型包括3个角色: 消息
2023.10.19
摘要:今天上课验收了ERP页面原型,大家验收面临的问题大多是对流程的不清楚,首先是依据订单再生产,而不是有的人认为的看见仓库数量再去打印订单。也是我自己的问题,上课时老师也为我们提供了账号和密码,我们登录上去看一下流程,做的原型页面都不会这么差。上课老师留的课后作业有没有去看,自己做的时候不清楚也要问问同
《用户故事与敏捷方法》阅读笔记(二)
摘要:接下来的几章就是优秀用户故事准则、估算用户故事、发布计划、迭代计划测量并监控速率、故事不是什么、故事的优势以及故事的不良征兆。主要将的就是在一个大型项目中,尤其是有许多用户角色的项目,确定用户故事有时让人无从下手。最好的办法是考虑每一个角色,了解用户使用我们软件的目的。当面临一个大的故事时,通常有许
Redis学习之秒杀业务优化
摘要:秒杀业务优化 优化思路: 串行改并行:原本由 1 个线程的操作改为由 2 个或多个线程同时操作,比如 1 个线程负责判断秒杀资格,1 个线程负责减库存 + 创建订单(写) 同步改异步: 判断完秒杀资格后,就可以返回订单 id 给前端; 其余的写库操作可以异步执行。 提高判断秒杀资格的性能:读 DB
2023.10.12
摘要:Redisson如何实现分布式锁。移除链表操作、链表中五个常见的操作 get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 addAtTail(
Redis学习之Redisson实现分布式锁
摘要:Redisson实现分布式锁 Redisson 是 Java 的 Redis 高级客户端,提供了各种现成的分布式工具类便于我们使用 Redis。 官网:https://github.com/redisson/redisson 中文文档:https://github.com/redisson/redi
Redis学习之Redisson实现可重入锁
摘要:如何实现可重入锁 目的:保证同一个线程可以多次获取同一把锁 解决思路:在锁的 value 中额外保存当前线程获取锁的次数,每次获取锁 +1、释放锁 -1,当次数为 0 时才真正删除 key。 采用hash结构来存储锁信息,如图: 流程如下: 注意: 所有的判断和操作都需要使用Lua脚本来保证原子性
数据库事务的四大特性(ACID)
摘要:ACID ACID 是数据库事务的四个关键特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。 原子性(Atomicity): 解释: 事务是一个原子操作单元,要么全部执行成功,要么全部失败回滚,不存在部分执行的情
Redis学习之分布式锁
摘要:分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的两个基本特征: 多线程(进程)可见(读写) 互斥 还应具备的特征: 高可用:不能挂机 高性能:读写要快 安全性:不能出现死锁 实现方式 主要有以下三种: 其中,MySQL 的实现成本相对最低、Redis 性能最高、Zookeep
Redis学习之秒杀业务
摘要:秒杀业务的核心流程是:判断日期和库存、扣减库存、创建订单 如下图: 注意,秒杀库存信息和商品信息最好是独立的两张表,不要放在一起影响性能。 @Resource private ISeckillVoucherService seckillVoucherService; @Resource priv
《用户故事与敏捷方法》阅读笔记(一)
摘要:本学期我们学习了软件需求这门课程,了解关于需求分析的相关知识,在软件开发过程中,软件需求是第一步,同时也是最重要的一步,当我们找到了用户真正的需求,在开发过程中会达到事半功倍的效果,阅读了《用户故事与敏捷方法》这本书,在这本书中详细的介绍了用户故事与敏捷开发方法的结合,找到真正适合用户的,有价值的需
conda常用命令
摘要:1. conda --version #查看conda版本,验证是否安装2. conda update conda #更新至最新版本,也会更新其它相关包3. conda update --all #更新所有包4. conda update package_name #更新指定的包5. conda c
Redis学习之分布式全局id生成
摘要:介绍 为什么需要分布式全局 ID 生成器? 对于订单这种数据,数据库自增的规律性太明显,会暴露一些信息(比如根据昨日和今日的订单号差值看出销量) 数据量过大时,不同表的 id 分别自增,容易出现 id 冲突 分布式全局 ID 生成应满足的特点: 唯一:整个系统每个 id 都是唯一的 递增:虽然不连续
Redis学习之缓存雪崩、缓存击穿及封装Redis工具类
摘要:缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 解决思路: 1.不让key同时失效 2.尽量不让Redis宕机 具体解决方案: 缓存击穿 又叫热点key失效: 两种解决方案: 1.互斥锁:只有一个线程会负责缓存重建,其余线程拿不