SSM教务系统部署全流程:Maven搭建、MyBatis Generator与Tomcat避坑指南
简介这套学校教务管理系统基于Java和SSM框架使用Maven管理依赖以MySQL存储数据前端采用Bootstrap构建界面适合需要学习SSM整合开发的Java爱好者。系统提供管理员对课程、学生、教师信息的增删改查教师给学生打分学生在线选课等功能覆盖教务管理常见需求。压缩包共三百九十三个文件大小约十七点八二兆其中包含Java源码、JSP页面、XML配置文件、class编译文件以及数据库脚本和前端资源方便按需查阅。系统经过多轮测试运行稳定已有一千三百三十三人学习下载项目内附SQL脚本和说明文档便于快速搭建环境。借助源码、SQL脚本和配置文件可深入理解SSM框架的整合方式、Maven项目的目录结构以及课程管理、选课和评分模块的业务实现适合作为毕业设计或实训项目的参考资料。1. 这套SSM教务系统到底能干什么先看清功能边界与运行前提如果你手里正好有一套JavaSSMMavenMySQLBootstrap实现的学校教务管理系统源码但还没跑起来这篇笔记能帮你少走几个晚上的弯路。我拆过这个项目功能不算少管理员管课程、管学生、管老师教师能给学生打分学生能在线选课。它不像网上那些只做了登录页的Demo数据库表和SSM整合都是齐全的MyBatis Generator生成的Example查询条件都在适合拿来练手、做毕业设计或者作为二次开发的底子。下面直接拆结构、讲部署、走核心流程。2. 项目结构拆解从数据库表到Example查询条件的调用链拿到这种SSM项目第一件事不是急着启动而是把源码目录和数据库脚本捋一遍。这个教务系统是典型的Maven工程分层清楚MyBatis逆向生成的代码占了很大比例。搞懂结构之后后面配置、调错甚至二次开发都会快很多。2.1 源码目录与数据表设计Maven工程的标志就是根目录有pom.xml。Java源码在src/main/java下资源文件在src/main/resources页面在src/main/webapp下。SSM项目里web.xml很重要它决定了Spring的根容器和SpringMVC子容器怎么加载。这个项目里contextConfigLocation指向classpath:spring/applicationContext.xmlDispatcherServlet又指向classpath:spring/spring-mvc.xml这种分离配置是SSM的标准做法。数据库脚本一般在database目录也有放在sql目录下的。我用编辑器打开脚本看到的是四张核心表course、student、teacher、score。course表有id、course_name、course_code、teacher_id、credit这些字段student表有id、student_no、name、gender、class_nameteacher表有id、teacher_no、name、title、dept_namescore表有id、student_id、course_id、score、term。表之间用逻辑外键关联比如course表的teacher_id对应teacher表的idscore表通过student_id和course_id关联学生和课程。注意实体类的命名和表名不完全一致但Mapper XML的namespace必须和Mapper接口全限定名一致。如果运行时报“Invalid bound statement (not found)”优先检查Mapper XML里的namespace是不是写错了。这个项目用MapperScannerConfigurer自动扫描Mapper接口所以代码里没有一个个Mapper注解检查起来也简单。2.2 MyBatis Generator生成的Example类怎么用项目正文里出现的CourseExample$GeneratedCriteria.class、StudentExample$Criteria.class这些编译产物说明MyBatis Generator生成的查询条件构造器是完整的。很多新手第一次看到Example类会有点懵其实它就是把动态SQL条件封装成Java方法调用。比如要查课名为“Java程序设计”的课程传统SQL是where course_name Java程序设计用CourseExample就是下面这样。CourseExample example new CourseExample(); CourseExample.Criteria criteria example.createCriteria(); criteria.andCourseNameEqualTo(Java程序设计); ListCourse courses courseMapper.selectByExample(example);这段代码先创建CourseExample对象然后拿Criteria实例再调用andCourseNameEqualTo方法拼出where条件。selectByExample会执行查询。如果再加一个学分大于2的条件继续追加criteria.andCreditGreaterThan(2)就行生成的SQL会自动用AND连接。如果条件之间有OR关系要创建多个Criteria并调用example.or()这是新手最容易忽略的地方。为什么不用手写SQL因为多条件查询时手写动态SQL要么在XML里堆一堆if标签要么容易漏条件导致全表扫描。Example类的好处是每个字段都有对应的方法比如String字段有andCourseNameLike、andCourseNameNotLikeInteger字段有andCreditGreaterThan、andCreditLessThan、andCreditBetween代码看起来就是“条件即方法”可读性也更好。缺点就是生成的方法太多用的时候需要翻一翻类的结构。2.3 Maven依赖范围与SSM配置文件解析pom.xml是这个项目能不能编译通过的基础。我拆的时候看到的核心依赖是Spring、SpringMVC、MyBatis、mybatis-spring、MySQL驱动和连接池还有JSON序列化用的Jackson。一个比较隐蔽的问题是Spring版本和MyBatis版本的兼容性常见组合是Spring 5.x配MyBatis 3.5.x再加mybatis-spring 2.0.x。如果项目里的版本是Spring 4.x配MyBatis 3.5.x运行时会遇到方法签名不存在的异常所以尽量保持项目自带的版本不要随便升级。SSM整合的配置文件集中在spring-mybatis.xml和spring-mvc.xml。前者定义数据源、SqlSessionFactory和Mapper扫描器。SqlSessionFactoryBean里有一个typeAliasesPackage属性用来给实体类起别名。如果这个包名写错启动不会立刻报错但运行时会提示“Type ... is not known to the MapperRegistry”。后者也就是spring-mvc.xml必须要有annotation-driven否则ResponseBody和请求参数绑定不生效。另外还有一个容易忽略的点webapp目录下的静态资源比如Bootstrap的css/js文件默认会被DispatcherServlet拦截。所以spring-mvc.xml里会有类似万能的配置后面避坑章节我会再具体说。总之拿到源码先不要改配置原样跑通再动。3. 部署与配置流程Maven环境、数据库脚本和Tomcat接入很多同学在这个项目上卡住不是代码问题而是本地环境没准备好。SSM项目虽然老但对Maven和MySQL的版本组合比较敏感一步步来每一步验证完再走下一步。3.1 Maven环境配置与本地仓库先确认JDK是8或11版本SSM项目在JDK8下运行最稳。Maven推荐3.6以上配好MAVEN_HOME环境变量后在命令行里输入mvn -version验证。IDEA里建议使用自己安装的Maven而不是自带的避免版本差异带来奇怪的问题。本地仓库默认在用户目录下的.m2/repository。国内拉依赖经常失败最直接的办法在settings.xml里配置镜像。一般是用阿里云镜像配置片段如下。mirror idaliyun/id mirrorOfcentral/mirrorOf namealiyun public/name urlhttps://maven.aliyun.com/repository/public/url /mirror配置好后在项目根目录执行mvn clean compile第一次下载依赖会花几分钟。如果某个依赖下载失败先去本地仓库看有没有对应坐标的.lastUpdated文件这个文件存在说明下载中断删掉再重新拉。不要为了省事跳过clean否则target目录里的旧class文件可能会导致运行结果和源码不一致。3.2 数据库初始化与连接参数调整数据库脚本导入这一步推荐用命令行而不是图形工具双击执行因为脚本里建库、建表和初始数据是有顺序的命令行能更直观看到哪一步出错。先创建数据库再导入脚本mysql -uroot -p -e CREATE DATABASE IF NOT EXISTS course_system DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; mysql -uroot -p course_system course_system.sql第一个命令创建course_system库字符集用utf8mb4这样中文和特殊符号都能正常存。第二个命令把SQL脚本导入到这个库。导入完成后建议先SELECT一下student表确认初始账号和测试数据已经进去。如果MySQL版本是5.7utf8mb4同样支持但如果之前建过库且字符集是utf8表里的中文也还是能读只是保险起见还是统一utf8mb4。打开src/main/resources下的jdbc.properties核心连接参数是driver、url、username、password。注意MySQL 8以上驱动类名必须是com.mysql.cj.jdbc.Driverurl要带上serverTimezoneAsia/Shanghai和useSSLfalse。如果你本机MySQL是5.7用旧驱动com.mysql.jdbc.Driver也能跑但如果连接的是MySQL 8旧驱动会直接报时区异常。密码是空的最好也设置一个不然一些连接池组件初始化时会说“Access denied”。3.3 使用IDEA导入并启动TomcatIDEA导入Maven项目时选择pom.xml导入后等待Maven索引构建完成。不要一看到进度条就赶紧操作依赖没下完就启动肯定会翻车。建议先在项目根目录手动执行一下mvn clean install把编译和打包都跑一遍确认没有报错再配置Tomcat。在Run Configuration里添加Tomcat Server选Local然后指定本机Tomcat目录。Deployment标签里添加Artifact一般选war exploded。Application context设置成/course_system这样访问地址是http://localhost:8080/course_system。启动Tomcat后控制台出现“Artifact is being deployed, please wait”时不要关窗口等看到“Tomcat started on port(s) 8080”再访问。也有项目用tomcat7-maven-plugin来启动在pom.xml里配置好之后直接运行mvn tomcat7:run。这种方式的优点是省掉本机Tomcat配置缺点是不支持热部署改一行代码就要重启整个服务。我更推荐IDEA加外部Tomcat的方式因为可以打断点调试Controller层遇到问题定位快得多。4. 核心功能实现路径管理员CRUD、学生选课与教师打分这个系统的业务逻辑不复杂但覆盖了SSM项目的经典写法。把管理员、学生选课、教师打分三条链路走一遍就基本掌握了这个项目里Controller、Service、Mapper的调用习惯。4.1 管理员课程管理Controller层与Service层联动管理员管理课程最核心的是列表查询和新增。列表页一般通过AJAX请求/course/list后端返回JSON数据前端用Bootstrap Table渲染。新增课程时前端表单提交到/course/addSpringMVC自动把表单字段封装成Course对象。Controller RequestMapping(/course) public class CourseController { Autowired private CourseService courseService; ResponseBody RequestMapping(value /add, method RequestMethod.POST) public MapString, Object add(Course course) { int rows courseService.insertCourse(course); MapString, Object result new HashMap(); result.put(code, rows 0 ? 200 : 500); result.put(msg, rows 0 ? 新增成功 : 新增失败); return result; } }逻辑说明SpringMVC按字段名自动绑定表单参数Course对象里的courseName、credit等属性会从请求参数映射过来。insertCourse返回影响行数大于0说明插入成功。返回的Map会被Jackson序列化成JSON前端通过code字段判断是否成功。这里有一个坑courseName如果传中文必须保证页面和数据库都是UTF-8否则存进去就是乱码很多情况下不是代码问题而是前端页面没加charset。4.2 学生选课事务控制与选课冲突校验学生选课要处理两个核心问题一个学生不能重复选同一门课课程不能超过容量。这两个判断都放在Service层并且整个操作要加事务保证要么都成功要么都失败。Transactional(rollbackFor Exception.class) public String selectCourse(Integer studentId, Integer courseId) { int count selectionMapper.countByStudentAndCourse(studentId, courseId); if (count 0) { return 你已经选过这门课; } int selected selectionMapper.countSelected(courseId); int limit selectionMapper.getCourseLimit(courseId); if (selected limit) { return 该课程已满员; } selectionMapper.insertSelection(studentId, courseId); return 选课成功; }Transactional(rollbackFor Exception.class)是关键任何异常都会回滚。countByStudentAndCourse是自定义Mapper方法能在SQL里同时传两个参数做统计。这里有一个不容易发现的坑count查询如果返回Long类型而Java代码用int接收在小数据量下可能没问题但数据多了以后拆箱可能出现NPE。所以项目中所有count方法我建议都统一返回Long。选课成功后很多业务还需要在score表里插入一条空成绩记录否则教师打分界面拉不到学生。这个插入动作必须和选课插入放在同一个事务里也就是说它应该写在selectCourse方法内部而不是由Controller另外调一个方法。4.3 教师打分按学生分选并更新成绩教师端打分要先看选了某门课的学生列表然后逐个输入分数。打分接口往往写成两个一个是查询列表/score/list?courseIdxx另一个是提交分数/score/update。更新时要先判断这条成绩记录存不存在存在就UPDATE不存在就INSERT。public int updateScore(Integer studentId, Integer courseId, Double score) { ScoreExample example new ScoreExample(); ScoreExample.Criteria criteria example.createCriteria(); criteria.andStudentIdEqualTo(studentId); criteria.andCourseIdEqualTo(courseId); ListScore list scoreMapper.selectByExample(example); Score record; if (list.isEmpty()) { record new Score(); record.setStudentId(studentId); record.setCourseId(courseId); record.setScore(score); return scoreMapper.insertSelective(record); } else { record list.get(0); record.setScore(score); return scoreMapper.updateByPrimaryKeySelective(record); } }这段代码再次用到了Example类。selectByExample把条件拼成where student_id ? and course_id ?返回List列表。如果没记录就insertSelective有记录就updateByPrimaryKeySelective。注意insertSelective和updateByPrimaryKeySelective都只处理非空字段所以score参数如果为null数据库里的旧分数不会被覆盖。Controller层接收前端参数时建议校验score非空否则前端传个空值后端就会把0分写进去。4.4 管理员学生管理分页查询与批量删除的实现除了课程管理员还需要管理学生。学生列表如果数据量大了一般都要做分页和条件筛选。分页可以用PageHelper也可以手写limit。手写分页的时候Controller接收pageNum和pageSizeService计算startRowMapper XML里写limit #{startRow}, #{pageSize}。另一种常见操作是批量删除前端选中多行后把ids数组传给后端。RequestMapping(/student/deleteBatch) ResponseBody public MapString, Object deleteBatch(RequestParam(ids) ListInteger ids) { StudentExample example new StudentExample(); StudentExample.Criteria criteria example.createCriteria(); criteria.andIdIn(ids); int rows studentMapper.deleteByExample(example); MapString, Object result new HashMap(); result.put(code, rows 0 ? 200 : 500); result.put(msg, rows 0 ? 删除成功 : 删除失败); return result; }andIdIn(ids)是Example类生成的方法会生成IN语句。比循环拼逗号安全也避免了SQL注入。删除之前一定要检查这个学生是否有选课记录或成绩记录否则会留下孤儿数据后续联合查询会查出空信息。最稳妥的做法是用事务同时删除学生记录、选课记录、成绩记录或者如果业务上不允许直接删学生就把状态字段改成“已离校”而不是物理删除。原项目可能只做了单表删除这个位置是二次开发的重点。5. 避坑指南与常见问题排查本地跑不起来时看这几个点这个项目我跑通过也在别人电脑上见过各种失败姿势。下面这几条是出现频率最高的每条都按“现象到原因到解决”来写能帮你省掉一半排查时间。5.1 MySQL连接时报错时区不合法或无法创建PooledConnection现象启动Tomcat时控制台报InvalidConnectionAttributeException或者一大段关于time zone的红色异常连接池初始化直接失败。原因MySQL 8.x驱动要求url里必须明确serverTimezone否则它会去读操作系统时区设置。中文版Windows时区名不是标准格式驱动就认不出来。另外如果pom里用的是旧版mysql-connector-java驱动类名还是com.mysql.jdbc.Driver和MySQL 8服务端不兼容。解决把jdbc.properties改成com.mysql.cj.jdbc.Driver并在url后追加serverTimezoneAsia/ShanghaiuseSSLfalse。如果用的是Druid连接池也要确认Druid版本支持MySQL 8建议用1.2.x以上。改完配置后执行mvn clean再重启Tomcat不然target目录里的旧配置文件可能还在被使用。5.2 Maven依赖冲突引发的ClassNotFoundException现象项目编译通过但启动时抛NoClassDefFoundError比如org.mybatis.spring.SqlSessionTemplate找不到或者某个类的方法NoSuchMethodError。原因pom.xml里mybatis-spring和mybatis版本不匹配或者通过传递依赖引入了多个不同版本的同一个包。SSM项目依赖关系复杂特别容易在spring-jdbc和spring-webmvc之间产生版本冲突。解决在项目根目录执行mvn dependency:tree -Dincludesorg.mybatis看一下mybatis相关包的版本。如果出现两个版本号就在pom.xml里用dependencyManagement锁定一个版本。我平时会把Spring、MyBatis、mybatis-spring的版本号定义为properties属性这样升级和排查都清楚。改完后再执行mvn clean test确保编译和单元测试都过了再启动。5.3 SpringMVC路由配置不当导致404现象访问/course/list时页面404但访问登录页是正常的。或者POST请求返回405 Method Not Allowed。原因DispatcherServlet的url-pattern设为/会把所有请求都拦截下来。如果spring-mvc.xml没配静态资源映射CSS和JS就404。如果Controller类上RequestMapping路径和方法上路径拼接错误比如类上是/course方法上是/list前端请求的却是/courseList自然就找不到。解决先看浏览器控制台里请求的完整URL再点开网络标签看状态码。如果是404检查Controller的basePackage扫描路径是否覆盖了controller包。如果是405看RequestMapping里method属性是不是限制成了POST但前端用了GET。还有一个排查技巧在方法里加一行System.out.println(进来了)如果控制台没打印说明请求根本没进到Controller问题在路由映射或者拦截器。5.4 Bootstrap前端资源加载不出来现象页面可以打开但按钮没有Bootstrap样式控制台显示bootstrap.min.css请求404。原因DispatcherServlet把静态资源拦截了。web.xml里url-pattern是/SpringMVC会处理所有请求包括静态资源。spring-mvc.xml缺少 mvc:resources 映射所以浏览器请求/static/bootstrap/css/bootstrap.min.css时框架找不到对应的处理器。解决在spring-mvc.xml中增加静态资源映射。常见写法是mvc:resources mapping/static/** location/static//前提是webapp目录下有static文件夹。另外页面引用路径要带项目上下文如果是JSP页面用%request.getContextPath()%/static/...开头如果是直接把Bootstrap文件放在webapp根目录那别用static路径。这里特别容易忽略的是项目部署在Tomcat后Application context设置为/course_system如果页面里写死/static开头就会404必须带上contextPath。5.5 Tomcat热部署内存溢出现象改完Java代码后IDEA自动部署控制台报java.lang.OutOfMemoryError: Metaspace或者PermGen spaceTomcat直接挂掉。原因SSM项目加载的类比较多Tomcat热部署时旧classloader没有被回收元空间被占满。如果项目里还用了框架扫描比如MapperScannerConfigurer每次重新部署都会重复注册一批类内存消耗更快。解决在IDEA的Tomcat运行配置里VM options加上-XX:MetaspaceSize512m -XX:MaxMetaspaceSize512mJDK7下则改成-XX:PermSize512m -XX:MaxPermSize512m。另外尽量不依赖热部署改配置文件后手动重启改Java代码后可以只重构单个类不用全量部署。我在实际开发中已经养成习惯提交测试之前一定完整重启一次避免热部署残留的旧类影响测试结果。6. 验证功能与进阶改进方向从能跑到跑稳的一些实践项目能启动只是第一步验证核心链路才是关键。我一般按这个顺序走一遍管理员登录后新增一门课程新增一个学生和一个教师再把课程分配给教师。然后用学生账号登录选上刚才那门课。最后用教师账号进入打分页给这个学生打分。每一步都去数据库里查对应表的变化比如student表多了一行score表也插入了成绩记录这样能确认关系没问题。选课功能要测两种边界重复选课要有提示课程容量满员时不能继续选。打分功能要测分数超过100或者输入负数被拦截。管理员删除课程时要观察学生选课表是否也跟着清空如果项目没做级联删除那就需要在删除前检查关系否则后面教师打分时会遇到关联数据缺失的NPE。进阶改进方向我列几个实际能落地的第一把Controller里返回的HashMap统一改成Result类加上code、message、data三个字段前端处理更统一第二引入Spring Security替代手写拦截器做角色权限控制这样管理员、教师、学生三种身份的访问范围在配置里就能约束住第三给课程列表加PageHelper分页现在数据量小看不出来数据量过万后不加分页会非常卡第四数据库密码不要明文写在jdbc.properties里可以考虑用Jasypt加密或者放到环境变量里再读取。从踩坑学到的习惯是凡是SSM项目改动过配置文件不要直接点Tomcat重启一定要先执行mvn clean install。有一回我改完spring-mvc.xml直接重新部署明明配置了静态资源映射页面还是404查了大半天才发现target目录里的web.xml还是旧的IDEA没触发全量清理。从那以后我每次都会强制先clean再启动多花十几秒但省掉一整个晚上的排查时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

继续教育降AI率工具实测:为什么我推荐千笔而非灵感ai

继续教育降AI率工具实测:为什么我推荐千笔而非灵感ai

直接说结论:在继续教育这个场景里,如果只能选一个降AI率网站,我会把手里的票投给千笔,而不是灵感ai。先别急着反驳,这句话有个前提——“贴合继续教育”这四个字,几乎决定了选型逻辑。继续教育的写作任务&a…

2026/10/18 7:35:04 阅读更多 →
接手一座产业园,先盘清这十件事

接手一座产业园,先盘清这十件事

产业园管理内容拆解:看着庞杂,其实可以拆成十个模块,新接手先盘一遍。一位朋友前阵子空降到一家产业园当总经理。上任头两周,他被十个部门轮番“要说法”:招商部说线索不够,物业部说维修费超了,…

2026/10/18 7:34:04 阅读更多 →
artcraft:微内核+插件化创意工具框架的设计与实现

artcraft:微内核+插件化创意工具框架的设计与实现

1. 项目缘起与整体设计思路1.1 为什么会有 artcraft 这个想法做创意工具这些年,我最大的感受就是:大部分所谓的“创作辅助工具”,其实都在帮倒忙。你要么被一堆参数面板淹没,要么被强制绑定某个平台、某种格式,最后做出…

2026/10/18 7:34:04 阅读更多 →

最新新闻

AI硬件周报第2期:端侧算力模组、AI眼镜与边缘推理盒子技术动态

AI硬件周报第2期:端侧算力模组、AI眼镜与边缘推理盒子技术动态

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

2026/10/19 1:09:12 阅读更多 →
STM32寄存器级开发实战:GPIO与外部中断EXTI深度解析

STM32寄存器级开发实战:GPIO与外部中断EXTI深度解析

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

2026/10/19 1:09:12 阅读更多 →
物联网操作系统选型实战:RT-Thread、Zephyr、LiteOS-M与NuttX深度对比

物联网操作系统选型实战:RT-Thread、Zephyr、LiteOS-M与NuttX深度对比

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

2026/10/19 1:09:12 阅读更多 →
STM32上电启动流程全解析:从复位向量到main函数

STM32上电启动流程全解析:从复位向量到main函数

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

2026/10/19 1:09:11 阅读更多 →
音频系统架构深度拆解:分层模型、数据流与低延迟实操

音频系统架构深度拆解:分层模型、数据流与低延迟实操

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

2026/10/19 1:09:11 阅读更多 →
FTL闪存转换层:SSD性能与寿命的隐形中枢

FTL闪存转换层:SSD性能与寿命的隐形中枢

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

2026/10/19 1:08:11 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →