- 博客(1159)
- 资源 (1)
- 收藏
- 关注
原创 中国移动 Java 一面,直接秒了。。。
Java面试中常考察核心概念:Java优势包括跨平台、面向对象、强大生态、自动内存管理;劣势是性能开销和语法繁琐。依赖注入通过Spring容器管理对象依赖,降低耦合。MyBatis在SQL灵活性、动态SQL和结果映射方面表现优异。HashMap线程不安全,可用ConcurrentHashMap替代。String不可变,StringBuilder和StringBuffer可变,后者线程安全。hashCode()与equals()需同时重写以保持一致性,确保对象在哈希集合中正确存储和检索。
2025-08-12 05:15:00
311
原创 2025年软件开发的趋势
2025年软件开发将呈现AI深度融合、低代码普及和云原生主流化三大趋势。AI将重构开发流程,自动化代码生成、调试和测试,使开发者更专注于创新;低代码/无代码平台进一步降低开发门槛,加速应用交付;云原生技术成为标准,推动可扩展的云应用发展。同时,DevSecOps整合安全流程,伦理AI受重视,可持续开发理念兴起。远程协作工具升级,跨职能团队协作增强,API优先策略和CI/CD流程优化开发效率。边缘计算提升实时处理能力,个性化体验和以人为本设计成为UX核心。这些变革将全面提升软件开发效率、质量和用户体验。
2025-08-10 05:15:00
889
原创 点赞功能开发
本文介绍了点赞功能的开发方案。由于点赞业务具有高频特性,采用Redis处理并发问题,数据库通过定时任务同步数据。设计包含三个关键信息:点赞人、被点赞题目和点赞状态。Redis使用hash类型存储数据,string类型存储点赞数和用户标记。功能实现包括新增/取消点赞接口,通过操作Redis实现点赞状态切换和计数。同时为题目详情增加了点赞数量和当前用户点赞状态查询功能,直接从Redis获取数据。该方案有效解决了高并发场景下的点赞业务需求,通过Redis与数据库的配合确保了数据一致性和系统性能。
2025-08-09 05:15:00
999
原创 SpringBoot实现网页消息推送的5种方法
本文介绍了SpringBoot实现网页消息推送的5种方法,包括短轮询、长轮询、Server-Sent Events (SSE)等。短轮询简单但资源消耗大,长轮询减少无效请求但服务器资源占用高,SSE支持服务器单向推送。文章详细分析了每种方案的原理、实现代码、优缺点及适用场景,帮助开发者根据项目需求选择合适的技术方案实现实时消息推送功能。
2025-08-08 05:15:00
749
原创 URL地址末尾加不加”/“有什么区别
URL结尾是否带/会影响服务器解析和相对路径。带/通常表示目录,服务器会返回默认文件(如index.html),相对路径基于该目录解析;不带/可能被视为文件或触发重定向,导致相对路径解析错误。SEO方面可能被视为不同页面,建议统一规则并使用301重定向。API请求中带/与否可能导致不同结果,需遵循API规范。最佳实践是统一URL格式并测试API行为。
2025-08-07 05:15:00
221
原创 为什么用了 Stream,代码反而越写越丑了?
摘要: Java 8的Stream API虽能简化集合操作,但滥用可能导致代码可读性下降。常见问题包括:过度链式调用使逻辑模糊、懒加载特性导致执行不直观、调试困难以及不当并行化引发性能问题。优化建议:拆分长链式调用、明确终止操作、增强代码可读性,并谨慎评估并行流使用场景。合理运用Stream才能发挥其简洁高效的优势,避免“代码变丑”。(150字)
2025-08-06 05:15:00
979
原创 别只会写 SELECT,这10个 MySQL 技巧太香了
这篇文章介绍了10个实用的MySQL技巧,帮助开发者提升数据库操作效率。主要内容包括:使用JSON类型存储灵活数据、WITH ROLLUP进行分组统计、CASE WHEN条件统计、INSERT IGNORE避免重复插入、ON DUPLICATE KEY UPDATE实现插入或更新、FIND_IN_SET进行集合查询、GROUP_CONCAT合并多行数据、EXISTS优化子查询性能,以及ROW_NUMBER()实现分页功能。每个技巧都配有实际SQL示例,特别适合需要优化数据库查询和统计功能的开发者参考。这些技
2025-08-05 05:15:00
535
原创 别再用后缀判断文件类型了,来认识一下魔数头
本文介绍了通过文件魔数头识别文件类型的方法,相比传统后缀名方式更加准确可靠。文章首先解释了魔数的概念,即文件开头特定字节序列,作为文件格式的唯一标识。然后详细阐述了文件类型检测的原理和步骤,包括读取文件头、比较魔数等关键操作。最后提供了Java实现方案,包含文件类型枚举定义和工具类代码,支持通过文件输入流判断文件类型。该方法可有效识别JPEG、PNG、PDF等多种常见文件格式,具有实际应用价值。
2025-08-04 05:15:00
678
原创 Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?
Java泛型通配符T、E、K、V、?的作用与区别: 泛型作用:提供编译时类型检查,避免运行时类型转换错误,增强代码安全性和可读性。 常见通配符: T (Type):表示任意类型 E (Element):常用于集合元素类型 K (Key) / V (Value):表示Map的键值类型 ?(通配符): <?>:无界通配符,接收任意类型 <? extends T>:上界通配符,表示T或其子类 <? super T>:下界通配符,表示T或其父类 使用场景: 上界通配符用于安全读取
2025-08-03 05:15:00
273
原创 为什么CPU缓存偏偏是三级?少一级不够,多一级浪费?
CPU缓存采用三级结构是性能与成本的黄金平衡。初代单级缓存(16KB L1)无法满足需求,双核时代引入的二级缓存又出现共享冲突。三级缓存通过分层设计(L1 32-64KB、L2 256KB-2MB、L3 8-128MB)在90%命中率下实现最优延迟。两级缓存会导致多线程性能下降23%,而实验性四级缓存仅提升5%性能却增加18%面积和22%功耗。未来3D堆叠和新型存储材料可能优化缓存架构,但目前三级结构仍是效率最优解,如同快递网络:L1是楼下快递柜,L2是社区驿站,L3是区域分拣中心,少一级不够用,多一级不划
2025-08-02 05:15:00
462
原创 Spring Boot 实现文件秒传功能
摘要 Spring Boot实现文件秒传功能通过文件唯一标识(MD5/SHA256)验证文件是否已存在。核心原理是:计算文件哈希值→检查服务器→存在则直接引用,否则执行上传。代码实现包括:1)基础项目结构搭建;2)文件存储服务(计算MD5、检查重复);3)统一返回格式;4)控制器处理上传逻辑。该方案可显著减少网络传输和存储冗余,提升大文件上传效率。示例使用内存存储文件信息,实际应用需替换为数据库持久化。
2025-08-01 14:31:13
815
原创 SpringBoot实现单点登录(SSO)的4种方案
本文介绍了SpringBoot实现单点登录(SSO)的四种方案,重点讲解了基于Cookie-Session的传统SSO方案。该方案通过在服务端创建Session存储用户信息,并将SessionID通过Cookie设置在顶级域名下,使所有子域应用都能共享同一登录状态。文章详细展示了SSO服务端的实现代码,包括登录验证、Session管理和Cookie设置等核心功能,以及客户端应用的集成方式。这种方案适合传统Web应用场景,通过共享SessionID实现跨域认证。
2025-07-31 05:15:00
973
原创 你真的会用 return 吗?—— 11个值得借鉴的 return 写法
本文介绍了7种优化return语句的编码实践,提升代码可读性和健壮性:1) 使用卫语句提前返回异常情况;2) 避免return后冗余的else块;3) 直接返回布尔表达式;4) 减少仅用于返回的临时变量;5) 用三元运算符简化条件返回;6) 返回空集合而非null;7) 使用Optional处理可能缺失的值。这些技巧能有效减少嵌套、简化逻辑,使代码更清晰优雅。
2025-07-30 05:15:00
866
原创 Java 8 至 Java 23 版本特性对比表
Java版本特性演进及选型建议摘要: Java 8至23版本中,LTS版本(8/11/17/21)最为关键。Java 8引入Lambda/Stream等革命性特性;11标准化HTTP Client;17确立密封类;21正式推出虚拟线程。非LTS版本每半年更新,主要引入预览特性(如文本块、模式匹配)。生产环境建议选择LTS版本(8/11/17/21),其中新项目推荐17/21以利用ZGC和虚拟线程等现代特性。学习可使用最新版,但需注意预览特性的稳定性风险。版本选择需权衡稳定性、新特性需求及维护成本,LTS版本
2025-07-29 05:15:00
1433
原创 CompletableFuture使用的6个坑
摘要:本文介绍了Java 8中CompletableFuture使用时的6个常见陷阱及解决方案。主要包括:1)默认线程池(ForkJoinPool)可能导致资源耗尽,建议自定义线程池;2)异常处理需使用exceptionally或handle方法;3)超时处理在JDK8需使用get()捕获TimeoutException,高版本可用orTimeout;4)线程上下文传递问题,需手动传递ThreadLocal值;5)任务编排可能导致的回调地狱;6)资源释放问题。通过合理配置线程池、正确异常处理和超时控制,可以
2025-07-28 05:15:00
628
原创 多用户抢红包,如何保证只有一个抢到
本文探讨了在多用户抢红包场景下如何保证资源分配的线程安全问题。分析了三种解决方案:JVM本地锁(synchronized)适用于单机但无法分布式;MySQL行锁(SELECT...FOR UPDATE)确保隔离性但性能较差;Redis分布式锁适合高并发分布式环境但实现较复杂。通过比较各方案的优缺点,建议根据业务规模选择合适方案,小型系统可用本地锁,大型分布式系统推荐使用Redis分布式锁来保证红包分配的正确性和系统稳定性。
2025-07-27 05:15:00
512
原创 招行2面:为什么需要序列化和反序列?为什么不能直接使用对象?
序列化和反序列化是Java中用于对象持久化和网络传输的重要机制。序列化将对象转换为字节流(如存储到文件或网络传输),反序列化则将这些字节流还原为对象。主要用途包括:持久化存储、网络传输和实现深拷贝。Java通过实现Serializable接口实现序列化,使用transient关键字可阻止敏感字段被序列化。实际开发中需要注意serialVersionUID版本控制和继承关系中的序列化问题。本质而言,序列化解决了不同语言对象与持久化/传输载体间的兼容性问题。
2025-07-26 05:15:00
852
原创 Go 项目实战:全局异常处理
本文介绍了Go语言中的全局异常处理机制。Go采用显式错误处理通过返回error值,同时提供了panic/recover机制处理严重错误。文章展示了如何创建全局异常处理中间件,在HTTP服务器中捕获panic,确保程序稳定运行。通过统一的错误处理,可以提高代码健壮性和可维护性,避免程序因未处理异常而崩溃。
2025-07-25 10:16:22
280
原创 Java 实现 PDF 模板动态赋值与文档生成(多种解)
摘要:Java中实现PDF模板动态赋值与文档生成有多种解决方案,主要包括Apache PDFBox和Flying Saucer两种库。PDFBox可以直接处理PDF表单字段进行动态赋值,适合处理现有PDF模板;而Flying Saucer通过转换HTML模板为PDF实现动态内容填充,适合基于HTML的设计需求。两种方案各有优势:PDFBox操作原生PDF更灵活,Flying Saucer则利用HTML/CSS简化设计流程。开发者可根据项目需求选择合适的工具,如需要处理复杂表单推荐PDFBox,如需利用Web
2025-07-17 05:15:00
250
原创 Innodb加锁原则:Record Lock_Gap Lock_Next-Key Lock
摘要:InnoDB的锁机制主要包括记录锁(Record Lock)、间隙锁(Gap Lock)和临键锁(Next-Key Lock)。Next-Key Lock是Record Lock和Gap Lock的结合,采用前开后闭区间锁定范围,主要解决幻读问题。加锁规则遵循两个原则(基本单位是Next-Key Lock、只锁定访问对象)和两个优化(唯一索引等值查询退化为行锁、不满足条件时退化为间隙锁)。测试案例显示,在RR隔离级别下,对a=8加锁实际上会锁定(5,8]和(8,11]范围,导致插入5-11之间的值被阻
2025-07-16 05:15:00
813
原创 无脑字节面基
技术方案优化与通信协议选择 前端性能优化 分层加载:API设计分元数据与详情层,结合React Suspense/Vue异步组件实现异步注入 视觉优化:使用AST生成骨架屏,配合CSS动画和Intersection Observer实现渐进加载 缓存策略: 时效数据:Service Worker采用Stale-While-Revalidate模式 元数据:LocalStorage持久化存储 SSR优化:Next.js选择性注水,优先交互组件注水 大模型通信协议 SSE优势:HTTP/2复用、文本流式传输、内
2025-07-15 05:15:00
569
原创 面试官:如何解决按钮重复点击?这个问题挂了80%的人!
本文探讨了前端开发中按钮重复点击问题的解决方案。首先分析了问题场景和简单的防抖方案局限,进而提出通过loading状态管理的基础方案。针对代码复用问题,重点介绍了React中封装自定义Hook和通用Button组件的方法,实现自动加载状态管理。该方案具有零侵入性和自动处理的优势,使用方式与普通按钮一致,能有效防止重复提交请求和按钮多次触发。通过封装通用组件解决了重复代码问题,提升了开发效率和代码质量。
2025-07-14 05:15:00
282
原创 线上出现慢 SQL 怎么办?仅使用 EXPLAIN 就能解决所有慢 SQL?
摘要 线上慢 SQL 问题需从全链路解决:首先通过监控和报警及时感知问题;出现问题时及时限流或拉黑慢 SQL 避免风险扩散;分析时需区分是单条 SQL 慢还是整体性能问题,针对索引失效、深分页、数据量过大等不同原因采取对应优化措施;对于写入慢需考虑锁竞争问题,读取慢则关注索引优化;对于不可避免的报表类慢 SQL,可采用读写分离、缓存或定时任务等方案。EXPLAIN 只是分析工具之一,完整的解决方案需要结合系统监控、性能分析和业务优化。
2025-07-13 05:15:00
670
原创 一张表到底建多少个索引才是合适呢?
本文系统介绍了MySQL索引的分类、使用规范和数量限制。从应用层分为普通索引、唯一索引和联合索引;数据结构层分为哈希索引和B树索引。文章提出新建索引的四大原则:最左前缀匹配、高区分度列、不参与计算、尽量扩展而非新建。分析了MySQL如何使用索引优化查询,特别是对=、in、and/or的处理方式。最后指出理论上索引数量无固定限制,但实际应用中需权衡查询和更新性能,避免过多索引影响系统效率。强调索引设计要在应用需求和数据库性能间找到平衡点。
2025-07-12 05:15:00
596
原创 一口气讲完8种锁!乐观、悲观、可重入、公平,自旋、重量级、轻量级、偏向
摘要:8种常见锁机制解析 本文系统介绍了8种常见的锁机制,包括乐观锁与悲观锁、可重入锁与公平锁等。乐观锁通过版本号检测冲突(如AtomicInteger和MySQL版本控制),适合低冲突场景;悲观锁(如synchronized和ReentrantLock)则直接加锁防止并发修改。可重入锁允许同一线程重复获取锁,公平锁通过FIFO队列保证线程获取顺序。文章通过"菜市场买菜"的生动比喻,结合Java和MySQL的具体实现代码(如ReentrantLock构造函数设置公平性、SELECT FO
2025-07-11 05:15:00
837
原创 为什么不应该在事务中嵌套发送 MQ 消息和 RPC 调用?
摘要 在事务中嵌套发送MQ消息和RPC调用存在三大问题:破坏事务原子性(导致上下游数据不一致)、引发长事务(降低系统吞吐量)、下游反查不到未提交数据(形成死循环)。根本原因是数据库事务无法控制外部系统行为。解决方案包括:1) 事务提交后再发消息(如使用@TransactionalEventListener);2) 保证事务与消息的原子性(采用本地消息表+定时任务或RocketMQ事务消息);3) 避免反查(消息携带完整数据)。最佳实践是事务内只包含可靠的可回滚操作,推荐使用本地消息表方案兼顾可靠性与实现复杂
2025-07-10 14:09:56
523
原创 哈啰出行Java 一面,我扛住了!!!
文章摘要: 哈啰出行Java面试一面主要考察了JVM内存区域、垃圾回收机制、线程池类型、IOC/AOP原理等核心知识点。JVM内存分为元空间、虚拟机栈、本地方法栈、程序计数器和堆内存;垃圾回收算法包括标记-清除、复制、标记-整理和分代收集;常见线程池有ScheduledThreadPool、FixedThreadPool等5种类型;IOC通过容器管理对象依赖,AOP实现横切关注点。面试者还分享了实际项目中使用AOP进行日志记录的代码示例,通过@Aspect注解定义切面类,用@Pointcut和@Before
2025-07-10 05:15:00
1010
原创 双Token机制(Access Token + Refresh Token)安全高效
双Token安全认证机制实现方案 摘要: 本文提出了一种基于Access Token和Refresh Token的双Token安全认证机制。Access Token采用短有效期(30分钟)JWT格式,Refresh Token使用长效(7天)不透明字符串存储于Redis,并通过HttpOnly Secure Cookie传输。系统实现包括:1)登录接口生成双Token;2)令牌刷新接口验证设备指纹;3)网关过滤器自动处理Token过期刷新。该方案通过设备指纹绑定、滑动过期等安全措施,有效平衡了安全性与用户体
2025-07-09 05:15:00
1659
原创 Spring事务失效的9大场景,你踩过几个?
摘要:文章总结了Spring事务失效的9大常见场景:1)抛出检查异常未触发回滚;2)业务方法自行捕获异常;3)同类方法调用导致代理失效;4)使用final/static方法;5)非public方法;6)传播机制配置不当;7)多线程调用;8)未启用事务管理;9)数据库引擎不支持。针对每个场景提供了具体解决方案,如配置rollbackFor、避免异常捕获、拆分方法到不同类等。文章强调这些陷阱在实际开发中容易忽视,需特别注意异常处理、方法可见性和传播机制的正确配置。
2025-07-08 05:15:00
677
原创 50% 的 Java 程序员都不知道的 Jackson 高级用法!(附工具类封装)
Jackson高级用法解析与工具类封装 本文深入探讨了Java开发中Jackson库的实战应用,针对常见场景提供了专业解决方案: 基础转换:通过ObjectMapper实现对象与JSON互转,使用注解控制序列化行为 日期处理:配置JavaTimeModule统一日期格式,支持各种时间类型 复杂结构:利用泛型和TypeReference处理嵌套对象与集合类型数据 动态过滤:使用@JsonFilter和SimpleFilterProvider实现字段级别控制 文中还提供了完整的JacksonUtils工具类封装
2025-07-07 05:15:00
628
原创 一文详解五种常见请求 GET(查询)、POST(创建)、PUT(更新)、DELETE(删除)、PATCH(部分更新)的区别
本文详细解析了五种常见HTTP请求方法的区别: GET:安全且幂等的查询操作,参数通过URL传递,适合获取资源 POST:非幂等的创建操作,数据在请求体中,适合提交表单或创建资源 PUT:幂等的全量更新操作,需提供完整资源信息 DELETE:幂等的删除操作,通过URI指定要删除的资源 PATCH:非幂等的部分更新操作,仅需提供修改字段 关键区别在于语义、幂等性、安全性、参数位置及应用场景。合理选择方法可使API设计更规范,充分利用HTTP协议特性。
2025-07-06 05:15:00
704
原创 面试被问“你的缺点是什么?”该怎么答?
面试中如何巧妙回答"你的缺点是什么" 回答技巧: 选择与岗位核心能力无关的缺点 避免假缺点或笼统回答 结合具体案例,强调改进行动 使用"缺点+改进措施+积极结果"的句式模板 禁忌: 否定核心技能 暴露性格缺陷 缺乏解决方案 示例回答应展示自我认知能力和改进意识,如技术广度不足但已制定学习计划,或沟通不足但已建立确认流程。
2025-07-05 05:15:00
375
原创 Git 不要只会 pull 和 push,搞上 5 个提升效率的命令!
这篇文章介绍了5个提升Git效率的实用命令: stash - 临时保存未提交的代码改动,方便切换任务 reset --soft - 撤销提交但保留修改内容 cherry-pick - 复制特定提交到当前分支 revert - 撤销提交并保留完整历史记录 reflog - 查看并恢复误操作前的状态 每个命令都包含基本用法和进阶技巧,如stash可以保存未跟踪文件,revert可以撤销一系列提交等。这些命令能帮助开发者更灵活地管理代码版本,提高工作效率,特别适合处理紧急任务、修正错误提交等场景。
2025-07-04 05:15:00
256
原创 为什么阿里巴巴Java开发手册禁止使用Executors创建线程池?
阿里巴巴Java开发手册禁止使用Executors创建线程池,主要原因包括:1)资源耗尽风险,工厂方法预设的参数可能导致内存溢出或线程爆炸;2)缺乏精细控制能力。通过两个案例对比,展示了Executors工厂方法的问题和手动创建线程池的优势。手动创建线程池可提升资源可控性、业务适配性,并提供更优雅的异常处理、更强的监控能力和更便捷的问题排查。建议开发者根据实际业务场景,通过ThreadPoolExecutor手动配置线程池参数,包括线程数、队列容量和拒绝策略等,以实现更稳定可靠的线程池管理。
2025-07-03 05:15:00
495
原创 终于理解闭包是什么了(含防抖、节流)
闭包简明解析 闭包是函数和其定义时词法环境的组合,核心特点是函数能记住并访问创建时的作用域变量。类比书包:即使放学(函数执行结束),书包(闭包)仍保留着课本(变量)。闭包三大特性:访问外部变量、变量长期存活、数据私有化。 关键应用场景: 封装私有变量(如计数器模块) 回调函数保留上下文(异步请求) 性能优化:防抖(电梯式延迟响应)和节流(水龙头式限流) 防抖与节流通过闭包保存计时器/时间戳,实现高频事件优化。闭包避免了全局变量污染,是JavaScript模块化和状态管理的重要机制。
2025-07-02 05:15:00
1520
原创 Java 8 魔法:利用 Function 接口告别冗余代码,打造高效断言神器
Java 8函数式编程实战:利用Function接口优化数据校验 本文展示了如何通过Java 8的Function接口重构传统数据校验逻辑,实现代码精简和复用。以常见的ID有效性检查为例,传统方法会导致大量重复代码。通过定义通用的ensureColumnValueValid方法,利用SFunction参数化校验逻辑,将变化的部分作为参数传递,使相同校验逻辑可复用。该方法接受待校验值、属性提取函数、查询执行器和错误信息模板四个参数,实现了对任意实体类属性的统一校验。改造后的代码显著减少了重复代码量,提升了可读
2025-07-01 05:15:00
1134
原创 Spring Boot 封装 MinIO 工具
Spring Boot集成MinIO工具封装 该项目封装了MinIO分布式对象存储的Java工具库,简化了Spring Boot项目中与MinIO的集成。主要特性包括: 通过@EnableAutoMinio注解实现自动配置 支持从配置文件读取MinIO连接参数 提供内容类型枚举(ContentTypeEnums)用于文件上传 包含完善的配置读取组件(MinioProperties) 采用模块化设计,包含注解、配置、连接库等组件 使用方式简单,只需在Spring Boot启动类添加注解并配置MinIO参数即可
2025-06-30 05:15:00
573
原创 快手面试题:一次Insert操作,MySQL的几种Log的写入顺序?
MySQL INSERT操作涉及三种日志的写入顺序: Undo Log(记录事务前状态,用于回滚) Redo Log(prepare)(记录物理变更,确保持久化) Binlog(记录逻辑操作,用于主从复制) Redo Log(commit)(事务最终提交) 关键机制: 采用**两阶段提交(2PC)**确保Redo Log和Binlog一致性 崩溃时根据日志状态决定回滚或恢复 优化建议: 配置innodb_flush_log_at_trx_commit=1和sync_binlog=1确保数据安全 合理使用索引
2025-06-29 05:15:00
1647
原创 从零到百万并发:Java高并发核心编程揭秘,这些坑你踩过几个?
摘要: 《Java高并发编程核心问题解析》从实战角度剖析高并发场景下的典型问题与解决方案。以某电商双11订单服务崩溃为例,揭示线程池无界队列导致内存泄漏的致命错误,提出线程池参数配置黄金法则。通过StampedLock与传统锁的性能对比(10万次读操作耗时减少45%),展示乐观读模式的优化效果。最后介绍使用Arthas工具诊断线程阻塞的具体方法,包括监控方法耗时和追踪锁竞争。文章强调:合理的线程池配置、锁策略选择及监控工具运用是保障高并发系统稳定的关键。
2025-06-28 05:15:00
557
原创 订单超时自动关闭的方案
订单超时自动关闭方案综述 本文总结了四种实现订单超时自动关闭的技术方案: 定时任务轮询数据库:通过定时查询超时订单并更新状态,实现简单但存在精度和延迟问题; Redis过期监听:利用键过期事件通知,但存在延迟和可靠性问题,生产环境不推荐; Redis Zset延迟队列:利用有序集合存储订单和过期时间,内存操作高效但需处理重试机制; 消息队列延迟消息:如RocketMQ的分级延迟队列机制,通过修改消息属性和定时任务实现精准延迟。 每种方案各有优缺点,需根据业务场景、数据规模和可靠性要求进行选择,其中定时任务和
2025-06-27 05:15:00
831
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人