自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一勺菠萝丶的博客

做一个俗人,贪才好色,一世风流

  • 博客(639)
  • 收藏
  • 关注

原创 并发更新余额,到底要不要加版本号?

现在的写法()是安全的!不需要加版本号,数据库会保证结果正确。需要版本号的情况:当你的更新逻辑依赖旧值的复杂判断时(不是简单的加减)。📌 小白记住一句话就行:👉能让数据库帮你算的,就交给数据库算;必须自己算的时候,再考虑版本号。

2025-09-12 15:00:18 308

原创 MapStruct 在芋道(yudao)项目中的原理与编译优化指南

MapStruct 是一个注解处理器(annotation processor),在 Java 编译阶段读取你的@Mapper接口并生成具体实现类(例如它的优点是运行时性能高 —— 因为生成的是普通 Java 代码,而不是反射实现。它在编译时生成代码,而不是运行时,所以每次编译会产出(或更新)实现类文件。注解(代码内)@Mapper标记接口;明确指定字段不匹配时的映射规则;(比如spring)决定生成的实现如何被管理(静态/ Spring Bean 等)。注解处理器(构建工具)

2025-09-11 10:46:57 851

原创 Jenkins 构建 Node 项目报错解析与解决——pnpm lockfile 问题实战

Jenkins 不会自动更新 pnpm lockfile→ 锁文件必须与 package.json 保持一致构建失败的根本原因是依赖没装完整最佳实践本地修改依赖后同步更新 lockfile提交到 GitCI 使用保证环境一致打包 dist 失败小白提示:每次新增依赖后记得跑并提交,CI 构建才不会报错!

2025-09-10 15:58:17 753

原创 如何在项目中使用 Claude 记忆库系统(二开场景指南)

让 Claude知道项目现状让 Claude记住决策和规范让 Claude避免重复踩坑复制原记忆库更新 activeContext(新目标)开发中持续更新 decisions/patterns/troubleshooting这样,Claude 就能从“问啥答啥”的工具,变成真正熟悉项目的伙伴。

2025-09-07 23:11:14 850

原创 芋道框架Token机制详解:刷新令牌的工作原理与实战应用

在现代Web应用中,用户认证和授权是一个核心功能。芋道框架采用了OAuth2.0标准的双令牌机制,既保证了安全性,又提供了良好的用户体验。本文将详细介绍刷新令牌(Refresh Token)的工作原理,帮助开发者深入理解这一重要的认证机制。在传统的认证系统中,通常只有一个token,用户登录后获得一个长期有效的token。安全性风险:token长期有效,一旦泄露,攻击者可以长期访问用户资源无法主动失效:无法强制用户下线,除非修改系统密钥权限变更延迟:用户权限变更后,需要等到token过期才能生效。

2025-09-06 11:36:55 751

原创 用 AI 辅助开发时,CLAUDE.md 文件到底是干啥的?(完整解析)

这些文件不是给你写业务逻辑用的,而是 Claude 的“记忆库”。你不用自己主动建,只要在需要的时候让 Claude 更新,比如:“把这个规范写到 CLAUDE-patterns.md 里”“把这个 bug 解决方案更新到 CLAUDE-troubleshooting.md”不要删除这些文件,否则 Claude 会“失忆”。不要把这些文件提交到生产仓库,它们只在开发协作中有用。CLAUDE.md 及其相关文件,就是 Claude AI 的“项目笔记本”,帮它记住进度、规范和坑。

2025-09-05 23:28:42 683

原创 深入理解流程实例启动参数:`setVariables` 与 `setStartUserSelectAssignees

流程变量,驱动流程条件、分支和动态分配。:发起人手动选择审批人,增加灵活性。两者结合,才能让流程既有自动化规则,又能应对个性化场景。

2025-09-05 14:15:13 855

原创 数据库函数详解:COALESCE 到底有什么用?

记忆口诀= 如果a不为空,就返回a,否则返回b。优点:简洁、可读性强,替代冗长的CASE WHEN。适用场景:字段可能为 NULL 时,设置默认值或兜底逻辑。💡一句话总结COALESCE是 SQL 里的“兜底神器”,帮你在NULL值面前永远不至于掉链子。

2025-09-03 14:18:44 381

原创 金额字段该怎么设计?——给小白的超详细指南(含示例 SQL)

做业务系统时,金额字段(如 采购价、 销售价、 最低价)到底该用什么类型、保留几位小数、要不要加约束?这篇一文讲清楚,读完你就能自己定规范了。金额一律用 (定点数),不要用 /(浮点数)。常用推荐:你的现有设计 非常保守且偏大(可到百万亿级、精确到 0.000001 元)。如果业务金额没那么夸张,可收缩到 / ,既够用又省存储、算得更快。常见组合速查表你给的三列:如果你的业务没有超大金额且结算精度不需要到 6 位小数,建议改为:很多场景 存储更高精度(如 4 位),展示/结算按 2 位四舍五入。这

2025-09-03 10:44:37 705

原创 如何查看Linux系统中文件夹或文件的大小

使用du命令查看目录和文件的磁盘空间使用情况。使用df命令查看磁盘分区的使用情况。使用ls -lh查看单个文件的大小。定期清理不需要的文件,确保磁盘空间充足。

2025-08-30 17:54:44 365

原创 如何在 Jenkins Docker 容器中切换到 root 用户并解决权限问题

使用sudo:如果容器内支持sudo,可以通过sudo来提升权限。切换到root用户:如果容器内没有sudo,可以通过切换为root用户来执行命令。修改权限:如果以上方法不可行,可以尝试修改文件夹权限,但此方法不推荐在生产环境中使用。通过这些方法,你可以轻松切换到 root 用户并解决权限问题,从而顺利执行需要管理员权限的操作。

2025-08-30 16:21:27 584

原创 MyBatis 神器:如何让数据库 varchar 字段完美映射到 Java List<Integer>

在实际项目开发中,我们经常会遇到这样的需求:需要在数据库中存储一组整数,比如用户的配送方式选择(快递、自提、同城配送),或者商品的标签ID列表。传统做法可能是创建一个关联表,但这样会增加数据库设计的复杂度。今天我们来看看如何使用 MyBatis 的机制,优雅地将数据库的varchar字段映射到 Java 的类型。import cn/*** List<Integer> 的类型转换器实现类,对应数据库的 varchar 类型。

2025-08-29 19:48:52 393

原创 MySQL 的 tinyint 在实体类里到底该用 Boolean、Integer 还是 String?

布尔语义 → tinyint(1) ↔ Boolean状态枚举 → tinyint ↔ Integer/Enum不要用 String来映射 tinyint设计表的时候,不仅要考虑数据库字段类型,还要考虑在业务代码里用什么类型来表示。布尔值 → Boolean状态值 → Integer 或 Enum别用 String 映射 tinyint这样设计,代码语义清晰,维护成本更低。

2025-08-28 22:39:40 438

原创 MySQL 中 tinyint(1)、int(11)、bigint(20) 的数字到底是什么意思?

tinyintintbigint的存储范围固定,和括号里的数字无关(M)在 MySQL 5.x 是显示宽度,用处有限,在 8.0 已经废弃写int(11)其实和int一样,别再误解了如果需要布尔值,用tinyint(1),只是约定俗成新项目直接写intbiginttinyint,不要加 (M)

2025-08-28 22:38:51 507

原创 数据库中金额、重量、体积字段该如何设计?一篇文章讲清楚

金额:用intbigint,单位“分” ✅重量:电商用int(克),物流用(千克) ✅体积:用,单位“m³” ✅这样设计,既能保证精度,又能方便后期统计计算,不会掉坑。

2025-08-28 22:25:06 422

原创 如何在 Jenkins 中为用户分配构建权限(新手教程)

在 Jenkins 中,构建权限指的是用户是否有权执行项目的构建操作。你可以根据需要限制某些用户只能查看项目,或是只允许他们构建部分项目。通过给不同的用户分配不同的权限,你可以提高项目的安全性与管理效率,避免无关人员操作关键项目。内置权限系统:适合小团队或简单场景。Role-based Authorization Strategy 插件:适合需要精细权限控制的团队。Matrix-based Security 插件:提供灵活的权限配置,适合复杂场景。下面我将详细介绍如何使用这些方法来分配构建权限。

2025-08-28 11:28:00 1010

原创 Flowable 实现“反审批/撤回到本人重新审批”保姆级教程(含代码)

后续回退要用到它。

2025-08-28 11:19:57 996

原创 Elasticsearch 启动反复重启排查实录:从“内存不足”到“vm.max\_map\_count 过小”

这是一篇按实际故障排查顺序整理的笔记,覆盖,同时给出两套可复制命令及一键脚本。

2025-08-27 21:52:11 641

原创 [特殊字符] 如何在自己的仓库开发,同时保持同步原作者更新(超详细教程)

开发提交→ 提交到本地,再push到自己的仓库(origin)。获取更新→→merge到本地主分支 →push到自己的仓库。保持清晰origin= 你自己的仓库,upstream= 原作者仓库。二次开发开源项目自己定制化版本,但又想跟进官方更新团队内部协作(fork → 开发 → 合并)学会这一招,你就能轻松维护自己的代码库,同时又不落下原作者的新功能。🎉。

2025-08-27 09:57:42 384

原创 芋道前端项目部署后刷新 404 的解决办法(Nginx 配置教程)

如果你在部署芋道前端项目就能完美解决!这个方法不仅适用于芋道前端项目,几乎所有的单页面应用部署后刷新报错,都可以这样修复。

2025-08-24 16:23:13 948

原创 DMIT VPS 路由策略区别详解:Premium、Eyeball、Tier 1 哪个更适合你?

Routing Profile 可以理解为“线路套餐”。不同的线路套餐,决定了你 VPS 的流量通过什么路径传输到用户。换句话说,它影响的就是:👉 访问速度快不快👉 延迟高不高👉 网络稳定不稳定👉 成本贵不贵Premium = 最好的体验,最贵Eyeball = 性价比高,适合大多数人Tier 1 = 全球覆盖,预算友好如果你还在纠结,不妨先试用Eyeball,等有高要求的项目再升级到 Premium。

2025-08-24 15:42:07 308

原创 SSH 端口转发报错 `bind [127.0.0.1]:2095: Permission denied` 怎么办?

当你遇到 bind [127.0.0.1]:xxxx: Permission denied先用netstat -ano | findstr 端口号看看是不是被占用了。如果被占用 → 换一个端口(推荐)。如果必须用这个端口 → 杀掉占用的进程,再执行转发。SSH 端口转发失败,十有八九是因为端口被占用了。

2025-08-24 11:21:51 436

原创 从 JDK 8 到 JDK 21:Java 的十年进化与飞跃

JDK 8 于 2014 年发布,因其引入的 Lambda 表达式和 Stream API 等革命性特性,至今仍是生产环境中使用最广泛的版本。而近十年后,2023 年发布的 JDK 21 作为最新的 LTS 版本,则代表了现代 Java 的新高度。JDK 21 无疑是为未来十年准备的Java新基石,是时候开始你的升级之旅了!本文将带你深入探索从 JDK 8 到 JDK 21 的巨大变化,这不仅是一次版本的升级,更是一次开发范式、性能表现和语言表达能力的全面飞跃。能力,彻底改变了 Java 的编码风格。

2025-08-22 08:26:12 954

原创 IntelliJ IDEA中Maven的“Sync“与“Reload“详解:小白的避坑指南

变更类型操作推荐原因说明依赖版本更新✅ Sync仅需更新类路径添加/删除依赖✅ Sync增量下载库文件修改构建插件配置✅ Sync配置实时生效调整项目模块结构⚠️ Reload需重建项目树父POM变更⚠️ Reload影响所有子模块继承关系IDEA显示异常依赖⚠️ Reload强制重置缓存✨黄金法则日常改动用Sync,结构大改用Reload不确定时先Sync,未生效再Reload!

2025-08-18 09:10:31 611

原创 小白也能懂的MongoDB容器化部署指南:解决日志权限与路径问题

通过这个指南,即使没有Linux和Docker经验的小白也能成功部署MongoDB容器。遇到问题时,记得先检查路径匹配和权限设置,这是容器化部署中最常见的两大“拦路虎”!:Docker挂载就像给容器开了一个"共享文件夹",容器内路径和宿主机路径必须正确匹配才能正常读写。记住这个原则,90%的存储问题都能解决!这就像你买了新手机却打不开相机——明明硬件没问题,但权限或设置阻止了正常使用!:配置文件指定的日志路径与Docker挂载路径不一致。:配置文件中的路径未匹配容器内部结构。如果失败,重新执行权限设置。

2025-08-16 15:52:18 276

原创 Scrapy 中 `dont_filter=True` 的魔法:为什么你需要它?(小白也能懂)

特性(默认)去重机制✅ 启用❌ 禁用相同 URL 请求自动跳过每次都会执行适用场景普通页面抓取特殊参数传递/动态内容资源消耗低可能较高典型应用列表页爬虫API 请求/文件下载💡黄金法则默认保持节省资源,仅在需要传递不同参数(如 meta)或处理动态 URL 时开启。

2025-08-15 18:35:19 387

原创 给小白讲明白:消息队列、Nginx、API网关如何“限流”?系统不卡壳的秘密武器!

特性消息队列 (MQ)NginxAPI 网关核心思想削峰填谷,异步缓冲入口拦截,基础速率/并发控制精细化管理,统一策略控制主要目的解耦、异步、保证最终处理保护后端,防基础攻击/过载API 生命周期管理,精细化流控限流位置业务逻辑层(生产者-消费者之间)网络入口层 (L4/L7)业务入口层 (L7, 面向API)限流粒度较粗 (队列/消费者速度)中 (IP, URL, 基础并发/速率)极细(API, 用户, 参数, 业务)常用算法队列长度控制漏桶, 令牌桶(近似), 并发数精确令牌桶。

2025-08-08 15:34:48 683

原创 电商下单支付全流程详解:从购物车到支付成功(附微信支付实现)

当你在电商平台点击"立即支付"时,背后发生了什么?本文将深入解析电商下单支付全流程,让你彻底明白从商品到支付的完整旅程!

2025-08-05 20:09:27 1175

原创 RabbitMQ削峰填谷详解:让系统在流量洪峰中“稳如泰山”

峰:系统瞬时高并发(如秒杀活动)谷:系统低负载期(如凌晨时段)fill:#333;color:#333;color:#333;fill:none;直接冲击超负荷崩溃用户请求洪峰服务器系统宕机“不是消灭洪峰,而是让洪峰排队过闸蓄水(队列存储请求)控流(限制消费速度)发电(平稳处理业务)RabbitMQ通过消息暂存+速度控制的组合拳,将瞬间的洪水猛兽变成涓涓细流。系统稳定性 = RabbitMQ队列容量 / 消费速度 × 监控响应速度。

2025-08-05 19:53:50 1181

原创 Redis缓存三大杀手与生存之道——从踩坑到架构师

想象你管理着一个大型仓库(数据库),每次有人要取货都要打开仓库门拿取(数据库查询),效率很低。于是你在仓库门口放了个智能快递柜(Redis缓存):缓存命中缓存未命中用户智能快递柜大型仓库工作流程:二、缓存三大杀手:穿透、击穿、雪崩1. 缓存穿透:伪造钥匙的小偷场景:有人用不存在的钥匙(如id=-1)不断尝试开快递柜危害:解决方案:钥匙不存在钥匙可能存在用户布隆过滤器拦截快递柜方案B:给"空包裹"做标记2. 缓存击穿:万人抢购限量商品场景:某热门商品(如iPhone)缓存过期瞬间,数万人同时

2025-08-05 19:43:56 1022

原创 安全守卫之争:Shiro vs Spring Security,谁是你的 Java 项目守护神?

像一个易于聘请、身手敏捷的独立保镖。优势在于简单、轻量、易集成、学习曲线平缓。非常适合非 Spring 项目或对安全需求不复杂的 Spring 项目。像 Spring 城堡的专属卫队司令。优势在于功能全面(尤其是 OAuth2)、与 Spring 深度集成、企业级支持。是 Spring Boot 项目的默认和推荐选择,尤其当需求复杂时。给小白的最直接建议:优先考虑 Spring Security。虽然开头难点,但它是“亲儿子”,集成度最高,长期来看功能和社区支持最好。从官方入门教程开始,一步步来。

2025-08-05 18:03:29 1136

原创 Scrapy 工作流程深度解析:引擎驱动的完美协作

引擎中心化:所有组件通过引擎通信数据驱动:Request/Item 在组件间流动闭环处理:从请求到存储的完整生命周期可扩展架构:通过中间件灵活扩展功能理解 Scrapy 的工作流程,关键在于把握引擎的核心调度作用和组件间的数据流向。这种设计使得 Scrapy 能够高效处理大规模数据采集任务,同时保持代码的模块化和可维护性。

2025-08-04 17:31:27 728

原创 零基础掌握 Scrapy 和 Scrapy-Redis:爬虫分布式部署深度解析

通过本篇博客,相信你已经对 Scrapy 和 Scrapy-Redis 的执行流程有了清晰的理解。Scrapy提供了一个高效且模块化的框架,让你能够专注于数据提取和业务逻辑。则在此基础上,通过利用 Redis 的特性,实现了分布式爬虫的强大功能,包括断点续爬、共享队列、去重等,大大提升了大规模数据抓取的效率和稳定性。

2025-08-04 17:16:47 1510

原创 为什么抢单要查两次订单?外卖小哥的故事让你秒懂分布式锁双重检查

✅ 分布式系统安全操作 =获取锁+ 重新加载最新数据+ 验证业务规则+ 执行操作就像外卖小哥的生存法则:🔒 接到派单不冲动📞 先打电话问餐厅🛵 确认无误再出发双重检查就是系统里的那个"确认电话",它用极小的性能代价(一次数据库查询),避免了灾难性的业务错误。现在你明白为什么代码要多查那一次了吧?

2025-08-04 16:18:17 871

原创 高并发抢单系统核心实现详解:Redisson分布式锁实战

前置过滤:通过Redis标识快速拦截无效请求并发控制:Redisson分布式锁保证单订单串行处理状态验证:数据库状态机防止异常状态变更在日均百万级抢单请求的生产环境中,该方案成功将抢单冲突率控制在0.5%以下,平均响应时间<50ms,有效支撑了业务增长。后续可通过锁分段、热点订单隔离等策略进一步优化极端场景下的性能表现。

2025-08-04 16:11:31 757

原创 小白也能懂:SeiGA的AT自动事务是如何轻松管理数据库操作的?

从A账户扣款100元向B账户加款100元如果第一步成功但第二步失败,就会导致A账户白白损失100元。事务就是确保这两个操作要么全部成功,要么全部失败回滚的机制,就像快递的"保价服务"。注解开关@AT像智能开关,贴哪哪受保护AOP监控:隐形守护者全程看护操作线程保险箱:为每个用户提供独立操作空间🚀 使用建议:在需要多个数据库操作(如转账/下单)的方法上添加@AT,就像给操作系上安全带!通过SeiGA的AT事务,你只需关注业务逻辑,事务管理交给框架处理。

2025-08-04 11:18:22 401

原创 用分布式锁解决高并发抢单:小白也能懂的技术解析

分布式锁不是银弹,而是协调工具。用Redis标识做轻量级过滤用Redisson锁做临界区保护用数据库操作做最终一致性保证三者配合解决了高并发下的资源竞争问题。记住:好的分布式系统设计,永远是多种技术取长补短的组合艺术。技术选型建议中小系统:直接采用此方案超大型系统:可升级为Redis+Lua脚本原子操作金融级场景:增加数据库唯一索引兜底。

2025-08-03 22:29:43 542

原创 RabbitMQ 核心三剑客:交换机、队列、路由键 - 电商订单系统秒懂指南

想象你正在构建一个电商平台(比如“极速购”)。用户下单后,系统需要做很多事情:扣减库存、发送订单确认邮件、通知仓库发货、更新用户积分…这些任务如果让下单接口一个接一个做,不仅慢还容易出错。RabbitMQ 就是来解决这个问题的!它像一个超级高效的任务分发中心,而理解。理解交换机、队列和路由键的关系,就是掌握了 RabbitMQ 消息路由的“任督二脉”。就是掌握这个分发中心运作规则的关键。别怕,跟着电商订单的例子,5分钟变高手!

2025-08-02 22:32:10 792

原创 小红书ROI控制:3、5、2的区别与展现量的秘密(小白一看就懂!)

今天这篇博客,就用最通俗的大白话,帮你彻底搞懂小红书ROI控制的奥秘,特别是它和展现量之间那点“相爱相杀”的关系。理解它们之间的区别和与展现量的制约关系,结合你的产品利润和营销目标,通过科学测试找到属于你的“黄金ROI”,才能让小红书的广告投入真正为你带来丰厚的回报!” 系统会根据你的目标,去调整广告的投放策略。你可以把设定的ROI目标值,想象成给小红书广告系统下达的一道“赚钱效率军令状”。小红书广告的ROI目标值(3、5、2)本质是告诉系统你想要的“赚钱效率”等级。它和ROI目标值的关系,是。

2025-08-01 16:14:06 1017

原创 AI模型选择指南:从小白到专业用户的完全解析

选择AI模型就像选择工具,没有绝对的最佳选择,只有最适合你需求的选择。对于大多数用户来说,Claude 4 Sonnet和GPT-4o已经能满足日常所有需求,而专业用户则可以根据具体场景在不同模型间切换。

2025-07-29 18:10:13 796

空空如也

空空如也

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

TA关注的人

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