MySQL数据库课程设计实战:仓库管理系统从业务建模到并发控制
1. 项目缘起从课程作业到实战演练的蜕变又到了一年一度的数据库课程设计季相信不少计算机相关专业的同学都收到过类似的任务设计并实现一个“仓库管理系统”。乍一看这似乎是个老生常谈的题目网上随便一搜就能找到一堆源码。但如果你真的打算CtrlC、CtrlV应付了事那可能就错过了一次绝佳的、从理论走向实践的“练级”机会。我当年也是从这种课程设计过来的后来在工作中负责过真实的仓储物流系统后端回过头看课程设计里埋着很多值得深挖的“宝藏”。这个项目标题——“仓库管理系统——mysql数据库课程设计”其核心价值远不止于交一份作业。它本质上是一个以MySQL为技术栈以仓储业务为场景的综合性数据库应用实践。你需要考虑的绝不仅仅是建几张表、写几个增删改查的SQL语句。它迫使你去思考一个最小化可行产品MVP背后的业务逻辑、数据流动、完整性和性能问题。从需求分析、概念设计画E-R图、逻辑设计设计表结构、物理实现MySQL建表、索引到最后的应用程序开发用Java、Python或PHP等连接数据库实现功能这是一条完整的软件工程链路。对于初学者它能帮你把《数据库系统概论》里那些抽象的概念如范式、事务、锁变得具体可感对于有一定基础的同学你可以借此机会深入探索MySQL的高级特性如存储过程优化查询、触发器维护数据一致性或是用Explain分析SQL性能。接下来我将结合我自己的学习和工作经验拆解这个项目的核心环节并补充那些教科书和普通博客很少提及的实战细节与避坑指南。2. 业务核心抽丝剥茧理解仓库管理的数据本质在做技术设计之前我们必须先成为半个“业务专家”。一个仓库管理系统WMS的核心数据流围绕“物”、“流”、“人”展开。课程设计通常简化了真实场景但基本模型不变。2.1 核心实体与关系分析抛开花哨的功能任何仓库管理都离不开以下几个核心实体商品Product/Item仓库里存储的对象。关键属性包括商品编号唯一标识、名称、规格、分类等。这里第一个坑就来了商品编号SKU的设计。很多同学直接用数据库的自增ID这在简单系统中没问题但在稍微复杂的业务里自增ID没有业务含义不利于线下盘点和管理。更专业的做法是设计一套有规则的编码例如“分类码供应商码序列号”。这需要在商品表里增加更多字段来支撑。仓库/库位Warehouse/Location商品存放的地点。课程设计中可能只有一个仓库但设计时最好预留扩展性。库位管理是提升拣货效率的关键可以设计库位编号如A-01-02表示A区1排2列。库存Inventory/Stock这是核心中的核心它不是一个独立实体而是“商品”和“库位”之间的一个“多对多”关系并带有属性“数量”。这意味着库存表至少包含商品ID、库位ID、当前数量。这里必须引入库存明细Inventory Detail的概念用于记录每一次数量变动的流水这是实现库存准确追溯的生命线。单据Order/Document驱动库存变化的“指令”。主要包括入库单Inbound Order对应采购、退货入库等。出库单Outbound Order对应销售、调拨出库等。调拨单Transfer Order仓库内部或跨仓库的库存移动。 每张单据都有状态待审核、执行中、已完成、已取消关联多个单据明细Order Detail明细里记录了商品和计划数量。2.2 关键业务规则与数据一致性挑战业务规则决定了我们的数据库设计和程序逻辑库存更新必须与单据联动出库时库存减少入库时库存增加。这听起来简单但在并发操作下是灾难。两个员工同时处理同一商品的出库可能导致库存超卖变为负数。解决方案是使用数据库事务和悲观锁如SELECT ... FOR UPDATE确保查询库存到扣减库存这个过程的原子性。批次与效期管理进阶如果仓库管理食品、药品就必须引入“批次号”和“生产日期/有效期至”。这时库存扣减就不能简单地按数量而要遵循“先进先出”FIFO或“先到期先出”FEFO规则。这会让库存扣减的SQL逻辑复杂数倍。审核流程重要的入库/出库单需要审核后才能生效。这意味着单据表和库存变动表是解耦的中间通过“审核”这个动作来触发。设计时需要考虑状态机。理解这些你的E-R图才不会只是几个方框加连线而是能体现业务约束的活模型。3. 数据库设计实战超越三范式的实用主义有了业务模型我们开始设计MySQL表。教科书强调三大范式以减少冗余但实战中我们常常为了性能进行适当的反范式化设计。3.1 核心表结构设计示例与思考以下是一些核心表的简化版DDL并附带了关键设计思考-- 商品表 CREATE TABLE product ( id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 自增主键, sku_code VARCHAR(50) NOT NULL COMMENT 商品唯一SKU编码业务标识, name VARCHAR(200) NOT NULL COMMENT 商品名称, spec VARCHAR(500) DEFAULT COMMENT 规格, category_id INT UNSIGNED COMMENT 分类ID, unit VARCHAR(20) DEFAULT 个 COMMENT 计量单位, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_sku (sku_code), KEY idx_category (category_id) ) ENGINEInnoDB COMMENT商品信息表;设计思考除了自增主键id必须有一个业务唯一的sku_code并建立唯一索引。category_id是外键关联分类表并建立了普通索引用于查询。时间戳字段对于数据追溯至关重要。-- 库存表核心 CREATE TABLE inventory ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, product_id INT UNSIGNED NOT NULL COMMENT 商品ID, location_id INT UNSIGNED NOT NULL COMMENT 库位ID, quantity DECIMAL(15,3) NOT NULL DEFAULT 0.000 COMMENT 当前数量支持小数如公斤, locked_quantity DECIMAL(15,3) NOT NULL DEFAULT 0.000 COMMENT 锁定数量如已下单未出库, available_quantity DECIMAL(15,3) GENERATED ALWAYS AS (quantity - locked_quantity) VIRTUAL COMMENT 可用数量虚拟列, PRIMARY KEY (id), UNIQUE KEY uk_product_location (product_id, location_id), -- 唯一约束防止重复记录 KEY idx_location (location_id), KEY idx_product (product_id) ) ENGINEInnoDB COMMENT库存表;设计思考这是设计精髓所在。product_id和location_id组成唯一键确保同一商品在同一库位只有一条记录。locked_quantity锁定库存是处理并发和预占的关键能有效防止超卖。available_quantity是MySQL 5.7支持的生成列自动计算避免程序逻辑错误。注意数量字段使用DECIMAL而非FLOAT确保精度。-- 库存流水表追溯生命线 CREATE TABLE inventory_detail ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, inventory_id BIGINT UNSIGNED NOT NULL COMMENT 库存记录ID, document_type TINYINT NOT NULL COMMENT 单据类型1-入库单2-出库单..., document_id BIGINT UNSIGNED NOT NULL COMMENT 对应单据ID, document_detail_id BIGINT UNSIGNED COMMENT 对应单据明细ID, change_quantity DECIMAL(15,3) NOT NULL COMMENT 变动数量正为增负为减, quantity_before DECIMAL(15,3) NOT NULL COMMENT 变动前数量, quantity_after DECIMAL(15,3) NOT NULL COMMENT 变动后数量, created_by VARCHAR(50) COMMENT 操作人, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_inventory (inventory_id), KEY idx_document (document_type, document_id) ) ENGINEInnoDB COMMENT库存明细流水表;设计思考这是实现“账实相符”和问题排查的核心。每一次库存变动无论大小都必须在此留下记录。quantity_before和quantity_after记录了精确的快照便于对账。document_type和document_id是通用设计可以关联各种类型的上游单据。3.2 索引策略与性能预考虑对于课程设计级别的数据量索引可能不那么关键但养成好习惯很重要。主键一律使用无意义的自增BIGINT/INTInnoDB将其作为聚簇索引能保证写入顺序减少页分裂。唯一索引用于保证业务唯一性的字段组合如(product_id, location_id)。普通索引用于高频查询的WHERE条件字段如category_id,location_id。但注意索引不是越多越好会影响写入速度。联合索引如果经常按product_id查询某个时间段的流水可以建立(product_id, created_at)的联合索引。4. 核心功能实现事务、锁与SQL的精准运用数据库设计得再好程序逻辑写错了也是白搭。下面以最关键的“创建出库单并扣减库存”为例展示一个相对健壮的实现逻辑。4.1 出库流程的伪代码与SQL实战假设我们使用Java Spring框架MyBatis或JdbcTemplate操作数据库。// 伪代码展示核心逻辑 Transactional(rollbackFor Exception.class) // 声明事务关键 public boolean createOutboundOrder(OutboundOrder order) { // 1. 插入出库单主表状态为“待处理” orderMapper.insert(order); for (OrderDetail detail : order.getDetails()) { // 2. 对每一行明细检查并锁定库存 // 关键SQL使用SELECT ... FOR UPDATE锁定库存行防止其他事务同时修改 Inventory inventory inventoryMapper.selectForUpdate(detail.getProductId(), detail.getLocationId()); if (inventory null || inventory.getAvailableQuantity().compareTo(detail.getPlanQuantity()) 0) { throw new RuntimeException(商品[ detail.getProductId() ]在库位[ detail.getLocationId() ]可用库存不足); } // 3. 更新库存增加锁定数量locked_quantity int updateCount inventoryMapper.lockInventory( inventory.getId(), detail.getPlanQuantity() // 要锁定的数量 ); if (updateCount ! 1) { // 预期更新一行 throw new RuntimeException(锁定库存失败可能数据已被修改); } // 4. 插入出库单明细关联库存记录ID detail.setOrderId(order.getId()); detail.setInventoryId(inventory.getId()); orderDetailMapper.insert(detail); } // 5. 更新出库单状态为“已锁定”或“待出库” orderMapper.updateStatus(order.getId(), OrderStatus.LOCKED); return true; // 如果任何一步失败Spring事务会回滚所有数据库操作 }对应的关键Mapper SQL示例!-- 1. 锁定查询 -- select idselectForUpdate resultTypeInventory SELECT id, product_id, location_id, quantity, locked_quantity FROM inventory WHERE product_id #{productId} AND location_id #{locationId} FOR UPDATE !-- 这是实现悲观锁的关键 -- /select !-- 2. 锁定库存增加锁定数 -- update idlockInventory UPDATE inventory SET locked_quantity locked_quantity #{lockQty}, updated_at NOW() WHERE id #{id} AND quantity - locked_quantity #{lockQty} -- 乐观锁条件再次检查可用数 /update4.2 事务与锁的深度解析为什么这么做Transactional确保“插入单据”、“检查库存”、“锁定库存”、“插入明细”这几个步骤是一个原子操作。要么全部成功要么全部回滚不会出现单据创建了但库存没锁定的中间状态。SELECT ... FOR UPDATE这是行级悲观锁。当第一个事务执行这条SQL时会对符合条件的行加锁写锁在事务提交或回滚前其他事务尝试对同一行进行FOR UPDATE查询或更新操作会被阻塞。这从根本上防止了“超卖”。UPDATE语句中的条件判断AND quantity - locked_quantity #{lockQty}这是一个额外的乐观检查作为最后一道防线。即使在高并发极端情况下也能保证数据一致性。避坑经验FOR UPDATE锁如果使用不当比如在事务中锁了多行然后进行复杂计算或等待用户输入会导致大量连接被阻塞数据库性能急剧下降。务必遵循“锁的粒度尽可能小持有锁的时间尽可能短”的原则。5. 报表、视图与存储过程的合理运用课程设计通常要求一些查询功能如查询库存、出入库流水等。直接写复杂SQL在应用层拼接既难看又难维护。5.1 使用数据库视图简化复杂查询例如我们需要一个“库存概览”查询显示商品名称、库位、总数量、可用数量。如果每次都JOIN商品表、库存表、库位表SQL会很冗长。可以创建一个视图CREATE VIEW v_inventory_overview AS SELECT p.sku_code, p.name as product_name, l.code as location_code, i.quantity, i.locked_quantity, i.available_quantity, i.updated_at FROM inventory i INNER JOIN product p ON i.product_id p.id INNER JOIN location l ON i.location_id l.id;这样应用程序只需要SELECT * FROM v_inventory_overview WHERE ...逻辑清晰很多。视图是一个虚拟表不存储数据只是存储了查询定义。5.2 存储过程将复杂逻辑封装在数据库端对于某些固定的复杂操作如每日凌晨生成库存快照可以使用存储过程。但注意现代应用开发中业务逻辑通常放在应用层存储过程更多用于数据迁移、定时统计等后台任务。DELIMITER // CREATE PROCEDURE GenerateDailyInventorySnapshot(IN snapshot_date DATE) BEGIN -- 将当日库存数据插入历史快照表 INSERT INTO inventory_snapshot (snapshot_date, product_id, location_id, quantity) SELECT snapshot_date, product_id, location_id, quantity FROM inventory; -- 记录操作日志 INSERT INTO job_log (job_name, status, remark) VALUES (库存快照, SUCCESS, CONCAT(快照日期, snapshot_date)); END // DELIMITER ;个人建议在课程设计中可以适当使用视图和存储过程来展示你对数据库高级功能的掌握但在真实的互联网应用中要谨慎使用存储过程因为它不利于水平扩展和版本管理。6. 课程设计报告与演示的加分项除了把系统做出来如何呈现你的工作同样重要。你的报告和演示应该体现你的思考过程。6.1 数据库设计文档不要只贴DDL语句。应该包括需求分析用简短文字描述系统要解决的核心问题。概念结构设计E-R图使用工具如Draw.io, Lucidchart绘制规范的E-R图标明实体、属性、联系类型1:1, 1:n, m:n。逻辑结构设计将E-R图转换为关系模式并说明如何解决多对多关系通过中间表并论证你的表设计满足第几范式以及为什么。物理结构设计完整的建表SQL包含字段注释、字符集utf8mb4、排序规则utf8mb4_general_ci、存储引擎InnoDB。索引设计说明为每个索引写明理由基于什么查询。安全性与完整性设计说明使用了哪些主键、外键、唯一约束、非空约束、CHECK约束MySQL 8.0支持、默认值。应用程序接口设计列出核心功能的API或函数说明特别是涉及数据库事务的部分。6.2 系统演示要点演示时不要只点按钮。要讲故事正常流程演示一个完整的商品入库、查询库存、创建出库单、出库扣减的流程。异常处理故意演示“库存不足时尝试出库”展示系统如何给出友好提示并阻止操作。数据一致性展示在操作前后分别查询库存表和库存流水表展示数据是如何联动变化的证明你的流水记录是完整的。并发控制如果实现可以打开两个浏览器窗口同时尝试出库同一批货物演示系统如何正确处理一个成功一个提示失败或等待。7. 常见问题排查与进阶思考在开发过程中你肯定会遇到各种问题。这里列举几个典型的问题1我的库存数量怎么变成负数了原因没有做并发控制。多个请求同时查询到库存充足然后各自进行扣减。解决如上文所述使用事务悲观锁SELECT ... FOR UPDATE或乐观锁在库存表加版本号字段更新时带版本条件。问题2查询库存流水报表速度很慢。原因流水表数据量大且查询可能没有用到索引或者有SELECT *全表扫描。解决为查询条件如product_id,created_at建立合适的联合索引。在查询语句中只选择需要的字段避免SELECT *。对于历史数据考虑按月分表分区例如inventory_detail_202401inventory_detail_202402。问题3我想实现“先进先出”FIFO该怎么设计进阶设计这需要引入“批次”概念。在inventory表中不能只有product_id和location_id还需要batch_no批次号或production_date生产日期。库存扣减时需要先查询该商品所有批次按日期排序然后从最早的批次开始扣减数量。这需要更复杂的SQL或应用层逻辑来控制。问题4老师要求用触发器Trigger来更新库存好不好我的看法触发器在插入出库单明细后自动扣减库存看似自动化但隐藏了业务逻辑使调试和排查问题变得困难。而且触发器中的错误难以捕获和处理。不推荐将核心业务逻辑放在触发器中。更推荐在应用层使用显式的事务来控制逻辑清晰可控性强。完成这个课程设计你收获的不仅仅是一个可以运行的系统更是一套完整的、关于如何用数据库支撑一个真实业务场景的思维框架。从业务建模到SQL优化从事务控制到异常处理每一步的思考和实践都会让你离一名合格的后端开发者更近一步。记住把这次作业当成一个真实的小项目来做多问几个“为什么”多尝试几种解决方案你会在过程中学到比课程要求多得多的东西。

相关新闻

OpenClaw自动化YouTube视频上传方案实践

OpenClaw自动化YouTube视频上传方案实践

1. 项目概述:OpenClaw自动化视频上传方案OpenClaw作为一款新兴的开源自动化工具,正在开发者社区快速流行。它通过模块化设计实现了各种工作流程的自动化串联,而将其与YouTube视频上传功能结合,可以显著提升内容创作者的工作效率。…

2026/10/14 2:24:30 阅读更多 →
Vue 3 keep-alive 缓存失效排查与实战指南

Vue 3 keep-alive 缓存失效排查与实战指南

1. 项目概述&#xff1a;从一次诡异的页面状态丢失说起最近在重构一个Vue 3的后台管理系统&#xff0c;遇到了一个挺典型的问题&#xff1a;我在几个列表页和详情页之间来回切换&#xff0c;期望用<keep-alive>来缓存列表的查询条件和滚动位置&#xff0c;结果发现完全没…

2026/10/14 2:24:30 阅读更多 →
ArcGIS标注与注记全解析:从动态规则到静态精修的制图进阶

ArcGIS标注与注记全解析:从动态规则到静态精修的制图进阶

1. 项目概述&#xff1a;从“标注”到“注记”的GIS表达进阶在地理信息系统的日常制图工作中&#xff0c;我们常常会遇到一个核心矛盾&#xff1a;如何让地图既承载海量的空间数据&#xff0c;又能清晰、美观、灵活地传达信息&#xff1f;ArcGIS Desktop中的“标注”和“注记”…

2026/10/13 8:19:09 阅读更多 →

最新新闻

【数据可视化-155】第十五届全运会乒乓球男单半决赛:樊振东VS王楚钦技术分析报告

【数据可视化-155】第十五届全运会乒乓球男单半决赛:樊振东VS王楚钦技术分析报告

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个…

2026/10/14 2:24:24 阅读更多 →
三分钟把 Windows 调顺:Winutil 系统瘦身与系统维护指南

三分钟把 Windows 调顺:Winutil 系统瘦身与系统维护指南

三分钟把 Windows 调顺&#xff1a;Winutil 系统瘦身与系统维护指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 刚重装完 Windows&#x…

2026/10/14 2:24:24 阅读更多 →
006-从0到1带你深入并发编程:AQS锁释放-为什么从尾向前遍历寻找后继节点?

006-从0到1带你深入并发编程:AQS锁释放-为什么从尾向前遍历寻找后继节点?

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐➕关注&#x1f440;是作者创作的最大动力&#x1f91e;&#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;关注&#x1f440;欢迎留…

2026/10/14 2:24:24 阅读更多 →
AI前沿论文解读|何恺明让AI“过目不忘“、1.7B小模型碾压6倍大模型、微软发现“清空聊天记录“性能暴涨66%

AI前沿论文解读|何恺明让AI“过目不忘“、1.7B小模型碾压6倍大模型、微软发现“清空聊天记录“性能暴涨66%

2026年10月三篇必读论文深度解读 导读&#xff1a; 2026年10月&#xff0c;AI领域涌现三篇令人眼前一亮的重磅论文。ResNet之父何恺明团队让AI拥有了"过目不忘"的视觉记忆&#xff0c;中国初创公司让1.7B参数的小模型在机器人操控上碾压6倍大的对手&#xff0c;微软则…

2026/10/14 2:24:24 阅读更多 →
zerolog PrettyLog 使用指南:为结构化 JSON 日志接入彩色控制台输出

zerolog PrettyLog 使用指南:为结构化 JSON 日志接入彩色控制台输出

后端可观测性 【免费下载链接】zerolog Zero Allocation JSON Logger 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ze/zerolog 点击查看 免费下载 zerolog 专注于高效的 JSON 结构化日志输出&#xff0c;而 PrettyLog 是官方仓库中提供的一个命令行小工具&#xff0…

2026/10/14 2:24:24 阅读更多 →
linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

运维观测指标监控监控大盘 【免费下载链接】linux-dash A beautiful web dashboard for Linux 项目地址&#xff1a; https://gitcode.com/gh_mirrors/li/linux-dash 点击查看 免费下载 本文以 src/css/README.md 中描述的"全局基础样式文件"&#xff08;Global CSS…

2026/10/14 2:23:24 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →