SpringBoot家具销售管理系统实战:从CRUD到库存并发设计
花了整整两天时间把这类基于SpringBoot的家具销售管理系统从头到尾梳理了一遍。单看标题很多人会觉得这又是一个普通的CRUD练习项目但真正把业务模块拆开之后你会发现家具销售里那些大件、低频、高客单价带来的逻辑细节它其实都踩到了。这篇文章不打算照搬项目文档而是从“如果一个新手拿到这套源码该怎么读、怎么改、怎么避坑”的角度把它当成一个完整案例来分析。1. 项目拆解这套系统到底在解决什么问题1.1 先从业务说起家具销售要管什么家具销售和快消品的销售管理系统差别很大。快消品看重复购、看促销活动而家具是典型的大件低频商品用户决策周期长下单之前反复逛、反复对比材质和价格下单之后还有送货、安装、验收这些环节。所以这套系统表面上还是商品、购物车、订单这些通用模块实际上要在细节里处理好“大件商品”带来的特殊逻辑。具体到这个系统核心业务闭环大致是这样前台用户注册登录后浏览家具商品可以按分类筛选、按关键词搜索把喜欢的商品加入购物车然后提交订单后台管理员维护商品上下架、管理库存、处理订单发货并通过统计报表看销售情况。订单本身要覆盖从待付款到已完成的全过程中间还要处理取消订单这类反向流程。我特别想提醒一句拿到这类项目源码很多人第一件事就是点运行结果跑起来发现某个菜单没权限、某个数据对不上才回头一点点看代码。我建议反过来先花半小时把业务流程图和数据流向捋一遍。只要搞清楚“什么人操作什么功能、数据在哪些表之间流转”这套系统在你手里就已经掌握了七成。1.2 用户角色拆解谁来用这套系统系统里最核心的角色有两个普通用户也就是前台买家管理员也就是后台运营人员。普通用户能做的事情看起来常规但每个动作背后都有对应的数据表在支撑。比如注册后修改个人资料对应的是用户表字段更新收藏家具对应收藏表插入记录提交订单则会同时影响订单表、订单明细表和库存表。所以看角色模块时不能只看Controller里写了什么方法要把用户操作、权限拦截和数据库变更动作放在一起联想记忆。管理员角色相对更重。在简易版本里管理员会把商品维护、上下架、库存调整、订单处理、销售统计全部集中到一个账号下这在中小规模项目里是很常见的取舍。如果实际业务中多人分工明确再往上加RBAC权限模型也不迟。1.3 技术选型为什么是SpringBoot全家桶这个项目的核心技术栈是SpringBoot原因很现实SpringBoot对中小型管理系统开发效率的优势太明显了。以前用Spring MVC拼SSH那套光配置XML文件就吃掉不少精力现在SpringBoot自动配置加内嵌Tomcat一个Jar包就能跑起来省去了大量环境配置的时间。搭配SpringBoot的项目通常还会用到MyBatis或MyBatis-Plus做持久层MySQL存数据Thymeleaf做服务端页面模板。这套组合到今天依然是Java后台管理系统的主流搭配。它的好处在于学习曲线平滑网上资料多遇到报错基本都能搜到对应解法开发周期短一个人也能快速完成全部模块部署简单打包成Jar扔到服务器上就能运行。我见过有人一上来就纠结要不要改成Spring Cloud微服务。对一个家具销售管理系统来说完全没必要。单体架构在业务规模没有到海量用户之前就是最合适的复杂度等真遇到性能瓶颈再拆分也来得及。2. 数据库设计从业务需求反推表结构2.1 核心数据表的职责划分我把这个系统的核心数据表梳理了一遍真正发挥作用的大概有这些表名职责用户表存登录账号、密码、联系电话、收货地址家具分类表存分类名称、层级关系家具商品表存商品名称、价格、库存、图片、描述、上下架状态购物车表存用户临时选择的商品和数量收藏表存用户收藏的商品记录订单表存订单主信息、总金额、订单状态订单明细表存订单里每个商品的快照信息反馈表存用户咨询和售后反馈内容商品为什么需要分类表一是家具商品数量上来之后分类能明显提升查找效率二是前台筛选和后台统计都要按分类维度做。订单为什么和订单明细分开因为一个订单里可能包含多件家具如果把所有信息塞进订单表订单表就变成一个又宽又难维护的大宽表统计和状态流转会变得很别扭。这个设计符合常规范式要求同时也没有过度设计到让人看不下去。对学习案例来说是很合适的起点。2.2 订单表和订单明细表为什么必须分开订单表和订单明细表分离是这套系统里最值得学习的数据库设计点之一。订单表记录订单级别信息谁下的单、总金额、付款时间、订单状态、收货地址。订单明细表记录商品级别信息这个订单里有哪些商品、单价多少、数量几件、小计多少钱。这里的关键词是“快照”。很多新手在订单明细里只存商品ID然后显示时再从商品表取价格。看起来没问题但仔细想想家具商品经常调价如果用户下单之后管理员改了价格订单明细里的价格也会跟着变财务对账就会出乱子。合格的系统应该在订单生成那一刻把商品名称、单价、数量这些信息以快照形式写进明细表之后无论商品表怎么改历史订单都不受影响。订单总金额也应该来源于明细表以各条明细的小计之和为准而不是前端传什么就存什么。这一点我在后面下单事务部分会重点展开。2.3 库存字段设计与并发安全考虑库存字段看起来只是商品表里的一个整数列但设计时需要提前想清楚几个问题。第一库存放商品表还是单独建表对这个体量的系统来说直接放商品表就行。第二库存绝对不能出现负数否则就会发生“超卖”这种致命问题。处理库存并发常见做法是下单前先查库存库存够就扣减。这是最朴素的思路但在并发场景下会出问题。两个用户同时下单只剩一件库存两个请求都查到库存为1然后都执行扣减库存就变成-1。所以更稳妥的方案是使用数据库层面的原子操作比如更新库存时加上条件判断UPDATE furniture SET stock stock - #{quantity} WHERE id #{commodityId} AND stock #{quantity}这条SQL利用行锁把“检查库存”和“扣减库存”合并成一个原子操作如果受影响行数为0说明库存不足下单直接失败。这个技巧在不涉及分布式锁的项目里非常实用后面会再展开。3. 核心功能实现思路关键代码与设计细节3.1 用户登录与权限拦截系统的登录模块使用Session会话管理登录成功后把用户信息保存到Session后台管理页面通过拦截器做权限校验。拦截器的思路不复杂就是定义一段逻辑在请求进入Controller之前判断用户是否已登录。登录拦截器核心写法大致是这样public class LoginInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object user request.getSession().getAttribute(LOGIN_USER); if (user null) { response.sendRedirect(request.getContextPath() /login); return false; } return true; } }注册到配置类时要指定拦截路径。我遇到过不少人问“为什么配置了拦截器静态资源也被拦了”答案很简单在addInterceptors时需要把静态资源路径通过excludePathPatterns排除掉否则CSS、JS、图片全部无法加载。3.2 家具商品列表与关键词搜索商品列表是前台最大的流量入口。实现上没有太多玄学就是查询商品表支持按分类ID过滤、按商品名称模糊搜索。分页是必选项否则商品数据一多页面会直接卡到没法看。使用MyBatis-Plus时分页查询可以这样写PageFurniture page new Page(current, size); LambdaQueryWrapperFurniture wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.hasText(keyword), Furniture::getName, keyword) .eq(categoryId ! null, Furniture::getCategoryId, categoryId) .eq(Furniture::getStatus, 1); // 只查上架商品 furnitureService.page(page, wrapper);这里有一个容易被忽略的点商品列表只展示“上架”状态下架商品只出现在后台管理里。如果漏了这个过滤条件用户在前台看到下架商品还能加购下单时又要再做一次校验逻辑就变得混乱。商品图片字段存的是相对路径还是完整URL也需要和前端约定好这是这类项目里最常见的不一致问题。3.3 购物车模块临时数据到底放哪购物车有三种常见实现纯前端存储、后端数据库存储、Redis临时存储。这个系统采用的是数据库表方案也就是用户点击加入购物车后直接往购物车表插入记录。数据库存储购物车的优点是完全不依赖浏览器端用户换台电脑购物车数据依然存在缺点是每次加购都产生一次数据库写入。对这个场景来说完全可接受一个用户购物车里的商品数量非常有限不会造成性能问题。购物车表字段一般包括用户ID、商品ID、商品数量、加入时间。需要注意同一用户同一商品不能产生两条购物车记录。比较合理的做法是加入购物车时先按用户ID和商品ID查询如果已存在则数量累加不存在才插入新记录。3.4 下单流程与库存扣减的原子性处理下单是整套系统里最有含金量的地方。表面上只是插入订单表和订单明细表两条记录但里面藏着一大堆一致性问题。用户提交订单时系统需要先校验库存扣减库存再写订单这些操作必须在一个事务里完成任何一个环节失败都要整体回滚否则就会出现“订单没生成但库存扣没了”的烂账。第一版写法很多人会这样做Transactional(rollbackFor Exception.class) public void createOrder(OrderCreateRequest request) { // 1. 组装订单实体并插入 // 2. 组装订单明细并批量插入 // 3. 扣减库存 }这已经比不写事务靠谱但并发场景下依然有超卖风险。假设库存只剩1件两个请求同时读到库存为1即使都用这段代码执行也会都判断“库存够”然后两个都扣减成功库存变成-1。解决办法就是前面提到的条件扣减int rows furnitureMapper.reduceStock(commodityId, quantity); // reduceStock 对应SQL: // UPDATE furniture SET stock stock - #{quantity} WHERE id #{commodityId} AND stock #{quantity} if (rows 0) { throw new RuntimeException(库存不足); }如果更新的行数是0直接抛异常让事务回滚订单不会生成。这比先select再update的方式可靠得多这个思路可以迁移到所有涉及库存、余额、剩余次数的业务场景里。3.5 订单状态机与管理端发货操作订单状态是这个系统最容易被忽略却又非常重要的部分。如果不用状态机思路设计直接靠一个status字段随手赋值后面每加一个需求就要改一遍判断逻辑代码会越改越乱。订单状态基本可以归纳为这几个阶段状态值含义触发操作0待付款用户提交订单1待发货用户支付成功2待收货管理员发货3已完成用户确认收货4已取消用户取消或超时关闭状态应该是一个有限集合流转方向要可控。比如待付款可以取消但已完成不能再改成待付款。代码层面最简单的保护方式就是写一个状态流转判断方法public boolean canTransition(Integer currentStatus, Integer targetStatus) { MapInteger, SetInteger transitionMap new HashMap(); transitionMap.put(0, new HashSet(Arrays.asList(1, 4))); transitionMap.put(1, new HashSet(Arrays.asList(2, 4))); transitionMap.put(2, new HashSet(Arrays.asList(3))); return transitionMap.getOrDefault(currentStatus, new HashSet()).contains(targetStatus); }管理员发货本质上就是把订单状态从1改到2同时记录发货时间最好把物流单号也存下来方便用户在前台订单列表里查看。这些看似细节的东西往往决定项目是否完整可用。3.6 销售数据统计报表是怎么算的销售统计是这套系统里容易被低估的模块。它会按日期或月份统计销售额、订单量、商品销量排行等指标。看起来复杂其实就是对订单表、订单明细表做聚合查询。一个典型的SQL是按商品统计销量SELECT item.commodity_id, SUM(item.quantity) AS total_sales, SUM(item.amount) AS total_amount FROM order_item item INNER JOIN orders o ON item.order_id o.id WHERE o.status IN (1, 2, 3) GROUP BY item.commodity_id ORDER BY total_sales DESC这里要注意一个统计口径问题统计对象必须限定在“已支付”的订单而不是所有单据否则用户提交了但没付款的订单也会进入统计数据就失真了。管理员取消的订单同样要排除。统计口径这件事项目做得深不深一眼就能看出来。4. 实战避坑事务、并发与数据一致性的教训4.1 库存超卖问题扣库存千万别只靠Java代码前面已经强调过最稳的库存扣减方式就是条件更新。但有一个很容易犯的错是在Controller层做库存判断。有些人把业务逻辑直接写在Controller里先查库存、再调用Mapper更新库存中间一旦并发插入就会出问题。更稳妥的做法是把库存扣减封装到Service层事务方法里利用数据库的原子操作兜底。另外给方法加synchronized关键字看似正确实际并不稳。单机部署时synchronized确实能挡住并发但服务一旦部署多个实例锁就失效了。要真正处理分布式并发得上分布式锁。对这个项目来说条件更新已经够用而且不需要额外引入中间件。4.2 事务失效的几个常见场景Transactional注解不是万能的。这几个场景我都见人踩过类内部方法调用。同一个类里方法A调用方法BB上有Transactional此时事务不生效因为Spring事务基于AOP代理内部调用不会经过代理。异常被吞掉。方法内部用try-catch把异常捕获了事务感知不到异常自然不回滚。抛出非运行时异常。事务默认只回滚RuntimeException和Error如果方法抛出类型是检查异常而事务又没有指定rollbackFor就不会回滚。解决办法也直接要回滚就明确指定Transactional(rollbackFor Exception.class)内部不要随意吞异常让异常正常抛出去。如果确实需要捕获异常再处理可以手动标记事务回滚。4.3 金额计算为什么用BigDecimal家具这类高客单价商品价格精确性一点都马虎不得。项目里所有金额字段都应该用BigDecimal而不是double或float。double计算0.1加0.2会得到一串浮点误差这在金额上是绝对不能接受的。我见过代码里这样写double totalPrice 1999.9 * 2;看着结果是双位数好像没问题但当数据量变大浮点误差会在累加过程中被放大最后报表对不上账。BigDecimal写起来稍微繁琐但钱的事宁可代码丑一点也不能让账出错。数据库金额字段用decimal(a,b)类型Java类用BigDecimal两边保持一致。4.4 分页查询在关联表场景下的坑家具商品列表如果需要连分类名称一起展示很多人会直接写多表联查再用分页插件。这里有个经典问题当SQL里有多表连接、group by或order by时分页插件生成count语句时可能出现count结果和实际记录数对不上的情况。解决思路有两种。一种是关联表只查ID查询出来后再在业务代码里批量补全分类名称另一种是先对主表做分页再查关联信息拼装。虽然麻烦一点但能保证分页准确。使用MyBatis-Plus分页时建议SQL尽量保持简单少放复杂的子查询和group by出错概率会低很多。5. 性能优化与后续扩展建议5.1 给热门家具商品加个Redis缓存当前系统直接查询MySQL数据量小的时候没问题。但家具商品首页、详情页这类访问集中的接口完全可以引入Redis做缓存。做法不复杂商品实体序列化后存进Redis查询时先查缓存缓存没有再去查数据库查完写回缓存。商品更新时删除或重置对应缓存key。引入缓存之后需要特别关注缓存与数据库的一致性。最简单有效的方式是旁路缓存读操作先读缓存写操作先更新数据库再删除缓存。千万不要只更新缓存不更新数据库也不要只更新数据库却忘记清理缓存这两个操作都会造成脏数据。5.2 用消息队列应对高并发下单如果家具商城某天做秒杀活动瞬时下单量远大于处理能力订单模块就会成为瓶颈。这时候可以引入消息队列先把下单请求丢进队列由消费者异步处理订单和库存前端通过轮询查询订单状态。这个方案对这个体量的系统来说属于超配但值得理解原理。从单体项目往高并发架构演进时削峰是最常见的思路之一原理就是先把请求接收下来再找机会慢慢消化不让数据库被瞬时流量打崩。5.3 这个项目还能怎么变体如果想把这套系统改成其他行业的销售管理路径非常清晰。家具、建材、灯具、家电这些大件低频商品的销售管理业务结构高度相似商品、分类、购物车、订单、库存、统计这些模块完全可以复用。你只需要把商品表里的定制字段改成对应行业的参数比如灯具加“瓦数”建材加“规格型号”。如果面向B2B场景还要在订单里增加客户公司信息、折扣等级、合同管理这些都可以在这个基础上扩展。做这类变体项目关键是想清楚新增的业务量落在哪张表上想清楚了改动就等于做加减法。6. 源码学习与个人建议标题提到“关注可白嫖源码”这是技术社区里常见的分发模式。想获取源码通常就是关注发布者留下的指引按提示领取。需要提醒的是源码拿到手之后个人学习和练习完全没问题但不能直接打包售卖也不应该去掉版权信息拿去商业使用。我始终觉得源码的价值不在于跑起来看一眼而在于把它当成完整案例去读、去改、去验证。哪怕一个项目你早就会做了看别人模块的划分方式、事务的处理方式、状态机的设计方式也可能带来新的思路。拿到项目代码之后建议按这个顺序操作先建好数据库并导入SQL脚本核对表名和字段名再修改数据库连接配置特别注意端口和时区然后全局搜索需要替换的常量最后按“登录→添加商品→下单→发货”这条主流程走一遍任何一步报错优先看日志。这条链路跑通后面基本就顺了。我自己复现这类项目的习惯是先列一张“请求路径对应Controller方法”的清单。这一步做完再看代码就有一种地图在手的感觉。很多人觉得读不懂别人的项目问题往往不在于代码本身难而在于找不到调用入口。入口找到了一切都会清晰起来。最后说一个实在的经验别急着把全部源码看完再动手。边看边敲把某一模块彻底看懂、改造、跑通比把整个项目从头到尾翻阅一遍有用得多。这套家具销售管理系统把CRUD、权限拦截、事务处理、状态机、统计报表这些常规内容串在了一起本身就是一份完整的后端练习素材拿它练手比对着零散教程学效果要好不少。就我个人体会项目跑通之后最适合再做的一件事是试着给自己加一个“库存预警”功能商品库存低于某个阈值时在后台高亮提醒。改完之后你会发现自己对整套系统的理解又深了一层。

相关新闻

CTF音频隐写解题指南:从‘啊哒~’看振幅、频谱与相位三重分析

CTF音频隐写解题指南:从‘啊哒~’看振幅、频谱与相位三重分析

1. 从一道CTF杂项题名看起:为什么“啊哒~”不是卖萌,而是信号“BugkuCTF-Misc:啊哒~”——第一次在某高校CTF训练平台看到这个标题时,我下意识点开想看看是不是新出的搞笑彩蛋题。结果发现它被归在Misc(杂项&#xff0…

2026/10/16 3:52:10 阅读更多 →
CANN一站式算子开发工具:从工程生成到性能优化的完整实践

CANN一站式算子开发工具:从工程生成到性能优化的完整实践

做AI算子开发的朋友,应该都有过这种体验:需求一句话就说完了——“写个自定义算子”,真正动手却要在工程搭建、参数定义、调试、性能调优上来回折腾。如果恰好是在一款新的AI芯片上跑,工具链又不成熟,那痛苦程度直接翻…

2026/10/16 3:52:10 阅读更多 →
Win10下VMware安装CentOS 7.9并配置静态IP与外网访问

Win10下VMware安装CentOS 7.9并配置静态IP与外网访问

1. 为什么要在Win10上折腾CentOS 7.9虚拟机很多刚接触Linux运维或者后端开发的朋友,第一道拦路虎不是命令本身,而是“我该把系统装在哪”。直接把自己的主力Windows 10笔记本格掉装Linux,显然不现实——办公、聊天、看文档都还得靠它。退而求…

2026/10/16 3:52:10 阅读更多 →

最新新闻

基于SpringBoot+Vue.js+Redis的电商系统前后端分离实战复盘

基于SpringBoot+Vue.js+Redis的电商系统前后端分离实战复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 4:34:22 阅读更多 →
PDF敏感信息遮盖、扫描件擦除与去水印的彻底处理指南

PDF敏感信息遮盖、扫描件擦除与去水印的彻底处理指南

聊到PDF处理,日常被问得最多的三件事就是:合同里的身份证号怎么遮掉再发人、扫描件上的手写标注怎么弄干净、文档页眉那个显眼的“内部资料”水印怎么去掉。这三个需求,说难不难,但很多人第一反应是打开画图工具直接涂黑&#xff…

2026/10/16 4:34:22 阅读更多 →
ARM Linux下OpenCV交叉编译实战:从工具链配置到部署踩坑

ARM Linux下OpenCV交叉编译实战:从工具链配置到部署踩坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 4:34:22 阅读更多 →
LLM驱动的移动端自动化测试:ARTEMIS双模式架构解析

LLM驱动的移动端自动化测试:ARTEMIS双模式架构解析

先说一个我在移动端自动化测试上反复撞墙后的真实感受:大多数团队从纯手工点按切换到自动化脚本之后,省下的时间并没有想象中那么多,反而多出一堆修脚本、调选择器、处理弹窗超时的活儿。这两年LLM的出现确实把不少顽疾松动了,但真…

2026/10/16 4:34:22 阅读更多 →
DN8P1开发环境搭建实战:从交叉编译到串口日志全流程

DN8P1开发环境搭建实战:从交叉编译到串口日志全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 4:34:22 阅读更多 →
抢答类知识竞赛的“对位”问题:8台编号抢答器、8块计分牌和计分系统怎么对上

抢答类知识竞赛的“对位”问题:8台编号抢答器、8块计分牌和计分系统怎么对上

说明:本文只写项目中可核的配置和做法,不涉及抢答器型号、无线通信方式、系统代码等实现细节。1. 项目背景2026年6月26日,万科集团第十二届工程师文化节知识竞赛决赛举行。参赛的是万科企业股份有限公司(万科集团)8个地…

2026/10/16 4:33:21 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →