- 博客(863)
- 收藏
- 关注
原创 Django集成Swagger全指南:两种实现方案详解
在前后端分离开发中,API 文档的重要性不言而喻。Swagger(现更名为 OpenAPI)作为主流的 API 文档生成工具,能自动生成交互式文档,极大提升开发效率。本文将介绍两种在 Django 项目中集成 Swagger 的实用方案,帮助开发者快速搭建完善的 API 文档系统。
2025-07-25 17:53:20
764
原创 Mysql查询语句执行流程?更新语句执行流程?
连接器:建立连接,管理连接、校验用户身份;查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;执行 SQL:执行 SQL 共有三个阶段:预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划(选择使用哪个索引);
2025-07-25 15:59:50
549
原创 微服务的10大问题
拆分时春风得意,运维时步履维艰。某电商平台从单体拆分为120个微服务后,故障率飙升300%,排障时间从10分钟恶化到3小时。这篇文章跟大家一起聊聊微服务中的10个最常见的问题,希望对你会有所帮助。由此可见,微服务如果用不好问题还是挺多的,需要有丰富的实战经验,才能把微服务项目真正的做好。微服务的三层防御体系微服务的十条军规服务粒度按业务能力而非代码量跨服务事务用最终一致性替代强一致必须配置熔断超时阈值配置中心统一管理所有环境参数全链路追踪ID穿透所有服务每个服务独占数据库。
2025-07-24 17:39:39
809
原创 【深入解剖Spring事务管理】原理、传播机制与12大失效场景避坑指南
最佳实践始终在@Service层的 public 方法上使用。明确指定(如对嵌套事务使用时,确保数据库驱动支持保存点(Savepoint)。避免在事务方法中处理耗时操作(如 RPC 调用),减少数据库连接占用时间。理解这些机制能有效避免生产环境的事务陷阱,确保数据一致性。佛祖让我来巡山【深入解剖Spring事务管理】原理、传播机制与12大失效场景避坑指南 - 佛祖让我来巡山 - 博客园JNPF快速开发平台。
2025-07-24 16:17:47
797
原创 结构型模式-架构解耦与扩展实践
网络容错:所有模式实现需考虑网络延迟、超时和重试(如代理模式中添加 RPC 超时控制)。状态一致性:组合模式和享元模式需处理分布式状态同步(如集群节点状态的一致性)。性能权衡:代理、适配器等模式可能引入额外开销,需避免过度设计(如轻量级场景可简化模式实现)。通过掌握结构型模式在分布式系统中的演化与实践,不仅能在面试中清晰解析架构设计问题,更能在实际项目中构建松耦合、可扩展的分布式架构,体现高级程序员的系统设计能力。晴空月明结构型模式-架构解耦与扩展实践 - 晴空月明 - 博客园JNPF快速开发平台。
2025-07-22 16:53:34
959
原创 【Spring三级缓存解密】如何优雅解决循环依赖难题
在Spring框架的日常开发中,循环依赖问题如同一个幽灵,时不时困扰着开发者。当Bean A依赖Bean B,而Bean B又依赖Bean A时,传统的创建流程会陷入死锁。理解三级缓存不仅帮助解决循环依赖异常,更是深入掌握Spring框架设计思想的钥匙。正如Spring框架创始人Rod Johnson所说:"好的框架设计是在约束与灵活性之间找到完美平衡",三级缓存正是这种平衡的艺术体现。:避免为不需要代理或未发生循环依赖的Bean创建额外对象。:在被依赖时才决定是否创建代理。循环依赖的根源在于对象创建的。
2025-07-21 17:53:37
1006
原创 SpringBoot集成测试笔记:缩小测试范围、提高测试效率
如果需要指定需要测试的 Bean 及其依赖,而不是加载完整的上下文环境,可以在注解的classes参数中配置需要测试及依赖的类或对象。如果遇到不是项目中自己写的或者可以自动生成的实现类,可以通过配置的方式,在测试配置中注册相关的 Bean。最终做到缩小测试范围,提高测试运行效率。飞鸟_AsukaSpringBoot集成测试笔记:缩小测试范围、提高测试效率 - 飞鸟_Asuka - 博客园JNPF快速开发平台。
2025-07-21 16:19:10
551
原创 AI时代,可视化怎么做才不落伍?低代码加持,数据洞察快人一步!
JNPF 低代码开发平台在 AI 时代的可视化和数据洞察方面展现出了强大的实力和优势。它不仅解决了传统可视化面临的诸多挑战,还通过创新的功能和特性,为企业提供了高效、便捷的数据洞察解决方案。无论是快速搭建应用程序,还是实现复杂的数据处理和分析,JNPF 都能游刃有余。随着数字化转型的加速推进,低代码技术的发展前景将更加广阔。它将成为企业实现数字化创新的重要工具,帮助企业快速响应市场变化,提升竞争力。
2025-07-18 17:33:40
1007
原创 工作中常见的OOM?你了解JVM调优吗?
XX:PermSize(对于Java 7及之前的版本)或 -XX:MetaspaceSize(对于Java 8及以后的版本):指定永久代(Java 7及之前)或元空间(Java 8及以后)的初始大小。GC调优这种问题肯定是具体场景具体分析,但是在面试中就不要讲太细,大方向说清楚就行,不需要涉及具体的垃圾收集器比如 CMS 调什么参数,G1 调什么参数之类的。高吞吐量:第二个目标是提高应用的吞吐量,即在单位时间内完成更多的业务处理,通过合理的GC策略和配置,减少GC的频率和时间,从而提升整体性。
2025-07-18 15:53:58
1077
原创 干货分享!MCP 实现原理,小白也能看懂
不知道大家有没有发现?对于添加到 MCP 服务市场的成千上万个 MCP 服务(而且这个数字每天还在增加),我们可以不写一行代码,轻松实现调用,但背后的原因究竟是啥呢?MCP 虽然用起来很方便,但搞不懂背后的实现原理,总感觉这个知识点还没完全掌握,所以接下来,我们一起来看它的实现原理。
2025-07-16 16:52:06
546
原创 表单文本框里写太多字就出 404 了?原因和解决办法都在这儿!
表单文本框内容过多导致 404 错误,通常是由于的复杂性引发的路径截断或后端解析失败。通过移除enctype、使用现代 AJAX 方法或调整后端逻辑,可以有效解决该问题。表单文本框里写太多字就出 404 了?原因和解决办法都在这儿!- DarkLONGLOVE - 博客园JNPF快速开发平台。
2025-07-16 15:16:30
896
原创 垃圾回收算法有哪些?了解哪些垃圾回收器?
在Java中,指针碰撞是一种垃圾收集算法中用于分配内存的一种方式。它通常用于实现停顿时间较短的垃圾收集器,如复制算法和标记整理算法。指针碰撞的基本思想是将堆内存分为两个区域:一个是已分配的对象区域,另一个是未分配的空闲区域。通过一个指针来分隔这两个区域。当需要分配对象时,垃圾收集器将对象的大小与空闲区域的大小进行比较,如果空闲区域足够容纳对象,则将指针碰撞指针向前移动对象的大小,并返回指针碰撞指针的旧值作为对象的起始地址。如果空闲区域不足以容纳对象,则进行垃圾回收操作,释放一些内存后再进行分配。
2025-07-15 17:36:51
681
原创 订单初版—生单链路实现的重构文档
一.生成订单数据 + 锁定优惠券,使用的是AT模式订单数据和营销数据通常不需要做异构存储,使用数据库存储即可。往数据库写入订单数据 + 锁优惠券,由于都是与用户关联,所以即使并发情况下也不会出现竞争全局锁。二.锁库存双写数据库 + 缓存,使用的是TCC模式库存数据需要异构存储,所以扣减库存时,需要操作数据库 + 缓存。双写数据库 + 缓存会面临数据一致性问题,TCC模式可以保证数据一致性。锁库存使用TCC模式后,即便出现大量并发请求锁库存,也不需要竞争AT模式下的全局锁了。
2025-07-15 16:01:13
686
原创 TypeScript枚举类型应用:前后端状态码映射的最简方案
这篇文章来谈一下 TypeScript 中的枚举类型(Enum)以及一些最佳实践。事情的起因是这样的,今天看到自己之前写的一段代码,感觉不是很好,于是想优化一下,期间用到了枚举类型,遂记录一下。为了方便理解,我将原来的例子简化一下。
2025-07-14 17:21:30
1039
原创 Faiss能解决什么问题?Faiss是什么?
问题来了,在一群数据中找到两个相似度最高的向量数据,最常用的是暴力搜索法,也就是逐一遍历所有向量,计算距离(如欧氏距离、余弦相似度),虽准确,但时间复杂度高,无法处理百万级以上数据。业界有人会称Faiss是向量数据库,但Faiss不是传统意义上的数据库,因为它并不具备数据持久化存储的能力,但它是很多向量数据库(例如Milvus)的核心引擎,因为向量数据库最核心的能力就是相似度搜索。然后编写一段代码,利用Faiss在模拟数据(10个4维向量)中找到和被搜索向量相似度最近的3个向量,并打印出来。
2025-07-14 16:20:53
721
原创 Vue3开发效率飙升5倍?低代码的逆天组合,我悟了!
Vue3+JNPF 的组合在开发效率上实现了质的飞跃。从开发周期来看,以一个中等规模的企业资源规划(ERP)系统为例,传统开发方式可能需要 6 - 8 个月的时间才能完成从需求分析到上线的整个流程。而采用 Vue3+JNPF 快速开发平台,借助 JNPF 平台丰富的预制组件和可视化开发工具,以及 Vue3 高效的开发特性,开发周期可以缩短至 2 - 3 个月,开发周期缩短了约 60% - 70%。
2025-07-11 17:35:48
822
原创 Java集合框架性能特征与使用场景深度解析
随机访问:选 ArrayList(O (1))而非 LinkedList(O (n))。高频查找:选 HashMap(均摊 O (1))而非 TreeMap(O (log n))。高并发写:选 ConcurrentHashMap(桶级锁)而非 Hashtable(全表锁)。
2025-07-11 16:03:22
797
原创 MySQL 09 普通索引和唯一索引,应该怎么选择?
唯一索引:字段值不能重复。普通索引:字段值可以重复。假设数据如下图,且字段k上的值都不重复:接下来,从两种索引对查询语句和更新语句的性能影响来分析。
2025-07-10 17:40:25
567
原创 MySQL的三大日志
飞机失事靠黑匣子还原真相,MySQL崩溃靠三大日志保障数据安全。作为一个工作多年的程序员,我见过太多因日志配置不当引发的灾难:数据丢失、主从同步中断、事务回滚失败...今天,我将用最通俗的方式,带你彻底掌握MySQL三大日志的底层原理,希望对你会有所帮助。1、Redo Log是生命线innodb_flush_log_at_trx_commit=1 + 足够大的日志文件应趋近于02、Undo Log是后悔药及时清理:开启避免长事务:监控3、Binlog是复制基石格式选择:金融级系统必须用ROW格式。
2025-07-10 15:48:14
687
原创 商品中心—商品卖家系统的技术文档
非叶子节点的卖家节点可以看成是卖家所属的分类,叶子节点的卖家节点才是具体的某一个卖家。卖家节点也分为叶子节点和非叶子节点,非叶子节点的卖家节点可以看成是卖家所属的分类,叶子节点的卖家节点才是具体的某一个卖家。而且卖家组与卖家是多对多关系,即⼀个卖家组能同时添加多个同⼀⾃营类型卖家或者POP类型卖家,⼀个卖家也可以被添加到多个同⼀类型的卖家组中。新增⼀个卖家组,⼀个卖家组原则上不允许圈定不同区域的卖家,卖家组只限定其下的卖家类型要与卖家组保持⼀致。其⾮叶⼦节点为虚拟卖家,叶⼦节点为实体卖家,例如东城区卖家。
2025-07-09 17:44:03
541
原创 2025年推荐6个好用的 Postman 替代工具
在软件开发和API测试领域,Postman无疑是使用最广泛的工具之一。它凭借直观的界面、强大的功能以及丰富的社区支持,多年来一直备受欢迎。然而,随着技术的发展和用户需求的多样化,Postman也暴露出一些不足,比如性能瓶颈、强制登录限制以及部分高级功能需要付费等问题。因此,越来越多的用户开始寻找更高效、更灵活的替代工具。本文将为您推荐6款2025年备受欢迎的Postman替代工具,帮助您根据实际需求选择更合适的API测试与开发方案。
2025-07-09 16:32:27
1257
原创 传统OA要凉?低代码+数智化正在重构企业办公系统
目录传统 OA 的困境低代码技术崛起数智化 OA 的变革力量低代码与数智化 OA 的融合优势实战案例解析未来展望与挑战在数字化转型的浪潮中,传统 OA 系统曾经是企业办公自动化的重要工具,在一定程度上实现了办公流程的电子化,替代了部分繁琐的纸质流程,例如请假审批、文件传阅等流程可以通过电子表单在系统内流转,减少了纸张的浪费和人工传递的时间成本 。但如今,却逐渐暴露出诸多问题,在架构、功能、用户体验、安全和适应性等方面的局限日益凸显。架构陈旧,难以拓展:传统 OA 系统多采用较为陈旧的架构,这使得其在面对新的
2025-07-08 17:53:53
943
原创 订单初版—分布式订单系统的简要设计文档
通过对该组件添加@RestControllerAdvice注解,让该组件成为默认的Controller全局异常处理增强组件。在这个组件中,会分别对系统级别未知系统、客户端异常、服务端异常都做了统⼀处理。
2025-07-08 16:05:01
751
原创 MySQL查询执行顺序:一张图看懂SQL是如何工作的
避免语法错误- 知道什么时候可以使用别名优化查询性能- 合理安排过滤条件的位置正确使用聚合函数- 区分WHERE和HAVING的使用场景编写高效SQL- 让数据库引擎更好地优化查询SQL执行顺序虽然看起来复杂,但掌握了这个核心概念,你就能:写出更高效的SQL语句快速定位SQL错误更好地理解数据库的工作原理在面试中从容应对相关问题下次写SQL的时候,不妨在心里默念一遍执行顺序,相信你会发现很多之前困惑的问题都迎刃而解了!大毛啊。
2025-07-07 17:38:12
1096
原创 MySQL 多版本并发控制
使用隔离级别的事务,由于可以读到未提交事务修改过的记录,所以直接读取记录的最新版本就好了。使用隔离级别的事务,InnoDB规定使用加锁的方式来访问记录。使用和隔离级别的事务,都必须保证读到已经提交了的事务修改过的记录。假如另一个事务已经修改了记录但是尚未提交,是不能直接读取最新版本的记录的,核心问题就是需要判断一下版本链中的哪个版本是当前事务可见的,这是ReadView要解决的主要问题。,创建这个 Read View 的事务 ID。
2025-07-07 16:19:02
824
原创 Web前端入门:JavaScript 性能优化之事件委托(事件代理)原理
性能优化这条路上,一直都存在各种话题,很多性能优化都是过犹不及,适当的场景用适当的方式才是最合理的。代码编写并不是一蹴而就,很多时候,能实现功能就是好代码,至于性能,在一些小的需求场景,您写的代码可能都无法触发性能问题~~坚持一个原则:不要过早优化。当我们的代码确实触发了性能问题,再考虑如何优化吧~~前端路引Web前端入门第 75 问:JavaScript 性能优化之事件委托(事件代理)原理 - 前端路引 - 博客园JNPF快速开发平台。
2025-07-04 17:33:32
649
原创 一个static关键字引发的线上故障:深度剖析静态变量与配置热更新的陷阱
一个小小的static关键字,引发了我对Java基础知识的重新思考。在追求性能优化的同时,我们不能忽视架构的灵活性和可维护性。正如这次经历所示,技术决策需要权衡多方面因素,没有放之四海而皆准的银弹。在分布式系统和云原生时代,任何可能变化的值都不应该被静态绑定。让我们在追求系统稳定性的同时,也为必要的变更保留空间,这才是应对复杂业务场景的成熟之道。程序员Seven一个static关键字引发的线上故障:深度剖析静态变量与配置热更新的陷阱 - 程序员Seven - 博客园JNPF快速开发平台。
2025-07-04 16:03:03
920
原创 程序员失业预警?低代码开发正在血洗传统运维开发!附避坑指南
低代码开发的兴起无疑给传统运维开发带来了巨大的冲击,从开发模式到市场格局都发生了显著的变化。但这并不意味着传统运维开发人员的职业生涯就此终结,相反,这是一个转型和提升的契机。在未来的软件开发行业中,低代码开发将与传统开发模式相互补充、共同发展。低代码开发将继续在快速开发、业务流程自动化等领域发挥重要作用,帮助企业提高数字化转型的速度和效率。而传统开发模式则将专注于复杂系统开发、底层技术研究等高端领域,为软件行业的发展提供坚实的技术支撑。
2025-07-03 17:24:52
1064
原创 JavaScript Quine揭秘:如何让程序输出自身源代码?
如何写一段javascript程序,输出自身的源代码?这个问题非常有意思,大家不妨先尝试一下,反正在尝试了半个小时之后,我果断放弃了。这种能输出自身的程序在英文里被称为quine。
2025-07-03 15:24:25
398
原创 Web前端入门:JavaScript 事件冒泡与事件捕获
编程中的细节问题,总是越挖掘越心惊,学得越来越多,才会发现知道的越来越少。前端路引Web前端入门第 74 问:JavaScript 事件冒泡与事件捕获 - 前端路引 - 博客园JNPF快速开发平台。
2025-07-02 17:31:08
531
原创 商品中心—缓存与DB一致性的技术文档
一.指定具体的缓存名称对应于注解中的cacheKey字段。二.指定第几个入参参数作为缓存的内容对应于注解中的index字段。三.指定操作类型对应于注解中的operationType字段,1是新增或修改,2是删除。四.指定发送哪种缓存数据的消息对应于注解中的messageType,0是普通缓存的消息,1是热点缓存的消息。用来保证DB和缓存的一致性时,消息类型为普通缓存的消息。用来保证本地缓存和分布式缓存的一致性时,消息类型为热点缓存的消息。五.指定使用的缓存组件类型。
2025-07-02 15:46:44
977
原创 真正的生产力来了!Docker迁移部署两步搞定!
最近遇到了需要部署一套比较复杂的应用场景,刚好这套应用我在其他服务器部署过,为了节省折腾的时间,我打算直接把服务器上已有的搬过去。PS:没想到这个过程比从头开始来耗费时间😂好在是把一键迁移的脚本也搞出来了,以后遇到类似的情况就比较舒服了。Docker 的一个典型优势场景就是可移植性只需要把原服务器上的应用相关目录和docker-compose.yml 文件打包复制过去,在目标服务器上解压、部署即可。本文记录一下 docker 迁移部署的过程。
2025-07-01 17:40:57
366
原创 商品中心—库存分桶调配的技术文档
也就是根据当前的可⽤分桶列表、中⼼桶库存、总的可⽤库存深度,计算出平均的⼀个可分配库存数量,从而避免每个分桶扩容的库存不均匀(最⼩值必须超过最⼩库存深度)。先更新分桶库存缓存,再更新本地分桶元数据缓存及远程元数据缓存,可以避免不同机器的本地分桶元数据缓存不一致。获取扩容后的预估库存深度,此时分桶的库存深度发⽣变化,如果扩容的库存深度超过当时分配的库存深度,且未超过最⼤库存深度,则以当前分配的实际库存更新当前分桶库存深度。因为空库存分桶⼜会⻢上下线,这⾥需要先获取对应中⼼桶的剩余库存,验证是否可以上线分桶。
2025-07-01 16:11:47
971
原创 供应链数字化转型别踩坑!JNPF低代码才是普通企业的最优解
JNPF 低代码平台集成了 Java 和.Net 双技术引擎,融合了两者的优势,为企业提供了更强大、更稳定的技术支持。其前端采用 Vue3 等技术框架,具备场景建模、界面开发、系统对接、组件拓展、数据并发处理、动态菜单、权限校验、按钮级别权限控制等丰富功能。同时,该平台还提供大数据管理功能和 SQL 查询接口,能够流畅地处理数据,满足企业在数字化转型过程中对数据处理和分析的需求。
2025-06-27 17:24:24
844
原创 为什么说方法的参数最好不要超过4个?
在很多年前的一次Code Review中,有大佬指出,,对于当时还是萌新的我,虽然不知道什么原因,但听人劝,吃饱饭,这个习惯也就传递下来了,直到参加工作很多年后,才明白这其中的缘由。
2025-06-27 15:44:23
628
原创 100万QPS短链系统如何设计?
凌晨两点,监控大屏突然飙红——短链服务QPS突破80万!数据库连接池告急,Redis集群响应延迟突破500ms。这不是演习,而是某电商平台大促的真实场景。当每秒百万级请求涌向你的短链服务,你该如何设计系统?今天这篇文章跟大家一起聊聊100万QPS短链系统要如何设计?希望对你会有所帮助。四大设计原则:无状态设计:跳转服务完全无状态,支持无限扩展读多写少优化:将读性能压榨到极致分而治之:数据分片,流量分散柔性可用:宁可部分降级,不可全线崩溃。
2025-06-26 18:01:10
1205
原创 接口设计的原则:构建优雅API的完整指南
接口设计是定义系统不同组件之间交互方式的过程。它包括方法签名、参数定义、返回值、异常处理等方面的设计。好的接口设计能够隐藏实现细节,提供清晰的调用方式。每个接口应该只负责一个明确的功能,不应该承担多个不相关的职责。这是接口设计的基础原则。接口应该对扩展开放,对修改关闭。设计时要考虑未来的扩展需求,避免频繁修改已有接口。子类对象应该能够替换父类对象,而不影响程序的正确性。接口的实现类应该完全遵循接口的契约。不应该强迫客户依赖于它们不使用的方法。设计小而专一的接口,而不是大而全的接口。
2025-06-26 16:54:51
1018
原创 商品中心—商品B端搜索系统的实现文档
在ES里建立索引时,都是根据文本内容类型的字段来建立索引的。而这些字段如果是中文,就要使用中文分词器来进行分词。所以在落地搜索系统时,中文分词器的实现是至关重要的,这个是必须要做的。原生开源的IK分词器不太好用,一般都要对IK分词器进行改造,基于IK分词器的源码进行二次开发。要进行中文分词,首先就需要有中文词库。比如对"我特别喜欢在床上看书"这句话进行分词,中文词库中有"特别"、"喜欢"、"看书"三个词。那么就会把上面这句话分成:我、特别、喜欢、在、床、上、看书。
2025-06-24 17:08:58
599
原创 Spring IoC容器与依赖注入深度解析
解耦组件:通过容器管理依赖关系,组件无需硬编码依赖对象的创建逻辑。提升可测试性:依赖可通过模拟对象注入,无需启动完整容器即可测试组件。灵活配置:支持 XML、注解、Java 配置等多种方式,适应不同团队技术栈。
2025-06-23 17:16:44
825
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人