基于SpringBoot的仓库管理系统实战:从库存业务到并发部署
1. 先从项目说起这套仓库管理系统到底解决什么问题前阵子帮一个做五金配件贸易的朋友整理仓库管理流程发现他们还在用Excel记录出入库库存对不上、订单发货漏单是家常便饭。聊到最后他提了一个很实在的需求要一套能跑起来、能录入商品、能看出入库、能查库存、还能让几个人同时用的系统。于是就有了这套基于SpringBoot的商品仓库管理系统。这套系统并不是什么高大上的分布式架构但它是把一个仓库管理场景完整落地的典型样例。从技术栈上看后端用SpringBoot提供接口和页面渲染数据库用MySQL存商品、库存、单据数据前端用Thymeleaf模板加少量JavaScript完成交互整体就是一套非常标准的SpringBoot单体应用。同时因为我需要交付的不只是能跑的代码还包括论文、部署文档和讲解材料所以整个项目的设计从一开始就刻意保持了结构清晰、模块好讲、逻辑能自洽这三个特点。如果你正在做毕业设计或者需要给中小型仓库快速搭一套管理系统再或者想找一个能完整串起SpringBoot、MyBatis、MySQL、Thymeleaf的实战项目来练手这篇文章应该能帮你少走不少弯路。我会从技术选型讲到功能拆解从数据库设计讲到并发踩坑最后把部署过程和论文写作的思路也一并梳理出来。2. 技术选型的底层逻辑为什么是SpringBoot而不是别的2.1 SpringBoot在这一类管理系统里的真实优势很多人在做管理系统时会纠结要不要上SpringCloud、要不要前后端完全分离。我的建议是仓库管理系统这种业务体量SpringBoot单体完全够用而且是最稳的选择。SpringBoot最大的价值不是它能干什么而是它帮你省掉了大量原本需要手动维护的配置。比如集成MyBatis的时候放在几年前用SSM框架你得写数据源配置、SqlSessionFactory配置、Mapper扫描配置、事务管理器配置哪一个写错都够你排查半天。到了SpringBoot只需要一个spring-boot-starter-web、一个spring-boot-starter-data-jpa或者mybatis-spring-boot-starter再加一个数据源连接信息剩下的交给自动装配处理。我用的是SpringBoot 2.7.x版本配JDK 8。这里有个很实际的原因很多学校机房和老服务器上装的是JDK 8如果直接上SpringBoot 3.x加JDK 17部署环境不兼容会带来一堆额外问题。另一个原因是MyBatis Plus对SpringBoot 2.x的支持非常成熟分页插件、条件构造器都用得很顺手。技术栈清单大概是这样的组件版本/方案用途SpringBoot2.7.6应用主框架MyBatis Plus3.5.xORM、分页、条件查询MySQL5.7数据存储Thymeleaf内置集成服务端页面渲染Bootstrap jQuery3.x/3.6前端样式与交互Druid1.2.x数据库连接池与监控Lombok最新稳定版减少实体类冗余代码2.2 Thymeleaf还是前后端分离这是个决策点标题虽然是商品仓库管理系统但页面呈现方式直接影响整个项目的开发量。我在这套项目里选用了Thymeleaf服务端渲染而不是VueSpringBoot的前后端分离架构核心原因是对于中后台管理系统服务端渲染的开发效率极高不需要额外处理跨域、Token鉴权、接口文档维护这些事。Thymeleaf配合SpringBoot有一套非常完整的约定application.properties里配置视图前缀后缀Controller里返回视图名模板里用th:each遍历列表、th:if做条件判断、th:action动态拼URL。这套模式虽然看起来没有Vue那么现代但它有一个特别好的优点——逻辑链路短。从页面发起请求到Controller再到Service和Mapper最后返回页面渲染结果每一步都直观可查这对于论文写作和答辩讲解来说反而是优势。当然如果你后续想把系统扩展成多端适配比如加一个小程序端那前后端分离才是更合适的方向。我的经验是先明确交付目标和读者对象再决定架构不要从一开始就追求技术时髦。2.3 关于源码lw部署文档讲解的组合我的理解这套项目的完整交付物不只是源码还包括论文、部署文档和讲解材料。这说明它本质上是一个教学型工程衡量标准不是功能有多么花哨而是别人拿到手之后能不能看懂、能不能跑起来、能不能照着讲清楚。所以我从一开始就定了几条规矩。包名按controller/service/mapper/entity/dto明确分层类名和方法名尽量符合业务直觉关键逻辑加注释但不写废话提交的SQL脚本带初始化数据。这些看起来不起眼的小事最后都变成了论文写作时最好的素材——每一个功能模块的代码结构几乎可以直接映射成论文的章节结构。3. 功能模块拆解一个仓库管理系统到底需要哪些零件3.1 商品信息管理基础数据的增删改查远没那么简单如果只是做一个商品表的CRUD那这个系统就没有灵魂了。我在设计商品模块时一定要包含几个容易忽略的点。商品实体上除了基本的商品编码、名称、规格型号、单位、单价之外还有一个关键字段叫库存预警阈值。这个字段的作用是当库存数量低于设定值时系统在商品列表中用醒目的方式标记缺货。这个功能在业务上非常实用同时实现起来也不复杂——查询的时候把stock数量 threshold的商品筛选出来前端做样式渲染即可。但很多教程里恰好不做这一点导致项目看起来像玩具。另一个细节是商品编码的唯一性校验。仓库里同一个商品如果存在多个编码后面统计会乱得一塌糊涂。所以我在新增商品时用数据库唯一索引加上业务层校验双重保证。业务层校验的逻辑是select count(*) from goods where goods_code ? and is_deleted 0如果大于0则抛出业务异常商品编码已存在。这个校验逻辑虽然简单但它体现了数据库约束和业务校验配合使用的设计习惯。3.2 入库与出库整个系统的骨骼所在商品管理只是基础档案真正体现仓库业务的是入库单和出库单。我把单据设计成了主从表结构主表inbound_order/outbound_order记录单据编号、往来单位、操作人、单据日期、总金额、备注等汇总信息从表inbound_order_item/outbound_order_item记录具体每一件商品的编码、名称、数量、单价、金额。这种主从表结构非常贴合真实仓库的纸质单据习惯而且它在论文里很好展开。主表对应的是一张单从表对应的是单上的行一对多关系用外键order_id关联。录入单据时前端页面先维护一个明细列表的数组提交时一次性把主表和明细列表传到后端Service层用Transactional保证主表从表同时写入成功。入库和出库操作还有一个核心动作变更库存。入库是stock stock quantity出库是stock stock - quantity。这个动作不能只改库存表还必须同时写一条库存流水记录方便追溯这个商品的数量为什么变了。3.3 库存查询与盘点数据口径必须统一库存模块我做了两个页面。第一个是库存总览按照商品维度展示当前库存数量、占用金额、预警状态支持按商品编码和名称模糊搜索。第二个是库存流水展示每一笔入库出库操作的时间、类型、数量、变更前库存、变更后库存、操作人。这两个页面配合起来既能看现在有多少也能查是怎么变成现在这样的。这里必须强调一个数据口径问题。系统里存在两个库存概念一个是goods表上的冗余库存字段一个是stock_record流水表里的动态记录。我在设计时规定goods.stock字段是当前时刻的真实库存流水表负责解释这个值的变化历史。任何修改库存的操作都必须在同一个事务里同时更新这两个地方。如果你改了商品表库存却忘记写流水或者写了流水但没同步商品表库存日后的对账会非常痛苦。盘点功能虽然是常态需求但我在这套系统里做成了盘点单的简化版生成盘点单时冻结当前库存快照录入实盘数量后系统自动计算盈亏数量并生成一条调整记录。由于篇幅原因这个模块我只做了基础版本但冻结快照再对比的思路是必须保留的。3.4 登录与权限不该被忽略但经常被忽略仓库管理系统里不是所有人都应该能删除单据、修改商品的。我用SpringBoot整合了最简单的Session登录校验配合拦截器实现了最基础的角色权限控制。用户表设计为id, username, password, real_name, role, statusrole分为管理员和普通操作员两种。管理员可以访问全部菜单普通操作员只能做录入和查询不能做删除操作。密码的存储使用MD5加盐的方式加密——这里说一下虽然MD5不算安全的加密算法但教学场景下演示密码不可以明文存储这个知识本身是够用的如果要拿到生产环境建议换成BCrypt。拦截器的实现方式是自定义一个HandlerInterceptor在preHandle里判断Session中是否存在loginUser如果不存在就重定向到登录页。再用WebMvcConfigurer注册拦截器并设置排除路径放行登录接口和静态资源。这个做法会让系统立刻变得像一个正经系统而不是一个单纯的CRUD后台。4. 数据库设计里的关键抉择建表不是写SQL那么简单4.1 库存字段的归属问题放在哪个表、怎么冗余数据库设计的好不好直接影响后面代码的复杂度。我在这个系统里经历了两个版本的库存表设计第一个版本是单独建一张stock表表里记录goods_id, quantity, warehouse_id第二个版本是直接把库存字段冗余到goods表上。最后我选了第二个方案也就是把stock字段放在goods表里。理由有两个。第一这套系统是单仓库场景不需要按仓库拆库存独立库存表反而会引入不必要的JOIN查询。第二从页面展示角度商品列表可以直接显示库存数量不需要再查一遍库存表如果独立库存表每查一次列表都要多一个关联查询性能和维护成本都上去了。当然如果系统以后扩展成多仓模式库存流水表就得加上warehouse_id字段goods表里的冗余库存也必须改成按(goods_id, warehouse_id)维度的库存明细表。这是个取舍问题——因为当前的业务规模是单仓所以我选择最简单的建模方式。这一点在论文里也能体现出根据业务需求选择建模方案的思考过程。4.2 主表编码的设计业务单号不能依赖自增ID仓库单据在业务上和物流、账务有关联所以单据编码必须可读、可追溯。我设计的入库单号格式是RK yyyyMMdd 三位流水号比如RK20250115001。生成方式是在Service层先查当天已有的最大单号然后加一。虽然在高并发下这种方式可能有并发问题但在教学项目场景下足够可靠而且单号的可读性非常好。用自增ID做主键没问题但单号字段一定不能直接用ID代替。否则打印出来的单据上写着一条123456别人根本看不出是哪天的哪一笔单。使用yyyyMMdd格式的日期部分也能方便后面写查询某段时间内的入库单这类业务。4.3 逻辑删除与唯一索引的坑我在所有核心业务表上都加了is_deleted字段做逻辑删除0表示正常1表示已删除。这样做的好处是数据不丢失坏处是每一条查询SQL都必须带is_deleted 0条件否则删除的数据还会出现在列表里。更麻烦的是唯一索引和逻辑删除的冲突。比如商品编码设置了唯一索引uk_goods_code当某条记录被逻辑删除后如果再新增一条相同编码的商品因为旧记录还躺在表里唯一索引会直接报错。这种情况的解决办法有两种一是删除时把编码改成一个带时间戳的已删除值二是把唯一索引改成复合索引比如(goods_code, is_deleted)。我在项目里用的是第二种因为改动最小而且查询条件普遍包含is_deleted字段这个复合索引顺带还能起到加速查询的作用。这些建表层面的经验没有踩过坑很难体会到写论文的时候如果把逻辑删除与唯一索引冲突的解决方案作为数据库设计的一个小节会显得项目非常接地气远比只写建了五张表有说服力。5. 真正容易翻车的地方并发扣库存与事务处理5.1 商品出库时怎么防止超卖这件事必须单独拿出来讲。出库的逻辑看起来很简单查出库存判断够不够够就减一。但在并发场景下如果两个人同时操作同一个商品出库都查到了剩余库存为5都判断够了然后各自扣减库存就变成了负数。这套系统虽然不像秒杀系统那样有极高的并发压力但库存不能变负数是一个数据完整性的底线必须在设计上堵住这个漏洞。我给了三种方案代码里采用的是第三种第一种是select先查再update并发下会超卖绝对不能用。第二种是update goods set stock stock - 1 where id ? and stock 1靠数据库行锁和条件判断保证不会被扣成负数失败后返回影响行数为0业务层据此抛出库存不足。第三种是在第二种的基础上加入Transactional保证库存扣减和流水写入同时成功或同时失败。我在ServiceImpl里写了一段很典型的代码核心就是先拼update语句带上stock #{quantity}的条件然后判断返回行数如果行数等于0就抛出异常并回滚。这里有个细节UPDATE语句执行时MySQL会锁住匹配到的行直到事务提交所以第二个并发出库请求会在锁上等待等第一个事务提交后再检查stock quantity这个条件从而避免超卖。这就是数据库行锁在业务里最典型的应用。5.2 事务边界把改库存和记流水绑在一起在上面的出库逻辑里扣减库存和插入一条库存流水记录必须放在同一个事务里。否则会发生库存扣了但流水没记或者流水记了但库存没扣的脏数据情况。我在类上标注Transactional(rollbackFor Exception.class)并且把rollbackFor明确写成Exception.class。这里有一个常见坑Spring默认只在遇到运行时异常时才回滚如果遇到IOException这种受检异常事务不会自动回滚。虽然当前系统里很少会抛出受检异常但写上rollbackFor Exception.class已经成为我的习惯这是一个成本极低但能让行为完全符合预期的配置。另一个事务相关的经验是不要以为Transactional加上了就万事大吉。update语句在InnoDB引擎下走索引锁定行但如果你update的条件没有走索引InnoDB可能会锁全表。所以在stock扣减语句里where条件一定要用主键id或者有索引的商品编码而不是其他没有索引的字段。这个问题解释起来简单但实际排查的时候坑了不少人。5.3 全局异常处理错误信息不能直接甩给用户一个管理系统用户点了出库后台报了个空指针异常页面显示白屏或者一大段英文错误堆栈这一定是不合格的体验。我在项目里定义了统一的返回结构和异常处理机制。具体做法是定义一个Result类包含code、message、data三个字段定义一个BusinessException业务异常类所有的业务错误都通过抛BusinessException来处理再用RestControllerAdvice写一个全局异常处理器捕获BusinessException后返回code400, message异常信息捕获其余异常后返回code500, message系统异常请稍后重试并在控制台打印堆栈方便排查。这套机制配合统一返回结构使用页面不管成功还是失败都能拿到一个结构化的JSON对象前端根据code字段判断是否操作成功。这样做还有一个附带收益论文的功能设计部分可以直接放一张统一响应结构的表来说明系统的健壮性属于性价比极高的设计。6. 从本地跑通到服务器部署这些坑我踩过替你排掉6.1 打包与运行Maven命令和JDK版本的配合本地开发环境我用的JDK 8Maven通过IDEA自带的配置打包。等到要部署到服务器的时候踩了一个经典的环境坑开发环境JDK是8服务器上恰好装了JDK 17直接把开发环境打包出来的Jar丢上去运行就会报UnsupportedClassVersionError。所以我在部署文档里第一步就是强调确认Java版本。服务器端安装和开发环境一致的JDK版本然后在项目根目录执行mvn clean package -DskipTests这个命令会跳过单元测试直接打包在target目录下生成xxx.jar。我这里选择跳过测试不是说测试不重要而是仓库管理系统这种项目测试用例往往没来得及认真写如果测试类里有个环境依赖问题反而会卡住打包流程。等系统稳定了之后再把测试补全也不迟。6.2 服务器端的MySQL配置别忘了时区和编码在服务器上装好MySQL后一定要检查两个地方一是数据库编码二是时区设置。创建数据库的时候我用CREATE DATABASE warehouse_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;这一步如果用了默认的latin1后面中文数据全都会变成乱码排查起来极其痛苦。同时SpringBoot连接串里也要显式声明编码和时区spring.datasource.urljdbc:mysql://localhost:3306/warehouse_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai不设置时区的话JDBC驱动通常会在启动时报错或者插入的时间比实际时间少8小时。这种问题非常隐蔽你看到数据表里时间是少8小时的第一反应一般是去查业务代码查了半天发现是连接参数的问题。6.3 用Nginx做反向代理让项目跑得更正规SpringBoot的Jar包启动后默认监听8080端口使用nohup java -jar xxx.jar log.log 21 命令放在后台运行。这里要注意的一点是nohup和组合起来之后关掉终端窗口也能继续运行但如果你想停止服务只能用ps -ef | grep java找到PID再kill。如果只是测试环境直接IP加8080端口访问就够了。但为了看起来更正式也为了后续部署方便我在服务器上装了Nginx做反向代理把80端口转发到8080端口。配置的核心内容如下server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }配置完成执行nginx -s reload让配置生效。这样访问http://服务器IP就可以直接打开系统不用再输端口号。部署文档里我特意把这个配置单独列成一节因为很多第一次部署项目的人卡在Jar包能跑但感觉不像一个正式系统这种心理落差上。6.4 部署文档要讲清楚的三件事交付的部署文档不能只写运行mvn命令、启动Jar包这几句话。我写部署文档的时候要求自己把下面三件事说清楚第一环境依赖清单和版本对应关系JDK、MySQL、Maven之间不能有版本冲突第二初始化数据的方式init.sql脚本放在哪个目录、怎么导入、导入之后默认登录账号密码是什么第三常见问题的排查路径比如数据库连不上先检查什么、端口被占用怎么处理、日志去哪看。部署文档的受众通常是一个没有接触过项目的新手他拿到文档之后能不能独立把系统跑起来是对文档质量最好的检验。我自己每次写完部署文档都会用一个干净的服务器环境从头走一遍流程这个过程特别能发现遗漏。7. 论文lw和讲解材料的核心思路技术与业务如何对齐7.1 论文的章节结构怎么搭才不会写成一堆代码说明标题里带了lw本质上是论文。论文最忌写成系统有增删改查功能这种流水账。我的写法是第一章绪论讲背景和意义第二章相关技术介绍第三章需求分析第四章系统设计包括总体架构、功能模块设计和数据库设计第五章系统实现按功能模块逐个介绍关键代码和核心流程第六章系统测试包括功能测试用例和性能测试的简单结果最后是总结和致谢。这个结构本身很常规但真正拉开差距的是怎么把代码设计讲出理由。比如第四章数据库设计部分我会写库存字段冗余到商品表这个决策的取舍分析第五章出库模块我会写防止库存超卖的并发处理方案以及为什么用行锁而不是应用层锁。这些内容都源于真实的编码过程是从代码里提炼出来的设计思想而不是照着代码抄一遍。论文的价值在于解释为什么这样实现而不只是实现了什么。7.2 讲解材料怎么做跟着业务场景走而不是跟着代码走讲解视频或者PPT我建议不要从application.properties开始讲因为听众根本记不住配置项。最有效的思路是用一个完整的业务场景开场比如仓库收到一批新货品需要入库我来演示一下操作流程。然后顺着这个流程把涉及的表结构、后端接口、页面渲染逻辑一步一步带出来。观众先看到结果再听到背后的代码实现理解成本会低很多。讲解的每一段最好对应一个能明确说出来的业务动作。比如点击新增商品按钮前端提交表单到/goods/add接口Service层做编码唯一性校验然后执行插入语句最后跳转到商品列表页。这样讲每一段都信息量明确、逻辑闭环也方便听众按段落回复播学习。7.3 源码整理命名一致性和注释习惯是隐形的加分项源码交付时类名、方法名和注释的规范性比想象中更重要。我会要求所有Controller类都继承一个公共的BaseController统一处理返回值所有Service接口和实现类分开接口定义方法注释实现类写核心逻辑注释。Mapper方法的命名也统一按insert/delete/update/select开头方便检索。注释这块我特别克制只写业务意图不写显而易见的废话。比如根据商品编码查询最新库存是有意义的注释但传入参数goodsId这种就完全没必要写。好的源码拿到手之后别人看十分钟代码结构就应该能说出系统有哪些模块——这个要求不高但很多人做不到。8. 项目里那些可讲但不必要的扩展点我留了个口子这套系统做完基础功能后其实还能继续往几个方向扩展。我在项目里预留了一些设计接口但没有完全实现原因是它会拖长交付周期而且不一定在需求边界内。第一个扩展点是供应商和客户的独立管理。当前系统的入库单和出库单上只有往来单位这样一个文本字段如果要做下一步升级应该拆出supplier和customer两个表通过外键关联单据主表。这样能实现按供应商统计进货金额、按客户统计出货金额的分析报表。第二个扩展点是简单的库存预警消息推送。我做了预警标记但还缺一个主动通知机制。真要扩展的话可以加一个定时任务每天扫描goods表里stock threshold的商品生成待办消息或者发送邮件通知。第三个扩展点是操作日志的完整审计。目前只有登录和库存流水真正的生产环境还需要一张统一的operation_log表记录谁在什么时间点了什么按钮、操作前后数据是怎样的。这些扩展点我在论文的展望部分会一一提到但不会强行实现。原因很简单毕业设计和商业项目都要有边界意识把基础功能做扎实、把设计思路讲清楚远比堆砌一堆锦上添花但不稳定的功能有价值。根据我的经验做这类系统最怕的不是技术难点而是什么都想做但什么都没做透。能把商品管理、入库出库、库存查询、登录权限这四条主线做成闭环再配上一份能跑通的部署手册你的项目就已经超过了大多数同类作品。后面那些花哨的扩展留到真正有业务需求时再动手也不迟。

相关新闻

央国企信创数字化落地指南:从研究报告到迁移实操与避坑

央国企信创数字化落地指南:从研究报告到迁移实操与避坑

简介:这份《2025年央国企信创数字化研究报告》面向央国企数字化负责人、信创从业者及关注AI产业趋势的研究人员,系统梳理2025年人工智能在信创建设中的技术演进与落地路径,帮助读者把握从推理计算、合成数据到量子AI融合的关键方向。资源为单…

2026/10/11 9:40:46 阅读更多 →
Linux 命令 + AI 辅助排查:测试工程师实战指南

Linux 命令 + AI 辅助排查:测试工程师实战指南

Linux 命令 AI 辅助排查:测试工程师实战指南作者:楠风测开 | 5 年测试工程师 | 上海 本文 3800 字 | 阅读 10 分钟 | 建议收藏 ⭐前言Day 7-10 我讲了 AI 工作流、Obsidian 第二大脑。进入 Linux 领域——测试工程师必备技能。我做测试 5 年&#xff0c…

2026/10/11 9:40:46 阅读更多 →
女装视频的素材呈现与退货预期:尺码、色差、垂坠的核对口径

女装视频的素材呈现与退货预期:尺码、色差、垂坠的核对口径

做女装的人对两个数字大概都不陌生。网经社的行业估算里,女装退货率从几年前的三成上下涨到了六成到八成这个区间,直播渠道还要再高一些。另一头是上新节奏,SHEIN 最近一个季度的日均上新量在 4700 款左右,财新周刊和香港贸发局的…

2026/10/11 9:40:46 阅读更多 →

最新新闻

从0到1搭建内容分发体系:2026自媒体矩阵运营全攻略

从0到1搭建内容分发体系:2026自媒体矩阵运营全攻略

流量逻辑已彻底更迭,单账号单打独斗的运营模式红利消退。当下多数自媒体创作者、中小品牌布局多账号矩阵时,普遍面临内容同质化、违规踩坑、数据难溯源、人力成本高、转化效率低等问题。专业的内容分发体系绝非简单一键转载内容,而是围绕用户…

2026/10/11 10:26:10 阅读更多 →
Eclipse Core:统一后端启动、配置与链路追踪的应用内核实践

Eclipse Core:统一后端启动、配置与链路追踪的应用内核实践

在项目组里待久了,你会发现很多系统最后不是死在业务上,而是死在基础层上。Eclipse Core 是我们团队内部研发的一套应用内核项目,代号就叫 Eclipse Core,它主要负责统一管理应用的启动引导、模块加载、配置拉取、事件分发和链路追…

2026/10/11 10:26:10 阅读更多 →
深度学习加速核心:GEMM优化从分块到TensorCore的实战解析

深度学习加速核心:GEMM优化从分块到TensorCore的实战解析

做深度学习部署这些年,我几乎每天都要和GEMM(通用矩阵乘法)打交道。刚开始写算子时,我以为把三層循环写对就算完事,直到用Profiler一看,才发现手写版连硬件峰值算力的5%都跑不到。后来我仔细研究了一个叫De…

2026/10/11 10:26:10 阅读更多 →
XPath Helper插件实战:从元素定位到Python爬虫提取的完整指南

XPath Helper插件实战:从元素定位到Python爬虫提取的完整指南

简介:xPath helper 是一款面向 Python 爬虫开发者与前端调试人员的 Chrome 浏览器插件,安装后可在页面中直接获取任意 HTML 元素的 XPath 路径,省去逐行翻阅源码、手动定位 id 与层级结构的繁琐过程,尤其适合刚接触网页解析、需要…

2026/10/11 10:26:10 阅读更多 →
DeepSeek部署实战:从选型、量化到调参与排障

DeepSeek部署实战:从选型、量化到调参与排障

简介:面向深度学习部署与运维人员的 DeepSeek 模型部署指南,以单个 docx 文档系统梳理模型落地全流程:从操作系统选型、CPU/GPU/内存配置、Python 与 CUDA/cuDNN 依赖安装,到官方代码与预训练模型获取、虚拟环境搭建,再…

2026/10/11 10:26:10 阅读更多 →
深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

简介:基于深度学习的文字识别系统完整项目包,面向毕业设计、课程设计与期末大作业场景,适合需要快速搭建OCR系统的计算机相关专业学生。项目采用CNN与RNN结合实现文字检测与识别,覆盖图像预处理、模型训练、后端接口与移动端展示全…

2026/10/11 10:25:10 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →