- 博客(37)
- 收藏
- 关注
原创 防重做对了,账却不平:一次「扣了 N 份、只加 1 份」的一致性事故
做活动、做交易、做积分时,大家第一反应往往是:「一定要防重,别多发。这句话没问题。防重是对的,账却对不上——玩家扣了 N 份材料,下游只加了 1 份奖励。本文用一个脱敏后的真实案例,把这类问题讲清楚:它不是「没做幂等」,而是幂等粒度和业务次数不在同一层。「做了防重」不等于「一致性做完了」。扣了 N,加了 1。把次数变成契约的一等公民让幂等键对齐批次而不是接口名用 N 份对账守住回归希望这篇能帮你在下次做兑换、发奖、积分联动时,少踩一次「防得很漂亮、账却不平」的坑。
2026-09-03 17:32:29
233
原创 # 黑怕巅峰对决(破 5 万 · 求 Star)
做这个站的时候,我就是个很喜欢 HipHop 的学生。刷到很多歌曲二选一,发现说唱几乎没人认真做,就自己下手实现了。从想法到能玩,再到 5 万人进来打过——这中间最爽的,不是技术名词,而是真人真的会点、会选、会把图发出去。现在只差你帮我举手一下。已经有超过 5 万人玩过。如果这篇对你有一点点帮助——哪怕只是开心了一下——麻烦给仓库点个 Star。开源项目最缺的,往往不是代码,而是愿意举手的人。黑怕巅峰对决 · HeiPaClub。
2026-08-25 14:51:48
707
原创 #上线一个多月,5 万人玩过:说唱对决小站 HeiPaClub,再求几个 Star ⭐
GitHub 仓库:[https://github.com/yiziff/heipaclub](https://github.com/yiziff/heipaclub) ← **求 Star,真的很需要**2. 觉得还行,就去仓库点 Star:[https://github.com/yiziff/heipaclub](https://github.com/yiziff/heipaclub)主播 **adbaby**、**小猴猫** 也在打——对阵图一截,传播比我写十篇更新日志都快。
2026-08-20 17:49:04
313
原创 大厂 AI Coding 面试大招
先画护城河,再让 AI 填海。Interface / Trait / 抽象类核心数据结构(Config、Result、Error)API 入参出参与错误语义这就是SDD(规格驱动)在面试现场的最小形态:规格是唯一真源,AI 必须贴着契约走,不能自由发挥把架构带跑。我先把接口和数据结构定下来。后面无论 AI 怎么生成,都必须符合这个入参出参,不会破坏整体架构。主动解释你为什么这样设计——例如Check返回而不是只返回 bool,是因为调用方需要做提示、打点和排障。
2026-08-14 17:04:20
249
原创 我如何用“规格锚点 + 验收清单”减少 AI 跑偏
规格锚点不是长文档,而是“不可协商”的 5~8 条规则。协议锚点:字段名、必填项、取值范围状态锚点:状态机(未购买 -> 已购买未领 -> 已领取)业务锚点:扣费、发奖、幂等异常锚点:错误码与触发条件它的作用是把“需求共识”从脑子里挪到文本里,让 AI 和人看到的是同一套约束。
2026-08-11 17:54:38
169
原创 独立开发:说唱淘汰赛网站被玩了5000+次,开源求Star
给你的本命 RapStar / Hit Song,办一场真正的说唱巅峰对决。灵感来自 MusicCup 一类「音乐淘汰赛」玩法,但我把它做成了更偏「黑怕圈」的完整站点:免登录、能试听、能分享对阵图,还带全站实时排行榜。上线之后没怎么大规模推,结果已经有超过 5000 人玩过。这说明一件事——大家其实很吃这种「轻量、上头、能截图发朋友圈」的小玩具。所以今天写这篇,一是给大家介绍一下项目,二是诚恳求个 Star:开源仓库现在还很安静,如果你觉得好玩或代码有参考价值,麻烦点一下 Star。
2026-08-06 11:09:30
5552
原创 AiCoding的流程推荐(个人总结)
每次开始新需求前,(不凭记忆)。用grep精准定位相关章节,提取规格摘要。目的:确保你参考的是最新文档,而不是脑海里“过时的印象”。判断该需求是否已有验收清单条目。没有则到卡点表,有则直接读取已有准则。目的:让“完成的定义”显式化、可追踪,跨会话也能快速恢复上下文。用格式写派单 Prompt,强制拆解前置条件、操作和期望结果。主 Session 开始实现代码。目的:BDD 描述格式能最大程度防止 AI 理解跑偏。判断改动的代码是否是(无外部依赖、无 UI、无网络)。是 → 写单测,走。
2026-07-22 16:19:24
256
原创 拆解 Agent Loop 的运行机制
Ch.02 The agent loop — 学习笔记基于 2026-07-09 与 AI 伙伴的 Ch.02 学习会话整理。技术栈:Java 8 · 示例代码在。
2026-07-17 17:01:40
337
原创 Ch.01一次 Tool Call 的完整链路
基于 2026-07-08 与 AI 伙伴的 Ch.01 学习会话整理。技术栈:Java 8 · 示例代码在。
2026-07-17 16:56:16
385
原创 Skill和MCP和Subagent 的选择
Skill 教 AI怎么做(最便宜);MCP Server 把执行隔离到外部(中等);Subagent 把推理隔离到另一个 AI(最贵)。永远从最轻的开始。
2026-07-16 15:35:28
374
原创 单元测试 vs 手工测试:以水印功能为例
│ 手工测试 / 视觉验收 │ ← 人眼:Logo位置、文字、S3真实链路│ 集成测试(未实现) │ ← @SpringBootTest + 真实 S3/DB│ Controller 层测试(未实现) │ ← @WebMvcTest + MockMvc│ Service 层单元测试 ✅ 已实现(3类12例) │ ← Mockito,纯内存│ Util 工具类测试 ✅ 已实现 │ ← 纯 JUnit,无依赖单元测试验证代码逻辑——快、可重复、能进 CI,适合覆盖边界条件和回归场景。
2026-06-13 21:12:21
421
原创 线上 Bug 排查与修复实录
唯一索引只应包含"身份"字段,不应包含"状态"字段。del_flag把状态加进唯一索引 = 允许同一身份存在多条不同状态的记录 = 反模式。表结构:UNIQUE KEY (identity_fields),del_flag 不参与唯一约束创建操作:先查是否存在(忽略 del_flag),存在则恢复,不存在才插入删除操作:UPDATE SET del_flag='2' WHERE identity_fields AND del_flag='0'
2026-06-09 14:36:33
277
原创 开源项目PR经历(Understand-Anything)
一个开源项目的 “good first issue”,17 个测试变 22 个,5 个文件,107 行增改。记录一下这次从看 issue 到提 PR 的完整过程。
2026-06-03 17:00:36
458
原创 aicoding所思所想
但在 Cursor 里,我只需要把错误日志高亮,它不仅分析了可能的原因,直接就在内置终端里生成了一段排查命令跑了起来。遇到同样的依赖报错,它直接越过源码,盯上了我的 CMakeLists.txt,然后极其笃定地告诉我:系统里装了两个版本的 Boost,链接路径串台了,找去了旧版,顺便还把修改好路径的代码块怼到了我脸上。Codex 看到这句“大白话”,立刻提取了“轻量推送”和“状态变更”的核心诉求,顺手给我推了 SSE 技术,还给出了结合 Redis Stream 的架构草图。这联想能力已经很能打了。
2026-04-09 20:49:04
229
原创 @Mock
Mock是 Mockito 框架的核心注解,用于创建模拟对象,实现对依赖的隔离,让单元测试不依赖真实的外部服务(数据库、网络等)。在 Spring Boot 项目中,可结合实现模拟对象的自动注入,或用@MockBean将模拟对象注入 Spring 上下文,满足不同测试场景的需求。
2025-12-01 11:13:30
360
原创 assertArrayEquals
是 JUnit 框架中专门用于的核心断言方法,主要解决了普通在数组比较上的局限性(普通比较数组时默认判断内存地址,而非数组内容)。该方法会逐元素对比两个数组的和,只有当数组长度相同且所有对应位置的元素都相等时,断言才通过;否则断言失败,测试标记为失败并抛出。
2025-12-01 11:05:06
440
原创 Spring Data JPA 是什么
是 Spring 生态中项目的核心子模块之一,它是对的封装与简化,目的是,让开发者以更简洁的方式实现数据访问逻辑(增删改查、分页、排序、复杂查询等),无需手动编写 JDBC、MyBatis 的 SQL 映射或 Hibernate 的 JPA 原生繁琐代码。简单来说:JPA 是一套,而 Hibernate 是 JPA 的主流实现;Spring Data JPA 则在 Hibernate 等 JPA 实现之上,做了更上层的封装,让持久层开发变得 “零实现类” 即可完成核心操作。
2025-11-28 11:52:34
423
原创 RPC 是什么
是的缩写,即,是一种。,无需手动处理网络通信、数据序列化 / 反序列化、传输协议等底层细节,大幅简化分布式系统中服务间的通信开发。举个通俗的例子:你在本地写了一个add(1,2)方法,调用后能得到 3;而 RPC 让你可以调用的add(1,2)方法,同样能拿到结果,整个过程中你感知不到网络传输的存在,就像调用本地方法一样。
2025-11-28 11:27:53
502
原创 保姆级安装nodejs的教程
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,让你可以在电脑上运行 JavaScript(不只是浏览器),常用于开发后端服务、工具脚本、前端工程化等。node:运行 JS 文件npm:Node 的包管理器(类似“应用商店”,用来安装第三方库)
2025-11-25 10:05:27
1011
原创 leetcode 56 合并区间
java编辑“先排序,再贪心合并”按起始位置排序 → 保证只需看前一个区间贪心策略:能合并就扩展,不能合并就新开时间效率高,逻辑清晰这是解决所有区间合并类问题的基础模板,务必掌握!
2025-11-25 10:01:35
713
原创 JDK8 保姆级安装教程(Windows 版)
至此,JDK8 已成功安装并配置完成,你可以开始使用记事本、IDEA、Eclipse 等工具进行 Java 程序开发。JDK8 的 Lambda 表达式、Stream 流等特性仍是 Java 开发的核心知识点,搭配合适的开发工具,就能快速上手 Java 项目开发啦。
2025-11-20 10:15:09
1601
原创 MySQL 5.7.44 详细安装教程(附环境配置与验证)
展开【MySQL Servers】目录,找到【MySQL Server 5.7.44 - X64】(确保选择与系统位数匹配的版本,此处以 64 位系统为例),点击组件右侧的右箭头 “>”,将其添加到右侧的 “Products/Features To Be Installed”(待安装产品 / 功能)列表中,确认组件选择无误后,点击【Next】。,其优势在于安装过程不依赖网络状况,组件完整且安装成功率更高。弹出组件安装对话框后,勾选 “我同意许可条款和条件”,点击【安装】,等待组件安装完成后点击【关闭】。
2025-11-20 10:12:48
2032
原创 560 和为k的子数组
/ Step 2: 暴力枚举所有 i < j,检查 s[j] - s[i] == k。把内层循环“查找有多少个 s[i] == s[j]-k” 从 O(n) 降到 O(1)// j 从 1 到 n(对应 s[1] ~ s[n])确保不会将自己的前缀和当成满足条件的前缀和。这里相当于对于这个暴力枚举的哈希表的优化。(所以不会重复计数)每次就是通过查看。子数组是数组中元素的连续非空序列。记录的是历史前缀和的出现次数。// i 从 0 到 j-1。有没有能够满足的前缀和的数据。所以要先查询再加入当前的。
2025-11-18 11:08:02
246
原创 redis 黑马点评day5p2
简单数值运算、无 null 需求 → 用int(高效、安全);需要集合 / 泛型、需要表示 null、需要对象方法 → 用Integer(满足对象特性)。装箱 / 拆箱是 “桥梁”,让二者可以无缝配合,但需注意Integer的 null 风险。以这个为例 为了防止自动拆箱所导致的 null出现空指针异常 使用这个方式。
2025-09-09 15:51:01
1620
原创 redis 黑马点评day5p1
这段代码中的核心目的是:在保证 “同一用户只能下一单” 的前提下,最大化并发性能—— 通过 “用户粒度的锁”,让同一用户串行执行,不同用户并发执行,兼顾了线程安全和性能。
2025-09-08 11:36:35
1247
原创 redis 黑马点评day4
不是 “一定要用”,而是 **“为了让测试结果准确,必须用”**。解决了 “线程池异步执行导致的耗时统计不准确、任务执行不完整” 的问题,是高并发场景下验证组件可靠性的 “标配工具”。要理解任务定义()和任务执行()的关系,以及Runnable的使用方式,我们可以把它拆解成 “做什么(定义任务)” 和 “谁来做、什么时候做(执行任务)Runnable是 Java 中表示 **“可执行任务”的接口,它只有一个抽象方法run(),作用是“定义任务的具体逻辑”**(即 “要做什么”)。
2025-09-07 19:51:08
1053
原创 reids黑马点评day3
穿透:查 “不存在的东西”,少量请求也能烦到数据库;雪崩:“大量缓存同时失效”,所有请求一起涌去数据库;击穿:“某个热门缓存失效”,所有请求都盯着这一个数据查数据库。@Service// 注入Redis模板(若已有则无需重复注入)@Resource// 定义缓存Key(规范命名:业务+数据类型,避免与其他缓存冲突)@Override// 1. 先查Redis缓存// 2. 缓存命中:将JSON字符串转为List<ShopType>,直接返回。
2025-09-07 14:16:04
341
原创 redis 黑马点评day2
你登录后,网站直接生成一个 “加密身份卡”(Token,含你的用户信息但加密),发给你(可以存在浏览器、APP 缓存里,不依赖 Cookie);你后续访问(比如 APP 调用接口),直接带上这张 “卡”,后台解密后就知道你是谁了。→ 不需要后台存 “档案”(Session),Token 本身就是完整的 “身份证明”,更灵活(支持 APP、多端登录)。将用户信息保存在中,核心目的是在当前请求处理的整个线程中,方便、安全地共享用户信息,避免频繁传递参数。
2025-09-04 20:08:49
368
原创 redis黑马点评day1
就是把转换成一种可以(最常见的是字节数组byte[]则是相反的过程,把存储的格式(byte[]。因为 Redis 是一个,无论 key 还是 value,它最终能存储和处理的byte[]。它不认识什么User对象、Product对象。首先要记住基本的操作指令 如基本的hash set sortedset的基本操作指令其次在redis的config中的序列化器 是为了将传入的key值和value值的字符串按照原本的格式存储 而不是由于jdk而将原本的字符切分成为了难以读懂的形式。
2025-09-03 21:02:46
372
原创 黑马学习javawebday12中 从cookie 令牌 fliter有感
fliter 也就是过滤器的作用 就是在前端发送请求的时候 传送给后端时 使用过滤器获取前端请求token里面的编码信息 并且通过解码判断是不是已登录的用户信息 来判断是不是要放行 使得后端可以调用controller层的代码来完成相应的各种操作。令牌就可以当做一个 身份证一样的id 是独一无二的 是通过你给的签名秘钥来通过一个指定的算法来编码 相应的 可以通过这个算法来解码 并将编码后的码存储在前端的请求体中的token携带着 每次请求传递给后端 让后端判断用户的身份。
2025-05-19 21:59:21
215
原创 学习mybatis的第一天
表示这是一个 MyBatis 的映射接口。我可以简单的将他理解为 这个注解就是表示将这个注解下面的接口注册 变成一个bean类 这样 我们在test包里面做测试的时候 就可以直接。标注了,因此会被 Spring Boot 注册为 Bean。自动注入 Spring 容器中的 Bean。然后就可以直接像创建一个对象一样创建。关于@mapper这个注解。}直接使用这个就可以了。
2025-05-09 20:56:28
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅