新闻详情

新闻详情

首页 / 资讯中心 / 详情

Java Web个人博客系统毕业设计全流程解析

发布时间:2026/10/2 8:37:15来源:尧图网络
Java Web个人博客系统毕业设计全流程解析
简介这是一套基于Java的个人博客系统毕业设计资源面向准备毕设答辩的毕业生及Java Web入门者提供从需求分析到部署上线的完整参考能直观解决“系统怎么设计、功能怎么实现、答辩怎么呈现”等问题。压缩包约178.52MB整合项目报告、答辩PPT、源代码、数据库文件、部署视频与项目截图源代码覆盖控制器层、服务层、持久层及前端视图数据库文件包含博客文章、用户与评论数据视频演示环境配置和服务器启动。目前已有1347人学习/下载。通过这套素材学习者可熟悉Servlet、JSP、JavaBean、JDBC、MySQL等技术理清软件工程中设计、编码、测试的流程并借助报告和PPT辅助完成毕业答辩是兼顾实战与备战的实用资料。1. 毕业设计做个人博客系统Java Web全流程到底练了什么用 Java 写一个个人博客系统作为毕业设计几乎是 Java Web 方向最稳妥的选择。这个资源包把「项目报告 答辩PPT 源代码 数据库 部署视频」五件套凑齐了核心价值不在于博客本身有多炫而在于它覆盖了一整套 Java Web 开发的完整链路从 Servlet/JSP 后端处理、MySQL 数据库设计到前端页面渲染、部署上线。适合两类人一类是时间紧、需要快速跑通一个能答辩的完整项目的应届生另一类是刚学完 Java 基础想看看真实项目代码长什么样的自学者。它解决的不是「学会某一个知识点」而是「知道一个 Java Web 项目从零到部署的每一步长什么样」。2. 环境搭建与部署JDK、Tomcat、MySQL 的版本匹配与导入步骤2.1 JDK 与 Tomcat 版本匹配Java Web 的第一道坎拿到资源包后别急着打开代码先把环境对齐。这个项目基于 Servlet/JSP 技术栈理论上只要 JDK 版本和 Tomcat 版本匹配跑起来就没什么大问题。常见做法是用 JDK 8 搭配 Tomcat 8.5 或 Tomcat 9这是 Java Web 课程设计里最稳的组合。JDK 8 的兼容性最好市面上绝大多数教材和毕业设计代码都以它为准Tomcat 8.5 支持 Servlet 3.1处理 JSP 和 Servlet 都够用。如果你机器上装的是 JDK 11 甚至 JDK 17不是不能跑但要注意项目里如果用了某些老库可能会报模块访问错误。环境变量配置是第一个容易出问题的地方。安装完 JDK 后需要配置 JAVA_HOME、PATH 和 CATALINA_HOME# Windows 环境变量配置示例 JAVA_HOMEC:\Program Files\Java\jdk1.8.0_202 PATH%JAVA_HOME%\bin;%PATH% CATALINA_HOMED:\apache-tomcat-8.5.xx配置完成后在命令行验证java -version如果输出的是java version 1.8.0_202说明 JDK 环境没问题。这里有个细节很多人配完 PATH 不重开命令行窗口导致一直读不到新配置这不是玄学是 Windows 环境变量的刷新机制重开一个终端窗口就好了。2.2 数据库导入与连接配置SQL 脚本不是双击就完事资源包里的数据库文件通常是.sql格式的脚本不是直接能用的数据文件。导入之前需要确认两件事MySQL 版本和字符集。MySQL 5.7 和 MySQL 8.0 的导入方式一样但连接驱动的版本有讲究。MySQL 5.7 用mysql-connector-java-5.x.jarMySQL 8.0 需要mysql-connector-java-8.x.jar而且驱动类名不同。这个坑在后面的 JDBC 配置里会详细说。导入数据库脚本的命令是mysql -u root -p blog.sql如果脚本里没有CREATE DATABASE语句需要先手动建库mysql -u root -p CREATE DATABASE blog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE blog; SOURCE /path/to/blog.sql;导入成功后用SHOW TABLES;查看表是否齐全。正常情况下至少会有用户表、博客文章表、评论表这三张核心表。字符集用utf8mb4是稳妥选择只支持utf8的旧脚本在插入 emoji 表情时会报错这个后面会细说。数据库连接池的配置在项目的jdbc.properties或db.properties文件里jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/blog?useSSLfalsecharacterEncodingutf8 jdbc.usernameroot jdbc.password123456注意看驱动类名。MySQL 5.x 用com.mysql.jdbc.DriverMySQL 8.x 要用com.mysql.cj.jdbc.Driver同时 URL 里最好加上serverTimezoneAsia/Shanghai否则会报时区错误。这个坑几乎每个用 MySQL 8 跑老项目的人都会踩一遍。2.3 部署视频的正确用法先看目录结构再看操作顺序部署视频这种东西很多人是边播边操作结果卡在某个细节上反复看不清。我一般建议先完整看一遍视频把操作步骤在纸上列出来再动手。视频里通常按「导入项目 → 配置 Tomcat → 导入数据库 → 启动运行」的顺序走实际动手时应该反过来先把数据库导好再导入代码最后配置 Tomcat。数据库都没准备好就启动项目Tomcat 能启动但访问页面会直接报 500。如果部署视频讲的是用 Eclipse 导入而你用的是 IDEA操作路径会有差别。IDEA 里导入老式 Web 项目要选Open而不是New然后手动配置 Artifact。这个环节新手最容易放弃因为 IDEA 的 Project Structure 面板看起来像个黑匣子但本质就三件事确认源码目录、确认依赖库、确认 Web 部署描述符位置。提示部署视频是「这个项目在作者的机器上是这么跑的」你的环境版本不一样操作细节就要微调。版本匹配问题优先查日志别上来就怀疑视频有问题。3. 源码结构与 MVC 落地Controller、Service、DAO 三层怎么拆3.1 从项目报告反推需求分析与模块划分怎么对应代码打开项目报告第一章通常是需求分析里面画的功能模块图往往包含用户注册登录、博客发布与编辑、博客浏览与搜索、评论管理、个人信息管理。对应的源码目录结构一般是src/ ├── com.blog.controller/ # Servlet 控制器层 ├── com.blog.service/ # 业务逻辑层 ├── com.blog.dao/ # 数据访问层 ├── com.blog.entity/ # 实体类 ├── com.blog.util/ # 工具类 └── com.blog.filter/ # 过滤器登录验证这个分层就是标准的 MVC 落地。Controller 接收请求、调用 Service、返回页面Service 处理业务规则比如注册时检查用户名是否已存在、发布文章时校验标题不能为空DAO 负责和数据库交互。实体类对应数据库表一个实体类对应一张表。对照项目报告看代码是最快的学习方式。报告里写的「系统分为前台展示和后台管理两大模块」在前台代码里对应的是index.jsp和article.jsp在后台代码里对应的是admin/目录下的管理页面。很多人在做毕设时只关注功能跑通忽略了报告和代码的对应关系答辩时被问「你这个模块的实现在哪」答不上来这是最可惜的丢分点。3.2 Servlet 控制器与 JSP 视图一次请求的完整旅程以「发布博客」这个功能为例一次完整请求的路径是这样的用户在publish.jsp填写表单点击提交表单 POST 到PublishArticleServletServlet 调用 Service 层Service 调用 DAO 层写入数据库最后转发回文章列表页。核心 Servlet 代码长这样WebServlet(/publishArticle) public class PublishArticleServlet extends HttpServlet { private ArticleService articleService new ArticleService(); Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); // 必须设置否则中文乱码 String title request.getParameter(title); String content request.getParameter(content); Integer userId (Integer) request.getSession().getAttribute(userId); // 参数校验标题不能为空 if (title null || title.trim().isEmpty()) { request.setAttribute(error, 标题不能为空); request.getRequestDispatcher(/publish.jsp).forward(request, response); return; } Article article new Article(); article.setTitle(title); article.setContent(content); article.setUserId(userId); articleService.publishArticle(article); response.sendRedirect(request.getContextPath() /articleList); } }这段代码里有几个要点。request.setCharacterEncoding(UTF-8)必须放在任何getParameter之前否则 POST 请求的中文会乱码这是 Java Web 开发最经典的坑。getSession().getAttribute(userId)拿的是登录时存进 Session 的用户标识这体现了 MVC 里 Session 的典型用法。参数校验放在 Controller 层是毕业设计级别的做法满足基本要求生产级系统还需要在 Service 层再做一遍校验。sendRedirect和forward的区别值得注意。forward是服务器内部转发URL 不变能携带request属性sendRedirect是浏览器重定向URL 变化数据要通过 Session 或重新查询来传递。发布成功后用重定向能避免表单重复提交——刷新页面不会重复写入一条文章这个细节在答辩时可以主动讲出来是加分项。Service 层封装业务逻辑典型写法如下public class ArticleService { private ArticleDao articleDao new ArticleDao(); public void publishArticle(Article article) { // 业务规则同一用户不能连续发布相同标题的文章 if (articleDao.findByTitle(article.getUserId(), article.getTitle()) ! null) { throw new RuntimeException(文章标题已存在); } articleDao.insert(article); } }JSP 页面负责展示注意在 JSP 里用 JSTL 标签做列表循环能避免大量 Java 代码嵌入页面的坏味道。c:forEach是这个项目里最常用的标签作用相当于 Java 的 for-each 循环c:forEach vararticle items${articleList} div classarticle-item h2a href${pageContext.request.contextPath}/articleDetail?id${article.id}${article.title}/a/h2 p${article.content}/p /div /c:forEach3.3 数据访问层的 JDBC 写法与连接池参数DAO 层的核心是 JDBC 操作。老项目一般是手动写Connection、PreparedStatement、ResultSet三件套新一点的项目可能引入了 DBUtils 工具类。手动写法能帮你理解底层机制DBUtils 写法能提高效率两个都值得看。public class ArticleDao { public ListArticle findAll() { ListArticle list new ArrayList(); String sql SELECT * FROM t_article ORDER BY create_time DESC; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql); ResultSet rs ps.executeQuery()) { while (rs.next()) { Article article new Article(); article.setId(rs.getInt(id)); article.setTitle(rs.getString(title)); // 其他字段依次映射 list.add(article); } } catch (SQLException e) { e.printStackTrace(); } return list; } }注意try-with-resources写法这样Connection、PreparedStatement、ResultSet会自动关闭不会造成连接泄漏。连接泄漏在开发环境看不出问题跑一段时间后数据库连接池耗尽系统就假死了重启才能恢复属于典型的「黑匣子」故障。连接池的配置参数理解比背参数更有用。常用参数有initialSize初始连接数、maxActive最大活动连接数、maxWait获取连接的最大等待毫秒数。对于毕设项目maxActive20就完全够用了不需要照搬生产环境的配置。如果项目用的是 DBCP 或 C3P0 连接池记住一句话先确认连接池 jar 包在WEB-INF/lib目录下否则启动时不会报错但第一次查询数据库就会抛ClassNotFoundException这个错误很容易让人误判成数据库问题。4. 数据库设计与增删改查博客、用户、评论三张核心表的字段陷阱4.1 表结构设计从数据库文件看设计思路打开数据库脚本第一件事是看建表语句。一个标准的个人博客系统至少有三张核心表用户表、文章表、评论表。它们的字段设计有很强的代表性看完这三张表基本就能掌握 Java Web 毕设的数据库设计套路。-- 用户表 CREATE TABLE t_user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, nickname VARCHAR(50), avatar VARCHAR(255), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 文章表 CREATE TABLE t_article ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, title VARCHAR(200) NOT NULL, content TEXT, view_count INT DEFAULT 0, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES t_user(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 评论表 CREATE TABLE t_comment ( id INT PRIMARY KEY AUTO_INCREMENT, article_id INT NOT NULL, user_id INT NOT NULL, content VARCHAR(500) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (article_id) REFERENCES t_article(id), FOREIGN KEY (user_id) REFERENCES t_user(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这三张表的设计有几个关键点。外键约束FOREIGN KEY保证了数据一致性用户 ID 在文章表里是外键如果删除一个用户他的文章也会关联处理——这是数据库面试里的常考题。AUTO_INCREMENT是自增主键比用 UUID 做主键的性能更好Java 基础面试八股文里「主键用自增还是 UUID」这条在这个项目里能找到标准答案。字符集用utf8mb4而不是utf8原因是 MySQL 的utf8最多支持 3 字节字符存不了 emoji 表情utf8mb4是完整的 UTF-8 实现兼容 4 字节字符。做毕设时这个选择基本不会被老师挑毛病反而能体现你对字符集的理解比较深。字段类型选择也要看标题用VARCHAR(200)而不是TEXT评论内容限制VARCHAR(500)文章正文用TEXT。TEXT 类型最多存 64KB 文本对博客正文完全够用。有些数据文件里文章正文用的是LONGTEXT那是为了保险但会浪费存储没必要学。4.2 增删改查与 SQL 注入代码里怎么防增删改查是毕业设计答辩时的必问环节。四个操作对应 DAO 层四个方法insert、delete、update、select。写法本身不难难的是写对。以用户登录为例最典型的错误是字符串拼接 SQL// 错误写法存在 SQL 注入风险 String sql SELECT * FROM t_user WHERE username username AND password password ;这种写法在输入框里输入 OR 11就能直接绕过密码验证是数据库安全里最基础的漏洞。正确写法是用PreparedStatement的占位符// 正确写法参数化查询防注入 String sql SELECT * FROM t_user WHERE username ? AND password ?; PreparedStatement ps conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password); ResultSet rs ps.executeQuery();PreparedStatement的?占位符会把参数当作纯字符串处理而不是拼接成 SQL 语句的一部分从根源上杜绝了注入。这个知识点在毕设答辩里几乎是必问的老师看到你用了PreparedStatement而不是Statement至少能确认你有基本的数据库安全意识。删除操作的物理删除和逻辑删除区别也值得想清楚。物理删除就是DELETE FROM数据彻底没了逻辑删除是加一个is_deleted字段查询时过滤。毕设项目用物理删除没毛病但如果你在答辩时能主动说「这里我考虑了逻辑删除因为博客文章删除后评论数据也需要处理」这就能体现出你对数据完整性的理解比一般人深。4.3 事务处理发布文章和评论计数怎么保持一致事务是 Java Web 项目里怎么也绕不开的话题。最典型的需求是发布一篇文章时需要同时往文章表插入记录、更新用户的文章数量。这两步操作必须同时成功或同时失败否则数据就不一致了。public void publishArticle(Article article) { Connection conn null; try { conn DBUtil.getConnection(); conn.setAutoCommit(false); // 关闭自动提交开启事务 ArticleDao dao new ArticleDao(); dao.insert(article, conn); // 插入文章 UserDao userDao new UserDao(); userDao.increaseArticleCount(article.getUserId(), conn); // 更新用户文章数 conn.commit(); // 两步都成功提交事务 } catch (SQLException e) { if (conn ! null) { conn.rollback(); // 任何一步失败回滚 } e.printStackTrace(); } finally { DBUtil.close(conn); } }事务的四个特性 ACID 是数据库面试里的高频考点。原子性Atomicity在这里体现得最明显——要么全成功要么全回滚。一致性Consistency保证操作前后数据都处于合法状态。隔离性Isolation涉及并发情况下的数据可见性问题毕设项目一般不会遇到严重的并发场景但你要能说出来「如果两个用户同时发布文章事务隔离能防止数据互相干扰」。持久性Durability指的是提交后数据不会丢失。注意代码里dao.insert(article, conn)这种写法——DAO 方法接收外部传入的Connection这是事务控制的关键。如果 DAO 内部自己获取连接事务就控制不到了。这个细节在阅读源代码时可以重点关注很多项目报告里的「事务控制」章节对应到代码里就是这个参数的传递链条。5. 部署避坑指南从报错日志看 Java Web 的五个常见翻车点5.1 Tomcat 404 页面项目能启动但访问不到页面现象Tomcat 启动成功控制台没有错误但访问http://localhost:8080/blog/返回 404。原因多数情况下是部署配置问题。IDEA 或 Eclipse 里项目没有正确部署到 Tomcat 的 webapps 目录或者部署的 Context Path上下文路径不对。IDEA 里常见的是 Artifact 没有配置好项目源码没有被编译进部署目录。解决在 IDEA 的 Run Configuration 里检查 Deploy 标签页确认 Artifact 已经添加Application context 配置为/blog。如果用的是 Eclipse右键项目 → Properties → Project Facets → 确认 Dynamic Web Module 已勾选。部署后手动检查 Tomcat 的 webapps 目录下是否生成了blog文件夹。没有生成就说明部署配置有问题。5.2 中文乱码页面显示和数据库存储全是问号现象页面上显示的中文变成乱码或问号往数据库里存的中文也变成了???。原因乱码问题通常是三层字符集不统一造成的。JSP 页面编码、Servlet 请求编码、数据库连接编码、数据库表字符集四者必须全部是 UTF-8。任何一层出了问题中文就保不住。解决按照这个顺序排查。第一确认 JSP 页面头部有% page contentTypetext/html; charsetUTF-8 %第二确认 Servlet 里设置了request.setCharacterEncoding(UTF-8)和response.setCharacterEncoding(UTF-8)第三确认数据库 URL 带characterEncodingutf8第四确认表字符集是utf8mb4。四步走完乱码基本消失。乱码问题在 Java Web 项目里属于最常见的「血泪经验」一次配齐省的后面反复折腾。5.3 数据库连接失败Communications link failure现象项目启动时控制台报Communications link failure或Connection refused页面访问直接 500。原因MySQL 服务没启动或者数据库连接配置里的端口、账号密码不对。jdbc.properties里的密码和本地 MySQL 的实际密码不一致是最容易踩的坑——很多时候代码用的是作者的密码123456你本地的密码是别的。解决先用命令行确认 MySQL 能正常连接mysql -u root -p。能连上再确认配置文件的 URL 端口是 3306账号密码匹配。注意 MySQL 8 默认端口还是 3306但驱动类名必须用com.mysql.cj.jdbc.Driver老项目里写的com.mysql.jdbc.Driver在 MySQL 8 下会直接报ClassNotFoundException。5.4 端口被占用Tomcat 启动报 Address already in use现象Tomcat 启动时提示Address already in use: JVM_Bind 8080。原因8080 端口被其他程序占用了。常见的情况是自己之前启动过另一个 Tomcat 实例或者有其他开发工具用了 8080 端口。解决在命令行查找占用端口的进程netstat -ano | findstr 8080 taskkill /PID 进程号 /F或者直接改 Tomcat 的端口配置。打开conf/server.xml找到Connector port8080这一行改成 8081 或其他端口重启 Tomcat 即可。改端口是正规操作不算投机取巧——一个机器上跑多个 Web 项目时改端口是家常便饭。5.5 静态资源加载失败CSS/JS 全部丢失页面变成纯文本现象页面内容出来了但没有任何样式图片也不显示控制台一堆 404 错误请求路径都是/css/style.css这种。原因JSP 页面里静态资源路径写的是绝对路径/css/style.css没有加项目上下文路径。部署后项目在/blog路径下访问/css/style.css就被解析到了 Tomcat 根目录自然找不到。这是 Java Web 新手最容易忽视的问题。解决统一用${pageContext.request.contextPath}拼接静态资源路径link relstylesheet href${pageContext.request.contextPath}/css/style.css script src${pageContext.request.contextPath}/js/jquery.min.js/scriptpageContext.request.contextPath在部署环境里会自动解析成/blog项目改名或换路径都不用改代码。这个写法和「为什么 index.jsp 里要用相对路径」在答辩时经常被追问提前搞明白能省不少尴尬。6. 答辩 PPT 与二次开发怎么把别人的毕设变成自己的6.1 答辩 PPT 的正确讲法从功能罗列升级到技术亮点资源包里带的答辩 PPT 通常是 10-15 页结构一般包含项目背景、需求分析、系统设计、功能展示、总结展望。大多数人答辩时按 PPT 顺序念一遍就结束了但拿高分的关键是讲出技术思考而不是功能列表。PPT 里有项目截图讲的时候别光说「这是登录页面」。要主动讲技术点登录时密码有没有做 MD5 加密存储Session 超时时间怎么设置的博客的分页查询是用LIMIT offset, size还是用别的方案文章浏览量的view_count是每次请求直接加 1还是用定时刷新的方案一个技术点讲清楚顶过十个页面截图。数据库设计这部分建议针对你修改过的表单独做一页。比如你给文章表加了category_id字段做分类就说明为什么要加、加了之后查询逻辑有什么变化。不一定要多么高深的改动但「自己动手改了代码并说出理由」这是答辩评委判断项目是不是你做的核心依据。6.2 二次开发给博客加一个分类统计功能拿到别人的代码后最怕的是直接改名交上去。建议至少做一个小功能改动既能证明自己读懂了代码又能让项目带点个人标签。这里演示一个简单的改动在首页显示「全站各分类的文章数量统计」只需要三步。第一步在数据库文章表加分类字段ALTER TABLE t_article ADD COLUMN category VARCHAR(50) DEFAULT 未分类;第二步写一个统计查询public ListCategoryCount countByCategory() { String sql SELECT category, COUNT(*) AS cnt FROM t_article GROUP BY category; // 执行查询将结果封装成 CategoryCount 对象列表 }第三步在首页 JSP 加一个侧边栏区域展示结果。这个改动不复杂但覆盖了数据库变更、DAO 新增方法、JSP 展示三个层面答辩时能把整个改动链路讲清楚。6.3 一个收尾的习惯运行前强制走一遍检查清单我从这个项目里学到的最有实用价值的习惯是在启动项目前强制走一遍三连检查数据库连接配置是否正确、Tomcat 部署目录是否有旧版本残留、字符集三件套是否统一。这三项检查每次做一次能省下大半的报错排查时间。这些检查已经在前面逐条列过排查方法了把它们当成肌肉记忆就好。从那以后我每次接手一个新的 Java Web 项目都强制自己先看配置文件、再启动服务、最后才碰代码。顺序反了只会被报错牵着鼻子走。这个项目给我的感觉是它不像生产级系统那么复杂但作为理解 Java Web 开发流程的完整样本该有的环节一个不少。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MindSpore Transformers LLM预训练全流程与调优实践 2026/10/2 11:00:51

MindSpore Transformers LLM预训练全流程与调优实践

从去年下半年开始,我不止一次被同事问到同一个问题:MindSpore到底能不能正经跑LLM预训练?问的人多了,我发现大家潜意识里还是把“大模型训练”和“PyTorch麒麟臂显卡”绑在一起,MindSpore被默认为只能在昇腾上跑跑推理…

阅读更多 →
2026深度学习全栈五要素:PINN、Transformer、GNN、强化学习与扩散模型实战解析 2026/10/2 11:00:51

2026深度学习全栈五要素:PINN、Transformer、GNN、强化学习与扩散模型实战解析

1. 为什么是这五块拼图:2026年深度学习能力地图先说实话:2026年还只盯着CNN或者单跑一张ResNet,确实有点不够用了。“全栈”这个词这两年被用烂了,但在深度学习这边,它指的是一种能力结构——你不仅仅会训模型&#xf…

阅读更多 →
大模型读出端Jev:从隐藏状态直达决策,绕过文本生成的工程实践 2026/10/2 11:00:45

大模型读出端Jev:从隐藏状态直达决策,绕过文本生成的工程实践

最近在调一个内部Agent工具调用链路时,我盯着日志里那个让人哭笑不得的片段看了很久:模型为了返回一个“发送邮件”的动作,先写了一段“好的,我这就帮你发送邮件”,然后生成了一长串JSON,最后还因为JSON尾部…

阅读更多 →
eNSP错误40排查全攻略:VirtualBox虚拟化环境修复指南 2026/10/2 11:00:45

eNSP错误40排查全攻略:VirtualBox虚拟化环境修复指南

1. 错误40的真相:先分清是eNSP的锅还是VirtualBox的锅 1.1 错误代码40到底从哪冒出来的 如果你在华为eNSP里启动AR1路由器或者USG6000V防火墙时,界面弹出“错误代码:40”,先别急着重装eNSP。这个错误绝大多数情况下并不是eNSP本身…

阅读更多 →
KEIL5 Debug完全指南:从断点单步到HardFault排查 2026/10/2 11:00:45

KEIL5 Debug完全指南:从断点单步到HardFault排查

1. 先说个真实场景:当“三板斧”失灵,Debug才是救命稻草 前阵子帮朋友调一块STM32F103的板子,现象很诡异:程序上电后偶尔能跑,偶尔卡死在某个中断里。他习惯用老办法——在代码里到处塞printf,串口打印“跑…

阅读更多 →
Word与WPS页眉页码设置全攻略:从分节到域代码,解决排版难题 2026/10/2 11:00:45

Word与WPS页眉页码设置全攻略:从分节到域代码,解决排版难题

1. 快速上手:Word/WPS页眉与页码的基础设置先说个有意思的现象。我帮人处理文档排版时,十个人里有八个觉得页眉页码是“小事一桩”,结果真上手一调,不是页眉横线删不掉,就是页码从第三页开始编号,折腾半小时…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉