JSP零食商城源码实战:JavaBean+MySQL从建表到下单事务
简介这份资源是面向高校计算机相关专业学生与Java Web初学者的一套完整项目实践包围绕网上零食销售系统的设计与开发展开采用Java、JavaBean与JSP技术栈配合MySQL数据库实现商品展示、购物车、订单管理等典型电商功能适合作为课程设计、毕业设计或自学练手参考。压缩包为zip格式整体约633.38MB内含项目全套源码与完整文档源码经过测试校正后可稳定运行文档部分则覆盖系统设计思路与实现说明便于对照理解各模块的职责划分与调用关系。目前已有656人学习下载说明该案例在同类选题中具有一定参考价值。读者可从中获得一套可直接运行的Web项目实例、数据库表结构设计参考以及JSP页面与JavaBean交互的实践范例有助于快速搭建开发环境、梳理分层结构并积累调试经验为后续独立完成类似系统打下基础。1. 从一份 JSP 零食商城源码说起JavaBean MySQL 这套老架构为什么还值得动手如果你手里正躺着一个网上零食销售系统.zip解压后看到WEB-INF、jsp、src三层目录别急着嫌它“老”。这套基于 Java JavaBean JSP MySQL 的网上零食销售系统恰恰是理解 JavaWeb 请求链路最省心的样本浏览器发一个.jsp请求容器编译成 ServletJavaBean 承载商品、订单、用户三类数据JDBC 把 MySQL 里的零食库存读出来渲染成页面。它没有 Spring 的注解魔法也没有 MyBatis 的动态 SQL所有调用关系都摊在明面上出问题能一行行跟。适合谁一是刚学完 Java 基础、想找一个完整案例把 JSP 内置对象、Session、JDBC 串起来的学生二是需要快速交付一个课程设计或小型电商 Demo 的开发者三是想拿它当“反面教材”对比 Spring Boot MyBatis 到底解决了什么痛点的人。这篇笔记不讲空泛的“系统概述”而是按真实落地顺序把环境、建表、JavaBean 设计、JSP 页面、下单事务和排错一条条拆开让你能照着复现也能看清这套架构的边界在哪。2. 环境与数据库先落地JDK、Tomcat、MySQL 的版本搭配和建表脚本2.1 版本选型为什么这套 JSP 项目别硬上 JDK 17这套源码的典型特征是% page languagejava %加 JDBC 直连没有模块化描述符也没有jakarta.*命名空间。如果你用 JDK 17 配 Tomcat 10第一个翻车点就是javax.servlet找不到——Tomcat 10 把包名迁到了jakarta.servlet老 JSP 里的importjavax.servlet.*全部报红。血泪经验是JDK 8 Tomcat 8.5/9.0 MySQL 5.7/8.0是这套组合最稳的搭配。组件推荐版本说明JDK1.8兼容javax.servlet编译无警告Tomcat8.5 或 9.09.0 仍保留javax.servlet别用 10MySQL5.7.44 或 8.0.x8.0 需注意驱动包和时区JDBC 驱动mysql-connector-java 5.1.x / 8.0.x与 MySQL 版本对应IDEEclipse / IDEA需配置 Web 模块和 ArtifactMySQL 安装这块Windows 上常见做法是下载 ZIP 版解压后手动初始化比 installer 更可控。初始化命令和改密流程如下# 解压到 D:\tool\mysql-8.0.46-winx64 后以管理员身份进入 bin 目录 mysqld --initialize-insecure --console # 注册服务 mysqld --install mysql --defaults-fileD:\tool\mysql-8.0.46-winx64\my.ini # 启动 net start mysql # 首次无密码登录后改密 mysql -u root ALTER USER rootlocalhost IDENTIFIED BY your_password;--initialize-insecure生成空密码 root方便首次进入生产环境请改用--initialize并保存随机密码。my.ini里至少要写basedir、datadir、port3306和character-set-serverutf8mb4否则中文零食名会变问号。2.2 建表零食商城最少需要哪几张表网上零食销售系统的核心实体就四个用户、商品零食、订单、订单明细。分类表可选但加上它页面导航更好做。下面是一份可直接执行的建表脚本字段命名和常见 JSP 源码保持一致方便你对号入座。CREATE DATABASE snack_shop DEFAULT CHARACTER SET utf8mb4; USE snack_shop; CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(64) NOT NULL, phone VARCHAR(20), address VARCHAR(200), reg_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE t_category ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL ); CREATE TABLE t_product ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT DEFAULT 0, image VARCHAR(200), category_id INT, intro VARCHAR(500), FOREIGN KEY (category_id) REFERENCES t_category(id) ); CREATE TABLE t_order ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, total DECIMAL(10,2) NOT NULL, status TINYINT DEFAULT 0, -- 0待付款 1已付款 2已发货 3已完成 create_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES t_user(id) ); CREATE TABLE t_order_item ( id INT PRIMARY KEY AUTO_INCREMENT, order_id INT NOT NULL, product_id INT NOT NULL, price DECIMAL(10,2) NOT NULL, quantity INT NOT NULL, FOREIGN KEY (order_id) REFERENCES t_order(id), FOREIGN KEY (product_id) REFERENCES t_product(id) );price用DECIMAL(10,2)而不是FLOAT是因为金额做加减时浮点会丢精度订单总额对不上账就是这里埋的雷。status用TINYINT存状态码比字符串省空间也便于WHERE status0查询。外键约束在 Demo 里能帮你早发现脏数据但真实高并发下单场景常会去掉外键改由应用层保证这点后面避坑章会展开。3. JavaBean 与 DAO 分层把零食数据从 MySQL 搬到 JSP 页面3.1 实体 JavaBean 的写法无参构造和 getter/setter 一个都不能少JavaBean 不是随便一个 Java 类它要满足三个硬条件public 无参构造、属性私有、提供 getter/setter。JSP 里用jsp:useBean和jsp:setProperty时容器靠反射调用无参构造和 setter缺一个就抛InstantiationException或属性注入失败。以零食商品为例package com.snack.entity; public class Product { private int id; private String name; private double price; private int stock; private String image; private int categoryId; private String intro; public Product() {} // 无参构造反射实例化必需 public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } public double getPrice() { return price; } public void setPrice(double price) { this.price price; } public int getStock() { return stock; } public void setStock(int stock) { this.stock stock; } public String getImage() { return image; } public void setImage(String image) { this.image image; } public int getCategoryId() { return categoryId; } public void setCategoryId(int categoryId) { this.categoryId categoryId; } public String getIntro() { return intro; } public void setIntro(String intro) { this.intro intro; } }注意price在实体里用double方便 JSP 表达式直接输出但入库时 DAO 层要转成BigDecimal或让 SQL 的DECIMAL兜底。如果你在 JSP 里写${product.price}EL 表达式会自动调getPrice()这就是 JavaBean 规范带来的便利。3.2 DAO 层 JDBC 工具类连接、查询、关闭的标准姿势JSP 页面里直接写 JDBC 是新手最容易犯的错代码重复且连接泄漏。正确做法是抽一个BaseDao或DBUtil把DriverManager.getConnection和close封装起来。下面是一个最小可用的工具类package com.snack.util; import java.sql.*; public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/snack_shop?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai; private static final String USER root; private static final String PWD your_password; static { try { Class.forName(com.mysql.cj.jdbc.Driver); // 8.0 驱动 } catch (ClassNotFoundException e) { throw new RuntimeException(驱动加载失败, e); } } public static Connection getConn() throws SQLException { return DriverManager.getConnection(URL, USER, PWD); } public static void close(Connection c, Statement s, ResultSet r) { try { if (r ! null) r.close(); } catch (SQLException ignored) {} try { if (s ! null) s.close(); } catch (SQLException ignored) {} try { if (c ! null) c.close(); } catch (SQLException ignored) {} } }serverTimezoneAsia/Shanghai是 MySQL 8.0 的必填项不写会报The server time zone value is unrecognized。Class.forName在 8.0 驱动里其实可以省略但显式加载能让你在驱动缺失时第一时间看到异常而不是等到getConnection才报错。查询零食列表的 DAO 方法public ListProduct findAll() { ListProduct list new ArrayList(); String sql SELECT id,name,price,stock,image,category_id,intro FROM t_product ORDER BY id DESC; try (Connection c DBUtil.getConn(); PreparedStatement ps c.prepareStatement(sql); ResultSet rs ps.executeQuery()) { while (rs.next()) { Product p new Product(); p.setId(rs.getInt(id)); p.setName(rs.getString(name)); p.setPrice(rs.getDouble(price)); p.setStock(rs.getInt(stock)); p.setImage(rs.getString(image)); p.setCategoryId(rs.getInt(category_id)); p.setIntro(rs.getString(intro)); list.add(p); } } catch (SQLException e) { e.printStackTrace(); } return list; }用try-with-resources自动关闭连接比手动finally更不容易漏。ORDER BY id DESC让最新上架的零食排前面符合商城习惯。这里用PreparedStatement而非Statement既防 SQL 注入又能在参数多时保持可读。3.3 JSP 页面渲染用 JSTL 循环输出零食列表拿到ListProduct后在 JSP 里用 JSTL 的c:forEach渲染比脚本片段% %干净得多。前提是引入 JSTL 的 jar 包并在页面顶部声明标签库% page contentTypetext/html;charsetUTF-8 % % taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html body h2零食列表/h2 table border1 trth名称/thth价格/thth库存/thth操作/th/tr c:forEach items${productList} varp tr td${p.name}/td td${p.price}/td td${p.stock}/td tda hrefcartAdd.jsp?id${p.id}加入购物车/a/td /tr /c:forEach /table /body /html${productList}是 request 或 session 域里的属性名Servlet 里用request.setAttribute(productList, list)放进去。c:forEach的varp就是循环变量EL 里${p.name}自动调 getter。如果你看到页面输出空白先检查标签库 URI 是否写对、JSTL jar 是否放进WEB-INF/lib这两个是最高频的“页面不报错但没数据”原因。4. 下单与库存扣减JSP 表单提交到事务提交的完整链路4.1 购物车用 Session 还是数据库网上零食销售系统的购物车有两种常见实现Session 内存购物车和数据库购物车表。Session 方案简单适合 Demo用户关浏览器就清空数据库方案能持久化但要多一张t_cart表并处理并发。我一般建议课程设计用 Session理由是代码量少、演示直观。Session 里存一个MapInteger, Integerkey 是商品 idvalue 是数量// 加入购物车 MapInteger,Integer cart (MapInteger,Integer) session.getAttribute(cart); if (cart null) { cart new HashMap(); session.setAttribute(cart, cart); } int id Integer.parseInt(request.getParameter(id)); cart.put(id, cart.getOrDefault(id, 0) 1); response.sendRedirect(cart.jsp);getOrDefault让首次加入和重复加入走同一行逻辑避免NullPointerException。sendRedirect而不是forward是为了防止用户刷新页面重复提交。4.2 下单事务库存扣减和订单写入必须同生共死下单是这套系统里唯一必须用事务的地方。流程是遍历购物车 → 校验库存 → 扣库存 → 写t_order→ 写t_order_item。任何一步失败都要回滚否则会出现“订单生成了但库存没扣”或“库存扣了订单没写”的脏数据。JDBC 手动事务的标准写法Connection c null; try { c DBUtil.getConn(); c.setAutoCommit(false); // 关闭自动提交开启事务 // 1. 插入订单主表拿到自增主键 String orderSql INSERT INTO t_order(user_id,total,status) VALUES(?,?,0); PreparedStatement psOrder c.prepareStatement(orderSql, Statement.RETURN_GENERATED_KEYS); psOrder.setInt(1, userId); psOrder.setBigDecimal(2, total); psOrder.executeUpdate(); ResultSet keys psOrder.getGeneratedKeys(); keys.next(); int orderId keys.getInt(1); // 2. 逐条扣库存并写明细 String stockSql UPDATE t_product SET stockstock-? WHERE id? AND stock?; String itemSql INSERT INTO t_order_item(order_id,product_id,price,quantity) VALUES(?,?,?,?); for (Map.EntryInteger,Integer e : cart.entrySet()) { PreparedStatement psStock c.prepareStatement(stockSql); psStock.setInt(1, e.getValue()); psStock.setInt(2, e.getKey()); psStock.setInt(3, e.getValue()); if (psStock.executeUpdate() 0) { throw new SQLException(库存不足商品id e.getKey()); } // ... 写 itemSql 略 } c.commit(); // 全部成功才提交 } catch (Exception ex) { if (c ! null) try { c.rollback(); } catch (SQLException ignored) {} ex.printStackTrace(); } finally { if (c ! null) try { c.setAutoCommit(true); c.close(); } catch (SQLException ignored) {} }关键点在UPDATE ... WHERE id? AND stock?把库存校验和扣减合并成一条原子 SQL靠executeUpdate()返回 0 判断库存不足。如果先SELECT再UPDATE两个并发请求可能都查到库存够然后一起扣成负数这就是超卖的经典翻车现场。RETURN_GENERATED_KEYS拿自增订单 id避免再查一次数据库。4.3 订单状态流转与页面回显订单状态用status字段控制0 待付款、1 已付款、2 已发货、3 已完成。用户下单后跳到订单列表页用不同颜色或文字区分状态。JSP 里可以用c:choose做条件渲染c:choose c:when test${o.status 0}span stylecolor:red待付款/span/c:when c:when test${o.status 1}span stylecolor:green已付款/span/c:when c:when test${o.status 2}已发货/c:when c:otherwise已完成/c:otherwise /c:choose状态码和文案的映射建议抽成一个工具方法或常量类别散落在多个 JSP 里。改需求时你会感谢自己只改了一处。5. 这套 JSP 零食商城的避坑清单从乱码到连接池的 5 个真实故障5.1 中文零食名变问号三层编码要统一现象数据库里存进去的“薯片”变成“???”或乱码。原因通常是 MySQL 服务端字符集、连接 URL 字符集、JSP 页面pageEncoding三者不一致。解决建库用utf8mb4URL 加useUnicodetruecharacterEncodingutf8JSP 顶部写% page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8 %表单提交用 POST 并在 Servlet 里request.setCharacterEncoding(UTF-8)。四处对齐后乱码基本消失。5.2 刷新页面重复下单现象用户下单后按 F5订单列表多出一条重复订单。原因是下单请求用 forward 转发浏览器地址栏还停在处理 URL刷新就重发。解决下单成功后用response.sendRedirect(orderList.jsp)重定向让浏览器地址栏跳到结果页刷新只会重载结果页而不会重发下单请求。这是 PRG 模式Post-Redirect-Get的最小实践。5.3 连接用完不关Tomcat 跑一会儿就卡死现象系统运行几分钟后所有请求变慢日志出现Too many connections。原因是 JSP 或 DAO 里getConnection后没在finally关闭连接池或 MySQL 的max_connections被耗尽。解决统一用try-with-resources或把关闭逻辑收进DBUtil.close。更彻底的做法是引入连接池但纯 JSP 项目里手写连接池容易出错Demo 阶段用try-with-resources就够。5.4 图片上传后页面不显示现象零食图片上传成功但列表页img src${p.image}是裂图。原因通常是上传路径存的是服务器绝对路径而 JSP 里按相对路径解析。解决上传时把文件存到webapp/upload/下数据库只存upload/xxx.jpg这样的相对路径页面用${pageContext.request.contextPath}/upload/xxx.jpg拼接。别把文件存到WEB-INF里那里浏览器访问不到。5.5 金额用 double 计算订单总额差几分钱现象购物车总价和订单表total对不上差 0.01。原因是double累加有精度误差。解决计算金额时用BigDecimalnew BigDecimal(3.5).multiply(new BigDecimal(qty))入库时setBigDecimal。实体类里展示可以用double但所有参与运算的金额都走BigDecimal这是财务相关代码的铁律。6. 从 JSP 到 Spring Boot这套源码怎么当跳板用如果你已经把这套网上零食销售系统跑通下一步最值得做的不是继续加功能而是拿它和 Spring Boot MyBatis 版本做对照看清每一层被什么替代了。JSP 里的c:forEach对应 Thymeleaf 的th:each手写DBUtil对应 HikariCP 连接池加application.yml配置手动setAutoCommit(false)对应Transactional注解web.xml里的 Servlet 映射对应Controller和RequestMapping。把这张对照表列出来你对 JavaWeb 演进的理解会比背面试题扎实得多。JSP 方案Spring Boot 方案解决的问题DBUtil 手写连接HikariCP 配置连接复用、泄漏防护手动事务Transactional声明式、少写 try-catchJSTL 标签Thymeleaf模板与逻辑分离更彻底web.xml 映射注解映射零配置、易重构Session 购物车Redis / 数据库分布式下会话共享验证迁移是否成功有个具体技巧把原 JSP 项目的建表脚本原样导入新库用 Spring Boot 写一个/product/list接口返回 JSON和 JSP 页面渲染的数据逐条比对。数量、价格、库存三项一致说明数据层迁移没问题再压测下单接口看Transactional回滚是否生效——故意传一个库存不足的商品 id观察订单表是否多出脏数据。我自己的习惯是每接手一个老 JSP 项目先不急着改代码而是把它的表结构和请求链路画在一张纸上标出哪些是业务逻辑、哪些是框架该干的活。画完再决定是重构还是重写比上来就动手省一半时间。这套零食商城源码的价值不在它本身多完善而在于它把 JavaWeb 的每一颗螺丝都露在外面让你拧过一遍之后再看任何框架都知道它替你拧了哪几颗。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

免费大模型API额度收紧下的多模型路由与降级架构实践

免费大模型API额度收紧下的多模型路由与降级架构实践

1. 免费额度收紧背后,开发者真正该关心什么早上打开常逛的几个开发者群,发现讨论最热烈的话题不是新模型发布,而是"免费额度又缩水了"。有人贴出截图说某个模型调用直接返回配额不足,有人抱怨昨天还能跑的脚本今天全线报…

2026/10/9 11:27:24 阅读更多 →
Gemini免费额度关停后:API迁移与成本控制实战

Gemini免费额度关停后:API迁移与成本控制实战

1. 这次关停到底动了谁的蛋糕早上刷社区的时候看到好几条讨论,说谷歌那边把一批免费额度的 Gemini 模型接口给停了,不少人的项目直接报 403 或者配额归零。我第一反应是去翻自己的调用日志,果然,之前挂着的两个测试用 key 已经返回…

2026/10/9 11:27:24 阅读更多 →
今日arXiv最热NLP大模型论文:清华LongAlign长上下文对齐全流程复现,数据、训练策略、评估基准一网打尽

今日arXiv最热NLP大模型论文:清华LongAlign长上下文对齐全流程复现,数据、训练策略、评估基准一网打尽

/* 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 11:27:24 阅读更多 →

最新新闻

micro:bit硬件入门:教育级开发板原理与实战指南

micro:bit硬件入门:教育级开发板原理与实战指南

1. 项目概述:这不是一块“玩具板”,而是一把打开数字世界大门的实体钥匙micro:bit 这个名字听起来有点拗口,但如果你在小学信息课、青少年创客营或者社区科技开放日里见过它——那块比信用卡略小、正面嵌着25颗可编程LED灯、背面焊着加速度计…

2026/10/9 12:07:15 阅读更多 →
Spack自定义构建系统实战:从Phase机制到Perl构建器开发

Spack自定义构建系统实战:从Phase机制到Perl构建器开发

1. 这不是另一个“Spack入门教程”,而是一份构建系统控制权移交实录你有没有遇到过这样的情况:用Spack装一个科研软件,它默认调用make,但你手头的源码其实需要先跑一段Python脚本预处理配置、再生成CMakeLists.txt、最后才进cmake…

2026/10/9 12:07:15 阅读更多 →
Altium Designer 22安装全攻略:从配置要求到常见报错一步到位

Altium Designer 22安装全攻略:从配置要求到常见报错一步到位

做PCB设计这行,装软件可以说是入门第一道坎。Altium Designer(简称AD)在业界的分量不用我多说,从原理图到PCB Layout再到仿真、输出制造文件,一套流程全在里头搞定。很多新手朋友拿到新的AD 22安装包,兴冲冲…

2026/10/9 12:07:15 阅读更多 →
calibre跑DRC换文件前必查的五个设置项与避坑流程

calibre跑DRC换文件前必查的五个设置项与避坑流程

简介:这份PDF资料聚焦Cadence calibre在DRC验证中的常见报错与设置问题,面向版图设计初学者及需要更换工艺库、导入新DRC文件的工程师。内容围绕三类典型故障展开:include文件访问或路径错误、undefined layer name参数未定义,以及…

2026/10/9 12:07:15 阅读更多 →
STM32官方数据手册免费下载指南:Datasheet与参考手册获取技巧

STM32官方数据手册免费下载指南:Datasheet与参考手册获取技巧

1. 为什么每个STM32开发者都绕不开数据手册搞嵌入式这行的,尤其是玩STM32的,手里没几份官方数据手册(Datasheet)和参考手册(Reference Manual),基本等于闭着眼睛焊板子。我见过太多新手&#xf…

2026/10/9 12:07:15 阅读更多 →
显示器是输出设备:从显卡信号到面板显示的技术链路与选购要点

显示器是输出设备:从显卡信号到面板显示的技术链路与选购要点

1. 先把概念说清楚:显示器到底充当的是什么角色1.1 从计算机系统的功能分类说起如果你问一个刚接触电脑的人,显示器是什么设备,他多半会脱口而出:“不就是那块屏幕嘛。”这话没错,但从计算机系统的功能分类来看&#x…

2026/10/9 12:06:14 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →