JSP图书销售系统实战:从建表到库存扣减的完整实现
简介这是一套面向Java Web初学者与课程设计者的网上图书销售系统源码基于JSP技术实现适合用于毕业设计、课程实训或自学练手。系统涵盖图书浏览、购物车、订单管理、用户与图书后台维护等核心模块下载后按说明书配置即可在本地运行。压缩包共243个文件约541KB其中58个java源文件与59个class编译文件构成业务逻辑主体50个jsp页面负责前台展示与后台交互另有css样式、gif与jpg图片资源、inc公共文件及mdb数据库文件结构完整、层次清晰。目前已有163人学习下载。读者可从中获得一套可直接运行的JSP项目实例理解Servlet与JSP协作方式、购物车与订单流程设计、数据库连接与后台增删改查实现并借助源码与页面文件对照调试快速掌握Java Web开发的基本套路与排错思路。1. 从一份 jsp.rar 说起图书销售系统到底该做成什么样如果你手里正躺着一个名为jsp.rar的压缩包解压后是一堆.jsp、.java、.xml和几张模糊的数据库截图标题写着「图书销售系统」那你大概率正面临一个经典局面要么是课程设计要交差要么是接了个小书店的进销存需求要么是想拿它当 Java Web 入门练手项目。这个标题背后真正要解决的问题不是「怎么把页面画好看」而是「怎么用 JSP 把图书的进、销、存、查这条链路跑通并且让代码结构不至于三天后就改不动」。它适合三类人刚学完 Servlet 想找个完整项目练手的在校生、需要快速交付一个小型图书管理后台的独立开发者、以及想理解传统 JSP 分层架构到底怎么落地的一线工程师。接下来我不谈空泛的「系统设计」只讲这套东西从建表到跑通的最小路径以及我踩过的那些坑。2. 图书销售系统的数据模型与 JSP 分层先想清楚再动手2.1 图书销售场景下必须落地的四张核心表很多教程一上来就让你建七八张表结果做到一半发现字段对不上。我一般会先把业务压缩到最小闭环图书、分类、订单、订单明细。用户表可以先用一张简单的t_user顶着权限只分普通用户和管理员。下面是我常用的建表 SQL字段类型按 MySQL 8 写字符集统一utf8mb4避免中文书名乱码。-- 图书分类表 CREATE TABLE t_category ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL COMMENT 分类名如计算机、文学, sort_order INT DEFAULT 0 COMMENT 排序权重 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 图书表 CREATE TABLE t_book ( id INT PRIMARY KEY AUTO_INCREMENT, isbn VARCHAR(20) NOT NULL UNIQUE COMMENT ISBN 唯一, title VARCHAR(200) NOT NULL, author VARCHAR(100), price DECIMAL(10,2) NOT NULL DEFAULT 0.00, stock INT NOT NULL DEFAULT 0 COMMENT 库存, category_id INT, cover_img VARCHAR(255) COMMENT 封面图路径, status TINYINT DEFAULT 1 COMMENT 1上架 0下架, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (category_id) REFERENCES t_category(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 订单主表 CREATE TABLE t_order ( id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(32) NOT NULL UNIQUE COMMENT 业务订单号, user_id INT NOT NULL, total_amount DECIMAL(10,2) NOT NULL, status TINYINT DEFAULT 0 COMMENT 0待支付 1已支付 2已发货 3完成, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 订单明细表 CREATE TABLE t_order_item ( id INT PRIMARY KEY AUTO_INCREMENT, order_id INT NOT NULL, book_id INT NOT NULL, quantity INT NOT NULL, unit_price DECIMAL(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES t_order(id), FOREIGN KEY (book_id) REFERENCES t_book(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;逻辑说明t_book里的stock是库存扣减的关键字段下单时必须在同一个事务里先SELECT ... FOR UPDATE再更新否则并发下会超卖。t_order_item的unit_price要单独存不能只靠t_book.price关联查询因为图书调价后历史订单金额必须保持不变。参数上DECIMAL(10,2)比FLOAT更适合金额utf8mb4能存下生僻字和 emoji 书名。2.2 JSP 页面该放在哪一层MVC 在传统项目里的真实分工JSP 本身只是视图技术但很多人写着写着就把 JDBC 查询塞进% %脚本里最后页面又长又难调。我一般强制三层dao层只做数据库 CRUDservice层处理库存扣减和订单组装servlet或controller负责接收参数和跳转JSP 只负责用 EL 和 JSTL 渲染。下面是一个典型的图书列表 Servlet 片段。// BookListServlet.java WebServlet(/book/list) public class BookListServlet extends HttpServlet { private BookService bookService new BookServiceImpl(); Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String keyword req.getParameter(keyword); String categoryId req.getParameter(categoryId); // 分页参数默认第一页每页 10 条 int page Integer.parseInt(req.getParameter(page) null ? 1 : req.getParameter(page)); int size 10; PageResultBook result bookService.queryBooks(keyword, categoryId, page, size); req.setAttribute(pageResult, result); req.getRequestDispatcher(/WEB-INF/jsp/book_list.jsp).forward(req, resp); } }逻辑说明把 JSP 放在WEB-INF下是为了防止用户直接通过 URL 访问到未经过 Servlet 准备数据的页面这是 JSP 项目里最容易被忽略的安全习惯。参数page和size控制分页keyword和categoryId支持组合筛选。Service 层返回的PageResult里包含list、total、totalPageJSP 用 JSTL 的c:forEach遍历即可完全不需要再写 Java 脚本。2.3 用 JSTL 替代脚本片段让图书列表页干净到能维护下面这段 JSP 是我认为最值得抄作业的部分它把图书列表的渲染逻辑压缩到几乎没有 Java 代码。% page contentTypetext/html;charsetUTF-8 languagejava % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % % taglib prefixfmt urihttp://java.sun.com/jsp/jstl/fmt % html headtitle图书列表/title/head body table border1 trthISBN/thth书名/thth作者/thth价格/thth库存/thth操作/th/tr c:forEach items${pageResult.list} varbook tr td${book.isbn}/td td${book.title}/td td${book.author}/td tdfmt:formatNumber value${book.price} pattern#,##0.00//td td${book.stock}/td td c:if test${book.stock 0} a href${pageContext.request.contextPath}/order/add?bookId${book.id}加入订单/a /c:if c:if test${book.stock 0}缺货/c:if /td /tr /c:forEach /table /body /html逻辑说明c:forEach的items直接取pageResult.listvar声明循环变量。fmt:formatNumber负责金额格式化避免页面上出现19.9和19.90混排。${pageContext.request.contextPath}是获取项目根路径的标准写法部署到 Tomcat 后无论上下文怎么改都不会 404。注意c:if判断库存时用的是 EL 表达式不要写成% book.getStock() 0 %否则又退回到脚本时代。3. 从零跑通图书销售系统环境、部署与核心功能实现3.1 本地环境搭建JDK、Tomcat 与 MySQL 的版本匹配我见过太多人卡在环境上不是 JDK 版本太高导致 Tomcat 起不来就是 MySQL 驱动包放错位置。下面是我验证过能跑通的组合直接照抄即可。组件推荐版本说明JDK8 或 11JSP 项目用 8 最稳11 需要确认 Tomcat 版本Tomcat8.5 或 9.09.0 对 Servlet 4.0 支持更好MySQL5.7 或 8.08.0 需要换com.mysql.cj.jdbc.Driver驱动包mysql-connector-java-8.0.x.jar放在WEB-INF/lib下IDEIntelliJ IDEA 或 EclipseIDEA 需配置 Artifacts 才能部署配置数据库连接时我一般把参数写在db.properties里而不是硬编码在 Java 类中。jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/bookstore?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.passwordyour_password逻辑说明serverTimezone必须加否则 MySQL 8.0 会报时区错误。characterEncodingutf8要和建表时的utf8mb4配合防止中文乱码。读取时用Properties类加载再交给DruidDataSource或简单的DriverManager管理连接。3.2 图书查询与分页一条 SQL 搞定搜索和分类筛选分页查询是图书销售系统里最频繁的操作写不好就是全表扫描。我一般用「先查总数再查列表」的两段式SQL 如下。-- 查总数 SELECT COUNT(*) FROM t_book b WHERE b.status 1 AND (b.title LIKE CONCAT(%, ?, %) OR b.author LIKE CONCAT(%, ?, %)) AND (? IS NULL OR b.category_id ?); -- 查当前页列表 SELECT b.*, c.name AS category_name FROM t_book b LEFT JOIN t_category c ON b.category_id c.id WHERE b.status 1 AND (b.title LIKE CONCAT(%, ?, %) OR b.author LIKE CONCAT(%, ?, %)) AND (? IS NULL OR b.category_id ?) ORDER BY b.create_time DESC LIMIT ?, ?;逻辑说明(? IS NULL OR b.category_id ?)是一个常用技巧当分类参数为空时条件恒真避免在 Java 里拼接 SQL 字符串。LIMIT ?, ?的第一个参数是偏移量(page-1)*size第二个是每页条数。注意LIKE CONCAT(%, ?, %)会导致索引失效图书量超过十万时需要考虑全文索引或 Elasticsearch但小书店场景完全够用。3.3 下单与库存扣减事务边界和超卖问题的处理下单是图书销售系统里唯一不能出错的地方。我见过有人先查库存再更新中间隔了几百毫秒并发一上来就超卖。正确做法是在一个事务里锁行。// OrderServiceImpl.java public void createOrder(int userId, int bookId, int quantity) { Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); // 锁住图书行防止并发扣减 String lockSql SELECT stock, price FROM t_book WHERE id ? FOR UPDATE; PreparedStatement ps conn.prepareStatement(lockSql); ps.setInt(1, bookId); ResultSet rs ps.executeQuery(); if (!rs.next()) throw new RuntimeException(图书不存在); int stock rs.getInt(stock); BigDecimal price rs.getBigDecimal(price); if (stock quantity) throw new RuntimeException(库存不足); // 扣库存 String updateSql UPDATE t_book SET stock stock - ? WHERE id ?; PreparedStatement ups conn.prepareStatement(updateSql); ups.setInt(1, quantity); ups.setInt(2, bookId); ups.executeUpdate(); // 写订单主表和明细表 // ... 省略插入逻辑 conn.commit(); } catch (Exception e) { if (conn ! null) conn.rollback(); throw new RuntimeException(下单失败, e); } finally { DBUtil.close(conn); } }逻辑说明FOR UPDATE会在事务提交前锁住这一行其他并发请求会阻塞等待从而保证库存不会扣成负数。setAutoCommit(false)开启事务任何一步失败都rollback。参数quantity必须在前端和后端都做校验前端限制不能超过库存后端再兜底一次。注意FOR UPDATE必须在事务里才有意义如果自动提交模式下执行锁会立即释放。3.4 订单状态流转从待支付到完成的 JSP 页面跳转订单状态一般用数字表示但页面上要显示中文。我习惯在 JSP 里用c:choose做映射而不是在 Java 里写一堆 if-else。c:choose c:when test${order.status 0}span stylecolor:orange待支付/span/c:when c:when test${order.status 1}span stylecolor:blue已支付/span/c:when c:when test${order.status 2}span stylecolor:green已发货/span/c:when c:when test${order.status 3}span stylecolor:gray已完成/span/c:when c:otherwise未知状态/c:otherwise /c:choose逻辑说明c:choose相当于 Java 的 switchc:when是分支c:otherwise是默认。状态值定义在 Java 常量类里JSP 只负责展示两边约定好数字含义即可。如果状态超过五个建议改成在数据库里存状态描述或用一个Map在 Servlet 里转换好再传给 JSP。4. 图书销售系统避坑排查那些让我加班到凌晨的翻车现场4.1 中文乱码从 Tomcat 到 MySQL 的完整排查链现象图书标题在列表页显示正常但搜索「计算机」时查不到任何结果或者新增图书后数据库里是问号。原因乱码可能出现在三个环节——JSP 页面编码、Tomcat 请求编码、MySQL 连接编码。解决第一步每个 JSP 头部加% page contentTypetext/html;charsetUTF-8 %第二步在web.xml里配置CharacterEncodingFilter强制请求和响应都用 UTF-8第三步检查 JDBC URL 是否带characterEncodingutf8以及数据库和表的字符集是否为utf8mb4。三步缺一不可我一般用「新增一条中文书名 → 查数据库 → 页面搜索」这个链路逐段验证。4.2 数据库连接池耗尽Druid 配置里的三个关键参数现象系统跑一段时间后页面卡死日志报GetConnectionTimeoutException。原因连接池最大连接数设得太小或者代码里拿了连接没关闭。解决在druid.properties里把maxActive调到 20 以上maxWait设为 3000 毫秒同时开启removeAbandonedtrue和removeAbandonedTimeout180让池子自动回收泄漏的连接。更重要的是在 DAO 层用 try-with-resources 确保Connection、PreparedStatement、ResultSet都被关闭。我见过最隐蔽的泄漏是在catch块里直接return忘了在finally里关连接。4.3 JSP 页面报 404路径、部署与 WEB-INF 的常见误解现象Servlet 写好了web.xml也配了访问/book/list就是 404。原因通常有三个一是 IDEA 的 Artifacts 没把WEB-INF/lib和classes打进去二是WebServlet的路径和访问路径大小写不一致三是 JSP 放在WEB-INF下却直接用浏览器访问。解决先看 Tomcat 启动日志里有没有Deployment of web application archive成功信息再用 IDEA 的「Open in Browser」确认上下文路径。如果 JSP 在WEB-INF下必须通过 Servlet 的forward访问不能直接输 URL。4.4 库存扣成负数并发测试时暴露的事务漏洞现象用 JMeter 模拟 10 个用户同时买同一本书库存从 5 变成 -3。原因下单逻辑没有加行锁或者锁的范围不对。解决确保SELECT ... FOR UPDATE和UPDATE在同一个事务里并且事务隔离级别是REPEATABLE READ或更高。另外UPDATE t_book SET stock stock - ? WHERE id ? AND stock ?这种写法也能兜底但不如行锁直观。测试时我一般开两个终端手动并发或者用ab命令压一下确认库存不会为负才算过关。4.5 订单金额对不上浮点数与 DECIMAL 的取舍现象购物车里显示总价 59.90生成订单后变成 59.899999。原因Java 里用了double或float做金额运算。解决所有金额字段在 Java 里用BigDecimal数据库用DECIMAL(10,2)。BigDecimal的加减乘除要用add、subtract、multiply方法不要用、-、*。除法必须指定精度和舍入模式例如divide(new BigDecimal(3), 2, RoundingMode.HALF_UP)。这个坑在图书打折场景里特别容易翻车因为折扣率往往是0.85这种小数。5. 让图书销售系统再稳一点两个我常用的进阶技巧第一个技巧是给 JSP 页面加一个「加载完成后刷新一次」的兜底逻辑。有些老项目在 Tomcat 热部署后第一次访问会拿到旧的编译结果页面显示空白或报错。我一般会在列表页底部加一段极简的 JavaScript只在检测到表格为空且 URL 没有刷新标记时执行一次location.reload()并带上?refreshed1防止死循环。// 仅当表格无数据且未刷新过时刷新一次页面 window.onload function () { var rows document.querySelectorAll(table tr); var url new URL(window.location.href); if (rows.length 1 !url.searchParams.has(refreshed)) { url.searchParams.set(refreshed, 1); window.location.href url.toString(); } };逻辑说明rows.length 1表示只有表头没有数据行refreshed参数防止无限刷新。这个技巧在开发阶段特别省心但生产环境要慎用因为可能掩盖真正的空数据问题。第二个技巧是关于图书封面的坐标定位。有些图书封面需要在上传后裁剪JSP 页面里可以用一个隐藏的input存x、y、width、height后端用 Java 的BufferedImage按坐标裁剪。我一般把坐标存成x,y,w,h字符串解析时用split(,)并做边界校验防止用户传入负数导致RasterFormatException。这个功能在图书管理后台里不算核心但加上之后整个系统的完成度会高很多。最后说一个我自己的习惯每次改完 DAO 层的 SQL我一定会把PreparedStatement的参数按顺序打印到日志里确认占位符和setXxx的索引一一对应。这个习惯帮我省下了至少三次「明明 SQL 没错但就是查不到数据」的排查时间。图书销售系统这类项目难点从来不在 JSP 语法本身而在数据一致性和边界条件上。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI Agent高可用网关实战:熔断降级与多模型兜底

AI Agent高可用网关实战:熔断降级与多模型兜底

1. 项目概述:当AI服务集体失联,你的Agent工作流如何不崩盘“Claude挂了”、“Codex返回503”、“Grok Bot超时重试失败”——那天早上九点十七分,我正准备跑通一个客户交付的智能合同审核Agent,监控面板上三颗核心服务的健康状态灯…

2026/10/11 18:45:12 阅读更多 →
PCB飞针测试全流程解析:从原理到批量测试的实战指南

PCB飞针测试全流程解析:从原理到批量测试的实战指南

PCB飞针测试这个名词,很多刚入行的硬件工程师、PCB layout工程师可能都听过,但真正从头到尾完整走过一遍流程的人并不多。我在板厂和研发端来回折腾了几年,从最初只会看测试报告上的“PASS/FAIL”,到后来能自己写测试程序、判断误…

2026/10/11 18:45:17 阅读更多 →
飞针测试全解析:从原理到量产避坑指南

飞针测试全解析:从原理到量产避坑指南

1. 飞针测试的本质:它测的是什么,凭什么能测出来1.1 PCB电性能失效的几种典型形态很多新手把PCB测试单纯理解成"看板子做得好不好",这是把外观检查和电性能测试混为一谈了。出厂前的目检拿放大镜看焊点、看线路有没有明显缺陷&…

2026/10/11 18:46:53 阅读更多 →

最新新闻

Satellite J50声卡显卡驱动安装:硬件ID识别与蓝屏避坑指南

Satellite J50声卡显卡驱动安装:硬件ID识别与蓝屏避坑指南

简介:这份资源汇集东芝Satellite J50笔记本电脑的声卡与显卡全套驱动程序,面向重装系统后硬件无法识别、音频无声或画质异常的用户,也适合电脑维修人员作为离线驱动包备用。压缩包共773个文件,容量35.23MB,涵盖多个版本…

2026/10/12 9:35:11 阅读更多 →
美容店供应商怎么选?五步筛选法与日常管理指南

美容店供应商怎么选?五步筛选法与日常管理指南

1. 先把“美容店供应商”拆开看:它到底供应什么1.1 一张采购清单,暴露了大多数美容店的供应链问题很多人一提到美容店供应商,条件反射想到的只有护肤品。真开店之后才发现,店里要花钱采购的东西多到超乎想象。我一般把美容店采购分…

2026/10/12 9:35:11 阅读更多 →
京墨文库Android v16.1与HarmonyOS v1.2.1:深度解析本地书库管理双端迭代

京墨文库Android v16.1与HarmonyOS v1.2.1:深度解析本地书库管理双端迭代

京墨文库安卓版更新到v16.1、鸿蒙版发到v1.2.1,这条版本动态放在别人眼里可能只是一条常规更新日志,但如果你一直关注本地书库管理这个小众领域,就会明白这行字背后的分量。安卓端已经迭代了十六个大版本,说明这套代码在主流生态里…

2026/10/12 9:35:11 阅读更多 →
Java实现PDF转OFD:国产化文档转换的完整实战与避坑指南

Java实现PDF转OFD:国产化文档转换的完整实战与避坑指南

简介:面向Java开发者的PDF转OFD国产化实现资源,顺应国产化替代趋势,聚焦政企电子文档中OFD版式标准的适配需求,系统梳理了从PDF解析、OFD文档结构构建到内容写入的完整技术路径。压缩包共198个文件,以Java源码、XML配置…

2026/10/12 9:34:10 阅读更多 →
MyBatis内部链路全解析:从Builder到查询的完整流程与避坑指南

MyBatis内部链路全解析:从Builder到查询的完整流程与避坑指南

1. 从一次线上排查说起:为什么需要搞懂MyBatis内部链路去年帮一个朋友排查一个诡异问题:他们的服务在压测时,某个查询接口的响应时间会周期性飙高,但数据库侧的慢查询日志里却什么都看不到。Druid连接池监控显示活跃连接数正常&am…

2026/10/12 9:34:10 阅读更多 →
爱立信Moshell实战手册:MOM/PM/Log命令式运维指南

爱立信Moshell实战手册:MOM/PM/Log命令式运维指南

简介:本资源是一份面向通信网络运维工程师、爱立信设备初/中级维护人员的4G/5G指令速查手册,聚焦实际网管操作场景,系统梳理MOM、MO-read、MO-write、PM、Log、Sw Management、Inventory/COLI、Transport Network及LTE/NR九大类核心命令。内容…

2026/10/12 9:34:10 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →