自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(210)
  • 收藏
  • 关注

原创 【黑马点评日记】项目中的UV统计实现:HyperLogLog百万数据实测,内存仅占14KB

摘要:本文介绍了使用Redis的HyperLogLog数据结构实现高效UV统计的方案。相比传统Set或数据库方案,HyperLogLog仅需14KB内存即可统计百万级UV数据,误差率仅0.24%。文章详细分析了HyperLogLog的核心原理、内存占用对比、代码实现示例,并给出了项目中的架构设计和业务层代码。该方案在保证统计精度的同时,内存消耗仅为Set方案的1/1000,是典型的空间换时间优化案例,适用于对精度要求不高的UV统计场景。

2026-05-11 23:18:18 484 5

原创 为什么微信发长视频模糊、有马赛克的根源,压缩画质

微信长视频传输模糊问题源于平台强制压缩机制,无论是否勾选"原图"都会进行有损处理。技术分析显示:H.264编码器通过调高量化参数导致宏块效应;码率被压缩至1-2Mbps(原视频需5-25Mbps);分辨率强制降至720p以下。解决方案包括:1)上传前优化参数(H.264编码、1080p、30fps);2)使用FFmpeg进行降噪和超分处理;3)改用网盘/邮件等替代渠道。该问题反映了即时通讯工具在传输效率与画质间的取舍,建议平台提供真正的无损传输选项。

2026-05-10 23:44:53 505 15

原创 【LeetCode刷题日记】面试官最爱的二叉树题:对称二叉树——递归+BFS双解法一网打尽

本文探讨了判断二叉树是否对称的两种解法。递归法通过比较左右子树是否互为镜像,满足三个条件:节点值相等、左子树与右子树镜像、右子树与左子树镜像。迭代法使用队列进行广度优先搜索,成对比较节点并检查对称性。两种方法均需处理空节点情况,确保结构对称性和数值一致性。代码示例展示了递归和迭代的具体实现,通过逐层比较节点值及其子节点关系来判断对称性。该问题考察了对二叉树遍历和镜像概念的理解。

2026-05-10 18:47:36 411 7

原创 2026 AI编程助手终极选型指南(Claude Code vs Codex vs Gemini):国内外智能体与大模型全景对比,性价比最高的选择

2026年,AI编程工具已经不再是“能不能用”的问题,而是“用哪个更划算、怎么组合更强”的问题。从2025年到2026年,这个领域经历了一场深刻而剧烈的变革:Coding成为AI唯一的压舱石,而商业模式的集体转向——从Coding Plan到Token Plan——则标志着整个行业从“烧钱抢入口”进入了“建立可持续商业模型”的新阶段。与此同时,工具形态也在快速进化。三款主流命令行AI编程工具——Anthropic的Claude Code、OpenAI的Codex CLI、Google的Gemini CL

2026-05-09 22:24:32 1461 18

原创 【LeetCode刷题日记】二叉树翻转:递归与迭代全解析

(欢迎来访)✨命运的结局尽可永在,不屈的挑战却不可须臾或缺!前言:我们今天学习的是二叉树的相关的算法题。摘要:本文介绍了翻转二叉树的两种主要方法:递归法和迭代法(BFS)。递归法采用前序/后序遍历,通过交换每个节点的左右子树实现翻转,时间复杂度O(n),空间复杂度O(h)。迭代法使用队列进行层序遍历,同样通过交换左右节点实现翻转,适合避免递归栈溢出。特别指出中序遍历的陷阱:若按常规写法会导致部分子树被翻转两次,需调整处理顺序。

2026-05-09 21:58:47 573 10

原创 【黑马点评日记】:用户签到功能详解——从Bitmap入门到避坑指南

本文详细介绍了黑马点评项目中用户签到功能的Redis位图实现方案。针对传统MySQL方案存在的数据量爆炸和内存浪费问题,提出使用Redis位图存储签到状态,仅需4字节/用户/月。文章重点剖析了签到功能实现中的五大关键点:Key设计策略、偏移量索引、空指针处理、位运算逻辑和无符号右移操作,并提供了完整的签到与统计连续签到天数的代码实现。通过对比MySQL和Redis方案的优缺点,强调了架构设计中的权衡思维,为高并发场景下的签到功能提供了高效解决方案。

2026-05-08 23:35:15 791 5

原创 【LeetCode刷题日记】一口气搞定三道层序遍历!从N叉树到二叉树,BFS核心思想一网打尽

本文探讨了二叉树层序遍历的三种变式问题:N叉树层序遍历、每层最大值查找和填充右节点指针。对于N叉树,通过遍历子节点列表替代二叉树的左右节点判断;查找每层最大值时需注意负数情况;填充右指针则通过记录前驱节点建立连接。三种解法均基于队列实现层序遍历,核心思想相似但处理细节不同。文章提供了Java代码实现,并强调了不同数据结构间的处理差异,展示了层序遍历的灵活应用。

2026-05-08 20:35:37 486 5

原创 3.45亿人的免费午餐终结:豆包开收500元月费,AI算力正在吃掉字节跳动

AI应用豆包推出最高500元/月的付费订阅服务引发热议,标志着国内AI免费时代或将终结。豆包收费主要针对高算力消耗场景,背后是字节跳动面临的沉重算力负担——日均120万亿Token调用量带来巨额成本。这一举动反映了行业趋势,与ChatGPT、Kimi等国内外AI产品的商业化路径相呼应。收费策略通过价格筛选重度用户,但同时也面临用户对产品价值的质疑。这场AI商业化的博弈中,厂商需在成本压力与用户体验间寻找平衡,而普通用户将面临"为生产力付费"的新常态。

2026-05-07 23:29:14 614 6

原创 【黑马点评日记】RedisGEO实战:黑马点评附近商铺功能

摘要:本文介绍了基于Redis GEO实现黑马点评项目附近商铺功能的技术方案。针对传统MySQL地理查询性能瓶颈,采用Redis GEO数据结构存储商铺ID和坐标,通过GeoHash算法实现高效距离计算与排序。详细解析了数据初始化、分页查询、距离计算等核心实现逻辑,并给出版本兼容、性能优化等解决方案。该方案显著提升了海量数据下的地理查询效率,为类似LBS应用提供了参考实现。

2026-05-07 23:22:01 635 1

原创 【LeetCode刷题日记】二叉树层序遍历完全指南:从基础到LeetCode实战一篇搞定BFS模板,秒杀4道经典面试题

本文深入讲解了二叉树的层序遍历(BFS)算法。主要内容包括:1)层序遍历的定义,即按树的层级从上到下、从左到右访问节点;2)与先序、中序、后序遍历的区别;3)使用队列实现的核心思想,包括算法步骤和手动模拟示例;4)分层输出的实现方法和重要性;5)边界情况的处理;6)时间/空间复杂度分析;7)常见应用场景如打印树形结构、求树高等;8)提供了完整的Java代码模板,并解释了关键数据结构;9)结合LeetCode题目(102、107、199、637)展示实际应用。文章通过图解和代码示例,帮助读者全面理解层序遍历的

2026-05-07 17:36:23 925 35

原创 【黑马点评日记】社交平台用户关注功能全解析Feed流相关操作

本文介绍了社交平台用户关注功能的完整实现方案。核心内容包括:1. 数据库设计使用tb_follow表存储关注关系;2. 实现关注/取消关注功能,通过Redis Set存储关注列表;3. 共同关注功能利用Set求交集实现;4. 采用推模式的Feed流方案,使用ZSet实现滚动分页推送。文章详细分析了各功能的技术实现要点,包括Controller层参数处理、Service层业务逻辑、Redis数据结构选择等,并对比了不同方案的优缺点。该实现兼顾了功能完整性和性能考量,适合作为中小型社交平台的关注系统基础架构。

2026-05-06 23:56:27 758 18

原创 每日热点:2026-05-05|Meta神经计算机颠覆架构,DeepSeek V4引爆645倍价差,全球AI算力陷入丹麦困境

摘要: 近期AI领域动态频出,Meta提出颠覆性的"神经计算机"概念,旨在让AI直接"长成"硬件,可能重塑现有计算架构。开源与闭源阵营竞争激烈,DeepSeekV4以645倍价差挑战GPT-5.5,同时国产算力适配取得突破。丹麦因电网瓶颈暂停数据中心接入,凸显AI发展的能源挑战。工具链方面,Cursor3和豆包MCP推动多智能体协作,提升开发效率。商业层面,OpenAI估值逼近8500亿,并与美国防部合作,标志AI进入国家级战略赛道。终端设备如AI眼镜进入"

2026-05-05 11:29:21 763 8

原创 从零构建高可用Agent:后端架构实战与避坑指南

文章摘要: 本文从后端开发者视角剖析生产级Agent系统的构建要点,指出80%的挑战在于工程实现而非Prompt调优。核心观点包括:1)Agent本质是状态机、工具集与决策循环的组合;2)推荐分层架构(接入层、编排层、记忆层、执行层),强调事件驱动编排与动态分支处理;3)记忆管理需分区存储(短期/工作/长期),避免全量输入LLM;4)工具调用需并行化、权限控制与降级策略;5)必备可观测性(链路追踪、行为记录、成本监控);6)多Agent协作应通过结构化黑板模式交互。文末总结避坑清单,如超时控制、死循环检测等

2026-05-04 22:32:14 573 5

原创 【LeetCode刷题日记】掌握二叉树遍历:栈实现的三种绝妙方法

本文介绍了使用栈实现二叉树三种遍历方式的迭代算法。前序遍历通过"根→右→左"的入栈顺序实现;中序遍历需要指针辅助,先一路向左压栈再处理节点;后序遍历采用"根→右→左"顺序处理后反转结果。三种方法对比:前序遍历访问与处理顺序一致,无需指针;中序遍历需要指针跟踪未处理节点;后序遍历通过反转前序变体实现。这些方法通过显式栈替代递归隐式栈,均能达到O(n)时间复杂度,是面试常考的二叉树遍历实现方案。

2026-05-04 22:22:11 485 1

原创 2026-05-03 每日热点:Cursor 3 发布,Agent 并行时代已来;别再提 SEO,大厂都在抢跑 GEO

AI技术圈五一动态速览:Meta开源Llama4参数细节,AI编程迈入Agent并行时代,Cursor3、TRAESOLO、ClaudeCode三强争霸;国内大模型调用量全球登顶,流量逻辑转向GEO优化;清华发布6G光电融合芯片;腾讯混元3D世界模型开启AIGW新时代;职业教育面临AI加速挑战。开发者需快速适应Agent编程,内容创作者须转型GEO思维,技术架构要预埋MoE支持。

2026-05-03 22:22:12 648 3

原创 【黑马点评日记】Redis高并发点赞系统实战:ZSet实现幂等与排行榜

【摘要】达人探店模块通过Redis ZSet实现高并发点赞与排行榜功能,解决三大核心问题:1) 利用ZSet唯一性保障"一人一赞"幂等性;2) 通过时间戳Score实现点赞时序存储;3) 结合MySQL的ORDER BY FIELD保持排行榜顺序。关键技术点包括:原子性更新(数据库行锁+Redis操作)、IN查询顺序控制、未登录用户处理等,最终在保证数据一致性的同时,显著提升系统并发能力。

2026-05-03 22:10:09 800 5

原创 【LeetCode刷题日记】一篇文章彻底吃透二叉树递归遍历——从调用栈到三种遍历

递归算法的三要素与调用栈原理解析 摘要:本文系统讲解了递归算法的核心三要素:参数与返回值、终止条件和单层递归逻辑。通过调用栈的视角,揭示了递归执行时栈帧压栈/弹栈的全过程,包括前序、中序、后序遍历的差异本质。文章以二叉树遍历为例,详细演示了递归执行时栈帧的变化规律,并指出常见错误如栈溢出、空指针异常的产生原因。最后提供了LeetCode二叉树遍历的标准递归实现,帮助读者建立递归思维的系统方法论。理解递归的栈机制是掌握复杂递归问题的基础,本文为递归学习提供了清晰的框架和实操指导。

2026-05-03 18:01:11 530 22

原创 【数据结构与算法分析】二叉树面试通关手册:遍历图解 · 分类对比 · 代码模板

本文摘要:深入浅出讲解二叉树核心知识,包括存储方式(链式/顺序)、遍历方法(前序/中序/后序/层序)和分类(满二叉树/完全二叉树/BST等)。重点解析三种深度优先遍历的特点:前序(根左右)适合复制操作,中序(左根右)天然有序,后序(左右根)适用删除场景。文章对比了各类二叉树的时间复杂度,推荐优先掌握普通二叉树和BST,并介绍了Java中TreeMap(红黑树)、PriorityQueue(堆)等实现。通过生活化类比(如文件夹操作)帮助理解遍历逻辑,为后续算法学习奠定基础。

2026-05-02 20:15:58 557 14

原创 【黑马点评日记】Redis秒杀:Stream消息队列实战及其他实现方式对比(List,Pub/Sub)

本文介绍了Redis在秒杀场景下实现消息队列的几种方案对比,重点分析了Stream消费者组模式的优势。主要内容包括: 核心方案对比 阻塞队列:单机版,简单但不可靠 Redis Stream:分布式版,支持ACK确认、消息重试和消费者组 Stream核心机制 消息持久化存储 消费者组负载均衡 Pending列表处理未确认消息 XCLAIM实现消息重试 秒杀场景应用 生产者用XADD写入订单消息 消费者组通过XREADGROUP获取消息 处理成功后发送XACK确认 未确认消息可由其他消费者接管 优势总结 可靠性

2026-05-02 13:49:01 519 27

原创 【黑马点评日记】异步秒杀:异步线程和阻塞队列以及Lua脚本的相关流程分析

本文深入分析了异步秒杀系统的实现流程,重点解析了异步线程与主线程的职责划分。系统采用三层防护机制:Lua脚本快速拦截重复请求(RedisSet)、分布式锁处理并发请求、数据库唯一索引兜底。通过阻塞队列实现生产消费模式,主线程负责校验和入队(2-3ms快速响应),独立线程池异步处理订单。关键设计包括:1)RedisSet与数据库双重校验;2)分布式锁保证并发安全;3)事务注解确保数据一致性。这种架构既保障了高并发性能(每秒数万请求),又通过多级防护机制确保了数据准确性,体现了"快速失败"和

2026-05-01 18:35:43 946 21

原创 小米放大招!100万亿Token免费送!深度解析MiMo Orbit创造者激励计划

小米推出"XiaomiMiMoOrbit百万亿Token创造者激励计划",提供100万亿Token免费额度,活动持续至2026年5月28日。该计划采用审核制,开发者需提交项目详情申请。Token可用于Cursor、ClaudeCode等主流AI开发工具,预计价值达千万级别。小米此举旨在收集真实开发数据、培养开发者生态并寻找优质项目案例。申请者需准备详细项目说明和证明材料,通过审核后Token将以订阅制或赠金形式发放。这是开发者零成本使用AI工具的重要机会,但需注意邮箱验证、审核标准和有效

2026-05-01 11:12:41 1296 7

原创 从零实现一个轻量级 RPC 框架:通信协议与动态代理的核心原理

本文手把手教你实现一个极简RPC框架,深入剖析RPC底层原理。从自定义TCP协议解决粘包问题开始,到动态代理屏蔽网络调用细节,再到反射与服务注册机制,完整演示了RPC调用的核心流程。通过Java原生序列化示例,展示了客户端代理如何将方法调用转为网络请求,服务端如何通过反射执行并返回结果。文章还探讨了序列化选型(JSON/Hessian/Protobuf)的优劣比较,并指出与生产级RPC框架(如Dubbo/gRPC)在注册中心、负载均衡等方面的差距。通过这个实践项目,开发者能透彻理解RPC框架的关键技术点:协

2026-04-30 23:20:32 857 46

原创 【LeetCode刷题日记】347.前k个高频元素

摘要:本文介绍了两种基于堆结构(优先级队列)的算法实现,用于解决"返回数组中出现频率前k高的元素"问题。方法一使用大顶堆,对所有元素进行排序后取前k个;方法二采用更高效的小顶堆,仅维护k个元素,通过不断替换堆顶来保留高频元素。两种方法都先用哈希表统计元素频率,再通过不同堆结构进行排序,最终时间复杂度优于O(nlogn)。小顶堆实现更为优化,仅需O(nlogk)时间复杂度,适合处理大规模数据。

2026-04-30 19:58:10 685 43

原创 【黑马点评日记】Redis+Lua+异步队列:高并发秒杀系统优化方案

《Redis+Lua+异步队列:高并发秒杀系统优化方案》 摘要:针对秒杀系统高并发场景,本文提出Redis+Lua脚本与异步队列结合的优化方案。核心思路是:1)通过Lua脚本原子化完成库存扣减和用户去重(3ms内);2)将后续订单处理转为异步任务,避免数据库瞬时压力。方案对比显示:同步模式导致数据库崩溃风险,而异步模式通过削峰填谷使数据库保持稳定写入(500QPS)。技术实现包括:Redis库存预热、Lua脚本校验、阻塞队列任务分发、独立消费者线程处理。该架构使Tomcat线程仅处理轻量级操作(2ms/请求

2026-04-29 22:52:56 1130 7

原创 2026年正在重塑技术格局的四大国际热点:LLM推理、RISC-V、AI Agent安全、量子退火

技术领域2026年关键趋势分析:1.大模型推理成本大幅下降,70B参数模型已可在单张显卡运行,边缘计算和API价格战兴起;2.RISC-V架构突破性进展,64核服务器CPU性能接近ARM,软件生态快速成熟;3.AI代理进入实际应用,但安全问题凸显,需建立新型安全沙箱机制;4.量子退火技术率先商业化,QUBO建模成为新兴技能。这些趋势已从概念验证转向实际应用,开发者需及时跟进技术演进,把握6-18个月的关键窗口期。(149字)

2026-04-28 22:37:38 756 94

原创 【黑马点评日记】Redis分布式锁终极方案:Redisson全面解析(含源码解析)

本文深入分析了Redis分布式锁的手动实现与Redisson解决方案的差异。手动实现存在五大问题:固定锁过期时间导致业务超时风险、不可重入性、低效的自旋等待、缺乏公平性保证、单点故障风险。Redisson通过自动续期机制、可重入锁设计、高效阻塞等待、公平锁实现和RedLock算法,全面解决了这些问题。文章详细介绍了Redisson的配置方法、核心原理(如Hash结构存储锁信息、WatchDog自动续期机制)以及MultiLock联锁机制,为高并发场景下的分布式锁应用提供了专业级解决方案。

2026-04-28 22:24:09 764 20

原创 【LeetCode刷题日记】239.滑动窗口最大值:单调队列解法(困难)

这篇文章详细讲解了滑动窗口最大值问题的解决方案。通过分析暴力解法和堆结构的局限性,提出了使用单调队列的优化方法。文章深入剖析了单调队列的设计原理,包括pop和push操作规则,以及如何维护队列单调递减的特性。通过示例数组[1,3,-1,-3,5,3,6,7]和k=3的动画演示,直观展示了窗口滑动时队列的变化过程。最后给出了完整的Java代码实现,包括处理边界条件和计算窗口个数的数学推导。这种单调队列的解法将时间复杂度优化到O(n),是处理滑动窗口最大值问题的高效方案。

2026-04-27 23:56:37 692 17

原创 【Redis实战篇 | Day04】Lua原子性优化Redis分布式锁:解决线程安全问题

摘要:本文分析了基于Redis的分布式锁初级方案存在的线程安全问题,主要由于锁超时自动释放时未进行身份校验。当业务执行时间超过锁过期时间(如GC、慢SQL等原因),会导致其他线程误删当前锁。解决方案包括:1)加锁时设置唯一标识(UUID+线程ID);2)使用Lua脚本实现原子化的锁释放操作,确保只有持有者能删除锁。文章详细介绍了Lua脚本的实现原理和代码示例,通过DefaultRedisScript封装脚本,实现高效安全的分布式锁管理。

2026-04-27 19:33:12 982 41

原创 【LeetCode刷题日记】150.逆波兰表达式求值

本文介绍了逆波兰表达式(后缀表达式)的计算方法。逆波兰表达式通过将运算符置于操作数之后,消除了括号需求且运算顺序明确。解题关键在于使用栈结构:遇到数字入栈,遇到运算符则弹出栈顶两个元素进行运算并将结果重新入栈。特别要注意除法和减法的操作数顺序问题(先弹出的是右操作数)。文章提供了Java实现代码,演示了如何处理加减乘除运算,同时强调了字符串比较应使用equals()方法而非==运算符。这种栈处理方法与二叉树后序遍历原理相通,是计算机科学中表达式求值的经典算法。

2026-04-26 21:29:31 698 34

原创 【LeetCode刷题日记】1047:双栈法与双指针法巧妙消除相邻重复字符

摘要:本文针对LeetCode 1047题"删除字符串中的所有相邻重复项"提出了两种解法。第一种使用Deque栈结构,通过压栈和弹栈操作消除相邻重复字符,最后反转剩余字符得到结果。第二种采用双指针法,将原数组模拟为栈,通过快慢指针实现原地修改,空间效率更高。两种方法的时间复杂度均为O(n),但双指针法将空间复杂度优化至O(1)。文章详细分析了两种实现的核心逻辑、性能差异和适用场景,并提供了完整的Java代码实现。

2026-04-26 18:01:27 554 7

原创 【Redis实战篇】初步基于Redis实现的分布式锁---基于黑马点评

本文探讨了分布式系统中单机锁的局限性及解决方案。在集群环境下,传统synchronized锁失效,因为不同JVM的锁监视器相互独立。作者提出使用Redis实现分布式锁,通过SETNX命令确保多服务器间互斥访问共享资源。文章详细分析了锁自动拆箱的NPE风险、动态锁名的实现方式,以及try-finally确保锁释放的重要性。最后展示了如何在订单业务中应用Redis分布式锁,强调正确释放锁避免死锁的关键性。该方案有效解决了集群环境下的并发安全问题,为分布式系统开发提供了实用指导。

2026-04-25 22:03:27 847 25

原创 【LeetCode刷题日记】20.有效的括号

这篇文章讲解了如何用栈结构判断括号字符串的有效性。题目要求判断包含三种括号(圆括号、方括号、花括号)的字符串是否有效,即左括号必须按正确顺序闭合。作者通过示例详细分析了匹配过程:遇到左括号时将对应右括号压栈,遇到右括号时检查栈顶是否匹配。文章指出了三种失败情况(栈未空、栈为空或栈顶不匹配)和成功条件(遍历完栈为空),并给出了Java实现代码,使用Deque模拟栈操作。这种方法巧妙地通过预存对应右括号简化了匹配判断,时间复杂度为O(n)。

2026-04-24 23:38:40 523 15

原创 【LeetCode刷题日记】225.用队列实现栈--三招实现栈操作(多种思维)

本文探讨了用队列实现栈操作的三种方法。重点分析了双队列实现方案,通过que2作为辅助队列,在push操作时将que1元素转移到que2后交换队列,确保新元素始终位于队首(栈顶),实现先进后出特性。该方法push操作需O(n)时间,pop/top操作仅需O(1)时间。文章还对比了单向队列与双端队列的实现差异,指出双端队列可通过旋转操作更高效地实现栈功能。最后给出了Java实现的三种代码示例,包括双队列、单队列和双端队列方案,并比较了不同队列接口的操作特点及异常处理机制。

2026-04-24 23:08:29 652 5

原创 【Redis实战篇】秒杀系统:一人一单高并发实战(synchronized锁实战与事务失效问题)

摘要:本文针对电商秒杀系统中的"一人多单"问题展开分析,提出通过悲观锁实现用户限购的解决方案。文章详细剖析了synchronized锁与数据库悲观锁的差异,并指出在Spring单例模式下使用synchronized的局限性。重点探讨了锁粒度优化方案,通过userId.toString().intern()确保相同用户使用同一把锁,同时解决了事务与锁顺序导致的并发问题。最终方案结合AopContext.currentProxy()保证事务生效,并引入commons-pool2管理Redis

2026-04-24 20:54:25 674 58

原创 【黑马点评日记】高并发秒杀:库存超卖与锁机制解析

【摘要】本文探讨了高并发环境下优惠券秒杀系统面临的库存超卖问题及其解决方案。通过模拟200线程抢购100张优惠券的场景,发现数据库库存出现负值(-9),订单数量异常(109)。原因在于线程竞争导致并发查询和扣减不同步。文章对比了两种主流解决方案:1)悲观锁(for update),通过独占锁确保数据一致性,但性能较低;2)乐观锁(基于版本号或库存值),利用CAS机制实现无锁并发,性能更优但存在失败率。此外,还列举了6种扩展方案,包括Redis原子操作、消息队列削峰等。最终建议秒杀场景优先采用乐观锁配合Red

2026-04-23 23:45:54 1024 75

原创 【LeetCode刷题日记】119.最长连续序列(字节面试题最新)

摘要:本文分享了一道字节跳动的面试题——寻找未排序整数数组中最长连续序列的长度。题目要求时间复杂度为O(n),传统排序法(O(nlogn))不符合要求。核心解法是使用HashSet去重并实现O(1)查询,通过判断当前数字是否为序列起点(即num-1不存在),然后向后延伸统计序列长度。相比排序法(时间换空间),哈希表解法以空间换时间,满足O(n)复杂度要求。文章提供了两种实现代码,并解释了哈希表快速查找的原理。

2026-04-23 19:14:23 583 20

原创 【LeetCode刷题日记】23:用栈实现队列

摘要:本文介绍如何使用两个栈实现队列功能。通过维护输入栈(stackIn)和输出栈(stackOut),在push操作时直接压入输入栈,pop/peek操作时若输出栈为空则将输入栈元素全部转移至输出栈,从而实现队列的先进先出特性。关键点在于延迟倒腾策略,保证每个元素只被转移一次,使操作均摊时间复杂度为O(1)。文章包含完整Java实现代码,展示了push、pop、peek和empty等核心方法的实现逻辑。

2026-04-22 23:51:13 568 4

原创 【数组结构与算法分析】一篇搞懂:栈与队列的底层实现原理与接口体系

文章摘要: 本文系统讲解了Java中栈、队列及其实现方式。栈(LIFO)推荐使用Deque接口的ArrayDeque实现,而非遗留的Stack类;队列(FIFO)可通过Queue或Deque实现,ArrayDeque因其数组结构性能更优。详细对比了数组与链表实现栈的差异(数组连续内存快,链表无容量限制),并介绍了优先级队列PriorityQueue和线程安全的阻塞队列(如ArrayBlockingQueue)。强调ArrayDeque是多场景下的最佳选择,既能高效实现队列/栈,又避免LinkedList的额

2026-04-22 20:25:31 778 100

原创 深度揭秘:JDK 21 虚拟线程原理与性能调优实战

摘要: 本文深入剖析Java虚拟线程(JDK21)的核心原理与高并发实践。通过JVM源码解析,揭示其M:N调度模型与堆内存栈布局,对比传统线程在资源消耗与性能上的显著优势。文章提供百万级并发实操方案,包括正确创建方式、性能压测数据(吞吐量提升37%)及关键调优参数(如避免synchronized阻塞)。结合结构化并发与调试体验改进,指出虚拟线程适用于IO密集型场景,并给出迁移建议与未来趋势展望,助力开发者高效应对高并发挑战。

2026-04-21 23:57:48 1013 52

原创 【黑马点评日记03】秒杀场景必备:全局唯一ID生成策略及秒杀下单逻辑

本文介绍了在分布式环境下生成全局唯一ID的必要性及实现方案。文章首先分析了秒杀场景中数据库自增ID的不足,提出了Redis自增+时间戳的解决方案,详细讲解了位运算合并时间戳和序列号的技术原理。重点阐述了黑马点评项目采用的Redis自增策略,包括三种实现方式对比、核心代码示例及性能优化建议。同时,文章还探讨了分布式环境的特点、面临的问题,以及优惠券秒杀业务的数据表设计和下单流程实现。最后指出了当前方案存在的超卖、并发控制等缺陷,为后续优化改进奠定了基础。

2026-04-21 23:52:09 518 60

空空如也

空空如也

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

TA关注的人

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