news 2026/11/1 6:37:49

JavaEE图书管理系统期末大作业:从源码部署到答辩完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaEE图书管理系统期末大作业:从源码部署到答辩完整指南

简介:这是一份 JavaEE 图书管理系统完整项目,专为计算机专业课程设计、期末大作业及 JavaWeb 入门实战者准备。项目以图书馆日常业务为场景,涵盖用户登录、图书借还、订单管理等典型功能,代码结构清晰且确保可直接运行,适合需要快速完成或参考项目的在读学生使用。压缩包共 248 个文件,大小 79.35MB,主要包含 Java 源码(35个java)、编译产物(70个class)、JSP 页面(18个jsp)、数据库脚本(1个sql)、项目配置(xml/properties),以及演示视频(mp4)与 PPTX 报告等,从代码、数据库到运行演示均有覆盖。已有 197 人浏览学习,整体内容完整,配有演示视频便于上手;既能直接作为期末作业提交参考,也能通过研读源码理解 Servlet、JSP、JDBC 与分层设计的实际应用,对准备毕业设计或项目实战训练的学习者都有较高参考价值。

1. JavaEE 图书管理系统:期末大作业最该先跑通的那套整包

如果你正在找 JavaEE 图书管理系统源码,大概率是课程设计或期末大作业到了必须交系统的节点。这份资源是一个完整交付包:源码、数据库脚本、演示视频都在一个压缩包里,功能覆盖图书管理、读者管理、借书还书、超期查询、罚款记录这些标准闭环,不是那种只有几个跳转页面的花架子。适合谁?两类人:一类是要交系统但时间紧的在读学生,拿到后解压复现,改成自己的作业;另一类是初级开发者,想抄一套规范的 JSP+Servlet+JDBC 分层,看真实的增删改查、事务和权限控制怎么组织。

我的建议是别把这份包当「交差答案」。先完整跑通一次,再逐层标注每个类的职责,最后照着演示视频重录一段自己的操作。这样答辩被追问「这段代码干什么的」时,你才能讲出逻辑而不是背台词。

2. 技术栈与项目结构:看懂三层架构和六张表,答辩才有话说

课程设计级别的图书管理系统,代码组织方式决定了你答辩能讲多深。这一章先把压缩包里的结构和数据库设计拆开,让你在动手运行前就心里有数。

2.1 包名结构:JavaEE 三层架构是怎么分出来的

这类期末大作业最常见的落法是 JSP + Servlet + JDBC 三层,个别版本会用 Spring、Struts2、Hibernate 再包一层,但核心分层思想不变。我拿到压缩包的第一件事不是解压运行,而是先看 src 目录的包名,包名基本就是一张架构图:

src/ ├── com.xx.book.servlet # 控制层:接收请求、调业务、转向 JSP │ ├── UserServlet.java # 管理员登录、退出、权限判断 │ ├── BookServlet.java # 图书的增删改查、模糊搜索 │ └── BorrowServlet.java # 借书、还书、续借、超期查询 ├── com.xx.book.service # 业务层:库存校验、借阅规则、事务边界 ├── com.xx.book.dao # 数据访问层:JDBC、SQL、结果集封装 ├── com.xx.book.entity # 实体类:User、Book、BorrowRecord ├── com.xx.book.filter # 登录拦截过滤器、编码过滤器 └── com.xx.book.util # DBHelper、分页工具、日期转换

这段结构值得你花十分钟记住,因为答辩时最容易被追问的就是「你的分层依据是什么」。控制层只做参数接收和页面转发,不写 SQL;业务层管规则和事务;DAO 层只做数据读写。三层各干各的,也是老师判断你是不是真写过项目的重要标准。我见过不少同学的源码是 Servlet 里一把抓,查询、判断、拼 HTML 全在一个方法里,能跑但完全讲不清。

判断这套包是纯三层还是套了框架,有个很省事的办法:打开 WebRoot/WEB-INF/lib 看 jar 列表。如果有一堆 spring-.jar、struts2-.jar、hibernate*.jar,说明是 SSH 落法;如果只有 servlet-api、jsp-api、mysql-connector,就是标准 Servlet+JDBC。两者跑起来体验差别很大——套了 Spring 的项目启动时要先初始化 Spring 容器,慢但代码规范整洁;纯三层的项目改动直观,适合答辩现场临时改参数重新部署。

2.2 数据库表设计:六张表怎么撑起借还书闭环

图书管理系统不管界面怎么变,后端都绕不开这几张表:图书表、读者/用户表、图书分类表、借阅记录表、管理员表和罚金表。核心的两张表建表语句一般长这样:

CREATE TABLE t_book ( id INT PRIMARY KEY AUTO_INCREMENT, book_name VARCHAR(100) NOT NULL, isbn VARCHAR(20) UNIQUE, author VARCHAR(50), publisher VARCHAR(50), price DECIMAL(8,2), type_id INT, stock INT DEFAULT 0, total INT DEFAULT 0, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_type (type_id) ); CREATE TABLE t_borrow ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, book_id INT NOT NULL, borrow_time DATETIME, should_return_time DATETIME, actual_return_time DATETIME, status TINYINT DEFAULT 0, KEY idx_uid (user_id), KEY idx_book (book_id), CONSTRAINT fk_borrow_book FOREIGN KEY (book_id) REFERENCES t_book(id) );

注意 t_borrow 里 status 字段的约定:0 表示借出未还,1 表示已还,2 表示超期未还。很多实现里没有专门的超期状态字段,而是用「status=0 且 should_return_time < 当前时间」来算,这种设计没问题,但查询时口径必须统一,否则统计超期数量会前后对不上。各张表的职责关系看这张表:

表名主要字段职责
t_admin账号、密码、角色管理员登录认证
t_user学号、姓名、电话、可借数读者信息维护
t_book_type分类名、排序号图书分类下拉框数据源
t_book书名、ISBN、作者、库存图书增删改查的主体
t_borrowuser_id、book_id、应还时间、状态借还书的核心流水
t_fineborrow_id、金额、是否缴纳超期罚款,按借阅记录关联

建表顺序要注意:先建没有外键依赖的分类表、用户表,再建 t_borrow。如果 SQL 脚本把顺序写反,MySQL 会直接报外键约束错误,新手看到那个报错容易慌,其实只是顺序问题,调一下即可。t_fine 不是核心闭环的必需表,但答辩时提一句「超期后按天自动计算罚金并关联到借阅记录」,能明显加分。

2.3 压缩包内容:拿到手先确认这三类文件都在

解压之后别急着运行,先按下面清单确认文件齐不齐:

BookManager/ ├── src/ # Java 源码,分包结构见 2.1 ├── WebRoot/ # Web 根目录,JSP、CSS、JS、图片 │ ├── WEB-INF/lib # JDBC 驱动等依赖 jar │ └── WEB-INF/web.xml # 过滤器、欢迎页、Servlet 映射 ├── sql/bookmanager.sql # 建库建表 + 初始数据 + 演示账号 ├── 演示视频.mp4 # 完整操作演示 ├── 设计文档.docx # 有的包带项目报告、ER 图 └── README.txt # 启动说明,通常写环境要求

先检查 WEB-INF/lib 里有没有 mysql-connector 的 jar,没有的话项目一启动就会出现 ClassNotFoundException,这是这类包最常见的缺文件问题。再打开 sql 脚本确认里面有 CREATE DATABASE 语句,有的话说明建库建表一次完成,直接 source 执行即可。最后看 web.xml 里的 welcome-file 是什么,是 login.jsp 还是 index.jsp,这决定你浏览器访问时的入口路径。

演示视频我也建议先看一遍再动手,重点是确认视频里的界面风格、账号密码和当前代码版本是否一致。我拆过的这类包里,大约三分之一会出现视频与代码界面对不上的情况,视频是早期录的,代码被后手改过,这种情况第 5 章专门讲怎么处理。

提示:README.txt 里通常会写死数据库密码,如果和本地 MySQL 不一致,记得同步修改 db.properties,否则启动即连库失败。

3. 环境搭建与运行:从 JDK 到浏览器端到端的落地参数

这套包能不能跑起来,80% 取决于环境匹配,其次是数据库初始化。这一章按我实际操作的顺序写,照着走通常半个下午能跑通。

3.1 环境版本选型:JDK、Tomcat、MySQL 怎么搭最省事

这类老课程设计项目的源码大多按 JDK 1.7 或 1.8 写的,编译级别和第三方依赖都按老版本踩过。我给你的版本组合如下:

组件推荐版本说明
JDK1.8兼容性最好,不建议直接上 JDK 11 以上
Tomcat8.5与 JDK 1.8 配套最稳,Tomcat 9 也能用
MySQL5.7驱动用 5.1.49 最省事;用 8.0 要换驱动加时区参数
IDEEclipse 或 IDEA需要配置 Tomcat Runtime Environment

JDK 版本上翻车概率最高。你本地如果只装了 JDK 21,直接导入老项目,编译报错会集中在 javax.servlet 找不到、泛型写法不兼容这类地方,处理起来很费时间。常见做法是在 IDE 里再配一个 1.8 的 JDK,或者把项目编译级别降到 1.8。数据库连接配置一般集中在 src 下的 db.properties 或 jdbc.properties,典型内容如下:

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/bookdb?useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123456

如果你用的是 MySQL 8.0,驱动要换成 com.mysql.cj.jdbc.Driver,URL 里加 serverTimezone=Asia/Shanghai,否则启动时控制台会报认证插件相关的错误。这个坑在第 5 章会细说。改完连接串记得重启 Tomcat 才生效,这是个容易忽略的细节。

3.2 初始化数据库:用 mysql 命令行执行 SQL 脚本

把 SQL 脚本跑进 MySQL 的方法很简单,打开命令行,登录后执行 source。这里其实就用上了三条 mysql 数据库常用命令:登录、执行脚本、查看表:

mysql -u root -p mysql> source D:/BookManager/sql/bookmanager.sql; mysql> show tables;

source 会逐行执行脚本里的建库、建表、插入语句。执行完 show tables 能看到第 2 章讲的那几张表,说明脚本完整执行了。如果你看到的输出为空,说明脚本里没有建库语句,或者没写 USE bookdb,手动加一句 USE 再 source 一次即可。

有些同学在这一步习惯用 Navicat 图形界面导入,也能跑,但我更推荐命令行,因为导出、导入、改库时命令行不会漏掉字符集设置。执行完脚本后,我有个固定动作是顺手查一下初始账号:

SELECT id, username, role FROM t_admin; SELECT id, username, phone FROM t_user LIMIT 5;

有的脚本里管理员是 admin/123456,有的是 admin/admin,查一眼能省掉后面登录时猜密码的时间。演示视频里通常有账号信息,但如果视频对不上,以数据库里的实际数据为准。

3.3 部署到 Tomcat:Eclipse 与 IDEA 两种路径

Eclipse 导入方式比较直观,步骤是:

File -> Import -> Existing Projects into Workspace 选中解压后的目录 Window -> Preferences -> Server -> Runtime Environments 添加 Tomcat 8.5 右键项目 -> Run As -> Run on Server 浏览器访问 http://localhost:8080/BookManager/login.jsp

IDEA 里如果是 Maven 工程,更接近上线流程:

mvn clean package -DskipTests cp target/bookmanager.war $TOMCAT_HOME/webapps/ $TOMCAT_HOME/bin/startup.sh

访问路径里的 BookManager 是项目名,也就是部署时的 context path。如果你在 IDEA 里看到部署名变成了 BookManager_war_exploded,访问路径也要跟着改,否则 404。这里顺带说一句,不少人在 vscode 里折腾配置 javaee 语言环境来跑这类 Web 工程,能跑但部署、打断点、看 Tomcat 日志都很绕,我一般不建议把自己卡在这上面,老老实实用 Eclipse 或 IDEA,半天能搞定的事没必要耗两天。

启动成功后,登录页正常打开、点登录能进主界面,就算端到端跑通了。这时先别急着挨个点功能,看一眼控制台有没有红色异常日志,有的话按第 5 章的路径排查。

注意:Tomcat 端口如果被占用,启动会直接失败。改 conf/server.xml 里的 Connector port 为 8081 之类,访问地址里也要带新端口。

4. 核心源码走读:借书、还书、超期判断的三段关键代码

跑通之后要做的就是对代码。答辩老师最爱问的就三块:登录怎么拦截未登录用户、借书怎么保证库存不超、超期天数怎么算。这一章把三段最核心的代码拆开讲。

4.1 登录拦截:Session 过滤器是怎么拦住未登录访问的

未登录用户直接敲 URL 访问后台页面,系统必须拦下来。标准做法是写一个 Filter:

public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; HttpSession session = request.getSession(); Object user = session.getAttribute("loginUser"); if (user == null) { String ctx = request.getContextPath(); response.sendRedirect(ctx + "/login.jsp"); return; } chain.doFilter(req, resp); } }

这段逻辑很直白:每次请求进来先看 session 里有没有 loginUser,没有就重定向到登录页。两个参数值得注意:getSession() 默认是 true,会自动创建 session;sendRedirect 的目标必须是登录页,不能是另一个受保护的 servlet,否则又会被拦截。

过滤器要在 web.xml 注册并配置拦截范围:

<filter> <filter-name>loginFilter</filter-name> <filter-class>com.xx.book.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>

拦截范围是这里最容易翻车的地方。如果把 /servlet/* 写成 /*,登录页本身也会被拦,直接造成「跳到登录页然后又跳回登录页」的死循环。正确做法是只拦受保护的功能路径,或显式放行 login.jsp 和 LoginServlet。读代码时先确认这两处配置是否配套,这是答辩时能加分的小细节。

4.2 借书与还书:业务层凭什么保证库存和数据一致

借书是整个系统里最值得读的代码,因为它涉及两个数据操作:插入借阅记录、扣减库存。这两个操作必须在一个事务里完成,否则会出现「记录有了库存没减」或反过来的一致性损坏。典型实现:

public boolean borrowBook(int userId, int bookId) { Connection conn = DBHelper.getConnection(); try { conn.setAutoCommit(false); // 开启事务 Book book = bookDao.findById(conn, bookId); if (book == null || book.getStock() <= 0) { return false; // 库存不足直接失败 } int inserted = borrowDao.insert(conn, userId, bookId); // 写借阅记录 int updated = bookDao.decreaseStock(conn, bookId, 1); // 库存 -1 conn.commit(); return inserted > 0 && updated > 0; } catch (Exception e) { conn.rollback(); // 任一步失败全部回滚 throw new RuntimeException("借书失败,事务已回滚", e); } finally { DBHelper.setAutoCommit(conn, true); // 恢复自动提交 DBHelper.close(conn); // 释放连接 } }

三个要点你读每行时对照一下:先查库存、再插入记录、再扣减库存,顺序不能乱;setAutoCommit(false) 开启事务,失败时 rollback 保证两个操作要么都成功要么都失败;finally 里必须恢复自动提交并关闭连接,否则连接池里的连接被污染,下次复用会出现莫名其妙的脏数据。很多翻车版本要么忘了 rollback,要么忘了在 finally 里恢复 autoCommit。

库存扣减还能更紧凑,用一条带条件更新的 SQL 兜底:

UPDATE t_book SET stock = stock - 1 WHERE id = ? AND stock > 0;

这条语句把「判断库存」和「扣减」合并成一步,比先查后改在高并发下更安全。项目里如果用了这条写法,答辩时直接说「我用条件更新防止超卖」,是很加分的点。还书的逻辑对称:还书记录改状态、stock + 1,同样包事务。检查时重点看 actual_return_time 有没有被赋值,status 有没有从 0 切到 1。

4.3 超期判断与分页:两个数据库层面的高频追问

超期判断不用写 Java 定时任务,课程设计阶段一条 SQL 就够了:

SELECT u.username, bk.book_name, b.borrow_time, b.should_return_time, DATEDIFF(NOW(), b.should_return_time) AS overdue_days FROM t_borrow b JOIN t_user u ON u.id = b.user_id JOIN t_book bk ON bk.id = b.book_id WHERE b.status = 0 AND b.should_return_time < NOW();

DATEDIFF 返回两个日期之间的天数差,正值就是超期天数。注意 JOIN 的别名要和表结构里的外键对应,关联错了会出现结果集翻倍,同一本书重复出现多行,统计数字就全乱了。

分页查询也是答辩高频题,标准写法是 LIMIT 加偏移量:

SELECT id, book_name, author, publisher, price, stock FROM t_book ORDER BY id DESC LIMIT ?, ?;
int page = Integer.parseInt(request.getParameter("page")); // 当前页 int rows = 10; // 每页条数 int offset = (page - 1) * rows; // LIMIT 第一个参数

LIMIT 第一个问号是偏移量,第二个是每页条数。第一页 offset 是 0,第二页是 10,第三页是 20。常见错误是把 offset 直接传成 page,导致第一页空、第二页才是前十条。总数查询一般是 SELECT COUNT(*) FROM t_book,总页数计算公式是 (total + rows - 1) / rows。这套「增删改查 + 分页 + 统计」覆盖完,基本就是数据库部分的主要考察点。

5. 避坑指南:现场演示最容易翻车的五个问题与排查路径

跑源码最怕的不是代码难,而是环境坑和演示时突然报错。下面五条是我拆这类整包时反复遇到的,按「现象—原因—解决」整理,你遇到时直接对号入座。

5.1 启动正常但浏览器 404

现象:Tomcat 启动没有任何报错,浏览器访问 http://localhost:8080/BookManager/ 直接 404。 原因:项目没真正部署到当前 Tomcat 实例,或者 context path 不是 BookManager。IDEA 里常见部署名变成 BookManager_war_exploded,Eclipse 里常见项目没挂到 Server 上。 解决:先看 IDE 的 deployment 配置,把 application context 统一改成 /BookManager;再用 http://localhost:8080/BookManager/login.jsp 直接访问。如果还 404,去 Tomcat 的 webapps 目录看有没有对应目录或 war 包,没有就重新 deploy 一次。

5.2 数据库连接失败:驱动找不到或认证被拒

现象:登录时直接 500,堆栈第一行是 ClassNotFoundException: com.mysql.jdbc.Driver,或者是 Access denied 相关错误。 原因:两种常见情况。一是 mysql-connector 的 jar 没放进 WEB-INF/lib;二是 MySQL 8.0 用了 5.x 旧驱动,认证插件不兼容,或者 URL 缺少 serverTimezone 参数。 解决:先检查 lib 目录里 jar 是否存在,版本和 MySQL 是否匹配。MySQL 5.7 用 5.1.49,MySQL 8.0 用 8.0.x,连接串改成:

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/bookdb?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=你本地的密码

5.3 全站中文乱码

现象:JSP 页面显示正常,但从数据库读出来的中文全是问号,或者表单提交的中文存进去再读出来是乱码。 原因:三个编码点不统一:JSP 页面 contentType 的 charset、请求端的编码过滤器、数据库连接 URL 里的 characterEncoding。任何一处漏了都会出问题。 解决:先给项目加编码过滤器,再保证连接 URL 带 useUnicode=true&characterEncoding=utf8,最后确认建库时指定了 utf8mb4:

CREATE DATABASE bookdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

如果数据库已经建好,可以用 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 修复,但演示前最好别动表结构,改完记得重启 Tomcat 再看。

5.4 借书不扣库存或同一本书反复借

现象:借书提示成功,列表里出现多条相同借阅记录,但 t_book 的 stock 没变化;或者库存明明为 0 还能借成功。 原因:借书逻辑只有「先查后插」,没有用事务包住「查库存—插记录—扣库存」三步,两条 SQL 之间出了异常只回滚了一半,或者判断库存和扣库存不在同一个事务里。 解决:按 4.2 的方式把三步包进事务,rollback 放在 catch 里。如果源码里 stock 是先用 SELECT 查再用 UPDATE 写,改成 WHERE stock > 0 的条件更新,一次到位。

5.5 演示视频和代码界面对不上

现象:视频里的界面是深蓝色主题,代码跑出来是默认白色;或者视频里有批量导入功能,代码里根本没有。 原因:这类整包在流传过程中经常被后来者改样式、加功能后重新打包,视频是早期版本录的,没有同步更新。以视频为参照,现场演示时就会按视频操作却找不到对应按钮。 解决:以代码为准重录一段 3 到 5 分钟视频,按登录、图书增删改查、借还书、超期查询的顺序走一遍。视频里出现你自己的数据库记录和界面,老师看到视频界面和现场一致,心里会默认这确实是你做的。

6. 进阶与答辩:用视频撑住演示节奏,两个低成本加分改动

6.1 演示视频的正确打开方式:当成答辩预演而非作品展示

拿到视频后不要直接上交,先用它学操作顺序:哪里点登录、先展示哪个菜单、借书流程的操作路径。把演示顺序固定成:先讲登录和权限,再演示图书增删改查,接着借还书,最后切超期查询和罚款。这个顺序和代码分层一一对应,老师听着不容易乱。录新视频时用自己跑出来的系统,开头几秒展示真实数据库数据和登录账号,每个功能操作放慢,让鼠标路径清晰可见。视频不是越长越好,5 分钟以内最合适。

6.2 两个低成本加分改动:借阅量统计与超期标记

答辩加分不一定要大改,两个小改动就够。一个是借阅量 Top 统计,给 BookServlet 加一个方法:

private List<Map<String, Object>> getTopBooks(Connection conn, int limit) { String sql = "SELECT bk.book_name, COUNT(*) AS borrow_count " + "FROM t_borrow b JOIN t_book bk ON bk.id = b.book_id " + "WHERE b.status IN (0,1) " + "GROUP BY b.book_id ORDER BY borrow_count DESC LIMIT ?"; return queryList(conn, sql, limit); }

把结果渲染成一个简单条形图页面,哪怕用 div 宽度模拟都行。老师看到有统计报表,就会默认你考虑了实际应用场景。另一个改动是超期清单标红,在借阅记录列表里判断应还时间是否早于当前时间,早于就加红色样式,JSP 里一行状态判断即可:

<c:if test="${record.status == 0 && record.shouldReturnTime < now}"> <span style="color:red">已超期</span> </c:if>

这两个改动都不动数据库结构,只加一个页面和几行代码,工作量小、可讲性好,比临时去背「系统能跑」强得多。我这几年拆这类整包最大的教训就是:一个包能不能让我信服,不在功能多少,而在演示是不是闭环、代码是不是分层、坑是不是能讲清。从那以后我每次拿到别人的项目包,都强制走一遍「导库 → 改连接密码 → 跑通 → 重录视频」四步,再谈改造。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 3:00:29

嵌入式文件管理:从inode、位示图到Flash掉电实战

1. 嵌入式场景下的文件管理&#xff1a;考试要分&#xff0c;项目要命&#xff0c;两头都得抓做嵌入式的朋友看到"文件管理"四个字&#xff0c;第一反应多半是&#xff1a;Linux下不就是cp、mv、rm的事吗&#xff0c;有必要单独当一章来啃&#xff1f;还真有必要。计…

作者头像 李华
网站建设 2026/10/21 17:59:33

工业电源路径智能防护:TPS259483AYWPR与PIC18F85J10协同设计

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

作者头像 李华
网站建设 2026/10/30 3:50:24

智能体触达能力Agent-Reach:从任务规划到工具调用的工程实践

1. 拆解Agent-Reach&#xff1a;智能体的“触达”到底卡在哪做AI应用落地这一行&#xff0c;这两年最大的体感变化就是&#xff1a;大模型的能力已经严重溢出&#xff0c;真正拖后腿的反而是“智能体能不能稳定地触达目标”。我见过太多团队&#xff0c;模型用的都是顶级API&am…

作者头像 李华
网站建设 2026/10/29 11:45:35

Virtuoso模拟IC设计全流程实操:PDK配置、仿真收敛与Skill脚本

很多刚接触模拟集成电路设计的人&#xff0c;第一次打开 Cadence Virtuoso&#xff0c;盯着 Library Manager 和 CIW 窗口都是一头雾水&#xff1a;这和我印象里“画电路图的软件”不太一样。我当年也是&#xff0c;对着拉扎维的书想搭一个差分对&#xff0c;折腾了半天才搞清楚…

作者头像 李华
网站建设 2026/10/31 4:43:08

GLM-5.3安全封印解析:从红队测试到工程化调优指南

最近社区里关于GLM-5.3的讨论很热闹&#xff0c;尤其是“安全封印”这个词&#xff0c;不少人把它当成一个可以暴力拆解的锁。其实&#xff0c;我在一线做模型部署和安全评测很多年&#xff0c;我的感受是&#xff1a;所谓封印&#xff0c;更像是一套可配置的安全策略层&#x…

作者头像 李华
网站建设 2026/10/29 2:50:03

小程序进阶核心:setData、组件通信与盒子边框

很多学小程序开发的朋友都有类似的困惑&#xff1a;跟着教程跑通一个Demo觉得挺简单&#xff0c;真接手一个像样的项目却处处碰壁——setData卡成幻灯片、组件之间传值像传炸弹、一个页面写了两千行代码改都不敢改。这不是你基础差&#xff0c;而是从"会写"到"会…

作者头像 李华