- 博客(149)
- 资源 (10)
- 收藏
- 关注
原创 MyBatis-Plus 乐观锁,不加数据库锁,通过版本号比对来检测并发冲突(如:余额变更、库存变更)
MyBatis-Plus乐观锁通过版本号比对实现并发控制,核心原理是在更新时自动添加版本号条件。配置需要注册拦截器并在实体类添加@Version注解。使用时需先查询再更新,支持updateById等MP方法。相比悲观锁,乐观锁性能更高但需处理冲突,适合读多写少场景。建议结合重试机制(如@Retryable)处理冲突,高并发场景可搭配Redis预扣库存。注意必须从数据库读取version值才能生效,直接构造对象更新会导致乐观锁失效。
2026-03-11 09:55:21
57
原创 拼多多 “砍一刀”算法,怎么防止被刷破产?90% 的人死在了“最后 0.01 元”
拼多多的"砍一刀"活动背后暗藏精妙算法:通过动态定价模型(基于用户价值权重)和芝诺悖论设计,确保金额无限接近0却难以达成。系统架构采用微单位存储、本地缓存前置等技术应对高并发,同时结合设备指纹、行为分析和图灵测试防范黑产。当金额耗尽精度时,产品会切换为金币/碎片模式延续游戏。这套机制完美平衡了获客成本与用户体验,本质是技术与心理学的商业结合。
2026-02-05 17:10:03
877
原创 支付回调兼容JSON/XML/FORM
本文介绍了一个抽象类AbstractPageEndpoint,用于处理多种格式的HTTP回调请求。该类提供了统一的响应格式化方法write(),能够根据请求内容自动选择JSON或文本格式返回。主要功能包括:处理JSON/XML/FORM等多种数据格式的回调请求;支持GET/POST方法;通过路径变量区分交易类型、场景和渠道;提供设备通知、退款通知、预授权完成通知等特定业务接口。该类采用响应式编程模式,返回Mono<Void>类型,确保响应处理的统一性和灵活性。
2026-01-22 15:10:47
42
原创 创建唯一索引但存在NULL
UPPER( TRIM( third_merchant_code )) -- 统一大小写和去除空格。CONCAT( channel_code, '|||', -- 使用不易冲突的分隔符。) VIRTUAL COMMENT '非空商户号唯一键';
2026-01-21 16:42:40
173
原创 拼多多二面挂了!问 “支付接口怎么防重”,我答“先查后写”,面试官让我出门左转。
为什么面试官听到“先查后写(Check-Then-Act)”会发飙?因为在高并发下,数据库的读写是有时间差的。即使前端做了按钮置灰和防抖,也只能防君子防不住“网络抖动”或“黑客抓包重放”。技术面试考的不是你会写多少 if-else,而是你对“数据安全”有没有敬畏之心。能用数据库行锁解决的,别搞复杂的分布式锁;能用状态机解决的,别强依赖 Redis。这套Token 防手抖 + 状态机防并发 + 索引兜底的组合拳,就是架构师的标准答案!
2025-12-31 09:17:47
424
2
原创 为什么我们还在害怕修改表结构?
《MySQL大表字段修改完全指南》针对500万级数据表提供了安全高效的字段修改方案。文章对比了普通修改与高级在线修改两种方法:普通DDL适用于小表或维护窗口,操作简单但会锁表;高级方案(Online DDL、pt-online-schema-change、影子表迁移)支持无锁修改,适合大表在线操作。实战案例展示了500万数据表字段改名过程,仅需2分钟完成。指南还包含操作类型选择矩阵、生产环境检查清单、性能优化技巧及常见陷阱预警,强调根据业务规模、技术能力和风险承受度选择合适方案,并推荐了Percona To
2025-12-16 11:31:05
872
原创 华为云服务器的磁盘扩容笔记
华为云服务器磁盘扩容操作指南 控制台操作: 登录华为云控制台,找到目标ECS服务器 在云硬盘页面将磁盘从100GB扩容至150GB 完成支付后等待状态变为"可用" 系统内操作: 使用growpart扩展分区至150GB 根据文件系统类型执行resize2fs(ext4)或xfs_growfs(xfs) 验证扩容结果(df-h和lsblk) 特殊注意事项: 存在swap分区时需先关闭swap并删除分区 必要时使用partprobe重新读取分区表 建议操作前创建系统盘快照 扩容完成后推荐重启
2025-11-25 09:35:15
804
原创 Qoder 全栈Ai工具
在AI技术爆发的时代,开发者亟需一个能够快速将创意转化为实际应用的平台。Qoder应运而生,作为一个专为AI应用和智能体开发优化的全栈Web IDE与部署平台,它彻底改变了开发者的工作方式。点击按钮即可生成可公开访问的URL,让AI应用快速上线。Qoder是AI开发者的理想选择,尤其适合构建智能体、AI增强型Web应用或需要快速迭代原型的团队。:随着AI开发复杂度的提升,专注于业务逻辑而将底层交给平台,将成为行业标准。Qoder并非通用云端IDE,而是专注于AI应用开发的高效平台。
2025-10-16 16:19:34
573
原创 nginx 配置账户密码认证
需要注意的是,由于HTTP Basic认证只是通过Base64编码的方式发送用户名和密码,所以它并不是一种安全的认证方式,可以使用HTTPS协议来加密传输。另外,建议使用复杂的密码,并定期更改密码,以提高安全性。现在,当客户端尝试访问受保护的资源时,Nginx会弹出一个对话框,要求输入用户名和密码。如果输入的用户名和密码与.htpasswd文件中存储的匹配,Nginx会允许客户端访问受保护的资源。这个命令会重新加载Nginx的配置文件,以便Nginx可以使用新的配置进行认证。
2025-08-29 14:43:22
308
原创 skywalking 原理
Apache SkyWalking是一款分布式追踪与监控系统,其核心原理基于无侵入式数据采集和实时分析。通过字节码增强技术,Agent自动注入应用并收集调用链(Traces)和指标数据,通过上下文传播(TraceID)串联分布式请求。OAP服务器对上报数据进行流式聚合与分析,计算关键指标(如P99、Apdex)并构建服务拓扑图,最终存储至Elasticsearch等数据库。UI端通过GraphQL查询OAP,实现多维可视化展示。整个架构通过异步处理与流式计算平衡性能与功能,实现低于10%的资源开销,为微服务
2025-08-27 16:59:23
1008
原创 10分钟快速搭建 SkyWalking 服务
SkyWalking 是什么?FROM分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
2025-08-26 17:42:16
925
原创 Linux安装nacos 启动报错解决: which: no javac in
文章摘要:该报错信息显示系统缺少Java环境变量配置。解决方法包括:1)通过which、ll命令查找JDK安装路径;2)编辑/etc/profile文件配置JAVA_HOME等环境变量;3)执行source命令使配置生效;4)使用startup.sh启动服务后,通过查看日志和端口状态确认启动情况。关键步骤是正确设置JDK路径并更新环境变量,适用于JDK8及以上版本的环境配置问题。
2025-07-30 14:12:02
658
原创 mybatis-intercepts 实现敏感信息加密和解密
本文介绍了一种基于MyBatis拦截器的字段加解密实现方案。主要包含以下内容: 定义@FieldEncrypt注解用于标记需要加密的字段,支持类、字段和注解类型目标。 实现FieldEncryptor工具类提供加解密方法,通过反射处理带有注解的String类型字段。 配置EncryptorProperties类管理加密密钥。 开发EncryptInterceptor拦截器,在INSERT/UPDATE操作时自动加密标记字段。 开发DecryptInterceptor拦截器,在SELECT查询时自动解密结果集
2025-06-24 11:04:24
435
原创 Pagehelper 进行分页的时候,传入错误的分页页数,也可以返回数据
摘要:使用MyBatis Plus的PageHelper分页时,若传入错误页码仍能返回最后一页数据,这是PageHelper的"合理性检查"机制(reasonable=true默认开启)所致。该机制在请求页码超出总页数时自动返回末页数据以避免空白页。可通过全局配置pagehelper.reasonable=false或代码中setReasonable(false)来关闭此功能,此时超出页码将返回空列表。该设计旨在优化分页体验,开发者可根据需求灵活配置。
2025-06-23 16:49:06
442
原创 logback 日志归档,解决主日志和归档日志分别定义不同的周期
有人建议写cron脚本,定期清除,不是我想要的,因为类似的服务有好几套/每套7-8个,我希望logback内部完全搞定。主日志保留了好几十G,虽然归档日志每天都有按日期/按大小归档到指定路径,并进行压缩,这样的情况还是得到期清理日志。这样主日志保留3天,方便查看,归档日志保留7-15天,达到了预期效果!
2025-05-13 15:10:23
343
原创 Java生成多层ZIP炸弹代码
该代码生成的 ZIP 文件在解压时会触发多层递归解压操作,而最内层的文件看似很小(约100字节),实际解压后会迅速膨胀到10MB。结合多层嵌套,能有效干扰缺乏防护的爬虫系统。解压内层 ZIP 会重复这个过程,直到最内层的 10MB 文件被释放。:通过循环逐层包裹 ZIP 文件,每层包含下一层的 ZIP 数据。:请勿在非受控环境测试此代码,可能导致系统资源耗尽。级别压缩重复数据(全0),生成极小的压缩文件。:仅限教育用途,实际使用可能违反法律或服务条款。:生成更大数据时需改用流式写入,避免内存溢出。
2025-05-12 09:28:29
373
原创 MCP(Model Context Protocol,模型上下文协议)
MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 公司于 2024 年 11 月推出的开放标准协议,旨在解决大型语言模型(LLM)与外部数据源、工具之间的通信问题,打破数据孤岛限制,构建开放互联的 AI 生态系统。例如,用户可通过 Slack 触发任务,整合 Google Maps 的位置数据、OpenTable 的预订功能,并调用 Memory 服务器存储用户偏好,最终生成个性化建议。MCP 通过标准化协议,使 AI 能直接调用最新数据源,生成更准确的回答。
2025-05-09 14:10:13
521
原创 一个基于Maven的快速、高效java代码生成插件
高效开发:通过定义 JSON 或 Avro 文件,自动生成代码和数据库表,减少手动编写重复代码的时间。* 3、编写 Dao 和 Mapper XML,并定义基础的CRUD方法。* 6、中途还得定义CRUD对应的 Req 和 Resp 对象。标准化:生成的代码结构符合最佳实践,确保代码的一致性和可维护性。* 4、定义 Service 和 ServiceImpl。1、定义一个描述用户收货地址的 Avro (JSON)文件。自动化:自动创建数据库表,减少手动执行 SQL 脚本的步骤。1、定义Avro文件。
2025-04-25 15:31:56
461
1
原创 AI 之 LLM(大语言模型)是如何生成文本的!
看完这篇,LLM从输入到输出的“魔法”流程你总算搞清楚了吧?别再只是当个“AI用家”了,懂点门道,下次跟人聊AI也能硬气地说:“生成文本?小意思,我连Transformer怎么跑都知道!”当然,这只是AI世界的入门课,想真正在这个领域站稳脚跟,还有更多硬核知识等着你去啃。怎么样,敢不敢给LLM丢个复杂问题,测试一下你刚学的“理论”?
2025-04-11 09:21:49
1488
原创 到底该不该用多表关联!
在数据库设计中使用多表关联(JOIN)是否合理,需要结合具体场景、数据规模、性能需求和技术架构来综合判断。需要保证数据一致性(如银行交易、订单管理),关联查询能避免数据冗余,确保ACID特性。需要跨表聚合统计(如报表中的多维度分析),关联比应用层分步查询更高效。:预计算宽表、列式存储(如ClickHouse)、数据仓库分层建模。通过ETL工具定期构建数仓宽表(如每日凌晨生成报表宽表)。写模型保持规范化(关联),读模型通过异步同步构建宽表。关键路径上频繁执行的JOIN(如C端产品详情页)。
2025-04-09 09:27:42
436
原创 Mysql 之 Undo Log/Redo Log/Binlog日志实现事务ACID
在深入理解Undo Log、Redo Log和Binlog之前,首先需要明确事务的ACID特性,这些特性是确保数据库操作可靠性和一致性的基石原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不会出现部分完成的状态一致性(Consistency):事务的执行必须使数据库从一个一致性状态转变到另一个一致性状态,确保数据的完整性隔离性(Isolation):指在多事务并发执行时,一个事务的操作对其他事务的影响程度。它确保事务之间的操作是相互独立的,避免并发带来的数据不一致问题。
2025-04-01 14:03:10
962
原创 如何解决TCC的空回滚和悬挂?
TCC是一种分布式的事务的方案,将一个事务分成了TRY-CANCEL-CONFIRM三个阶段:在TCC中,存在着两个比较关键的问题,那就是空回滚和悬挂的问题。
2025-04-01 10:27:47
604
原创 VisualVM 深入分析与详细介绍
VisualVM 是一个功能强大的、免费的、开源的Java应用程序性能监控和分析工具。它集成了多个JVM监控工具的功能,提供了一个统一的界面来监控和分析多个JVM实例。以下是VisualVM的详细介绍和使用方法。
2025-03-25 11:14:02
1428
原创 浏览器指纹(Browser Fingerprinting)
浏览器指纹是一种强大的用户追踪技术,具有高度的唯一性和隐蔽性。虽然它在广告、反欺诈等领域有广泛应用,但也带来了隐私泄露的风险。用户可以通过使用隐私工具、禁用JavaScript等方式减少被追踪的可能性。
2025-03-19 17:26:04
2446
原创 本地部署DeepSeek+DiFy平台构建智能体应用
RAG(Retrieval-Augmented Generation)检索增强生成是一种将外部知识检索与大语言模型生成能力结合的混合架构。其核心思想是通过检索外部知识库(如文档、数据库、网页等),弥补大模型静态训练数据的局限性;在生成答案时直接依赖检索到的证据,减少模型凭空编造内容的可能性,降低幻觉风险。RAG无需重新训练模型,仅需更新知识库即可适配不同专业领域(如医疗、法律)。类似将大模型视为一个“推理专家”,而RAG系统为其配备了一个“实时资料库助手”。
2025-03-19 17:20:33
1409
原创 二十四节气
二十四节气是中国古代根据太阳在黄道上的位置变化,结合农业生产和气候变化规律,总结出的一套时间划分系统。它将一年分为24个时段,每个时段约15天,反映了季节、气候和物候的变化。
2025-03-19 16:34:22
1576
原创 1G内存,如何对40亿QQ号去重?
假设我们需要对40亿个QQ号进行去重处理,但可用内存限制为1GB。常规方法(如HashSet或全量排序)在内存占用上存在明显瓶颈,因此需要设计一个兼顾内存效率和执行效率的解决方案。:如果QQ号范围已知,如何进一步优化内存?中占用20字节(包含对象开销),1GB内存可存储约5千万个QQ号。合并为最终文件,因相同QQ号必在同一分片,无需二次去重。类型需约32GB(40亿×8字节),远超1GB内存。:分治法(Hash分片+内存去重)是唯一可行方案。:使用GZIP压缩分片文件,减少磁盘占用。(需号码范围已知)。
2025-03-19 09:22:56
679
原创 如何有效的优化一个.Java 文件
及时释放资源:使用 `try-with-resources` 或手动关闭 `InputStream`、`OutputStream` 等资源。- 同步机制:合理使用 `synchronized`、`Lock` 或并发集合类(如 `ConcurrentHashMap`)来保证线程安全。- 使用高效的数据结构:根据场景选择合适的数据结构(如 `HashMap` 替代 `List` 进行快速查找)。- 调整堆内存:根据应用需求调整 JVM 的堆内存大小(`-Xmx`、`-Xms`)。
2025-03-13 17:21:21
595
原创 Tokens是啥?为啥大模型按Tokens收费?和API调用、订阅收费区别?
Tokens是啥?为啥大模型按Tokens收费?和API调用、订阅收费区别?
2025-03-08 10:34:07
1022
原创 mybatis 和jpa 深入对比
MyBatis 和 JPA(Java Persistence API)是 Java 生态中两种主流的持久层框架,但它们在设计理念、使用场景和实现方式上有显著差异。:JPA 是 Java EE 规范的一部分(现为 Jakarta Persistence),定义了一套对象关系映射(ORM)的标准接口。)直接操作数据库,支持延迟加载(Lazy Loading)、级联操作(Cascade)等特性。:不提供复杂的 ORM 特性(如延迟加载、缓存策略),更注重 SQL 的灵活性和透明性。
2025-02-13 09:14:17
1940
原创 解决mysql 内存持续上涨问题
innodb_buffer_pool_size 的大小,调到一个很小的值(暂时不考虑常规状态),发下内存一下子就下来了,当内存下来之后在调回原来的值,问题解决。32G内存,这里设置了20G,物理内存的60~70%
2024-12-07 15:12:17
1314
2
PowerDesigner反向工程将数据库设计导出SQL脚本、HTML或World
2012-05-14
JSP自定义分页标签 extends TagSupport
2014-02-18
JVM G1 内存回收机制,G1 Old gen 内存持续增高,是否有必要手动GC
2023-06-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅