- 博客(89)
- 收藏
- 关注
原创 Java如何不建表完成各种复杂的映射关系(鉴权概念、区域概念、通用概念)
本文探讨了数据映射关系的替代方案,提出了三种无表映射方法:1)配置中心+代码映射,通过Nacos配置中心实现动态更新,避免频繁发版;2)嵌套枚举,适用于层级明确的行政区划等场景;3)图状枚举,通过邻接表和权重矩阵处理复杂权限关系。重点展示了第一种方案的实现,包括支持热更新的配置类设计、yml配置示例及多种查询方法。这些方案在数据量小、变更频繁但扩展性要求低的场景下,比传统建表方式更灵活高效。
2025-12-19 18:07:46
176
原创 洗牌算法(Fisher-Yates)--用于打乱数组或链表的一种算法
摘要:Fisher-Yates算法是一种高效的随机排列算法,时间复杂度O(n),被Java的Collections.shuffle()采用。其原理是通过倒序遍历数组,随机交换元素位置,确保每个排列概率均为1/n!。对于链表实现需先转换为数组,ArrayList则可直接操作。JDK7引入的ThreadLocalRandom在多线程环境下性能优于Random。该算法适用于音乐随机播放、测试用例随机化等场景。
2025-11-21 13:10:48
473
原创 使用有限状态机的方式实现流程状态的周转方式一之状态模式
增强可读性:使用描述性文本而不是简单的枚举名称便于持久化:可以使用code值存储在数据库中易于国际化:description可以替换为多语言支持更好的调试信息:日志和错误信息更友好保持类型安全:仍然是强类型的枚举,不是简单的字符串或数字这种实现方式在实际项目中非常有用,特别是在需要将枚举值与数据库存储、API接口或用户界面显示相结合的场景中。
2025-07-07 12:22:31
624
1
原创 基于PlantUML parser插件一键生成UML类图,超详细教程
右上角文件->设置->插件->搜索 plant uml下载完记得重启IDEA。
2025-07-06 12:35:15
731
1
原创 基于评估方法论评估一个大模型的准确度
先来说说什么是大模型的一个准确度,除了以上几个方面还需要考虑:字符/词级别的直接对比(如Exact Match):含义相似度(如BERTScore):推理链条的合理性(如Chain-of-Thought验证):与外部知识的一致性(如知识图谱验证)
2025-07-06 12:35:03
1376
1
原创 设计模式之责任链模式,-员工请假审批系统
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。这些处理者对象被连接成一条链,请求沿着这条链传递,直到有一个对象处理它为止。// 设置下一个处理者// 处理请假请求// getter方法。
2025-07-05 10:24:29
720
原创 设计模式之代理模式--数据库查询代理和调用日志记录
代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用,可以在不改变原始类代码的情况下,通过引入代理类来给原始类添加额外的功能。
2025-07-04 10:24:27
1374
原创 设计模式之备忘录模式,
/ Originator - 需要保存状态的对象System.out.println("当前文本: " + this.text);System.out.println("光标位置: " + this.cursorPosition);System.out.println("设置光标位置: " + this.cursorPosition);// 创建备忘录System.out.println("创建备忘录...");// 从备忘录恢复。
2025-07-03 13:05:33
268
原创 设计模式之享元模式
/ 享元类 - 字符格式(内在状态)System.out.printf("字符 '%c' [字体: %s, 大小: %d, 颜色: %s]\n",@Override// 包含外在状态的对象System.out.printf("位置 %d: ", position);
2025-07-02 09:11:51
358
原创 设计模式之命令模式(Command)
Command(命令)模式是一种行为设计模式,它将请求封装成一个对象,从而让你可以用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支持可撤销的操作。
2025-07-02 09:11:25
268
原创 设计模式之适配器模式
/1. 定义目标接口//2. 定义被适配者类//3. 实现类适配器@Override//4. 实现对象适配器@Override// 使用类适配器// 使用对象适配器。
2025-07-01 12:55:57
455
原创 计算机系统中隐藏的‘时间陷阱’——为什么你的代码总比预期慢10倍?
任何看似简单的操作,都可能暗藏纳秒级的“时间陷阱”。当你抱怨“代码跑得慢”时,不妨跳出传统 profiling 的思维定式,向下钻取到CPU流水线、内存总线甚至硬件预取器的层面——那里才是性能博弈的真正战场。
2025-06-30 12:20:59
1296
原创 设计模式之建造者模式(Java)
其中包括了游戏本、轻薄本、自定义电脑配置的类的创建过程。每次创建一个对象(电脑)时候,我们都可以使用模板或者自定义的去配置自己所选择的参数进行创建即可,将创建对象的过程抽象出来,能让使用者更加方便的去创建对象和控制对象的参数行为。建造者模式是一种创建型设计模式,它将复杂对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示。然后再封装一个指导者,用于指定创建的类型。此时就可以根据不同的指导创建不同的对象了。然后创建具体的建造者(游戏本、轻薄本)现在来模拟一个计算机生产的建造过程。
2025-06-30 12:03:52
211
原创 设计模组之组合模式(Composite Pattern)Java详解
组合模式是一种结构型设计模式,它允许你将对象组合成来表示"部分-整体"的层次结构。组合模式使得客户端可以,无需关心处理的是单个对象还是整个组合结构。组合模式通过组织对象,提供了一种处理部分-整体层次结构的优雅方式,是面向对象设计中非常实用的模式之一。
2025-06-29 16:02:05
376
原创 设计模式之装饰器模式(I/O流‘、web开发、security案例)
Decorator 是一种结构型设计模式,它,相比继承更加灵活。装饰器模式通过创建包装对象来实现功能的扩展。
2025-06-29 16:01:58
1160
原创 设计模式之抽象工厂模式
直接看main函数,通过guifactor创建不同的工厂,根据不同的工厂创建不同的类,其中抽象出来了一个client类,负责传入工厂类实现不同的方法。具体的工厂类下面生成的类就不写了,可以自由扩展,后续添加新的类时,只需要注册到属于的工厂类即可,可以再编写一个注册的方法。抽象工厂模式是一种创建型设计模式,它提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。以上就是一个简单的抽象工厂的uml类图了,清晰展示了抽象工厂的类关系。通过实现guifactor接口的方法。
2025-06-28 15:54:29
232
原创 设计模式之桥接模式(Java)-JDBC也实现了桥接模式
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。解决组合爆炸问题。直接上案例,假设一个需要根据不同绘图API绘画不同的形状时。定义api接口以及他的实现类然后再抽象一个形状,以及继承形状的抽象类现在api、形状就定义完成了,写一个main测试一下输出::可以发现他根据不同的API接口实现了不同形状的画法,这里我们将shape和api接口进行了联系,(提供具体的绘图实现(栅格或矢量)可以独立地选择形状和绘图API运行时动态组合抽象和实现部分。
2025-06-28 15:54:08
476
原创 设计模式之迭代器模式
迭代器模式是一种行为设计模式,它提供了一种顺序访问聚合对象中的元素的方法,而不需要暴露该对象的底层表示。迭代器模式将遍历元素的责任交给迭代器对象,而不是聚合对象本身,从而使得聚合对象的接口更加简洁,同时也支持多种遍历方式。
2025-06-27 13:10:12
349
原创 Git下载与使用完全指南:从安装到基础操作详解,附上git的学习网站(很直观)(可以模拟git的全过程)
Git入门指南:从安装到基本操作 本文提供了Git版本控制系统的完整入门教程,包含Windows环境下的安装配置步骤和基础使用方法。主要内容包括:Git的核心特性介绍、Windows版下载安装流程、初始配置(用户信息、编辑器设置等)、基础命令操作(仓库创建、提交、分支管理等)、团队协作注意事项以及常见问题解决方案。教程特别强调了Windows用户需要注意的配置细节,如行尾符处理、路径限制等问题,并提供了代码提交规范、冲突解决等实用建议。文末推荐了官方文档和交互式学习网站等优质学习资源,帮助开发者快速掌握这一
2025-06-27 13:09:58
4187
原创 设计模式之Visitor Pattern(访问者模式)
Visitor Pattern 是一种行为设计模式,它允许你在不修改已有类结构的情况下定义新的操作。该模式将算法与其操作的对象结构分离,是解决"双重分发"问题的经典方案。
2025-06-26 13:31:38
283
原创 设计模式之静态工厂模式
静态工厂模式是一种创建型设计模式,它通过一个静态方法来创建对象,而不是直接使用构造函数。这种方式提供了更好的封装性和灵活性。这种设计模式实现起来并不复杂。首先直接创建一个需要被创建的类,我这假设创建了一个car类。这里面封装了很多的静态方法,需要创建的时候调用方法即可。
2025-06-25 09:28:04
237
原创 设计模式之---观察者模式,从理解到简单实现demo(Java)
观察者模式是一种行为设计模式,它定义了一种,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,它的所有观察者都会收到通知并自动更新。
2025-06-25 09:27:47
563
原创 Java UUID 工具类以及UUID的原理,UUIDV7版本详解,为何可以用来做主键?
UUID(通用唯一标识符)是一种128位的标识符,用于在分布式系统中生成全局唯一的ID。它的生成原理和不同版本的设计各有特点,特别是最新的UUIDv7在数据库索引和排序方面有显著优化。UUID 的核心原理是通过组合不同的唯一性要素(如时间戳、MAC地址、随机数等)来确保全局唯一性。(60位,用于版本1/2/6/7)(4位,标识UUID的版本)(2位,定义UUID的布局规则)(如MAC地址或随机数,确保空间唯一性)148。(如v1):使用当前时间和机器网卡地址,确保时间和空间唯一性,但可能泄露隐私26。
2025-06-24 13:59:36
2551
原创 LRU缓存算法:从原理到Java实现详解
LRU(Least Recently Used,最近最少使用)缓存淘汰算法是一种广泛应用于计算机系统中的缓存管理策略。它的核心思想是:当缓存空间不足时,优先淘汰最长时间未被访问的数据。这种策略基于"局部性原理",即最近被访问过的数据很可能在不久的将来再次被访问。LRU算法因其高效性和实用性,被广泛应用于数据库缓存、操作系统页面置换、Web服务器缓存等多个领域。理解LRU的实现原理和代码细节,对于提升系统设计能力和解决实际问题具有重要意义。:当缓存满时自动淘汰最久未使用的数据。LRU淘汰最近最少使用的项目。
2025-06-23 00:14:28
726
原创 十大排序算法之归并排序--从理解原理到java代码实现
与快速排序的原地排序特性不同,归并排序需要额外的存储空间,但正是这种特性使其成为外部排序(处理大规模数据无法全部装入内存的情况)的首选算法。在合并过程中,通过比较两个子数组的元素,将较小的元素依次放入结果数组中,直到其中一个子数组的元素全部被处理完,然后将另一个子数组剩余的元素直接追加到结果数组的末尾。随后,我们将从最基础的递归实现入手,逐步深入到更高效的迭代实现,并探讨其在Java语言中的具体实现方式。,对这些子数组分别进行排序,然后再将排序好的子数组合并成一个有序的数组。分治思想是归并排序的核心。
2025-06-23 00:14:14
344
原创 Java中栈的实现---Stack、Deque、自定义实现
this(10);top = -1;// 入栈//扩容resize();// 出栈// 查看栈顶元素// 判断栈是否为空// 栈中有多少元素// 判断栈是否已满更加定制化,我增加了一个扩容机制还有一个基于链表的栈实现// 入栈// 出栈// 查看栈顶元素// 判断栈是否为空int data;
2025-06-22 16:00:30
561
原创 KMP算法详解
前缀:从字符串开头开始的子串(不包括整个字符串)后缀:以字符串结尾的子串(不包括整个字符串)最长公共前后缀:既是前缀又是后缀的最长子串例如,对于模式串"ABABAC":"A":无前后缀 → 0"AB":前缀"A",后缀"B" → 0"ABA":前缀"A,AB",后缀"A,BA" → "A" → 1"ABAB":前缀"A,AB,ABA",后缀"B,AB,BAB" → "AB" → 2"ABABA":前缀"A,AB,ABA,ABAB",后缀"A,BA,ABA,BABA" → "ABA" → 3。
2025-06-22 16:00:14
983
1
原创 设计模式之手写策略模式实现动态支付(Java实现)
比如工厂类的写法有待改进,上面只是简单写法,还有如果需要动态的创建新的支付方式呢,难道只能停止运行创建完再手动运行吗?这样太麻烦了,我们可以使用动态代理的方式在运行期进行创建支付方式,怎么创建呢?需要有一定的动态代理基础,我们写一个接口,能够生成统一模板的支付类,并将其编译加载到JVM中,然后验证其正确性和稳定性,最后将其注册到工厂类中即可供用户使用。此时就完成了 一个支付模块的设计,能够支持动态选择支付方式,而不是大量的ifelse操作,此时就把支付逻辑的类写完了。以及一个生成支付实例的工厂类。
2025-06-21 14:22:36
380
原创 BufferPool 缓冲池类的理解,手写一个BufferPool 缓冲池
BufferPool是一个用于管理字节缓冲区(ByteBuffer)的内存池实现,主要目的是减少频繁的内存分配和释放操作,提高内存使用效率。
2025-06-20 13:42:50
485
原创 深入理解HashMap:从Java实现到自定义实现
本实现提供类似Java HashMap的核心功能,包括:</p>* <ul>* <li>基于哈希表的键值对存储</li>* <li>使用链表解决哈希冲突</li>* <li>自动扩容机制</li>* <li>基本CRUD操作</li>* </ul>* <p><b>特性说明:</b>初始容量:16</li>* <li>负载因子:0.75
2025-06-19 12:07:47
298
原创 深入理解跳表(SkipList):从原理到自定义实现
跳表是一种概率平衡数据结构,可替代平衡树,提供O(log n)的查询/插入/删除复杂度</p>* <p><b>实现特性:</b></p>* <ul>* <li>最大层级:16</li>* <li>晋升概率P:0.5</li>* <li>支持整型数据存储</li>* <li>提供查找、插入、删除基本操作</li>* </ul>* <p><b>时间复杂度:</b>
2025-06-19 12:07:35
185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅