jsp网上招标系统实战:从JSP+Servlet部署到代码改造
简介一份以JSP、Servlet和JDBC技术实现的网上招标系统源码包适合正在准备Java Web课程设计或毕业设计的学生也适用于希望模仿完整业务流来提升项目经验的初级开发者。系统围绕会员发布与接收任务这一核心进行设计整体包含注册用户与管理员两大端用户端支持查看网站流程与新闻公告、发布留言、发布威客在线任务、查看已发布信息以及成交记录管理员端支持用户信息维护、网站留言删除与编辑管理、数据备份从信息浏览到后台维护均有覆盖。技术层面基于JSP、Servlet、JDBC进行开发数据库采用SQL Server开发环境为MyEclipse程序结构按用户端与管理员模块划分。压缩包大小约4.7MB以JSP页面、Servlet控制类、数据库访问类等源码文件为主整体便于按目录查找与复用。已有五千三百零五人浏览学习适合需要系统理解网上招标/威客任务发布流程及后台管理实现的开发者。阅读该项目时还能从列表展示、表单提交、数据维护、备份操作等典型场景中积累可迁移到其他Web管理系统的写法。1. jsp网上招标系统.zip 是什么一份能跑通的真实业务闭环拿到标题为jsp网上招标系统.zip的压缩包时很多人的第一反应是把它当成又一个课程设计交差工具。但真正把它解压、部署、跑通之后你会发现它其实是一套完整的招标业务模拟系统招标方发布公告、投标方下载标书、在线投标、开标评标、中标公示流程一条链全都有。这背后是 JSP Servlet JDBC 这种最经典的 Java Web 组合没有花哨的框架反而每一个环节都透明适合用来建立对 Web 项目从数据库到前端页面的整体认知。这个压缩包最适合三类人一是正在做课程设计、需要快速产出可演示系统的在校生二是想复习 Java Web 基础、把 Servlet 生命周期和 JDBC 连接池理清楚的开发者三是需要给内部培训搞一套可运行 Demo 的某公司技术负责人。它解决的问题很实在——用最少的依赖让你在本地把一个带权限、带文件上传、带状态流转的系统跑起来然后照着改。需要提前说明的是这套系统用的技术栈偏老JDK 8、Tomcat 8、MySQL 5.7 是它最舒服的运行环境。如果你电脑上装的是 JDK 17 或者 MySQL 8后面会遇到不少兼容性问题。这不是系统写坏了而是年代匹配问题我会在下一章把每一处的规避方式讲清楚。2. 环境选型与本地部署JDK、Tomcat、MySQL 的版本三角关系2.1 为什么 JDK 8 Tomcat 8 MySQL 5.7 是最稳妥组合网上招标系统诞生在 JSP 还流行的年代当时的 JDBC 驱动、JSTL 标签库和 Tomcat 容器之间的配合都是围绕 JDK 8 那一代设计出来的。如果你直接拿 JDK 17 去跑最常见的报错是UnsupportedClassVersionError因为编译用的 class 文件版本太高Tomcat 8.5 根本不认。反过来Tomcat 10 把javax.servlet包名改成了jakarta.servlet而这个系统里的 Servlet 代码全是老包名跑起来直接 404。所以我一般会建议压缩包解压后先别急着改代码按这个组合配环境组件推荐版本原因JDK1.8.0_202 或相近class 文件版本 52.0兼容所有老 TomcatTomcat8.5.x支持老 Servlet 4.0 规范不会改包名MySQL5.7.x默认字符集 utf8驱动连接字符串简单IDEEclipse 或 IDEA以导入 Web 项目方式打开不是普通 Java 项目这套组合的另一个好处是生态资料丰富凡是网上能搜到的 JSP 项目报错十有八九都有人记录过。你不需要自己从零排查不兼容问题把版本对齐之后剩下的就是部署细节。2.2 拿到压缩包后的目录识别哪些文件动不得解压后你看到的目录通常长这样jsp网上招标系统/ ├── src/ // Java 源码Servlet 和 DAO 都在这里 │ ├── com/xxx/dao/ // 数据访问层 │ ├── com/xxx/servlet/ // 控制器层 │ └── com/xxx/filter/ // 过滤器 ├── WebContent/ // Web 根目录 │ ├── JSP/ // 页面文件 │ ├── WEB-INF/ │ │ ├── web.xml // 部署描述符 │ │ └── lib/ // 项目依赖的 jar 包 │ └── upload/ // 上传文件目录 ├── sql/ // 数据库脚本 └── README.txt // 部署说明第一件事是打开WEB-INF/web.xml看里面的 Servlet 映射路径。很多同学喜欢直接双击login.jsp在浏览器打开这是行不通的因为 JSP 必须在 Tomcat 容器里经过程序编译才能运行浏览器只会显示 JSP 源码。你应该做的是把这些文件整体放入一个与webapps平级的工程目录然后通过 IDE 配置 Tomcat 来启动。这里最容易犯的错是把我之前提到的web.xml里的编码声明改掉——这个文件里的pageEncoding和contentType最好不要动所有 JSP 页面的编码统一 UTF-8改了以后可能引发后续乱码问题。2.3 最小启动命令在 IDEA 里跑起来的完整步骤假设你已经装好了 JDK 8 和 Tomcat 8.5下面是在 IDEA 里导入并启动这个项目的最短路径。# 1. 解压压缩包把整个目录放到工作区 unzip jsp网上招标系统.zip # 2. 打开 IDEA选择 File - New - Project from Existing Sources # 选中刚解压的目录选择 Import project from external model - Eclipse # 一路 Next直到完成导入 # 3. 配置 Tomcat # 菜单 Run - Edit Configurations - - Tomcat Server - Local # Tomcat Home 选择你本地的 Tomcat 8.5 目录 # Deployment 标签页 - - Artifact - 选择 war exploded配置完成后启动 Tomcat正常情况下控制台会出现Server startup in的日志然后在浏览器里访问http://localhost:8080/项目名/。这里的项目名指的是你部署时的 Context Path在 IDEA 里一般等同于你导入后的 project 名称。如果访问后看到的是 404先别急着怀疑代码检查两件事一是web.xml中welcome-file-list配置的起始页是否是login.jsp二是 Deployment 里的 Application context 是否填写了/项目名。3. 数据库初始化与核心表结构网上招标系统的状态机设计3.1 SQL 脚本的执行顺序先建库再建表最后灌初始数据这个系统里我会在开始阶段把所有表结构梳理清楚因为这是后续排查业务流的前提。压缩包的sql目录下通常有若干个.sql文件常见做法是分为create.sql和insert.sql或者只有一个合并文件。执行时要注意顺序必须先建库再建表。可以在 MySQL 命令行里按下面方式执行# 登录 MySQL mysql -u root -p # 在 mysql 命令行内执行 source /path/to/sql/create.sql; # 建库建表 source /path/to/sql/insert.sql; # 插入初始数据逻辑说明create.sql里会先执行CREATE DATABASE IF NOT EXISTS然后USE这个库再创建各张表。insert.sql里的管理员账号、演示招标公告都要依赖表已存在顺序错了会出现Table doesnt exist错误。参数说明如果你的 MySQL 安装在非默认端口连接时要加端口参数比如-P 3307。密码和用户名也要和后面 Java 代码里JDBC连接串保持一致这一步是后续连接失败时最先要检查的地方。3.2 五张核心表从招标公告到中标结果的字段流转招标系统的数据结构不复杂但状态字段很关键。以我见过的模拟项目X为例核心表一般拆成这样表名关键字段作用userid, username, password, role保存招标方、投标方、管理员三类账号noticeid, title, content, create_time, status招标公告status 区分草稿/发布/结束bidid, notice_id, user_id, file_path, bid_time投标记录记录谁投了什么reviewid, bid_id, score, comment评标打分resultid, notice_id, bid_id, publish_time最终中标结果我在系统里看到的status字段是最有意思的部分——它管理着整个生命周期招标公告刚创建时是 0发布后是 1投标截止后变成 2评标完成后变成 3。这个状态机的设计规范与否直接决定业务逻辑好不好实现。很多同学在改代码时喜欢直接删掉字段、改用布尔值判断这在需求简单的课程设计里没事但如果想拿到真实场景里去还是建议保留状态字段。你也可以用下面这张图来理解状态流的走向0(草稿) → 1(已发布/可投标) → 2(已截止/评标中) → 3(已完成/已公示)这个流转对应到前端页面的按钮是一个相当典型的业务需求。3.3 JDBC 连接配置URL、账号、密码一个都不能错数据库的连接信息一般写死在 DAO 层的某个工具类里可能是DBUtil.java也可能在WEB-INF/classes下的.properties文件里。如果是后者修改后需要重新部署因为 IDE 不一定每次都会把资源文件同步到输出目录。// DBUtil.java 中典型的 JDBC 连接片段 public class DBUtil { private static String url jdbc:mysql://localhost:3306/tender?useUnicodetruecharacterEncodingutf8; private static String username root; private static String password 123456; static { try { Class.forName(com.mysql.jdbc.Driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, username, password); } }逻辑说明Class.forName这行是把 MySQL 驱动类加载到 JVM老版本的驱动类名是com.mysql.jdbc.Driver。如果你用的是 MySQL 8 的驱动包这个类名要改成com.mysql.cj.jdbc.Driver同时 URL 里要追加serverTimezoneAsia/Shanghai否则连接时会报时区错误。参数说明useUnicodetruecharacterEncodingutf8是为了保证中文正常存取。这里的password建议先用你本地 MySQL 的真实密码写入等跑通后再考虑用环境变量或者配置文件替代千万别直接照抄。4. 代码走读与核心链路从登录到中标公告的完整闭环4.1 登录与权限控制Filter 是怎么拦住非法访问的这个系统最值得读的代码不是页面而是权限控制。常见的做法是用一个 Filter 拦截所有请求在doFilter里判断当前 Session 是否存在用户。// LoginFilter.java 的典型实现 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req (HttpServletRequest) request; HttpServletResponse resp (HttpServletResponse) response; HttpSession session req.getSession(false); // 放行登录页、静态资源和登录请求本身 String uri req.getRequestURI(); if (uri.endsWith(login.jsp) || uri.endsWith(index.jsp) || uri.contains(loginServlet) || uri.endsWith(.css) || uri.endsWith(.js)) { chain.doFilter(request, response); return; } // 未登录一律跳回登录页 if (session null || session.getAttribute(user) null) { resp.sendRedirect(req.getContextPath() /login.jsp); return; } chain.doFilter(request, response); }逻辑说明getSession(false)是关键如果传true它会强制创建新 Session导致一切请求都被记录为已登录这是新手最容易写错的地方。放行列表里包括登录页和登录接口本身否则会出现死循环——登录页被过滤器拦住用户永远进不去。参数说明如果你要追加放行路径比如某个页面不需要登录也能看就往if条件里加路径后缀。注意这里用的是endsWith所以路径匹配比较粗糙改的时候要小心。4.2 标书上传与下载绝对路径和相对路径的坑标书上传功能是这个系统的业务核心。前端表单一般会设置enctypemultipart/form-data后端则用 commons-fileupload 组件来解析二进制内容。// UploadServlet.java 处理标书上传的关键代码 // 创建文件上传工厂设置单个文件和总大小限制 DiskFileItemFactory factory new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 1024); // 超过 1MB 写入临时目录 ServletFileUpload upload new ServletFileUpload(factory); upload.setFileSizeMax(10 * 1024 * 1024); // 单个文件最大 10MB upload.setSizeMax(20 * 1024 * 1024); // 总请求体最大 20MB // 从请求中解析出文件项和普通表单项 ListFileItem items upload.parseRequest(request); String realPath request.getServletContext().getRealPath(/upload); File dir new File(realPath); if (!dir.exists()) { dir.mkdirs(); } for (FileItem item : items) { if (!item.isFormField()) { String fileName new File(item.getName()).getName(); item.write(new File(dir, fileName)); } }逻辑说明getRealPath(/upload)返回的是 Web 应用部署后在 Tomcat 里的物理路径IDEA 中通常是target/项目名/upload。这个路径不是固定的换一台机器部署后会自动变化所以不要把它写死成某种固定盘符。参数说明item.getName()在 IE 浏览器下可能带完整客户端路径比如C:\Users\xxx\标书.pdf所以需要套一层new File(item.getName()).getName()只取文件名。另外注意这里已经用mkidirs做了一次创建目录的操作不用再自己手动新建 upload 文件夹。4.3 开标与中标判定业务逻辑放在 DAO 层还是 Servlet 层这个系统里开标动作通常不涉及真实的硬件随机数核心是评标分数汇总。中标的逻辑一般是根据notice_id找到所有投标记录然后取评标分数最高的那条记录插入result表。// BidDAO.java 中查询最高分投标的中标判定方法 public int judgeWinner(int noticeId) { String sql SELECT bid_id FROM review WHERE notice_id ? GROUP BY bid_id ORDER BY AVG(score) DESC LIMIT 1; PreparedStatement ps conn.prepareStatement(sql); ps.setInt(1, noticeId); ResultSet rs ps.executeQuery(); if (rs.next()) { int bidId rs.getInt(bid_id); // 插入中标结果状态置为已完成 String insert INSERT INTO result(notice_id, bid_id, publish_time) VALUES(?,?,NOW()); // ... 执行插入 } return 0; }逻辑说明这里用的是 SQL 聚合函数AVG(score)按投标方算平均分是典型的模拟评分逻辑。如果你需要加权评分就得先查出评分规则在 Java 代码里计算或者改成更复杂的 SQL 子查询。参数说明LIMIT 1是 MySQL 的方言换成 SQL Server 要改成SELECT TOP 1Oracle 要用ROWNUM。如果后续有人把这个系统迁移到别的数据库这段代码是要改动的地方。5. 避坑排查手册从解压到试运行最常见的 5 个现场5.1 页面中文乱码现象、原因、解决现象登录页打开后标题和按钮全是䏿–‡一类乱码或者数据库里存进去的中文读出来是问号。原因请求参数和响应的编码设置不一致。JSP 页面设置 UTF-8但 Servlet 没有设置request.setCharacterEncoding(utf-8)Tomcat 8 之前默认用 ISO-8859-1 解析请求体。解决在每个 Servlet 的doGet和doPost里最先调用两行代码request.setCharacterEncoding(UTF-8)和response.setCharacterEncoding(UTF-8)JSP 页面的pageEncoding和contentType也统一成 UTF-8。我之前遇到过一个案例某同学只改了 JSP没改 Servlet结果表单提交到数据库后全部变成问号折腾了一个下午。5.2 Tomcat 端口被占用现象、原因、解决现象启动 Tomcat 时控制台提示Port 8080 required by Tomcat v8.5 Server at localhost is already in use服务起不来。原因本机有其他进程占用了 8080 端口可能是之前启动过的 Tomcat 没关干净也可能是别的开发工具占用了。解决# Windows 下查看占用 8080 端口的进程 PID netstat -ano | findstr 8080 # 结束该进程最后一列为 PID taskkill /pid 这里的PID /f如果不想结束进程也可以改 Tomcat 端口号。需要改两个地方.../apache-tomcat-8.5.x/conf/server.xml找到Connector port8080改为8081同时注意让同一个端口出现在 HTTP/1.1 连接器里不要改了第一处没改第二处。5.3 ClassNotFoundException驱动版本和 JDK 版本脱节现象启动后访问首页控制台输出java.lang.ClassNotFoundException: com.mysql.jdbc.Driver页面 500。原因WEB-INF/lib下的 mysql-connector-java 版本太老或者 jar 包根本没有被复制到发布目录。如果是 IDEA 导入项目可能出现 jar 包显示在外部库但没打进 WEB-INF 的情况。解决先从 MySQL 官网或 Maven 仓库下载 mysql-connector-java-5.1.49.jar放到WEB-INF/lib下然后在 IDEA 里执行 Build - Rebuild Project。如果还不行看发布后的目录target/项目名/WEB-INF/lib/下有没有这个 jar。没有就直接手动复制过去再重启。5.4 表单提交后报 405Servlet 的 doGet 和 doPost 错位现象登录页输入账号密码后点提交浏览器报 405 错误地址栏显示GET ... 不支持。原因web.xml里把这个请求映射到了某个 Servlet但这个 Servlet 只重写了doPost()没有重写doGet()。浏览器地址栏回车是 GET表单如果设置methodpost就是 POST。解决在 Servlet 里同时重写doGet和doPost并且让低安全要求的接口直接调用同一个业务方法protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); }参数说明这样做的意思是 GET 和 POST 都能处理适合登录、公告详情这类动作不敏感的接口。对于修改中标结果这类敏感操作建议只保留 POST不开放 GET。5.5 数据库连接失败Access denied 和 Unknown database现象启动后提示Access denied for user rootlocalhost或者Unknown database tender。原因前者是用户名或密码不对后者是你还没执行建库脚本或者create.sql里库名和 Java 代码里连接串的库名不一致。解决去DBUtil.java里核对连接串中的jdbc:mysql://localhost:3306/tender把tender换成你实际建的库名。密码方面连接串里写的123456和你本地 MySQL 的真实密码要一致。注意 MySQL 5.7 默认认证插件是mysql_native_password如果你用了 MySQL 8 的caching_sha2_password老驱动连不上建议直接在my.ini或启动参数里把默认认证改回传统模式。6. 让它变得更能打三个拿来就能用的改造习惯把系统跑通只是第一步真正花时间的是改造它贴近真实工作的环境。我一般会建议从下面三个点入手每一步都能看到明显收益。第一把数据库密码和连接字符串挪到配置文件里。目前的硬编码方式只要代码上传到某公司内部 GitLab数据库密码就跟着泄漏了。可以在src下新建db.properties用Properties类在DBUtil的静态块中加载之后换环境只需要改配置。// 加载外部配置文件的典型代码 Properties props new Properties(); FileInputStream in new FileInputStream( DBUtil.class.getClassLoader().getResource(db.properties).getPath()); props.load(in); url props.getProperty(url); username props.getProperty(username); password props.getProperty(password);逻辑说明getClassLoader().getResource()会优先从 classpath 读取文件这样每次发布都不用重新编译源码。注意.properties文件里的特殊字符密码如果含要转义否则会被解析成别的含义。第二把 JDBC 的DriverManager换成连接池推荐用Druid或c3p0。原系统每次数据库操作都新建连接访问量一大就容易出现Too many connections。我见过一个模拟项目X在演示时开了 50 个并发就直接崩了换成连接池后完全没问题。这不是玄学是连接复用的实实在在的收益。第三给所有 JSP 页面套一个公共头部和尾部。原系统的页面大把重复的导航栏代码复制粘贴痕迹严重。用% include fileheader.jsp %可以把公共部分抽出来以后调整菜单只需要改一个文件。这个改造成本极低但能让代码结构立刻上个台阶。这三个改造做完这个系统就已经不太像课程设计了。它拥有了配置化部署、连接复用、页面组件化这几个真实项目的标配习惯。我的建议是不要一口气全改完先保证原系统能一键启动然后一个个改造每改完一步就启动一次验证避免最后集中排错的痛苦。这也是我在自己动手时的一次次教训——改动越大越要小步走。希望这篇围绕jsp网上招标系统.zip的拆解能帮你把这个老项目真正吃透而不是停留在解压和运行希望帮到你。本文还有配套的精品资源点击获取

相关新闻

深入理解多态:面向对象设计中应对变化的核心机制

深入理解多态:面向对象设计中应对变化的核心机制

1. 为什么“多态”是面向对象的最后一根支柱很多人学面向对象,最早记住的是封装和继承:封装把数据和操作绑在一起,对外只留接口;继承让子类复用父类的能力。这两个概念都不难懂,因为它们的物理隐喻很直观——抽屉、盒子…

2026/10/10 3:50:27 阅读更多 →
PCA9422与K60的完整电源管理方案:动态调压与低功耗实战

PCA9422与K60的完整电源管理方案:动态调压与低功耗实战

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

2026/10/10 3:50:27 阅读更多 →
GraphRAG 局部与全局检索双通道打分:基于倒数排名融合(RRF)的最佳实践

GraphRAG 局部与全局检索双通道打分:基于倒数排名融合(RRF)的最佳实践

在知识图谱与向量检索深度融合的 GraphRAG 工业级落地中,架构师常常面临一个难以两全的检索两难困境:用户的提问在信息粒度上往往是高度动态且不可预知的。 有时,用户提出的问题是极度微观且具象的(例如:“订单服务在调…

2026/10/10 3:50:27 阅读更多 →

最新新闻

Spring AI 实战:从配置到对话,ChatClient 链式调用与上下文管理

Spring AI 实战:从配置到对话,ChatClient 链式调用与上下文管理

1. 从配置文件到对话窗口:Spring AI 到底简化了什么第一次接触 Spring AI 的时候,我脑子里其实带着一个很具体的疑问:过去在 Java 项目里接一个大模型对话能力,光是 HTTP 客户端封装、请求体拼装、响应解析、异常重试这些杂活&…

2026/10/10 5:17:30 阅读更多 →
如何安全管理 OpenFlux 共享密钥:传输、存储与轮换实战指南

如何安全管理 OpenFlux 共享密钥:传输、存储与轮换实战指南

如何安全管理 OpenFlux 共享密钥:传输、存储与轮换实战指南 OpenFlux 是一款网络栈研究工具,通过可插拔的传输层构建 TCP 隧道。当启用传输加密时,客户端与出口节点共用的**共享密钥(shared secret)**就是整条隧道的安…

2026/10/10 5:17:30 阅读更多 →
Ant Design Blazor Affix 滚动容器实战:用 TargetSelector 将固钉绑定到指定滚动元素

Ant Design Blazor Affix 滚动容器实战:用 TargetSelector 将固钉绑定到指定滚动元素

前端UI组件设计系统 【免费下载链接】ant-design-blazor 基于 Ant Design 与 Blazor 的前端组件库。让开发者解放生产力,实现更大价值。 项目地址: https://gitcode.com/ant-design-blazor/ant-design-blazor 点击查看 免费下载 本篇指南围绕 Ant Desig…

2026/10/10 5:17:30 阅读更多 →
x64dbg 调试器插件开发指南:深入解析 DbgScriptBpToggle 脚本断点切换 API 及其完整调用链

x64dbg 调试器插件开发指南:深入解析 DbgScriptBpToggle 脚本断点切换 API 及其完整调用链

逆向工程调试器开发工具应用安全 【免费下载链接】x64dbg An open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis. 项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg 点击查看 免费下载 导读 DbgScriptBpT…

2026/10/10 5:17:30 阅读更多 →
LogicStack-LeetCode 题解:813. 最大平均值和的分组——「序列 DP + 前缀和」求连续段平均值之和最大值

LogicStack-LeetCode 题解:813. 最大平均值和的分组——「序列 DP + 前缀和」求连续段平均值之和最大值

教程文档 【免费下载链接】LogicStack-LeetCode 公众号「宫水三叶的刷题日记」刷穿 LeetCode 系列文章源码 项目地址: https://gitcode.com/gh_mirrors/lo/LogicStack-LeetCode 点击查看 免费下载 导读 本篇以「宫水三叶的刷题日记」系列仓库(LogicSta…

2026/10/10 5:17:30 阅读更多 →
GPS天线设计 GNSS天线设计建议

GPS天线设计 GNSS天线设计建议

GPS天线设计 GNSS天线设计建议 天线作为导航定位设备中最重要的接收器件,它起到的作用就像是人的“耳朵”;是将卫星发送下来的电磁波能量变换成电子器件可解析的电流。因此天线的性能好坏将直接关系到GPS整机的产品性能。目前GNSS系统开放民用定位系统主要是美国GPS…

2026/10/10 5:16:30 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

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/10 1:36:08 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →