- 博客(62)
- 收藏
- 关注
原创 UML建模
我们可以只画图标注关系不写代码属性,也可以根据开发业务需求,单边或双边添加对象引用、List 集合属性,另外只需给关联、聚合、组合标注多重度,泛化继承和接口实现关系不需要标注任何多重度。
2026-05-09 19:39:02
64
原创 软件工程基础知识
左边开发、右边同步测试对应关系:需求分析 ↔ 验收测试概要设计 ↔ 系统测试详细设计 ↔ 集成测试编码 ↔ 单元测试。(最差)一个模块直接改另一个模块的内部代码、内部变量,完全绑死,一改全崩。多个相似功能放一起,靠判断分支区分,比如一个函数既查用户又查订单。,给用户看、反馈、修改,再正式开发分类:抛弃式原型、演化式原型。不管你内部怎么写,我只关心:给输入,能不能给出正确输出。钻进代码里,看每一行、每个分支、循环、条件有没有走到。:分模块、分批开发交付,先做核心功能,再逐步叠加。,一个改全局,全部受影响。
2026-05-08 20:45:04
303
原创 计算机操作系统
分页是 “为了内存利用率”,强行把程序和内存切成固定大小的块,解决外部碎片问题,但破坏了程序的逻辑结构。分段是 “为了程序逻辑”,按模块把程序分成大小不一的段,方便共享、保护和模块化管理,但会产生外部碎片。
2026-05-07 21:36:21
394
原创 数据结构1
普利姆算法通过贪心策略逐步扩展生成树,每次选择当前生成树与未加入顶点之间的最小边。其时间复杂度通常为O(E log V),其中E为图中的边数,V为顶点数。对于稠密图(边数较多),普利姆算法比克鲁斯卡尔算法(Kruskal's Algorithm)更有效。克鲁斯卡尔算法通过贪心策略,从图中选择权值最小的边并确保不形成环,直到构建出最小生成树。它的时间复杂度是O(E log E),其中E是图中的边数。对于稀疏图(边数较少),克鲁斯卡尔算法通常比普利姆算法更加高效。
2026-05-05 20:41:33
328
原创 Redis Intset 增删改操作的详细策略
Redis的Intset(整数集合)通过有序紧凑的结构高效处理整数增删改操作。插入操作需检查编码升级需求,必要时迁移所有元素并扩容;删除操作通过二分查找定位元素并移动后续内容;修改操作由"删除+插入"两步实现。所有操作都需保持元素有序性,编码只能升级不会降级,时间复杂度为O(n)。Intset通过二分查找、内存块迁移等优化,在保证数据完整性的同时兼顾性能,是小规模整数存储的高效解决方案。
2025-09-16 15:06:55
692
原创 Redis 中 Intset 的内存结构与存储机制详解
动态编码:根据元素范围自动选择最小可行的编码,避免内存浪费。紧凑存储:柔性数组 + 无额外元数据,内存利用率接近 100%。有序性:元素始终排序,支持二分查找(O (log n) 复杂度)。升级不可逆:只支持从窄编码升级到宽编码(如 int16→int32),保证数据安全。这种设计让 Intset 在存储小整数集合时,比哈希表节省大量内存(无键值对开销、无指针开销),是 Redis 内存优化的典型案例。
2025-09-16 14:32:15
812
原创 Redis 底层数据结构之 Dict(字典)
c运行// 字典类型函数} dictType;// 哈希表节点void *key;// 键union { // 值(联合体)void *val;double d;} v;// 链表指针,处理哈希冲突// 哈希表// 哈希表数组// 哈希表大小// 掩码,用于计算索引(size-1)// 已使用节点数量} dictht;// 字典// 类型函数// 私有数据// 两个哈希表,用于渐进式 rehash。
2025-09-16 13:40:24
1090
原创 使用 StringRedisTemplate 实现 Redis Stream 异步存储
业务系统产生数据,发送到 Redis Stream消费者从 Stream 中读取数据消费者将数据异步存储到 MySQL处理成功后确认消息,失败则留在 PEL 中等待重试。
2025-09-13 14:12:07
546
原创 Redis Stream 命令
理解这些命令及其参数是掌握 Redis Stream 的基础,它们共同构成了可靠消息队列的核心机制。在 Spring Boot 中使用 StringRedisTemplate 时,这些参数会以方法参数或配置类的形式体现,了解底层参数含义有助于更好地使用封装后的 API。
2025-09-13 13:40:20
974
原创 Redis ZSet 实现滚动查询笔记
滚动查询(Scroll Query)是一种高效获取大量数据的方式,尤其适用于需要分页加载但数据可能动态变化的场景。与传统分页相比,它能避免因数据新增 / 删除导致的分页偏移问题。元素带有分数 (score),可按分数排序支持按分数范围查询支持通过命令高效带有偏移量和数量限制的查询。
2025-09-06 10:11:36
307
原创 Redis
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:。字符串string哈希hash列表list集合set有序集合sorted set / zset。
2025-07-16 20:48:14
330
原创 SpringBoot
SpringBoot中支持三种格式的配置文件若三个类型的配置文件同时出现他们的优先级从上往下依次是SpringBoot除了支持配置文件属性配置,还支持Java系统属性和命令行参数的方式进行属性配置。-D配置项的名字=配置项的值 -D表示这是java系统属性在IDEA中可以这样使用总的来说配置优先级命令行属性>Java系统属性>配置文件在运行Jar包的时候可以这样配置命令行属性和java系统属性。
2025-07-04 12:47:58
479
原创 AOP编程思想
4.@AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行5. 5.@AfterThrowing :异常后通知,此注解标注的通知方法发生异常后执行。1,*︰单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分。场景:案例中部分业务方法运行较慢,定位执行耗时较长的方法,此时需要统计每一个业务方法的执行耗时。3. @After :后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。
2025-07-03 14:06:21
828
原创 后端登入认证
创建一个实体类来封装登入的信息接受前端返回登入的账号密码,直接用Emp封装servers层进行数据处理使用用户名和密码进行进行查询操作。
2025-07-02 16:01:06
662
原创 Spring-文件上传
文件上传:是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。
2025-07-01 17:04:55
528
原创 开发规范1
REST (REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。传统Restful。
2025-06-01 10:26:28
308
原创 SpringBoot+MyBatis
后面要有空格每一个元素前面都有一个空格注意:在yml配置文件中,如果配置项的值是以开头的,值要使用"引起来,因为以0开头的在yml中表示8进制数据。
2025-05-25 19:47:00
738
原创 SpringBoot Web 入门
官网:spring.ioSpring发展到今天已经形成了一种开发生态圈,Spring提供了诺干个子项目,每个项目用于完成特定的功能。
2025-05-21 14:42:30
745
原创 Vue框架
Vue是一款用于构建用户界面的渐进式的JavaScript框架。(官方;框架:就是一套完整的项目解决方案,用于快速构建项目。优点:大大提升前端项目的开发效率。缺点:需要理解记忆框架的使用规则。(参照官网)
2025-05-17 19:15:34
1021
2
原创 javaScript
</script>标签之间在HTML文档中可以在任意位置,放置任意数量的<script>标签一般会把脚本置于<body>元素的底部,可以改善显示速度
2025-05-14 19:55:05
812
原创 HTML:入门
span>标签属于内联元素,主要用于为文本的特定部分或者小范围的内联内容添加样式或进行标识。它本身不会对内容的显示造成影响,只有在为其应用了 CSS(像设置颜色、字体、背景等样式)或者添加了 JavaScript 行为之后,才会发挥作用。
2025-05-14 08:27:27
508
原创 Java:多线程
1·先使用核心线程的数量来运行任务2·诺核心线程数量小于要运行的任务,剩余任务则在阻塞队列排队3·诺还添加任务到阻塞队列都装不下了,就会将后面装不下的任务交给:“线程池中最大线程数量 - 核心线程数量”的线程处理。也就是说后面的任务会先被其他线程处理(除了核心线程的),而阻塞队列中的任务就接着排队4·诺线程池中最大的线程数量都已经被使用了,那么就会抛弃再加入的任。5·诺“线程池中最大线程数量 - 核心线程数量”,已经被弃用“用TimeUnit”指定的时间那么就会从线程池中删除。
2025-04-21 22:16:38
817
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅