尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java Web学生成绩管理系统毕设实战:Servlet+JSP+MySQL
简介一份基于Java的Web学生成绩管理系统项目源码包定位为Java Web初学者及课程设计者提供可运行的完整示例覆盖Servlet、JSP、JDBC及MVC模式等核心知识点。压缩包共36个文件大小2.94MB包含10个Java源文件、9个JSP页面、10张运行界面截图及3张PNG图片另附XML配置、README说明等能直观对照代码与页面效果。系统已实现成绩录入、修改、查询、筛选与统计等典型功能从内容预览可见附带数据表设计、查询页面、成绩筛选、统计页面等多张截图便于理解数据库设计与前端交互流程。已有34人学习下载适合用于毕业设计参考、课程作业或作为入门Java Web开发的练手项目。通过阅读源码和界面截图可快速掌握基于JSPServletJDBC的学生成绩管理系统的分层结构与实现思路。1. 为什么一个学生成绩管理系统能吃掉你毕设一半的工期如果你在搜索引擎里敲下“基于Java的Web学生成绩管理系统.zip”大概率是两种情况要么你在找课设/毕设的参考代码要么你帮别人找。这套系统几乎是Java Web方向最经典的练手题目因为它把Servlet、JSP、JDBC、MySQL这几个核心知识点全部串在一起做完一遍你对Java Web的整个请求-响应链路就有了肌肉记忆。但我得先泼一盆冷水网上下载的zip包里十个有八个是旧架构JSP里写Java代码、数据库脚本缺字段、连接密码写死在源码里你若直接拿去跑踩坑的时间比自己写一遍还长。这篇文章不打算帮你“破解”某个神秘zip包而是按照这个标题背后最常见的从业方案把从零搭建到部署验证的完整路径拆给你看你照着做能跑通也知道每一行在干什么。2. 技术选型不吃药这个系统到底该用什么栈2.1 课设级 vs 企业级先看清你的评分表同一个学生成绩管理系统在不同场景下技术选型完全不同。如果你是交课设或毕设评分老师看的是三层架构是否清晰、数据库设计是否规范、答辩时能不能说清楚请求怎么走的这时最稳的方案是Servlet JSP JDBC MySQL Tomcat别上Spring Boot。为什么因为Spring Boot帮你把Tomcat内嵌了、把数据库连接池自动配好了你确实省事但答辩时老师一句“你的请求从浏览器到数据库经过了哪些类”你若答不上来分数反而难看。而如果你是企业里要做个内部用的成绩查询小工具那直接用Spring Boot MyBatis-Plus Thymeleaf一周就能上线没人关心你底层是不是Servlet。我做过的真实项目里最尴尬的是有人用Spring Boot做课设被老师追问“Spring Boot的自动装配原理是什么”当场卡住。这不是说Spring Boot不好而是工具的抽象层级要和你的目标匹配。这个标题既然叫“基于Java的Web学生成绩管理系统”最贴合的就是“Servlet JSP JDBC”这套原生栈它能让你看清每一个环节后续想升级到框架也顺理成章。2.2 环境版本搭配JDK、Tomcat、MySQL 的三角关系环境搭错了后面的坑全是你自己埋的。最常见的翻车组合是JDK 17 Tomcat 9 MySQL 8.0看似都新但JDK 17编译的class文件版本是61.0Tomcat 9用JDK 8编译运行时兼容性没问题但很多老项目的依赖比如某些版本的JSTL在JDK 17下会报模块访问错误。我一般建议课设直接上JDK 8或者JDK 11 Tomcat 9 MySQL 5.7或8.0这套组合的资料最多遇到问题一搜就有答案。要注意MySQL 8.0的驱动和5.7不通用。MySQL 8.0的JDBC驱动类名是com.mysql.cj.jdbc.DriverURL里必须带serverTimezoneAsia/Shanghai否则报时区错误而MySQL 5.7用com.mysql.jdbc.Driver就够了URL也不强制要时区参数。很多zip包里写的是旧驱动你配MySQL 8.0时启动直接报ClassNotFoundException。另外Tomcat 10及以上版本把javax.servlet包改名成了jakarta.servlet如果你下的是老代码在Tomcat 10上必挂这个问题下面避坑章节会专门讲。2.3 连接池要不要用Druid vs 自己new Connection学生成绩管理系统涉及频繁的数据库读写每次请求都DriverManager.getConnection()不是不行课程设计这样写能跑但并发稍大页面就会卡顿。更合理的做法是用Druid连接池它是国内使用最广的方案监控页面还能在答辩时当亮点展示。Druid的配置核心是druid.properties文件driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/score_manager?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai usernameroot passwordyour_password initialSize5 maxActive20 maxWait60000这段配置里initialSize5表示启动时初始化5个连接maxActive20是最大连接数maxWait60000是获取连接的超时时间毫秒。如果你们学校的服务器配置差maxActive降到10就够了不然连接池频繁创建和销毁连接反而拖慢启动速度。用连接池的另一个好处是你可以在Utils类里统一获取和释放连接代码里不会到处出现Class.forName。3. 数据库设计先行成绩表到底该怎么建才不怕改需求3.1 三张核心表学生、课程、成绩的分工与边界成绩管理系统最忌讳把成绩直接挂在学生表里做成字段比如score1、score2这种设计加一门课就要改表结构是典型的反面教材。正确的做法是拆分出学生表、课程表、成绩表三张表成绩表作为关联表存student_id和course_id两个外键。学生表只存学号、姓名、性别、班级这些不变属性课程表存课程名、课程代码、学分、任课教师成绩表存分数、考试时间、是否重修。具体建表SQL如下CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, student_no VARCHAR(20) UNIQUE NOT NULL COMMENT 学号, 唯一索引, student_name VARCHAR(50) NOT NULL COMMENT 姓名, gender CHAR(1) DEFAULT M COMMENT 性别 M/F, class_name VARCHAR(50) COMMENT 班级 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, course_no VARCHAR(20) UNIQUE NOT NULL COMMENT 课程编号, course_name VARCHAR(100) NOT NULL, credit DECIMAL(3,1) COMMENT 学分, teacher_name VARCHAR(50) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, course_id INT NOT NULL, score DECIMAL(5,2) COMMENT 成绩, 保留两位小数, exam_date DATE, UNIQUE KEY uk_student_course (student_id, course_id), CONSTRAINT fk_score_student FOREIGN KEY (student_id) REFERENCES student(id), CONSTRAINT fk_score_course FOREIGN KEY (course_id) REFERENCES course(id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;注意score字段我用的是DECIMAL(5,2)而不是INT这考虑到期末可能有平时分加卷面分的加权总评小数能存。UNIQUE KEY uk_student_course是联合唯一约束防止同一条成绩记录插两遍这个逻辑比在Java代码里判断“是否已存在”靠谱得多。外键约束在课设里建议保留能体现你对数据完整性的理解但生产环境或并发高的场景一般不建物理外键用应用层保证一致性这点在答辩时可以主动提。3.2 初始化数据没有数据你的页面永远是空的系统跑起来后首页能看到东西比什么都重要。我一般会在init_data.sql里准备20个学生、5门课程、若干成绩记录。学号要模拟真实格式比如20210001到20210020这样连续编号但记得在成绩表里故意留两次缺考记录也就是没有成绩这样后续做“补考名单查询”功能时数据是现成的。成绩分布也要有梯度不能都是80分以上。用户测试系统的时候如果发现查出来的成绩全是高分会觉得这个系统是假的。我一般会按正态分布造数10%的同学挂科低于6020%在60到70之间50%在70到8520%在85以上。插入语句直接一条SQL多值插入速度更快但要注意InnoDB引擎下事务自动提交批量插入失败会部分成功所以最好用一条INSERT语句一次插入所有行要么全成要么全败不会出现半截数据。3.3 数据库连接工具类把重复代码收进一个类里有了Druid连接池工具类就非常简单了import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class JdbcUtils { private static DataSource dataSource; static { try (InputStream in JdbcUtils.class.getClassLoader() .getResourceAsStream(druid.properties)) { Properties props new Properties(); props.load(in); dataSource DruidDataSourceFactory.createDataSource(props); } catch (Exception e) { throw new ExceptionInInitializerError(数据库连接池初始化失败: e.getMessage()); } } public static Connection getConnection() throws Exception { return dataSource.getConnection(); } public static void close(ResultSet rs, Statement stmt, Connection conn) { if (rs ! null) { try { rs.close(); } catch (Exception ignored) {} } if (stmt ! null) { try { stmt.close(); } catch (Exception ignored) {} } if (conn ! null) { try { conn.close(); } catch (Exception ignored) {} } } }这个类里重点是static代码块只执行一次加载时读取druid.properties并初始化连接池后续的getConnection()都是从池里拿现成连接性能比每次new快一个数量级。关资源的顺序必须是ResultSet → Statement → Connection反过来会报“连接未关闭”的警告。Druid的close()方法实际上是把连接归还给池而不是真正关闭所以你写conn.close()并不会断开数据库只是把连接标记为空闲。4. 后端从登录做起Servlet JSP 的最小可行闭环4.1 登录功能这是你踏进 Java Web 的第一道坎登录是整个系统的门面也是必问的答辩点。它的完整链路是浏览器提交表单 → Tomcat 分发请求到 Servlet → Servlet 调用 DAO 查数据库 → 将结果放到 Session → 转发到首页或重定向回登录页。先看登录页的 JSP% page contentTypetext/html;charsetUTF-8 languagejava % html head title学生成绩管理系统 - 登录/title /head body form action${pageContext.request.contextPath}/login methodpost 用户名: input typetext nameusername required 密码: input typepassword namepassword required button typesubmit登录/button /form /body /html表单提交到/login这个路径${pageContext.request.contextPath}是拿到项目的上下文路径比如你的Web应用叫score_manager那它输出/score_manager。这个写法的好处是你把项目改个名字代码不用动可以防一些路径写死的问题。密码框不要用typetext这是很基础的 Web 安全习惯但网上很多老代码确实是明文文本框答辩时老师会注意到。再来看LoginServletWebServlet(/login) public class LoginServlet extends HttpServlet { Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding(UTF-8); String username req.getParameter(username); String password req.getParameter(password); // 这里用预处理语句防SQL注入, 不要用字符串拼接 String sql SELECT id, role FROM user WHERE username ? AND password ?; try (Connection conn JdbcUtils.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); ps.setString(2, password); try (ResultSet rs ps.executeQuery()) { if (rs.next()) { HttpSession session req.getSession(); session.setAttribute(userId, rs.getInt(id)); session.setAttribute(role, rs.getString(role)); resp.sendRedirect(req.getContextPath() /index.jsp); } else { req.setAttribute(errorMsg, 用户名或密码错误); req.getRequestDispatcher(/login.jsp).forward(req, resp); } } } catch (Exception e) { e.printStackTrace(); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } }登录失败的forward和登录成功的sendRedirect是有讲究的。forward是服务器内部跳转浏览器URL不变登录失败后刷新页面会重复提交表单sendRedirect是浏览器重新发起一次请求URL变成了首页地址刷新不会重复登录。登录成功必须用重定向这是防止表单重复提交的经典做法。参数里有WebServlet(/login)注解免去了web.xml里配servlet-mapping的麻烦也是 Servlet 3.0 以后的推荐写法。4.2 用户表的设计为什么我建议至少在数据库里分角色学生成绩管理系统除了学生、课程、成绩三张表还应该有一张user表用于登录。这里的角色最少分三种管理员能改成绩、管理课程、教师能录入成绩、查看自己教的课、学生只能查询。一种偷懒但很实用的做法是在user表加一个role字段VARCHAR类型存admin、teacher、student登录时把role放进Session后续JSP页面用% if (admin.equals(session.getAttribute(role))) %控制按钮是否显示。但不要把密码明文存数据库哪怕这是课设。用JDK自带的消息摘要算法算一个哈希值存进去public static String md5(String source) { try { MessageDigest md MessageDigest.getInstance(MD5); byte[] digest md.digest(source.getBytes(StandardCharsets.UTF_8)); StringBuilder hex new StringBuilder(); for (byte b : digest) { hex.append(String.format(%02x, b)); } return hex.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(MD5算法不存在, e); } }注册用户时存md5(password)登录时取出用户输入的密码也做一次md5再比对。这样就算数据库泄露别人拿到的也不是明文密码。MD5本身不是强哈希算法但在课设场景足够你要是想更专业一点可以用SHA-256JDK自带不用引依赖改算法名字就行。4.3 成绩查询列表页用 JSTL 而不是 Scriptlet很多老zip包里的JSP长这样% for (Student s : list) { %这叫Scriptlet不是不能用而是页面里混了Java代码后期改样式非常痛苦而且答辩时容易落下“表现层和业务逻辑未分离”的评价。正确做法是结合JSTL标签库% taglib prefixc urihttp://java.sun.com/jsp/jstl/core % html body table border1 tr th学号/th th姓名/th th课程/th th成绩/th th是否通过/th /tr c:forEach items${scoreList} varitem tr td${item.studentNo}/td td${item.studentName}/td td${item.courseName}/td td${item.score}/td td c:choose c:when test${item.score 60}及格/c:when c:otherwisespan stylecolor:red;不及格/span/c:otherwise /c:choose /td /tr /c:forEach /table /body /html这里的scoreList是从Servlet里用request.setAttribute(scoreList, list)放进去的JSTL的${item.studentNo}会自动调用item.getStudentNo()方法也就是说你在Dao层的实体类必须写对应属性的getter。定义实体类时用private Double score对应数据库DECIMAL(5,2)如果用double查出来是NULL时会抛空指针这个坑非常经典下面的避坑章节会详细说。JSTL的c:choose标签是if-else的替代方案页面里尽量不要写三目运算嵌套可读性差。5. 录入、修改、删除成绩的三个边界坑5.1 成绩录入事务必须放在 Service 层而不是 Servlet录入成绩不是单表操作比如老师录入成绩时可能要同时更新score表和学生表的“平均分”字段或者考试时间有冲突成绩插入失败时要保证两个表数据一致。这时候你要么别动第二张表要么就必须用事务。事务控制的正确位置在Service层因为一个Service方法可能调用多个DAO方法如果事务放在DAO层两个DAO各开各的事务第一个只能先提交第二个失败时没法回滚第一个。public class ScoreService { public void addScore(Score score) throws Exception { Connection conn JdbcUtils.getConnection(); boolean autoCommit conn.getAutoCommit(); conn.setAutoCommit(false); try { ScoreDao dao new ScoreDao(); dao.insertScore(conn, score); // 同时更新学生的总评, 如果这个操作失败, 上面插入的成绩也要撤销 dao.updateStudentAverage(conn, score.getStudentId()); conn.commit(); } catch (Exception e) { conn.rollback(); throw e; } finally { conn.setAutoCommit(autoCommit); conn.close(); } } }这段代码的关键在conn.setAutoCommit(false)后必须保证finally里恢复原状态。conn.close()实际是归还给连接池如果连接归还时还带着未提交的事务或错误的autoCommit状态下一个人从池里拿到这个连接就会出诡异的问题——这就是Druid连接池场景里最隐蔽的坑。另外我见过有人在Servlet里直接conn.setAutoCommit(false)这等于把连接的事务边界和请求生命周期耦合了多个请求共用一个连接时事务互相干扰代码查错查到天亮。5.2 删除成绩的特殊逻辑物理删除还是标记删除一个学生转学了成绩要不要从系统里彻底抹掉这个需求老师经常在答辩时追问。物理删除就是DELETE FROM score WHERE id ?实现简单但如果你按学生平均分做统计删除一条成绩会导致所有历史统计全部失真而且这个操作不可恢复没有后悔药。更稳的做法是加一个deleted字段做逻辑删除标记删除ALTER TABLE score ADD COLUMN deleted TINYINT DEFAULT 0 COMMENT 0-正常, 1-已删除;查询时一律加WHERE deleted 0删除时执行UPDATE score SET deleted 1 WHERE id ?。这样历史数据还在统计报表可以按需过滤。代价就是所有查询SQL都要记得带deleted条件漏掉一个就会查出“幽灵成绩”。在课设里我会把逻辑删除作为加分项写在答辩稿里因为大部分同学的实现还是物理删除。5.3 中文乱码的根源从浏览器到MySQL的每一环中文乱码是Java Web里最邪门的问题因为乱码可能出现在任何一层。你从浏览器提交中文姓名Servlet拿到的request参数乱码从MySQL查出来的数据在页面上显示乱码写入数据库后表里看是乱码。这三类问题根源不同所以解法也不同。浏览器提交到Servlet的乱码用req.setCharacterEncoding(UTF-8)且必须在读取任何参数之前调用用WebServlet注解的Servlet里如果你先用req.getParameter()再调setCharacterEncoding那已经晚了。MySQL返回给页面的乱码检查JDBC URL里有没有characterEncodingutf8没有的话默认按系统字符集返回数据。写入数据库时乱码检查表结构是不是utf8mb4不是utf8utf8mb4才完整支持中文和表情符号以及MySQL配置文件my.ini里character-set-serverutf8mb4。最后一个隐蔽坑是JSP文件本身的编码JSP页面顶部必须有% page contentTypetext/html;charsetUTF-8 %如果只写了HTML的meta charsetUTF-8页面里的中文可能是正常的但通过response.getWriter()输出到浏览器的字符串会乱码。6. 避坑清单学生成绩管理系统最常见的五个翻车点下面每条都是我在跑通这类项目时真实踩过或帮别人排过的故障按照“现象 → 原因 → 解决”来写你可以对照排查。6.1 一启动Tomcat就报 ClassNotFoundException: javax.servlet.http.HttpServlet现象Tomcat启动时控制台直接抛异常Web应用无法加载。原因你下载的项目zip包是为Tomcat 8/9javax.servlet包写的但本地装的是Tomcat 10/11从Tomcat 10开始规范的包名改成了jakarta.servlet原来的包路径被删了。解决两种方案选其一。方案一是把Tomcat换回9.0.x版本这是最省事的路径因为大多数网上代码都兼容javax命名空间方案二是全局搜索替换把所有import javax.servlet改为import jakarta.servlet同时注意web.xml头部的schema版本也要对应改。我强烈建议用方案一除非你的项目标题明确说支持Jakarta EE 10。6.2 数据库连接报错: Public Key Retrieval is not allowed现象应用启动后第一次查询就报SQLNonTransientConnectionException指向Public Key Retrieval is not allowed。原因MySQL 8.0默认的认证插件是caching_sha2_passwordJDBC驱动首次连接时需要从服务器获取公钥来加密密码但这个行为默认被禁用了。旧版MySQL用mysql_native_password就没有这个问题。解决在JDBC URL末尾加allowPublicKeyRetrievaltrueuseSSLfalse例如jdbc:mysql://localhost:3306/score_manager?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrueuseSSLfalse。本地开发useSSLfalse没问题上生产再考虑SSL加密。6.3 改了JSP代码但浏览器不生效永远显示旧页面现象你修改了index.jsp并回到Tomcat的webapps下覆盖了文件但浏览器刷新看到的还是旧内容。原因JSP第一次被访问时会编译成Servlet类的class文件存放在Tomcat的work目录里。有时Tomcat没有检测到JSP文件变化尤其是直接复制文件到部署目录时或者浏览器有缓存。解决先强制刷新浏览器CtrlF5。如果还不行删掉Tomcat的work/Catalina目录下对应的项目文件夹重启Tomcat让JSP重新编译。这招对IntelliJ IDEA和Eclipse的Web项目都适用。如果是开发阶段建议用IDEA的Update Resources热部署功能只更新变更文件不要动不动重启Tomcat。6.4 实体类属性是Double成绩表有空值页面总是报错现象某一行成绩为NULL时JSP页面用${item.score}显示抛出NumberFormatException或界面直接崩。原因数据库score字段允许NULL设计时没有加NOT NULL约束而对应的Java属性用了原始类型double从ResultSet.getDouble()读NULL时返回0但如果你用getObject()转成Double再拆箱就会空指针。解决Java实体类的成绩字段用private Double score查询SQL里用IFNULL(score, 0) AS score做兜底也可以但会让SQL变复杂。更合理的做法是建表时score DECIMAL(5,2) NOT NULL DEFAULT 0强制非空业务上不允许无成绩的存在。6.5 用Druid连接池后MySQL连接一会儿不用就断现象系统跑了一天第二天早上第一次查询报CommunicationsException: Communications link failure或者Connection has been closed。原因MySQL的wait_timeout默认8小时连接池里的空闲连接超过这个时间没活动被MySQL服务端主动关闭了但Druid不知道还把这个连接分配给你用。解决在druid.properties里加两条配置testWhileIdletrue空闲检测和validationQuerySELECT 1心跳SQL。Druid会定期验证连接是否有效无效就丢弃并新建。timeBetweenEvictionRunsMillis可以设成60000即每60秒跑一次检查。如果没有配置这两项基本隔夜必报错。7. 验证与进阶把课设变成能写进简历的东西系统跑通只是第一关。你得有办法证明它是能用的而不仅仅是“在我电脑上能跑”。我建议按下面三步走完验收流程第一步功能测试走全用三种角色各登录一遍管理员添加一门新课并给学生录成绩教师修改一个不及格学生的分数为及格学生查询所有成绩并退出登录。第二步异常测试故意输入错误的用户名密码看错误提示是否友好在录入成绩页面输入中文、负数、超过100的数看系统是否挡住非法值。前端可以用typenumber min0 max100限制但后端Service层必须再次校验因为前端限制绕过太容易。第三步数据验证用一条原生SQL检查数据库里的记录是否和使用界面一致。比如你在页面上录入了“张三Java程序设计88.5”执行SELECT * FROM score WHERE score 88.5能查出来且有对应关联的student_id和course_id。这条SQL还顺带验证了外键约束没有把student_id关联错人。进阶方向有两个很加分且难度都可控。第一个是在查询列表页面增加分页SQL用LIMIT ?, ?配合preparedStatement的setInt绑定偏移量和每页条数页面用JSTL标签渲染上一页/下一页按钮。这会让你的系统从“玩具”上升到“能用”答辩时是直观的亮点。第二个是把系统从单机搬到云服务器部署步骤通常是本地打包成War包放到服务器的Tomcat的webapps目录启动后访问http://服务器IP:8080/项目名。这一步会碰到端口防火墙问题云服务器的安全组要放行8080端口、MySQL远程访问权限问题MySQL默认只允许localhost连接以及Tomcat的JVM内存不足问题按需调catalina.bat或catalina.sh里的参数。我自己的习惯是每次部署完都要用curl -I http://localhost:8080/score_manager/login.jsp验证HTTP响应头里有没有200 OK有就说明Tomcat层面通了再走页面功能测试。否则可能页面看着正常其实后端一直报500错误这种黑匣子状态下很难定位是Java问题还是网络问题。最后提醒一点如果你下到的zip包里有.idea或.classpath文件先别急着打开项目。先自己建一个新工程把zip里的src目录和web目录拷贝进来配置好自己IDEA的SDK和Tomcat这样能避开很多“别人IDE版本带来的隐性问题”毕竟你交作业时用的可不能是别人的机器。希望这篇实战拆解能帮你在Java Web这条路上少绕几圈把功夫花在真正值得花的地方。本文还有配套的精品资源点击获取
RELATED

相关推荐

ChatGLM大模型微调实战:单卡LoRA从环境配置到部署避坑指南

ChatGLM大模型微调实战:单卡LoRA从环境配置到部署避坑指南

简介:面向ChatGLM系列大模型微调需求的实践资源包,聚焦AI大模型应用与自然语言处理场景,适合正在学习或落地大模型微调的开发者、算法工程师与科研人员。压缩包内共148个文件,以58个Python脚本、36个Jupyter Notebook为核心&#…

📅 2026/10/9 3:17:19
Keras-Transformer中英翻译项目实操:模型原理、环境配置与避坑指南

Keras-Transformer中英翻译项目实操:模型原理、环境配置与避坑指南

简介:基于Python的中英机器翻译系统采用Keras-Transformer模型,面向深度学习初学者及毕业设计、课程设计场景,提供一套结构完整、可直接运行的机器翻译项目方案。资源共20个文件,压缩包7.42MB,包含核心Python脚本、Jup…

📅 2026/10/9 3:17:19
开源商城前端选型指南:关键维度与避坑实录

开源商城前端选型指南:关键维度与避坑实录

先聊一个我这两年越来越坚定的判断:商城系统开发这事儿,选型前端项目比绝大多数人想象中更重要,甚至可以说,它在很大程度上决定了你后续三到六个月的开发状态是“顺风顺水”还是“拆东墙补西墙”。我自己见过太多团队,…

📅 2026/10/9 3:17:19
MORE NEWS

更多资讯

📰

JCache接口键不存在时get与put行为详解及避坑指南

后台总有读者在准备Java面试,问得比较多的一道"基础篇"题目就是今天要聊的:JCache(JSR-107)中 Cache 接口的 put 和 get 方法,在键不存在时到底是什么行为。题目确实只有一句话,但这句话背后牵出…

📰

JavaWeb学生实习管理系统:源码+数据库脚本,毕设落地全攻略

简介:这是一套基于JavaWeb的学生实习管理系统完整项目源码,面向计算机相关专业正在做毕设的学生以及需要项目实战练习的Java学习者,可直接作为毕业设计使用。系统采用B/S结构,后台基于JSP、Servlet与JDBC技术,以MySQL作…

📰

编号任务管理法:用清单编号让待办不积压,告别拖延

上个月底,我盯着任务清单里那一串编号,终于一口气划掉了三行:53、55、58。看日期,刚好是1月29日。那天没有特殊仪式,也没有鸡血状态,就是按自己平时摸索出来的那套“编号任务管理法”,把积压到月…

📰

LabVIEW与S7-1200通信实战:Snap7高效读写DB块全指南

做工业自动化的朋友,肯定绕不开一个问题:现场PLC和上位机怎么打通。我这边最常见的组合就是LabVIEW做中控界面,西门子S7-1200做设备控制,两边一握手,数据才能在上位机上显示、存储、下发。LabVIEW写界面快,…

📰

从课程表到有向图判环:拓扑排序与Kahn算法实战详解

力扣 207 这道课程表,算是图论入门里出场率最高的一道题了。名字叫“课程表”,场景也特别好懂:你想修完 n 门课,但学校规定有些课必须先修完别的课才能选,比如“数据结构”要求先修“程序设计基础”,“操作…

📰

Java决策树算法实现大学生就业预测系统:从CART原理到Spring Boot落地

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬