JavaWeb大作业实战:JSP+Servlet蛋糕店售卖网站从零跑通
简介这是一套面向计算机相关专业学生与JavaWeb初学者的蛋糕店售卖网站项目源码基于JSP与Servlet技术栈实现可作为课程设计、毕业设计或大作业的完整参考方案。项目前台涵盖商品分类与推荐展示、商品详情、购物车增删改、用户注册登录、个人信息与收货地址维护、下单付款等核心流程业务逻辑贴近真实电商场景适合用来理解MVC分层与前后端交互。压缩包共290个文件约18.95MB其中58个jsp页面、55个java源文件、20个xml配置、14个js与12个css构成主要代码骨架另含9个jar依赖、1个sql脚本及若干图片与字体资源结构完整便于直接导入运行。目前已有182人学习下载。代码经过测试可正常运行答辩评审平均分达96分读者可据此快速掌握项目搭建思路、数据库设计与功能扩展方法也可在此基础上二次开发实现个性化需求。1. 蛋糕店售卖网站从 JSPServlet 到能跑通的 JavaWeb 大作业很多同学做 JavaWeb 大作业时第一反应是去搜“javaweb项目完整案例”结果下了一堆压缩包打开发现要么缺 jar 包要么数据库对不上要么 Tomcat 一启动就 404。蛋糕店售卖网站这个题目本身不复杂但它把 JSP、Servlet、MySQL、会话管理、文件上传这几个 JavaWeb 核心点全串起来了是一个非常适合拿来练手的完整案例。这篇文章不讲空泛的 MVC 理论而是按“能跑起来 → 能改功能 → 能避坑”的顺序把基于 JSP 和 Servlet 的蛋糕店售卖网站从环境配置到核心模块实现讲清楚。适合正在做大作业的在校生也适合想回头补 JavaWeb 基础的初级开发者。你跟着走完至少能做到本地跑通、看懂请求流转、知道每个参数改哪里、遇到报错知道查什么。2. 环境搭建与项目骨架IDEA 里跑通第一个 Servlet2.1 为什么选 JSPServlet 而不是直接上 Spring Boot大作业场景下JSPServlet 的优势在于“透明”。Spring Boot 帮你封装了太多东西你写个 Controller 就返回数据了但请求怎么进到 Tomcat、怎么被映射到方法、Session 什么时候创建这些黑匣子你根本没碰过。而 JSPServlet 是裸的你写的每个 Servlet 都要在web.xml或注解里显式配置映射路径每个 JSP 最终都会被编译成一个 Servlet 类。做完这个项目你对 HTTP 请求生命周期的理解会扎实很多。另一个现实原因是很多学校的 JavaWeb 课程期末大作业明确要求“使用 JSP 和 Servlet 实现”不允许用 Spring 全家桶。所以这不是技术选型问题是题目约束。蛋糕店售卖网站的功能边界也很清晰用户注册登录、浏览蛋糕列表、查看详情、加入购物车、下单、后台管理蛋糕信息。这些用 Servlet 做控制器、JSP 做视图、JavaBean 做模型完全够用。2.2 IDEA 配置 Tomcat 与项目结构在 IDEA 里新建项目时选“Java Enterprise”勾选“Web Application”IDEA 会自动生成web目录和WEB-INF/web.xml。这里有一个高频翻车点很多人新建的是普通 Java 项目然后手动加 web 框架结果 Artifact 配置不对Tomcat 启动后访问 404。正确的项目结构应该是这样的CakeShop/ ├── src/ │ └── com/cakeshop/ │ ├── dao/ # 数据库访问层 │ ├── entity/ # 实体类 │ ├── servlet/ # 控制器 │ └── util/ # 数据库连接工具 ├── web/ │ ├── WEB-INF/ │ │ ├── web.xml │ │ └── lib/ # 第三方 jar 包 │ ├── css/ │ ├── js/ │ ├── images/ │ ├── index.jsp │ └── ... └── CakeShop.iml配置 Tomcat 的步骤Run → Edit Configurations → 加号 → Tomcat Server → Local → 在 Deployment 标签页点加号 → 选 Artifact → 选CakeShop:war exploded。注意 Application context 建议设成/cakeshop这样访问路径就是http://localhost:8080/cakeshop/。提示如果 Deployment 里看不到 Artifact去 File → Project Structure → Artifacts 确认是否有一个 Web Application: Exploded 的条目没有就手动加一个Output Layout 里把web目录和lib都加进去。2.3 数据库建表与连接工具类蛋糕店售卖网站至少需要四张表用户表、蛋糕表、订单表、订单详情表。下面给出建表 SQL字段类型按 MySQL 8.0 写CREATE DATABASE cake_shop DEFAULT CHARACTER SET utf8mb4; USE cake_shop; CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, phone VARCHAR(20), address VARCHAR(200), role TINYINT DEFAULT 0 -- 0普通用户 1管理员 ); CREATE TABLE cake ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL, image VARCHAR(200), category VARCHAR(50), stock INT DEFAULT 0, description TEXT ); CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, total DECIMAL(10,2), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, status TINYINT DEFAULT 0 -- 0待付款 1已付款 2已发货 ); CREATE TABLE order_item ( id INT PRIMARY KEY AUTO_INCREMENT, order_id INT, cake_id INT, count INT, subtotal DECIMAL(10,2) );数据库连接工具类用最朴素的 JDBC 方式不引连接池也能跑但建议至少写一个DBUtilpackage com.cakeshop.util; import java.sql.*; public class DBUtil { private static final String URL jdbc:mysql://localhost:3306/cake_shop?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8; private static final String USER root; private static final String PASSWORD 你的密码; static { try { Class.forName(com.mysql.cj.jdbc.Driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { try { if (rs ! null) rs.close(); } catch (SQLException e) {} try { if (ps ! null) ps.close(); } catch (SQLException e) {} try { if (conn ! null) conn.close(); } catch (SQLException e) {} } }参数说明serverTimezoneAsia/Shanghai不加会报时区错误characterEncodingutf8防止中文乱码useSSLfalse避免控制台警告。MySQL 8 的驱动类名是com.mysql.cj.jdbc.Driver不是老版本的com.mysql.jdbc.Driver写错会直接 ClassNotFound。3. 核心功能实现从登录注册到购物车下单3.1 用户登录与 Session 管理登录流程是JSP 表单提交到 LoginServlet → Servlet 调 DAO 查用户 → 查到就把 User 对象放进 Session → 重定向到首页。这里的关键是 Session 的使用很多同学把用户信息放在 request 里结果跳转后拿不到。WebServlet(/login) public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(UTF-8); String username req.getParameter(username); String password req.getParameter(password); UserDao dao new UserDao(); User user dao.findByUsernameAndPassword(username, password); if (user ! null) { HttpSession session req.getSession(); session.setAttribute(user, user); if (user.getRole() 1) { resp.sendRedirect(admin/index.jsp); } else { resp.sendRedirect(index.jsp); } } else { req.setAttribute(msg, 用户名或密码错误); req.getRequestDispatcher(login.jsp).forward(req, resp); } } }逻辑说明req.setCharacterEncoding(UTF-8)必须放在获取参数之前否则中文用户名会乱码。登录成功用sendRedirect而不是forward是为了防止刷新页面重复提交表单。Session 默认 30 分钟过期可以在web.xml里改session-config session-timeout60/session-timeout /session-config3.2 蛋糕列表展示与分页查询首页需要展示蛋糕列表数据量大了必须分页。分页的核心 SQL 是LIMIT offset, sizeoffset 等于(当前页码 - 1) * 每页条数。public ListCake findByPage(int page, int size) { ListCake list new ArrayList(); String sql SELECT * FROM cake LIMIT ?, ?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setInt(1, (page - 1) * size); ps.setInt(2, size); ResultSet rs ps.executeQuery(); while (rs.next()) { Cake c new Cake(); c.setId(rs.getInt(id)); c.setName(rs.getString(name)); c.setPrice(rs.getBigDecimal(price)); c.setImage(rs.getString(image)); c.setStock(rs.getInt(stock)); list.add(c); } } catch (SQLException e) { e.printStackTrace(); } return list; }JSP 页面用 JSTL 的c:forEach遍历% taglib prefixc urihttp://java.sun.com/jsp/jstl/core % c:forEach items${cakeList} varcake div classcake-item img src${pageContext.request.contextPath}/upload/${cake.image} / h3${cake.name}/h3 p${cake.price}/p a href${pageContext.request.contextPath}/cake/detail?id${cake.id}查看详情/a /div /c:forEach注意${pageContext.request.contextPath}不能省否则项目部署路径不是根路径时图片和链接全挂。这是 JSP 页面里最常见的路径问题。3.3 购物车的两种实现方式与选择购物车有两种做法存 Session 和存数据库。大作业推荐存 Session实现简单不用建表。Session 里放一个MapInteger, CartItemkey 是蛋糕 idvalue 是数量和蛋糕信息。WebServlet(/cart/add) public class AddCartServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int cakeId Integer.parseInt(req.getParameter(id)); HttpSession session req.getSession(); MapInteger, CartItem cart (MapInteger, CartItem) session.getAttribute(cart); if (cart null) { cart new HashMap(); } if (cart.containsKey(cakeId)) { CartItem item cart.get(cakeId); item.setCount(item.getCount() 1); } else { CakeDao cakeDao new CakeDao(); Cake cake cakeDao.findById(cakeId); cart.put(cakeId, new CartItem(cake, 1)); } session.setAttribute(cart, cart); resp.sendRedirect(req.getContextPath() /cart.jsp); } }参数说明cakeId从 URL 参数取要做异常处理传非数字会抛NumberFormatException。购物车存 Session 的缺点是换浏览器就没了但对大作业来说够用。如果要做持久化购物车就建一张cart表登录时从数据库加载每次增删改同步写库。3.4 下单流程与事务处理下单是最容易出 bug 的环节。正确流程是从 Session 取购物车 → 计算总价 → 插入 orders 表 → 拿到订单 id → 遍历购物车插入 order_item → 扣减库存 → 清空购物车。这几步必须在一个事务里否则会出现订单建了但库存没扣的情况。public boolean createOrder(int userId, MapInteger, CartItem cart) { Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); BigDecimal total BigDecimal.ZERO; for (CartItem item : cart.values()) { total total.add(item.getCake().getPrice() .multiply(new BigDecimal(item.getCount()))); } String orderSql INSERT INTO orders(user_id, total) VALUES(?, ?); PreparedStatement ps conn.prepareStatement(orderSql, Statement.RETURN_GENERATED_KEYS); ps.setInt(1, userId); ps.setBigDecimal(2, total); ps.executeUpdate(); ResultSet rs ps.getGeneratedKeys(); int orderId 0; if (rs.next()) orderId rs.getInt(1); String itemSql INSERT INTO order_item(order_id, cake_id, count, subtotal) VALUES(?,?,?,?); String stockSql UPDATE cake SET stock stock - ? WHERE id ? AND stock ?; for (CartItem item : cart.values()) { PreparedStatement ps2 conn.prepareStatement(itemSql); ps2.setInt(1, orderId); ps2.setInt(2, item.getCake().getId()); ps2.setInt(3, item.getCount()); ps2.setBigDecimal(4, item.getCake().getPrice() .multiply(new BigDecimal(item.getCount()))); ps2.executeUpdate(); PreparedStatement ps3 conn.prepareStatement(stockSql); ps3.setInt(1, item.getCount()); ps3.setInt(2, item.getCake().getId()); ps3.setInt(3, item.getCount()); if (ps3.executeUpdate() 0) { conn.rollback(); return false; } } conn.commit(); return true; } catch (SQLException e) { try { if (conn ! null) conn.rollback(); } catch (SQLException ex) {} e.printStackTrace(); return false; } finally { try { if (conn ! null) conn.setAutoCommit(true); } catch (SQLException e) {} DBUtil.close(conn, null, null); } }关键点Statement.RETURN_GENERATED_KEYS用来拿自增主键库存更新 SQL 里加了AND stock ?防止超卖任何一步失败就rollback。这套逻辑不复杂但少了事务并发下单时库存就会变负数。4. 避坑与排查JSPServlet 项目最常见的 5 个翻车现场4.1 404路径对了但就是找不到现象Tomcat 启动没报错访问http://localhost:8080/cakeshop/login返回 404。原因通常有三种一是WebServlet(/login)里的路径和访问路径不一致比如你写的是/user/login但访问的是/login二是web.xml的metadata-completetrue导致注解不生效三是 Artifact 里没有把编译后的 class 文件放进去。解决先看 Tomcat 启动日志里有没有Deployment of web application archive这行确认项目真的部署了。然后检查web.xml的web-app标签有没有metadata-completetrue有就删掉。最后去 Project Structure → Artifacts → Output Layout确认WEB-INF/classes下有编译后的 class 文件。4.2 中文乱码POST 和 GET 处理方式不同现象表单提交中文数据库里存的是???。原因POST 请求乱码是因为 Tomcat 默认用 ISO-8859-1 解码请求体GET 请求乱码是因为 Tomcat 8 以后 URI 编码默认是 UTF-8但如果你用的是老版本 Tomcat 7GET 参数也会乱。解决POST 在 Servlet 第一行加req.setCharacterEncoding(UTF-8)GET 乱码需要在 Tomcat 的server.xml里给 Connector 加URIEncodingUTF-8。数据库连接 URL 里也要加characterEncodingutf8。JSP 页面头部加% page contentTypetext/html;charsetUTF-8 languagejava %。三处都对了才不会乱码。4.3 Session 取不到值跳转方式用错了现象登录成功后跳转到首页但首页显示的还是“请登录”。原因登录 Servlet 里用了req.getRequestDispatcher(index.jsp).forward(req, resp)forward 是服务器内部跳转浏览器地址栏没变但如果你在 forward 之前设置了 Session其实 Session 是有的。真正的问题是有些同学把用户信息放在了req.setAttribute里forward 到 JSP 能取到但一旦重定向或新开页面就没了。解决需要跨页面共享的数据一律放 Sessionsession.setAttribute(user, user)。只在一次请求内使用的数据才放 request。判断是否登录用${sessionScope.user ! null}。4.4 数据库连接报错驱动和时区现象启动后访问任何页面都报java.sql.SQLException: No suitable driver found或The server time zone value ?D1ú±ê×?ê±?? is unrecognized。原因前者是WEB-INF/lib下没有放mysql-connector-java.jar后者是 MySQL 8 的时区问题连接 URL 没指定serverTimezone。解决去 MySQL 官网下载mysql-connector-java-8.0.x.jar放到web/WEB-INF/lib下然后在 Project Structure → Modules → Dependencies 里确认这个 jar 被加进去了。连接 URL 写成jdbc:mysql://localhost:3306/cake_shop?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8。4.5 图片上传后访问 404现象后台添加蛋糕时上传了图片数据库里存了文件名但前台img src...显示不出来。原因图片存到了项目目录之外或者存到了web/upload但重新部署后文件被覆盖了。解决上传路径不要用相对路径用getServletContext().getRealPath(/upload)获取绝对路径。但要注意IDEA 的 war exploded 模式下重新部署会清空web目录下的文件。更稳妥的做法是把上传目录设在项目外部比如D:/cakeshop_upload/然后在 Tomcat 里配置一个虚拟路径映射。大作业如果不想折腾就每次重新部署后重新上传或者把图片直接放在web/images/下数据库只存文件名。5. 进阶技巧用 Filter 做统一编码和登录拦截项目能跑通之后你会发现每个 Servlet 里都写了一遍req.setCharacterEncoding(UTF-8)每个需要登录的页面都要判断 Session。这时候就该上 Filter 了。Filter 是 Servlet 规范里的组件能在请求到达 Servlet 之前和响应返回浏览器之前做处理。先写一个编码过滤器WebFilter(/*) public class EncodingFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; request.setCharacterEncoding(UTF-8); response.setContentType(text/html;charsetUTF-8); chain.doFilter(request, response); } }WebFilter(/*)表示拦截所有请求。这样所有 Servlet 里就不用再写编码设置了。注意chain.doFilter之前的代码在请求到达 Servlet 前执行之后的代码在响应返回前执行。再写一个登录拦截过滤器保护后台管理页面WebFilter(/admin/*) public class AdminFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request (HttpServletRequest) req; HttpServletResponse response (HttpServletResponse) resp; HttpSession session request.getSession(); User user (User) session.getAttribute(user); if (user null || user.getRole() ! 1) { response.sendRedirect(request.getContextPath() /login.jsp); return; } chain.doFilter(request, response); } }这个过滤器只拦截/admin/*路径检查 Session 里的用户是不是管理员。不是就踢回登录页。两个过滤器同时存在时执行顺序按类名字母排序AdminFilter在EncodingFilter之前。如果顺序有要求建议用web.xml配置而不是注解。最后说一个验证技巧在浏览器按 F12 打开 Network 面板看每个请求的 Request Headers 里Content-Type有没有charsetUTF-8Response Headers 里Content-Type对不对。如果中文还是乱码就看请求体里的参数值是不是已经乱了这样能快速定位是前端编码问题还是后端解码问题。我自己的习惯是每加一个新功能先在浏览器里手动拼 URL 测 Servlet 能不能返回数据再写 JSP 页面。这样出问题时能立刻判断是后端逻辑错了还是前端展示错了比前后端一起调快得多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

大模型应试精讲:零基础考生的考点拆解与答题动作指南

大模型应试精讲:零基础考生的考点拆解与答题动作指南

1. 这不是“AI速成班”,而是一份给考试人的大模型技术实操地图“大模型技术与应用:零基础考点精讲”——看到这个标题,我第一反应不是点开看课表,而是立刻翻出去年三套真题卷、两本教材附录和一份某省事业单位招考大纲。为什么&am…

2026/10/7 5:59:29 阅读更多 →
基于Java+JavaScript+HTML的水质检测系统设计与实现

基于Java+JavaScript+HTML的水质检测系统设计与实现

简介:基于Java、JavaScript与HTML实现的水质检测系统,是一套面向高校毕业设计、课程设计及项目开发的完整源码与数据库包,覆盖后端逻辑、前端页面与数据存储。资源共297个文件,主要包括37个Java类用于业务逻辑处理、16个JSP页面实…

2026/10/7 5:58:27 阅读更多 →
基于SpringBoot+Vue+MySQL的光影视频平台全栈实战与避坑指南

基于SpringBoot+Vue+MySQL的光影视频平台全栈实战与避坑指南

简介:这份资源是面向计算机专业学生与Java Web开发初学者的完整视频平台项目资料包,可直接用于毕业设计、课程设计或期末大作业。项目采用SpringBoot后端、Vue前端与MySQL数据库的经典技术栈,开发环境覆盖IDEA、VSCode、Maven与Navicat&#…

2026/10/7 5:58:27 阅读更多 →

最新新闻

Agent持久化运行环境实战:基于WeKnora与CubeSandbox的稳定架构

Agent持久化运行环境实战:基于WeKnora与CubeSandbox的稳定架构

做 Agent 开发这件事,最容易翻车的地方往往不是模型选型,也不是 Prompt 写不好,而是 Agent 跑起来之后怎么让它稳定地活下去。最近我基于 WeKnora 这个开源知识管理与 Agent 工作台项目,配合 CubeSandbox 沙箱运行时,搭…

2026/10/7 6:29:51 阅读更多 →
Vibe Coding最后一公里:生产级Coding Agent调优实战

Vibe Coding最后一公里:生产级Coding Agent调优实战

最近小半年,我一直在折腾一件事:把团队里的 Vibe Coding 从“demo 神器”变成真正能依赖的生产工具。起因很典型——我们用 AI 生成代码的速度肉眼可见地快起来了,但代码评审现场成了重灾区,合并请求堆积如山,开发同学…

2026/10/7 6:29:51 阅读更多 →
机盖拓扑P5:从建模到制造的工艺就绪网格重构

机盖拓扑P5:从建模到制造的工艺就绪网格重构

1. 这不是“修模型”,是给机盖做一次精准的骨骼重建“拓车工坊”这四个字一出来,老汽车数模圈的人基本就懂了——这不是教你怎么贴图、调材质、打灯光的美工课,而是直插数字建模底层逻辑的硬核训练。标题里那个“11机盖拓扑P5”,拆…

2026/10/7 6:29:51 阅读更多 →
BqLog环形队列与自适应总线:高并发日志系统硬件级优化

BqLog环形队列与自适应总线:高并发日志系统硬件级优化

1. 这不是普通日志组件,是王者荣耀后台扛住千万级并发的“静音引擎”你有没有试过在团战最激烈的时候,屏幕右上角突然弹出一行小字:“日志写入延迟升高”?没有。因为根本不会弹。王者荣耀的战斗日志系统,从不打扰玩家—…

2026/10/7 6:29:51 阅读更多 →
STM32H743核心板外围电路设计实战:电源、时钟、复位与调试接口全解析

STM32H743核心板外围电路设计实战:电源、时钟、复位与调试接口全解析

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

2026/10/7 6:29:51 阅读更多 →
2026 AI Agent企业落地实战:智能体架构、基础设施与AI转型避坑指南

2026 AI Agent企业落地实战:智能体架构、基础设施与AI转型避坑指南

1. 从一份市场预测报告说起:AI Agent 在企业里到底落地到了哪一步2026 年这个时间节点,聊 AI Agent 已经不再是“要不要做”的问题,而是“怎么做得不翻车”的问题。我最近翻了不少行业报告和数据合集,也跟几个在做企业级智能体落地…

2026/10/7 6:28:50 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

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/6 7:15:40 阅读更多 →
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/6 5:29:09 阅读更多 →
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/6 6:26:51 阅读更多 →

月新闻

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