基于SpringBoot+Vue的校园管理系统毕业设计实战拆解

毕业设计想选校园管理系统、又不想纯手工从零搓代码的同学,我建议直接找一个 SpringBoot + Vue 的前后端分离项目来二次开发,这是目前最稳妥、也最适合拿高分的路子。这套技术栈基本是 Java Web 方向毕设的标配,覆盖了后端接口开发、前端页面交互、数据库设计、权限控制这些核心评分点。

标题里写的是"校园管理系统管理平台",听起来挺宽泛,但实际上这类项目的功能边界非常清晰:学生管理、教师管理、课程信息、选课退课、成绩录入与查询、班级管理、公告发布、还有后台管理员视角的统计看板。换句话说,只要把"人"和"课程"这两条主线管清楚,这个系统的主体功能就立住了,剩下的就是往细里打磨权限和数据关系。

这篇文章我会直接按做毕设的完整链路来拆解:从系统到底该设计哪些模块、数据库表怎么建、前后端怎么联调、代码跑起来要注意什么,到最终论文里怎么把项目亮点转化成答辩话术,一次性给你理清楚。

1. 系统整体设计与技术选型思路

1.1 为什么 SpringBoot + Vue 是毕业设计的最优组合

校园管理系统这类业务系统,本质上就是大量“增删改查”再加上一小部分业务逻辑(比如选课容量判断、成绩录入权限校验)。它不需要多复杂的分布式架构,也不需要微服务治理,核心诉求就三点:开发效率高、代码结构清晰、能讲清楚。

SpringBoot 在这个场景里的优势是压倒性的。它对 Spring 生态做了大量自动配置,一个依赖引入、一个@SpringBootApplication注解,项目就能跑起来,不用像传统的 SSM 项目那样写一堆 XML 配置文件。模板引擎也不推荐用了,后端直接返回 JSON 数据,跟前端完全解耦。

Vue 这边,用 Vue 2 + Element UI 的组合仍然是国内毕设项目的绝对主流。虽然 Vue 3 + Element Plus 也已经很成熟,但如果你的参考资料大多是 Vue 2 的写法、你也没有足够时间适应新语法,那就老老实实选 Vue 2。我见过太多同学为了追新用了 Vue 3,结果 Composition API 不熟练,排期全耗在语法调试上,得不偿失。

技术栈固定为:

  • 后端:SpringBoot 2.7.x、MyBatis-Plus、MySQL 8.0、Maven、JWT
  • 前端:Vue 2.7.x、Vue Router、Vuex、Axios、Element UI、ECharts

这套组合有一个非常大的优势:MyBatis-Plus 的BaseMapper帮你去掉了大量手写 SQL 的重复劳动,单表操作基本零 SQL;JWT 解决登录状态和权限识别;ECharts 做统计图表在论文里特别加分。这是经过大量项目验证的稳健搭配,完全适合交作业。

1.2 权限模型怎么设计才不会被答辩老师追问

权限设计是答辩高频区,也是最容易暴露“只会抄代码”的重灾区。这套校园管理系统采用的是经典的RBAC(基于角色的访问控制)模型,三张核心表:管理员表、教师表、学生表。注意,是三种角色分表存储,而不是统一的一张用户表加一个角色字段。

这种设计的好处有两个:一是每种角色的字段差异大(学生有学号、班级;教师有职称、所属院系;管理员有账号状态),混在一张表里会有大量冗余字段;二是业务查询时逻辑更直白,course表里关联teacher_id直接找教师表,不需要先查用户表再判断类型。

前端登录页面做一个角色切换下拉框,后端根据登录接口中传入的角色类型去不同的表里验证账号密码。登录成功后返回该角色对应的 JWT token 以及当前用户的基础信息(用户ID、姓名、角色标识)。前端拿到 token 存到localStorage,之后每次请求都通过 Axios 拦截器携带到请求头里。

后端实现上就是拦截器对/api/**路径统一放行登录接口,其他所有请求必须校验 token。这里要特别提醒一个坑:不要只验证 token 能不能解析出来就完事,还要校验当前用户的角色是否有访问该接口的权限。否则学生拿着自己的 token 调教师端接口也能成功,答辩时漏这个就严重了。

1.3 前后端分离部署结构说明

前后端分离的意思是后端只负责提供 API 接口和存储数据,前端负责页面渲染和交互,两个项目完全独立运行,通过 HTTP 请求沟通。开发环境下,前端跑在localhost:8080,后端跑在localhost:9090,接口地址通过 Vite 或者 Vue CLI 的代理配置转发出去,避免跨域问题。

整个系统落地起来跑的是两个进程,前端是纯静态页面托管,后端运行在独立的 Tomcat 上,两者用 JSON 格式的数据交互,彻底打通了业务链路。

如果你想把项目部署到服务器上拿得出手,那前端的dist目录可以直接扔到 Nginx 里,后端打 jar 包跑在服务器 JVM 上。写好一个nginx.conf把/api路径转发到后端服务端口即可,这一步做完,论文里“系统部署”章节就很有说服力。

2. 核心功能模块拆解与数据库设计

2.1 模块边界梳理:从需求到功能的映射

一个完整的校园管理系统,按角色维度划分功能模块是最清晰的,也最好写到论文里。每个角色登录后,菜单、可操作的接口都完全不一样。

管理员端是整个系统的“总控台”,核心功能包括:学生信息维护、教师信息维护、班级和院系管理、课程信息发布、选课规则配置(比如选课人数上限)、公告管理、以及首页的数据看板展示。这部分的特点是操作权限全、数据维度广。

教师端的核心业务集中在课程教学环节,功能包括:查看自己负责的课程列表、上传课程安排、录入学生成绩、查看选课学生名单。这里要做一个关键约束,教师只能看到“是自己主讲的课程”,不能在成绩列表里看到其他老师的课程数据。

学生端则相对简单,主要是选课和查看结果:浏览所有可选课程、选课、退课、查看已选课程和最终成绩。选课这里需要做容量校验和冲突校验,如果课程人数已满不能选,时间冲突也不能选。

2.2 核心表结构设计与关联关系分析

我直接给你画出这套系统最少需要的数据表清单,带着字段核心逻辑说明。建表时注意,所有的主键 ID 统一使用bigint并且自增,时间字段用datetime,减少后期联调踩坑。

表名核心字段说明
sys_adminid, username, password, status管理员账号表,密码需要 BCrypt 加密存储
sys_teacherid, teacher_no, name, title, dept_id, username, password教师账号,关联院系
sys_studentid, student_no, name, gender, class_id, username, password学生账号,关联班级
sys_deptid, dept_name院系表,教师归属院系
sys_classid, class_name, dept_id班级表,学生归属班级
courseid, course_name, credit, teacher_id, capacity, selected_count, schedule, classroom课程信息,预选人数用于选课判断
course_selectionid, student_id, course_id, status, create_time选课记录表,学生和课程多对多的中间表
scoreid, student_id, course_id, score成绩表,教师录入,学生查询
noticeid, title, content, create_time公告表,管理员发布,全员可见
dictid, type, label, value字典表,存性别、课程性质等枚举数据

表和表之间的关键关系:

  • sys_dept与sys_teacher是一对多,一个院系可以有很多老师
  • sys_dept与sys_class是一对多,班级挂在院系下面
  • sys_class与sys_student是一对多,一个班级多个学生
  • teacher与course是一对多,一门课程只有一个主讲老师
  • student与course是多对多,通过course_selection表关联
  • score表实际上也是学生和课程的关系表,但多了一个成绩字段,所以独立建表

我建议你在建表脚本中直接把外键关系省略,只在实体对象里保留逻辑关联,实际查询用 MyBatis-Plus 的Wrapper或手写联表查询实现。外键会影响数据库写入性能,也容易导致删除数据时误触发约束错误,开发阶段尽早习惯不用物理外键是一个好习惯。

2.3 选课冲突判断:最容易写错的业务逻辑

选课功能是整个系统中业务逻辑最集中的地方,也是答辩高频题目。做一个合格的选课模块,必须同时满足三个约束:

单学号不能重复选同一门课,重复调接口要能拦住;课程选课人数不能超过课程容量;同一学生的两门课时间不能冲突。

第一点通过course_selection表先查重即可;第二点在插入选课记录前先查selected_count与capacity做对比,并且要在更新selected_count时加上“乐观锁”机制,防止多人同时抢选导致数据错乱;第三点则要把当前学生所有已选课程的排课时间查出来,与新选课程做比较。

冲突判断不能用字符串简单替换,逻辑必须抽象为方法,比如checkScheduleConflict(studentId, newCourseSchedule),即使答辩老师问得很深,你也能清晰地把判断路径讲完整。处理这一块时我强烈建议你在事务方法里加@Transactional注解,因为先查已选列表、再校验、再插入、再更新容量,任何一个步骤出错都不应该留下脏数据。

3. 前后端打通的关键细节与接口实现

3.1 登录鉴权与拦截器的落地写法

后端用 JWT 做鉴权非常普遍,核心机制就是用户登录成功后,后端签发一个带过期时间的 token 返回给前端,之后前端每次请求在请求头里带上这个 token,后端拦截器解析 token 并获取当前用户身份。

先在pom.xml里引入jjwt依赖。生成 token 的时候,把用户ID和角色作为 claim 写进 token 里,过期时间设置为 24 小时:

public String generateToken(Long userId, String role) { Date now = new Date(); Date expireDate = new Date(now.getTime() + 24 * 60 * 60 * 1000); return Jwts.builder() .setSubject(String.valueOf(userId)) .claim("role", role) .setIssuedAt(now) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); }

拦截器实现HandlerInterceptor接口,在preHandle中取请求头Authorization,去掉Bearer前缀后解析 token。解析失败直接返回 401;解析成功就把用户ID放入ThreadLocal<String>中,方便后续的 Controller 直接使用。

这里有两个细节容易踩坑:

  • ThreadLocal用完一定要remove(),否则 Tomcat 线程池复用时会串数据
  • 拦截器放行一定要把前端预检请求OPTIONS方法直接放行,否则前端跨域请求会一直失败

3.2 跨域配置与 Axios 请求封装

开发环境下前端地址是http://localhost:8080,后端是http://localhost:9090,不同端口自然就产生了跨域问题。后端统一处理方式是实现WebMvcConfigurer的addCorsMappings,或者用一个独立的CorsFilter,直接允许所有来源。

同时前端也需要做一层封装,Vue 项目里新建src/utils/request.js,把 Axios 实例统一导出。里面做三件事:

  • 请求拦截器:从localStorage取 token,放进请求头
  • 响应拦截器:判断 HTTP 状态码和业务状态码,统一处理 401 跳转登录页
  • 封装 get/post 方法,组件中直接import request from "@/utils/request"使用

3.3 核心接口列表与传参规范

这部分我按照角色整理了一份接口清单,你在做 Controller 层开发时可以对着这个表逐个实现,查漏补缺。

模块接口路径方法说明
登录认证/api/loginPOST登录,入参为角色标识、用户名、密码
学生管理/api/student/listGET分页查询学生列表,支持学号/姓名模糊查询
学生管理/api/student/deleteDELETE删除学生(需管理员权限)
课程管理/api/course/listGET课程列表,支持条件查询
选课中心/api/course/selectPOST选课操作,入参 courseId
选课中心/api/course/cancelPOST退课操作
成绩管理/api/score/entryPOST教师录入或修改成绩
成绩查询/api/score/myGET学生查看个人成绩
班级管理/api/class/listGET班级列表,下拉框数据源
统计看板/api/dashboard/statisticsGET返回总数、图表数据

关于响应数据的结构,我强烈建议所有接口统一返回Result对象,包含code、message、data三个字段。不要一个接口返回Map、另一个返回List、还有一个直接返回boolean,后期前端同学和答辩时候自己都会看晕。

3.4 Vue 路由权限控制与页面骨架

前端路由不能只靠隐藏菜单来做权限控制,刷新页面路由会重新初始化,必须要在路由层面做校验。

我的做法是在router/index.js里定义好所有路由,每个路由的meta字段里添加roles: ['admin', 'teacher', 'student']。全局前置守卫beforeEach中读取当前用户的角色,用to.meta.roles判断是否可访问,不通过就重定向到登录页。

页面结构方面,整体布局用的是Layout组件,左侧菜单根据用户角色动态渲染,顶部是用户信息和退出功能,中间router-view承载内容区域。每个业务页面基本都是“搜索区 + 表格区 + 分页区 + 弹窗表单区”四段式结构,Element UI 的el-table和el-dialog组合使用,开发效率很高。

4. 实操全过程:从零把项目跑起来

4.1 环境准备与初始化

正式开始写代码前,先把环境统一好。我这里给出一套亲测稳定的版本组合:

  • JDK 1.8(强烈建议,不是 JDK 17 不好,而是很多教学资源和依赖对 JDK 17 的兼容支持没有 1.8 稳定)
  • Maven 3.8.x
  • MySQL 8.0
  • Node.js 14.18+(前端依赖能顺利安装的最低保障)
  • IDEA 2022 及以上(自带 Vue 插件,前后端一个 IDE 搞定)

后端项目创建方式有两种:一是直接用 IDEA 的 Spring Initializr,在线生成 SpringBoot 项目,直接勾选 Web、MySQL、MyBatis 依赖;二是去某仓库找一个现成的 SpringBoot 基础模板,在此基础上修改。新手我建议选第二种,减少配置文件的耗时。

MySQL 里先建一个数据库campus_db,执行建表脚本。注意数据库编码用utf8mb4,排序规则用utf8mb4_general_ci,避免插入中文数据时出现乱码。

4.2 application.yml 配置文件示例

后端配置文件是整个项目的命脉,我把核心内容列出来,实际使用时把数据库账号密码改成自己的:

server: port: 9090 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/campus_db?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai&useSSL=false username: root password: 123456 jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0

配置中serverTimezone=Asia/Shanghai是必填项,MySQL 8.0 驱动的默认时区跟中国差了 8 个小时,不填会报错或者时间不对。log-impl设为StdOutImpl能在开发阶段把每条 SQL 打印到控制台,调试效率极高。

4.3 前端项目创建与依赖安装

前端打开命令行工具,执行 Vue CLI 创建项目:

vue create campus-web

选择 Manually select features,然后勾选 Babel、Router、Vuex、CSS Pre-processors(选择 SCSS)。创建完成后进入目录,继续安装 Element UI 和 Axios:

npm i element-ui@2.15.16 axios@1.5.0

依赖安装过程中最容易出问题的点,是 Node 版本过高导致 node-sass 编译失败。如果你遇到gyp error这类报错,直接换成 dart-sass,在package.json中把node-sass改为sass,重新npm install基本上就能过。

然后在vue.config.js里配置开发代理:

module.exports = { devServer: { port: 8080, proxy: { '/api': { target: 'http://localhost:9090', changeOrigin: true } } } }

配置之后,前端项目里请求/api/xxx,开发服务器会自动转发到后端地址,你就完全不用考虑跨域的问题了,后端临时关掉跨域配置也没关系。

4.4 启动顺序与自测清单

启动项目的固定顺序是:先启动 MySQL 服务,执行建表脚本;然后启动后端 SpringBoot 项目,看到 Tomcat started 字样代表后端成功;最后启动前端npm run serve,访问http://localhost:8080。

系统跑起来后,我建议按下面清单做一次完整的冒烟测试:

  • 三种角色分别登录,确认跳转到不同的首页菜单
  • 管理员创建一个学生、一个教师、一门课程
  • 管理员修改学生信息,重新分班
  • 教师对课程设置录入成绩,学生端能查到
  • 学生进行选课,重复选同一门课返回错误提示;选满员的课返回错误提示;选时间冲突的课返回错误提示
  • 退出登录后,手动在控制台调用一个需要鉴权的接口,确认返回 401
  • 数据库里检查数据一致性,比如退课后selected_count是否回减

这套自测清单走完,系统核心逻辑基本上不会在答辩演示时翻车。

5. 开发过程中最常见的四个坑与解决方案

5.1 前端传参后端接收不到

这是联调阶段的头号问题,表现是前端明明传了参数,后端接口却收到 null。

绝大多数原因是请求头Content-Type不对。Axios 的 POST 默认发送 JSON 格式数据,后端@RequestBody接收没问题。但如果前端把参数拼在 URL 后面,或者用了FormData,后端就需要改成@RequestParam或者@RequestBody Map接收。另外一个高频原因是框架的命名规范不一致,比如前端传studentNo(驼峰),后端实体字段是student_no(下划线),如果开启了驼峰映射还行,没开启就接收不到。检查 MyBatis-Plus 配置里的map-underscore-to-camel-case: true是否打开了。

5.2 登录成功后刷新页面路由丢失

用户登录后进入主页,一刷新又跳回登录页。这个问题十有八九是 Vuex 状态没有持久化,刷新后内存里的用户信息全部清空。

解决方法是后端登录接口返回用户信息后,前端把用户信息连同 token 一起存入localStorage。页面刷新时在main.js或路由守卫里先读取本地存储的数据重新初始化 Vuex。要注意的是,不要把密码也存进去,存基础信息和 token 就够了。

5.3 时间字段前后端相差 8 小时

JSON 返回的日期数据在前端总是比预期少 8 小时。这个问题的根源是时区没有对齐,后端返回Date类型时,Jackson 默认用了 GMT 时区。

解决方式在application.yml里配置了两处,spring.jackson.time-zone: GMT+8和连接串里serverTimezone=Asia/Shanghai。如果前端拿到的字段是一个长整数时间戳,那就在实体类字段上用@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")注解强制输出格式。

5.4 Maven 依赖冲突导致启动失败

SpringBoot 项目引入 MyBatis-Plus 后启动报ClassNotFoundException,这个问题通常是依赖版本不兼容,一般是 MyBatis-Plus 和 SpringBoot 3.x 混用了导致的。如果你用的是 SpringBoot 2.7,对应应该引入mybatis-plus-boot-starter3.5.x 的spring-boot2版本;如果你图省事直接加了高版本依赖,请在pom.xml中检查版本号并向下调整到匹配版本。我个人的治理办法是在dependencyManagement里统一锁定版本,把所有相关依赖的版本集中在一个地方管理,解决冲突也会变得更直观。

6. 写在最后的项目经验谈

校园管理系统听起来普通,但它确实是 Java Web 方向毕设的“性价比之王”。技术难度适中,业务模型清晰,论文好写,答辩好讲,更重要的是它几乎是无限可扩展的。做完基础功能后,你完全可以在上面叠加新模块,比如在线考试、签到打卡、宿舍管理、图书借阅,每个模块都是独立的研究点,立刻就能提升项目的差异化优势。

如果这篇拆解帮到了你,我最后再分享一个小建议:拿到任何开源或参考源码,第一件事千万不要急着改代码,而是先把数据库脚本执行起来、把项目跑通,再从头开始读代码结构,理解每个 Controller 对应的业务模块和每张表之间的关联。这个习惯能帮你快速建立对项目的整体认知,后面写论文、查 bug、改功能都会高效很多。祝你的毕设顺利通关。

相关新闻

RGAT+GRU融合模型解决APT溯源图稀疏漏报问题

RGAT+GRU融合模型解决APT溯源图稀疏漏报问题

简介&#xff1a;本资源是华中科技大学2023届计算机相关专业&#xff08;如计科、人工智能、网络安全等&#xff09;优秀毕业设计成果&#xff0c;聚焦APT攻击检测这一前沿安全问题&#xff0c;提出并实现了一种基于溯源图建模与RGATGRU融合架构的检测方法优化方案。面向在校本…

2026/10/19 17:38:44 阅读更多 →
文件格式伪装揭秘:从魔数原理到apate工具实战

文件格式伪装揭秘:从魔数原理到apate工具实战

很多人在第一次听说“文件格式伪装”时&#xff0c;第一反应都是&#xff1a;这玩意儿真的能实现吗&#xff1f;改个扩展名谁不会&#xff0c;把.txt改成.exe&#xff0c;文件不照样打不开&#xff1f;如果你也这么想&#xff0c;说明你还没真正理解文件识别的底层逻辑。文件格…

2026/10/19 17:38:44 阅读更多 →
Source Map泄露实战:从检测还原到构建防御的完整指南

Source Map泄露实战:从检测还原到构建防御的完整指南

接手一个站点做安全评估的时候&#xff0c;我习惯先打开开发者工具的 Sources 面板&#xff0c;随手翻一下静态资源目录。很多时候问题就藏在那些不起眼的*.js.map文件里——Webpack 构建后遗留的 Source Map&#xff0c;一旦暴露在生产环境&#xff0c;等于把源码打包好递到别…

2026/10/19 17:38:44 阅读更多 →

最新新闻

IIEM海面散射系数MATLAB实现:二重积分与数值陷阱解析

IIEM海面散射系数MATLAB实现:二重积分与数值陷阱解析

简介&#xff1a;提供一套开源的改进积分方程模型&#xff08;IEM&#xff09;Python实现&#xff0c;面向粗糙表面电磁散射研究&#xff0c;适用于遥感、雷达成像等需要二重积分数值计算的场景&#xff0c;为已有一定编程基础的科研与工程人员提供可直接运行的基础代码。整套资…

2026/10/20 20:05:13 阅读更多 →
C++匿名对象与类生命周期:霓虹游牧者实战解析

C++匿名对象与类生命周期:霓虹游牧者实战解析

1. 项目概述1.1 一句话理解这个项目你给一个虚构的赛博朋克游戏场景编写NPC的AI控制逻辑。这个NPC名为“Cyber仿生人”&#xff0c;身份是“霓虹游牧者”。要求用C的类与对象知识&#xff0c;实现一个匿名对象的完整演示程序。我猜你已经对C的基础语法有一定了解&#xff08;变…

2026/10/20 20:05:13 阅读更多 →
SQL注入原理详解:从数据到代码的越界与手工验证

SQL注入原理详解:从数据到代码的越界与手工验证

1. 从一条登录框说起&#xff1a;SQL注入到底在注什么很多人第一次接触SQL注入&#xff0c;都是从一条看起来人畜无害的登录框开始的。用户名输入admin&#xff0c;密码随便填个123456&#xff0c;点击登录&#xff0c;页面提示“密码错误”。然后你把用户名改成admin --&#…

2026/10/20 20:05:13 阅读更多 →
matplotlib中文乱码显示方框?一套工程化字体配置方案彻底解决

matplotlib中文乱码显示方框?一套工程化字体配置方案彻底解决

刚开始用matplotlib画图&#xff0c;第一张图就满屏小方框&#xff0c;标题、坐标轴全是豆腐块一样的空框框&#xff0c;换成个折线图画中文字体&#xff0c;依旧原样。这个问题在中文开发者圈子里几乎算是入门必经关卡&#xff0c;项目标题看着简单——matplotlib无法显示中文…

2026/10/20 20:05:13 阅读更多 →
AI绘画提示词反推总差口气?掌握这3招还原图像生成底层逻辑

AI绘画提示词反推总差口气?掌握这3招还原图像生成底层逻辑

我玩AI绘画也有不短的时间了&#xff0c;几乎每次看到别人发的惊艳图&#xff0c;第一反应都不是“哇”&#xff0c;而是“这图提示词到底怎么写的”。所以我也很自然地走上了反推提示词这条路。但很快我就发现一个问题&#xff1a;用各种反推工具拿到的词&#xff0c;哪怕看起…

2026/10/20 20:05:13 阅读更多 →
放弃图形化工具,用Git Bash高效管理本地文档的完整指南

放弃图形化工具,用Git Bash高效管理本地文档的完整指南

1. 为什么我最终放弃了图形化工具&#xff0c;回归 Git Bash 管理本地文档很多人第一次接触版本管理&#xff0c;都是从图形化客户端开始的。点几下按钮&#xff0c;仓库就建好了&#xff0c;提交记录也看得见&#xff0c;似乎没什么门槛。但用得越久&#xff0c;我越发现一个尴…

2026/10/20 20:04:05 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →