自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(392)
  • 资源 (3)
  • 收藏
  • 关注

原创 二叉树的前中后遍历、层次遍历、树高,叶子节点、由两种遍历求树

二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的前层次序遍历求叶子节点求树高又前序遍历和中序遍历求树Java代码拿去即可运行package leetcode;public class TreeNode { private Integer value; private TreeNode left; private TreeNode right; public TreeNode() { } public Tre

2021-10-18 18:00:58 226

原创 行为是因,结果是果——行为不变,结果就不会改变。

【摘要】人们常陷入"伪成长"陷阱,误将消费知识(如阅读、刷视频)当作成长本身,而缺乏实际产出。真正改变人生的关键在于:1)区分消费与创造,将输入转化为作品/技能;2)通过时间流向诊断真实目标;3)建立"产出型学习"模式(如读后必写笔记);4)坚持可检验的持续行动。行为模式决定人生结局——每天微小但真实的产出,经年累月将带来质变。改变从审视时间分配开始,用创造代替消费,才能突破成长幻觉。

2026-07-21 10:18:58 212

原创 Agent Skills:让 AI 成为后端开发的得力助手

《AgentSkills:AI时代后端工程师的规范自动化工具》摘要 本文介绍了AgentSkills如何帮助后端工程师将开发规范和工作流程固化为可复用的AI指令集。通过Markdown文件定义技能模板,AI可以按照预设规范完成API设计、数据库建模、代码审查等重复性工作。文章详细讲解了Skill的基本结构(使用场景、工作流程、输出格式),并列举了4个典型应用场景:API自动生成、数据库Schema设计、代码规范检查和日志分析。通过创建API设计Skill的实战案例,展示了从目录构建到技能调用的完整流程。最后

2026-04-08 14:59:03 867

原创 一篇文章讲明白:RAG + MCP + Skills + LangChain + LangGraph

本文系统介绍了大模型应用开发中的五大核心技术:RAG(检索增强生成)解决知识更新问题,MCP(模型上下文协议)规范工具调用,Skills(技能单元)提供专业任务处理能力,LangChain作为开发框架协调各模块,LangGraph负责复杂流程编排。这五项技术各司其职又协同配合,共同解决大模型的知识局限、工具调用和流程控制等核心问题,是构建企业级AI应用的关键技术组合。掌握它们的分工协作关系,能有效提升开发效率和系统可靠性。

2026-03-25 21:22:51 821

原创 OopMap + 安全点 + 记忆集 + 卡表(一次性讲透)

OopMap + 安全点解决"如何准确且高效地找到所有引用";记忆集 + 卡表解决"分代GC时如何避免扫描整个老年代"。

2026-03-25 14:34:58 420

原创 大白话彻底拆解 Raft 分布式一致性协议

Raft协议是分布式系统中保证数据一致性的核心算法。其核心原理可概括为:通过选举机制选出唯一Leader节点,由Leader负责接收客户端请求并通过日志复制机制将数据同步给Follower节点。选举过程采用任期制和多数投票原则,确保集群始终只有一个Leader;日志复制需要超过半数节点确认后才提交,保证数据一致性。典型应用如etcd严格遵循Raft实现键值存储,Nacos在CP模式下基于Raft改造实现配置同步。面试要点包括三大角色(Leader/Follower/Candidate)、两大机制(选举与复制

2026-03-24 10:57:39 538

原创 主流分布式事务框架与方案:从 XA 到 Seata 四模式

本文系统分析了分布式事务框架Seata的核心架构与四种模式(AT、TCC、Saga、XA)。首先指出手写分布式事务的痛点,然后详细解析各模式的设计思想:AT模式通过UndoLog实现无侵入的事务管理,但存在全局锁和脏写问题;TCC模式提供精细控制但需处理幂等问题;Saga模式适合长事务但缺乏隔离性;XA模式保证强一致性但性能受限。文章强调框架不能替代合理设计,并指出生产实践中需要注意TC高可用、AT模式边界条件等问题。最后总结分布式事务的本质是对"强一致性、高可用性、低侵入性"不可能三角

2026-03-19 23:21:21 629

原创 分布式系统四问:幂等、时钟、隔离、权衡

的用户(数据分布在多个分片),事务 A 在时刻 t1 读到了 100 条记录,期间事务 B 在另一个分片上插入了 10 条 age=20 的数据,事务 A 在 t2 再次执行同样的查询——结果变成了 110 条。当一个业务流程跨越多个微服务(机票预订 → 酒店预订 → 租车 → 支付),且每个步骤都可能执行数秒乃至数分钟时,TCC 的"持有预留状态"策略变得不可行——预留 5 分钟的机票座位,会把资源利用率打垮。一旦某个步骤失败,依次执行之前所有步骤的补偿操作,最终达到"业务上等价于未执行"的状态。

2026-03-19 23:02:21 347

原创 空回滚、悬挂、幂等——TCC 分布式事务的三道暗礁

本文深入探讨了TCC分布式事务中的三大关键问题:空回滚、悬挂和幂等性。空回滚指对未执行的Try进行Cancel,悬挂是Try在Cancel之后执行,而幂等性要求重复操作结果一致。解决方案都依赖事务状态表,通过持久化记录重建执行顺序。文章还分析了工程实践中的热点查询、超时设置等挑战,并指出TCC适合强一致性场景。核心思想在于用状态记录替代网络顺序假设,这一范式可推广至各类分布式系统问题。理解这些防御机制,才能真正掌握TCC的设计精髓。

2026-03-19 22:45:12 520

原创 分布式事务的困境与救赎:从2PC到Saga的演进之思

本文深入探讨了分布式事务的难点与解决方案。在单机环境中,事务是优雅的抽象,但在分布式系统中,网络不可靠性和CAP定理使得达成共识变得困难。文章分析了四种主要协议:2PC虽简单但存在阻塞和单点问题;3PC通过增加阶段试图解决2PC缺陷,却引入了新的不一致风险;TCC将控制权交给业务层,但实现复杂;Saga采用最终一致性,但缺乏隔离性。每种协议都在一致性、可用性和性能之间权衡取舍。真正的工程智慧在于根据业务需求组合使用不同方案,如核心链路用TCC、长流程用Saga等。最终指出,分布式系统的本质是与不确定性共存,

2026-03-19 21:54:20 427

原创 RabbitMQ 全链路解析:底层原理 + 高并发调优 + 百万级落地

《RabbitMQ实战指南:从基础到高可用架构》 本文是一份RabbitMQ生产级实践指南,涵盖消息队列核心概念到高级特性。文章首先通过餐厅点餐案例生动解释消息队列的异步解耦价值,随后详细解析RabbitMQ五大核心概念:连接/通道、交换机类型、队列、绑定路由和虚拟主机。 重点阐述了消息可靠性的五道防线:生产者确认机制、Broker持久化三要素、消费者手动ACK、死信队列和补偿任务。针对高并发场景,提供了预取调优、延迟队列和顺序消息的解决方案。最后给出SpringBoot集成示例、故障排查方法和面试标准答案

2026-03-19 11:16:49 1335 2

原创 RabbitMQ 深度解析:从架构原理到消息全链路可靠性保障

本文系统分析了RabbitMQ全链路可靠性机制。首先介绍了RabbitMQ的核心架构和四种交换机类型,然后从生产者、Broker、消费者三个维度深入剖析了消息丢失风险及应对策略。生产者层面推荐异步Confirm机制和Return监听;Broker层面强调持久化三层保障和LazyQueue防积压;消费者层面需手工确认、重试退避、死信队列及业务幂等性。文章最后总结了一套完整的可靠性保障体系,建议在可靠性与性能间寻求平衡,通过系统性防护实现"消息不丢、不重、不乱"的目标。

2026-03-09 21:37:34 874

原创 RabbitMQ从0到1:不只是会用,而是真正理解

本文系统介绍了RabbitMQ的核心概念与应用实践。主要内容包括:消息队列的三大核心价值(解耦、异步、削峰),RabbitMQ的五大关键角色(生产者、交换机、队列、绑定规则、消费者),五种工作模式(Simple、Work、Topic等),消息可靠性保障方案(生产者确认、持久化、手动ACK),以及进阶功能(死信队列、延迟队列)。文章特别强调了生产环境常见问题与解决方案,如消息重复消费、顺序错乱、内存溢出等,并提供了性能优化与监控建议。通过详细的代码示例和配置说明,帮助开发者从理论到实践全面掌握RabbitMQ

2026-03-02 21:14:09 1015

原创 有了异步调用,为什么还要使用消息队列??

摘要 普通异步调用(如线程池、@Async)与消息队列(MQ)虽都实现异步处理,但解决不同问题。普通异步适用于轻量级任务,但存在强耦合、易丢失、无法削峰等问题;MQ则提供完全解耦、磁盘持久化、流量缓冲及自动重试等能力,适合高可靠、跨服务协作或大流量场景。决策时需权衡复杂度与需求:实时强一致用RPC,允许最终一致且量大用MQ,流量洪峰或需延迟处理时MQ是更优选择。核心区别在于MQ通过解耦和持久化保障系统稳定性,而普通异步仅提升响应速度。

2026-03-02 21:11:16 673

原创 吃透三高架构:高并发、高可用、高性能一本通

三高架构不是三个独立目标,而是一个动态平衡的系统。初级架构:堆机器、加缓存、拆服务。能解决大部分问题。高级架构:懂业务、知取舍、重治理、能兜底。理解三高之间的互斥关系,知道什么时候应该在一致性上妥协来换取性能,什么时候应该为了可用性牺牲成本。有完善的监控体系,不靠主观判断而靠数据决策。为每个可能的故障都想好了应对方案。这个转变不会一蹴而就。从初级开发到能独立设计系统需要时间,但通过刻意练习和系统学习可以大幅加速。希望这篇文章能帮你在这个过程中少走弯路。

2026-03-02 17:57:07 1308

原创 接口 vs 抽象类:别背概念了,聊聊其真实选用逻辑

本文探讨了接口与抽象类的实际应用场景及选择策略。接口适用于横向扩展,定义行为规范(如支付接口),实现类可来自不同层次;抽象类则用于纵向归纳,对有血缘关系的类提取共性逻辑(如支付网关基类)。两者可组合使用,接口面向调用方保证可替换性,抽象类面向实现方减少重复代码。选择依据是:用"是一种"关系选抽象类,用"能做到"关系选接口。避免滥用继承,优先考虑组合,仅在真实is-a关系时使用继承。

2026-02-26 23:56:30 928

原创 深入解析 Java 四大核心函数式接口

Java四大函数式接口核心解析 摘要:Java 8中的四大核心函数式接口包括: Function(转换)- 输入T返回R,对应Stream的map() Predicate(判断)- 输入T返回boolean,对应filter() Consumer(消费)- 输入T无返回,对应forEach() Supplier(生产)- 无输入返回T,对应generate() 关键特性: Function支持andThen/compose链式转换 Predicate提供and/or/negate逻辑组合 Consumer可

2026-02-24 14:14:36 902

原创 Spring Boot 多线程的 6 种用法,我都帮你踩过坑了

本文总结了SpringBoot中6种实现异步任务的方法:1. @Async注解(简单异步任务)2. 显式线程池(精细控制)3. CompletableFuture(任务编排)4. 事件监听+@Async(业务解耦)5. JDK原生线程池(非Spring环境)6. @Scheduled+@Async(定时任务)。重点强调生产环境必须配置自定义线程池,避免资源耗尽,并针对不同场景给出了选型建议:简单任务优先使用@Async+自定义线程池,复杂流程推荐CompletableFuture,同时要注意线程池参数的合理

2026-02-23 23:38:50 1126

原创 聊聊 Spring Boot 的“幕后推手“:spring.factories 与 @Conditional

本文深入解析了SpringBoot自动配置的核心机制,主要围绕spring.factories文件和@Conditional系列注解展开。spring.factories作为自动装配的"花名册",定义了配置类的注册规则;而@Conditional则提供了条件装配的开关,通过派生注解如@ConditionalOnClass、@ConditionalOnMissingBean等实现智能配置。文章详细阐述了二者的协作流程:启动时通过SpringFactoriesLoader读取配置类,再通过条

2026-02-23 23:25:42 760

原创 Java 包装器模式:告别“类爆炸“

摘要:装饰器模式(包装器模式)通过组合而非继承的方式动态扩展对象功能。以咖啡加料为例,通过定义统一接口、核心对象和抽象包装器,实现功能的灵活叠加。该模式避免了类爆炸问题,符合开闭原则,在Java IO流和Spring请求包装中广泛应用。与代理模式的区别在于目的不同:装饰器增强功能,代理控制访问。虽然提高了灵活性,但可能增加调试难度和初始化代码复杂度。该模式适用于需要运行时功能扩展的场景。

2026-02-19 21:07:03 610

原创 ZAB 协议深度解析:ZooKeeper 分布式一致性的核心

ZooKeeper核心共识协议ZAB(ZooKeeper Atomic Broadcast)详解 摘要: ZAB协议是Apache ZooKeeper实现强一致性的核心机制,通过两种工作模式保证数据安全:崩溃恢复模式完成Leader选举和数据同步,消息广播模式处理写请求。协议采用zxid(epoch+counter)保证事务顺序,通过FastLeaderElection算法选出包含最多已提交事务的节点作为Leader。ZAB确保两大安全属性:已提交事务永不丢失(基于多数派重叠原理)和未提交事务必须丢弃(通过

2026-02-18 23:29:21 1173

原创 RedLock:分布式锁的设计争议与实战踩坑

本文系统探讨了分布式锁的技术方案,重点分析了Redis的RedLock算法及其争议。首先阐述了分布式锁的必要性,指出单节点Redis锁的局限性。随后详细解析RedLock的核心原理——基于多数派投票的加锁机制,以及5个独立节点的部署要求。文章通过Redisson实践案例展示了RedLock的工程实现,并给出锁过期时间设置、唯一ID生成等实用建议。 针对RedLock的争议,文章深入剖析了Martin Kleppmann提出的三大质疑:时间假设的脆弱性、缺乏FencingToken保护机制,以及Redis设计

2026-02-18 08:22:23 743

原创 分布式 ID 生成方案总结

分布式ID生成方案对比与雪花算法详解 本文介绍了四种常见的分布式ID生成方案: UUID:简单但无序且占用空间大 数据库号段模式:有序但依赖数据库 Redis自增:高性能但依赖Redis持久化 雪花算法:本地生成、高性能、趋势有序 重点分析了雪花算法的实现原理: 64位ID结构划分(时间戳41位+数据中心5位+机器ID5位+序列号12位) 单机每秒可生成400万+ID 包含时钟回拨处理逻辑 雪花算法的优缺点: 优点:高性能、趋势有序、无外部依赖 缺点:时钟回拨问题、机器ID需提前分配、同一毫秒内不完全有序

2026-02-17 23:49:08 1412 5

原创 SimpleAsyncTaskExecutor:@Async 的默认异步执行器

Spring的SimpleAsyncTaskExecutor是一个基础异步任务执行器,其特点是每次提交任务都会创建新线程而非复用线程。虽然设计初衷是为了快速验证异步功能,但由于不支持线程复用、缺乏资源管控机制,在高并发场景下容易导致线程爆炸、内存溢出等问题。官方明确建议生产环境使用ThreadPoolTaskExecutor替代。该执行器仅适用于任务数可控的特定场景(如批处理作业、开发测试环境),使用时需特别注意并发限制设置。开发者应始终为生产环境配置具备线程复用、队列缓冲等特性的标准线程池实现。

2026-02-15 09:31:06 1468

原创 Spring Boot 异步任务深度解析:从入门到避坑指南

本文深入解析SpringBoot异步任务实现原理与生产级最佳实践。主要内容包括:1. 异步任务的核心价值(提升吞吐量、优化用户体验);2. 快速实现异步调用的三种方式;3. 原理剖析(AOP拦截器、线程池选择机制);4. 五大常见陷阱及解决方案(同类调用失效、线程池OOM、异常丢失等);5. 生产级线程池配置模板;6. 进阶技巧(多线程池隔离、优先级控制);7. 监控方案(Actuator集成、自定义指标)。特别强调必须自定义线程池、处理异常、拆分异步服务,并提供了完整的Checklist和架构演进路径。适

2026-02-15 08:58:12 904

原创 从单机到集群:Redis 高可用演进之路(深度解析主从、哨兵、Twemproxy、Codis 与 Redis Cluster)

Redis集群架构演进:从单机到分布式解决方案 摘要:本文系统梳理了Redis集群架构的技术演进历程。从最初的单机模式,到主从复制解决数据冗余,再到哨兵模式实现自动故障转移,直至Redis Cluster官方集群方案。文章深入剖析了每种方案的设计思想与技术权衡,包括主从模式的手动运维缺陷、哨兵模式的分布式共识机制、社区方案(客户端分片、Twemproxy、Codis)的创新与局限,以及Redis Cluster的去中心化P2P架构和哈希槽机制。通过对比分析不同方案的适用场景,为分布式系统选型提供了实践指导,

2026-02-14 15:23:25 1031

原创 238. 除了自身以外数组的乘积

这篇文章介绍了一个算法题目,要求计算数组中每个元素除自身外其他元素的乘积。题目要求不使用除法且时间复杂度为O(n)。作者给出了Java实现代码,采用双重循环暴力解法,虽然不符合最优时间复杂度要求,但能正确计算结果。文章还提到作者正在进行算法刷题计划,目标是完成300道题,目前已做到第158道,计划每天完成一道题以达成目标。示例展示了输入[1,2,3,4]和[-1,1,0,-3,3]对应的正确输出结果。

2026-02-14 14:22:30 148

原创 206. 反转链表

摘要:本文提供了一个Java实现的链表反转算法解决方案。通过定义ListNode类和reverseList方法,使用迭代方式反转单链表。示例展示了输入[1,2,3,4,5]反转后输出[5,4,3,2,1]的过程。代码包含完整的测试用例和运行结果,可直接执行。作者表示正在刷算法题(第157道),目标是完成300道,争取每天解决一道。

2026-02-14 11:37:55 146

原创 83. 删除排序链表中的重复元素

摘要:本文提供了一个Java解决方案,用于删除已排序链表中的重复元素,使每个元素只出现一次。通过使用哑结点(dummy node)简化代码,算法遍历链表,当发现重复值时跳过所有相同节点。示例展示了输入[1,1,2,3,3]输出[1,2,3]的运行结果。代码可直接运行,适用于节点数在0-300范围内的升序链表。作者表示正在刷算法题,目标完成300道。

2026-02-13 14:39:01 183

原创 82. 删除排序链表中的重复元素 II

本文介绍了一个删除排序链表中所有重复节点的算法。给定一个升序排列的链表,要求删除所有重复出现的数字,只保留不重复的节点。算法使用双指针法:prev指针指向当前有效节点的前驱,curr指针遍历链表。当发现重复节点时,跳过所有相同值的节点,将prev.next指向下一个不同值的节点。时间复杂度O(n),空间复杂度O(1)。示例输入[1,2,3,3,4,4,5]处理后输出[1,2,5]。代码提供了完整的Java实现,包括链表节点定义和测试用例。

2026-02-13 14:20:41 470

原创 61. 旋转链表

摘要:本文介绍了一个链表旋转的算法问题,要求将链表每个节点向右移动k个位置。通过计算链表长度并找到新的尾节点来实现旋转。给出了Java实现代码示例,包括链表节点定义和旋转逻辑。算法时间复杂度为O(n),其中n是链表长度。示例展示了输入输出结果,并提到作者正在进行算法题刷题计划,目标是完成300道题目。

2026-02-13 11:05:06 510

原创 25. K 个一组翻转链表

本文实现了一个链表分组翻转算法,将链表每k个节点一组进行翻转,剩余不足k个的节点保持原序。算法通过将链表分段存储到列表中,然后对每组进行翻转处理,最后重新连接节点。时间复杂度O(n),空间复杂度O(1)。代码示例展示了如何翻转k=3时的链表[1,2,3,4,5]变为[3,2,1,4,5]。该解法满足进阶要求,仅使用常数级额外空间。作者计划持续刷题,目标是完成300道算法题,目前进度153道,每天坚持完成一道题。

2026-02-12 15:30:53 318

原创 24. 两两交换链表中的节点

摘要:本文实现了一个链表节点两两交换的算法。给定一个链表,在不修改节点值的情况下,交换相邻的两个节点。算法使用哑节点简化操作,通过临时指针遍历链表并交换节点。提供了Java实现代码,包含链表节点定义和swapPairs方法,能处理空链表和单节点链表等边界情况。示例展示了输入[1,2,3,4]经过交换后输出[2,1,4,3]的正确结果。

2026-02-12 14:42:57 327

原创 Leetcode21. 合并两个有序链表

摘要:本文实现了一个合并两个升序链表的算法。通过创建哑结点简化操作,使用双指针遍历两个链表,比较节点值并按升序连接。当一个链表遍历完后,直接将剩余链表接入结果。算法时间复杂度O(n+m),空间复杂度O(1)。示例展示了合并[1,2,4]和[1,3,4]得到[1,1,2,3,4,4]的过程。代码采用Java实现,包含ListNode类定义和测试用例。

2026-02-09 16:55:59 235

原创 leetcode24两两交换链表中的节点 快慢指针实现

摘要:本文介绍了链表相邻节点两两交换的算法实现。通过创建虚拟头节点dummy,使用三个指针(pre、first、second)完成节点交换,时间复杂度O(n)。示例展示了输入[1,2,3,4,5,6]经过处理后输出[2,1,4,3,6,5]的正确结果。算法要求在不修改节点值的情况下仅通过交换节点完成操作,适用于0-100个节点的链表。代码采用Java实现,包含完整的测试用例和链表节点类定义。

2026-02-08 23:11:07 555

原创 leetcode19. 删除链表的倒数第N个节点

本文介绍了如何删除链表倒数第n个节点的算法实现。通过使用双指针技巧,一个快指针先走n步,然后快慢指针同步移动,当快指针到达末尾时,慢指针即指向待删除节点的前驱节点。文章给出了Java实现代码,包含链表节点定义和删除方法,使用虚拟头节点处理边界情况。算法时间复杂度为O(n),只需一趟扫描完成。作者还分享了个人刷题目标(计划完成300道算法题),建议在迷茫时通过练习算法来提升技能。

2026-02-08 21:53:55 253

转载 程序员的护城河是什么 ?

《35岁程序员的护城河:从技术到价值的蜕变》摘要:一位34岁程序员遭遇职场危机后,通过沉淀多年的技术经验实现了职业跃迁。文章揭示了程序员真正的竞争力在于:1)技术深度(快速定位核心问题的能力);2)质量安全意识(从事故中积累的防御性思维);3)技术业务化能力(将技术价值转化为商业语言);4)职业战略规划(主动构建影响力);5)系统化思维(可迁移的认知模式)。作者以亲身经历证明,资深程序员的价值不在于拼体力,而在于用经验构建系统稳定性,最终完成从"成本"到"资产"的转变

2026-02-04 09:47:36 47

原创 微服务场景下,如何实现分布式事务来保证一致性?

在准备阶段,任何一个节点的失败(或网络超时)都会导致协调者触发全局回滚。在网络不稳定的情况下,这可能会导致大量本可以成功的事务被“误杀”,造成不必要的回滚。那么,如果故障发生在阶段二呢?这里有两个值得深思的场景。

2026-02-03 22:18:33 753

原创 leetcode2. 两数相加

题目要求实现两个逆序存储数字的链表相加,返回表示和的链表。解法使用哨兵节点简化操作,遍历链表时处理每位相加及进位。示例:输入[2,4,3]和[5,6,4](表示342+465),输出[7,0,8](807)。代码实现了链表遍历、进位处理和结果构建,时间复杂度O(max(m,n)),空间复杂度O(1)。关键点:使用哨兵节点简化链表操作,正确处理进位情况。

2026-01-01 00:37:01 242

原创 LeetCode 148. 排序链表

本文实现了一个链表排序算法,通过插入排序的方式将单链表按升序排列。算法首先处理边界条件(空链表或单节点链表直接返回),然后逐个取出未排序节点插入已排序部分的适当位置:若节点值小于已排序头节点则插入头部,否则遍历找到合适位置插入中间或尾部。代码提供了完整的Java实现,包括链表节点定义、排序逻辑和测试用例,运行示例验证了算法正确性(如输入[2,1,3,5,4]输出[1,2,3,4,5])。该解法时间复杂度为O(n²),适合处理节点数在5×10⁴范围内的链表排序需求。

2025-12-31 17:21:21 240

数据结构(C语言第二版)严蔚敏PPT

数据结构(C语言第二版)严蔚敏PPT,需要的同学请拿走

2019-01-13

jshERP-master.zip

管理系统项目,springboot+mybatis,下载就可以跑起来。里面有所需要的各种文档,可数据设计表,可以跑着用

2020-08-05

数据结构《C语言版》清华大学出版社

数据结构《C语言版》清华大学出版社的教学PPT,需要的同学请拿走,谢谢

2019-01-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除