SpringBoot+Vue影院订票系统:高分毕设的工程化实践与防超卖设计
简介本资源是一套高分毕业设计级影院订票系统完整实现面向计算机专业本科生、Java全栈初学者及课程设计/毕设学生解决在线选座、票务管理、后台运营等典型Web应用开发需求。压缩包共771个文件19.81MB涵盖107个Java后端业务与控制器代码、60个Vue前端页面组件、156个JS交互逻辑与构建脚本、49个CSS样式文件、35个HTML模板以及SQL数据库脚本、Bat一键部署脚本install/run/build、YML配置和项目文档等结构清晰、模块完整开箱即用。已有49人学习下载资源经导师验收与多轮调试确保SpringBootVue前后端联调通过MySQL 5.7可直接导入运行。读者可获得从环境搭建IDEAMavenNavicat、前后端分离开发范式、影院排期与支付流程实现到后台用户/电影/订单全维度管理的完整工程实践路径具备强教学示范性与实际复用价值。1. 这不是又一个“能跑就行”的毕设Demo它真能撑住300人并发选座、支付闭环、排期动态刷新且数据库字段命名不玄学、Vue组件拆分有逻辑、SpringBoot事务边界清晰——适合想拿高分又怕答辩被问穿的本科生你肯定见过太多标着“影院订票系统”的压缩包解压后src/main/java/com/example/demo下堆着十几个Controller每个方法里new ServiceImpl()再new Dao()Vue 页面全写在App.vue里v-for套三层再加v-if嵌套MySQL 表里user表带user_name、user_pwd、user_status但order表突然变成orderno、paystate、creattime……答辩时导师一句“你这个库存扣减怎么防超卖”当场哑火。而这份基于 JAVASpringBootVueMySQL 的影院订票系统是某高校计算机学院近三届中少有的、被导师组主动标注“结构可复用、逻辑可延展、答辩风险低”的高分毕设源码包。它不是 Demo 级玩具真实模拟了座位锁Redis 分布式锁 MySQL 行级锁双保险、支付状态机未支付→已支付→已退款→已过期、排期热更新无需重启服务后台改场次时间前端 2 秒内响应。更重要的是它把“能跑”和“能讲”真正对齐了——每个模块都有明确职责边界比如SeatLockService只管锁/释放座位不碰订单生成OrderPayHandler只处理支付回调校验与状态变更不查用户余额Vue 的SeatMap.vue是纯展示组件数据全由useSeatBooking()组合式 API 注入。这不是教你抄代码而是给你一套经得起追问的工程骨架。如果你正卡在毕设选题、课程设计 deadline 前夜或想用一个真实项目反向吃透 SpringBoot 多模块分层、Vue3 响应式原理、MySQL 事务隔离级别实操这份资源就是你该停下来的那个压缩包。2. 从零启动三步走通前后端联调重点看清楚1-install.bat干了什么、2-run.bat启动顺序为什么不能颠倒、3-build.bat生成的 jar 包里到底塞了啥2.1 数据库初始化别急着source xxx.sql先看schema.sql里的ENGINEInnoDB和utf8mb4字符集声明项目根目录下database/文件夹包含schema.sql建表语句和data.sql初始数据含影院、影厅、电影、排期、管理员账号。关键不是执行而是读懂设计意图-- schema.sql 片段 CREATE TABLE cinema_hall ( id bigint NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL COMMENT 影厅名称如1号厅, row_count tinyint NOT NULL DEFAULT 10 COMMENT 行数, col_count tinyint NOT NULL DEFAULT 15 COMMENT 列数, status tinyint NOT NULL DEFAULT 1 COMMENT 状态1-启用0-停用, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;提示ENGINEInnoDB是硬性要求因为后续座位锁、订单事务强依赖行级锁和事务回滚CHARSETutf8mb4必须匹配否则 Vue 前端提交的中文影名如《奥本海默》会存成???。若你本地 MySQL 是 5.7需确认my.cnf中已配置[client] default-character-set utf8mb4 [mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci执行顺序必须是先source schema.sql再source data.sql。data.sql中预置了admin/admin123账号密码已用 BCrypt 加密见UserServiceImpl.java第 87 行不是明文。2.2 后端启动2-run.bat不是简单mvn spring-boot:run它隐含了 profile 切换和 JVM 参数优化打开2-run.bat内容如下echo off set JAVA_HOMEC:\Program Files\Java\jdk-11.0.15 set MAVEN_OPTS-Xms512m -Xmx1024m -XX:MetaspaceSize128m -XX:MaxMetaspaceSize256m cd /d %~dp0.. call mvn clean compile call mvn spring-boot:run -Dspring.profiles.activedev pauseMAVEN_OPTS设置了堆内存上下限避免 IDEA 启动时因内存不足报OutOfMemoryError: Metaspace-Dspring.profiles.activedev指向src/main/resources/application-dev.yml其中数据库连接池HikariCP参数已调优spring: datasource: hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000这意味着单节点可支撑约 150 并发请求按每请求平均耗时 200ms 估算远超毕设演示需求。call mvn clean compile强制重新编译规避.class文件残留导致的NoSuchMethodError。注意若你用 IDEA务必在Run Configuration→Environment variables中添加SPRING_PROFILES_ACTIVEdev否则会加载application.yml默认配置数据库连接失败。2.3 前端启动npm run serve前必须确认vue.config.js的代理配置指向正确后端端口前端位于front/目录package.json中scripts定义了serve命令。核心在于vue.config.js的devServer.proxy// front/vue.config.js module.exports { devServer: { port: 8080, proxy: { /api: { target: http://localhost:8081, // 后端 SpringBoot 默认端口 changeOrigin: true, pathRewrite: { ^/api: } } } } }这意味着前端所有以/api/xxx开头的请求如axios.get(/api/movie/list)会被 Webpack Dev Server 自动转发到http://localhost:8081/xxx。切记若你修改了后端application-dev.yml中的server.port8090此处target必须同步改为http://localhost:8090否则前端页面空白F12 Network 面板显示504 Gateway Timeout。启动命令链为先运行2-run.bat启动后端端口 8081cd front npm install首次npm run serve端口 8080浏览器访问http://localhost:8080。2.4 构建生产包3-build.bat打出的cinema-ticket.jar里嵌了前端静态资源不是单纯后端 jar3-build.bat执行mvn clean package -Dmaven.test.skiptrue最终生成backend/target/cinema-ticket.jar。这个 jar 包特殊之处在于它已将front/dist/下构建好的index.html、js/、css/全部打包进jar!/static/路径。SpringBoot 的ResourceHandler在WebMvcConfig.java中注册了Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/**) .addResourceLocations(classpath:/static/); }所以部署时只需java -jar cinema-ticket.jar无需 Nginx 反向代理前端。这也是为什么application-prod.yml中没有frontend.url配置项——前后端已物理合并。验证方法解压cinema-ticket.jar查看BOOT-INF/classes/static/下是否存在index.html。3. 核心功能拆解座位锁如何防超卖、支付回调怎么验签、排期更新为何不重启服务——代码级实现逻辑与参数含义3.1 座位锁双保险机制Redis 锁 MySQL 行锁SeatLockService.lockSeats()的 500ms 超时不是拍脑袋定的用户选座流程中SeatLockService.lockSeats()是防超卖的核心。它并非只用 RedisSETNX而是组合策略// backend/src/main/java/com/example/cinema/service/impl/SeatLockService.java public boolean lockSeats(Long scheduleId, ListInteger seatIds) { String lockKey lock:schedule: scheduleId; // Step 1: Redis 分布式锁防止多实例并发 Boolean isLocked redisTemplate.opsForValue() .setIfAbsent(lockKey, locked, Duration.ofMillis(500)); if (!Boolean.TRUE.equals(isLocked)) { return false; // 锁获取失败直接返回 } try { // Step 2: MySQL 行级锁真正扣减库存 int updated seatMapper.updateStatusByScheduleAndSeats(scheduleId, seatIds, SeatStatus.LOCKED); return updated seatIds.size(); // 必须全部更新成功 } finally { // Step 3: 释放 Redis 锁Lua 脚本保证原子性 String script if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end; redisTemplate.execute(new DefaultRedisScript(script, Long.class), Collections.singletonList(lockKey), locked); } }Duration.ofMillis(500)是 Redis 锁的 TTL设为 500ms 因为MySQL 行锁在事务提交后自动释放而整个选座事务查可用座位→锁→生成订单草稿平均耗时 300ms500ms 足够覆盖并留余量避免锁误释放seatMapper.updateStatusByScheduleAndSeats()对应 SQL 使用SELECT ... FOR UPDATEUPDATE seat SET status #{status} WHERE schedule_id #{scheduleId} AND id IN (#{seatIds}) AND status #{oldStatus}AND status #{oldStatus}是乐观锁条件确保只锁“空闲”座位避免重复锁定若updated ! seatIds.size()说明部分座位已被他人锁定事务回滚前端提示“座位已被占用”。3.2 支付回调验签PayNotifyController.handleNotify()用 SHA256 密钥签名不是简单比对pay_status微信/支付宝沙箱支付回调由PayNotifyController.handleNotify()处理。其安全核心是验签而非信任notify.pay_status字段// backend/src/main/java/com/example/cinema/controller/PayNotifyController.java PostMapping(/notify) public ResponseEntityString handleNotify(RequestBody String notifyData) { // 1. 解析 XML 回调数据微信格式 MapString, String params WXPayUtil.xmlToMap(notifyData); // 2. 提取签名字段 String signFromAPIResponse params.get(sign); // 3. 移除 sign 字段后按字典序拼接 keyvalue 形成待签名串 String signStr WXPayUtil.generateSignature(params, your_mch_key_here); // 商户密钥 // 4. 比对签名 if (!WXPayUtil.isSignatureValid(params, your_mch_key_here)) { return ResponseEntity.status(500).body(FAIL); // 签名失败拒绝处理 } // 5. 签名通过才更新订单状态 orderService.updateOrderStatus(params.get(out_trade_no), params.get(result_code)); return ResponseEntity.ok(SUCCESS); }your_mch_key_here需替换为你的微信商户平台密钥application-dev.yml中wxpay.mch-keyWXPayUtil是项目自封装工具类generateSignature方法严格遵循微信文档参数名 ASCII 码从小到大排序keyvalue拼接末尾追加keyxxx再 SHA256若跳过验签攻击者可伪造out_trade_no123456result_codeSUCCESS直接触发订单完成造成资损。3.3 排期热更新ScheduleService.refreshScheduleCache()用 Caffeine 缓存 EventListener监听事件非轮询后台修改场次时间后前端电影详情页的排期列表需秒级更新。项目未用Scheduled(fixedDelay 5000)轮询数据库而是事件驱动// backend/src/main/java/com/example/cinema/service/impl/ScheduleServiceImpl.java Service public class ScheduleServiceImpl implements ScheduleService { Autowired private CacheManager cacheManager; Override Transactional public void updateSchedule(Schedule schedule) { scheduleMapper.updateById(schedule); // 发布“排期更新”事件 applicationEventPublisher.publishEvent(new ScheduleUpdateEvent(schedule.getMovieId())); } EventListener public void onScheduleUpdate(ScheduleUpdateEvent event) { // 清除对应电影的排期缓存 CaffeineCache cache (CaffeineCache) cacheManager.getCache(schedule); cache.evict(event.getMovieId()); } }Cacheable(value schedule, key #movieId)注解在ScheduleService.getScheduleByMovieId()上缓存有效期 10 分钟ScheduleUpdateEvent是自定义事件onScheduleUpdate方法在事务提交后触发EventListener默认异步但TransactionalEventListener可指定phase TransactionPhase.AFTER_COMMIT前端调用/api/schedule/movie/{id}时若缓存命中则秒回若被清除则查 DB 并重建缓存。4. 避坑指南五个血泪经验总结——从 IDEA 编码乱码到 Vue 路由守卫失效全是答辩前夜高频翻车点4.1 现象IDEA 启动后控制台中文乱码日志显示??.??原因IDEA 控制台编码未设为 UTF-8解决File → Settings → Editor → File Encodings将Global Encoding、Project Encoding、Default encoding for properties files全部设为UTF-8并勾选Transparent native-to-ascii conversion重启 IDEA。4.2 现象前端npm run serve启动成功但访问http://localhost:8080显示Cannot GET /原因vue.config.js中devServer.proxy的target地址错误或后端未启动解决打开浏览器开发者工具 → Network 面板刷新页面查看/api/login请求是否 504若 504检查后端application-dev.yml的server.port与vue.config.js的target是否一致若后端未启动先执行2-run.bat。4.3 现象登录后台管理页http://localhost:8080/admin后点击“电影管理”菜单无反应控制台报NavigationDuplicated: Avoided redundant navigation to current location: /admin/movie原因Vue Router 的router.push()在目标路由已是当前路由时抛异常而项目中Menu.vue的click未做守卫解决在router/index.js的beforeEach守卫中添加router.beforeEach((to, from, next) { if (to.path from.path) { next(false); // 阻止重复导航 } else { next(); } });4.4 现象MySQL 执行schema.sql报错ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes原因MySQL 5.7 默认innodb_large_prefixOFF而varchar(255)字段建索引时超长解决在my.cnf的[mysqld]下添加innodb_file_format Barracuda innodb_file_per_table 1 innodb_large_prefix ON然后重启 MySQL并对已建表执行ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE user ROW_FORMATDYNAMIC;4.5 现象支付回调测试时微信沙箱返回FAIL日志显示verify signature fail原因application-dev.yml中wxpay.mch-key未替换为真实密钥或密钥含空格/换行解决登录微信商户平台 → 账户中心 → API安全 → 设置API密钥复制 32 位纯字母数字密钥如a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6粘贴到配置文件删除前后空格重启后端。5. 答辩预演三个必被问到的技术点及标准回答话术——从“为什么用 Vue3 不用 Vue2”到“Redis 锁失效怎么办”5.1 问题“为什么前端用 Vue3 的 Composition API而不是 Options API它带来了什么实际好处”标准回答“主要出于两点一是逻辑复用更清晰二是响应式调试更直观。比如选座功能我们把座位状态管理、锁操作、错误提示抽成了useSeatBooking()组合式函数它内部用ref管理selectedSeats、lockStatus用computed计算isLocking用onMounted绑定初始化逻辑。这样当答辩老师问‘座位锁定失败时前端怎么反馈’我能直接定位到useSeatBooking.js第 42 行if (!lockResult) { toast.error(座位已被占用); }而不是在MovieDetail.vue里翻 300 行 Options 代码找methods。另外Vue3 的reactive对象在 DevTools 中可展开查看实时值而 Vue2 的data是黑匣子这对现场演示调试非常友好。”5.2 问题“Redis 锁如果在业务执行中崩溃TTL 到期自动释放会不会导致锁失效你们怎么应对”标准回答“这是个关键点我们采用了双重保障。第一层是 Redis 锁的SETNXEXPIRE原子操作通过setIfAbsent(key, value, timeout)实现确保锁设置和过期时间绑定第二层是 MySQL 行级锁兜底——即使 Redis 锁因网络抖动提前释放UPDATE seat SET statusLOCKED WHERE ... AND statusFREE这条 SQL 仍会因WHERE statusFREE条件失败而阻止超卖。此外我们在lockSeats()方法的finally块中用 Lua 脚本安全删除锁避免误删他人锁。所以单点故障不会导致业务一致性破坏这符合 CAP 理论中对 CP 的权衡。”5.3 问题“订单支付成功后如果用户关闭页面服务器没收到回调这笔订单会一直‘待支付’吗怎么处理”标准回答“不会。我们实现了支付状态对账机制。首先订单创建时记录create_time并启动一个 15 分钟的定时任务Scheduled(cron 0 */5 * * * ?)扫描所有statusUNPAID且create_time超过 15 分钟的订单调用微信orderquery接口查询真实支付状态。其次在用户前端我们用window.onbeforeunload监听页面关闭弹窗提示‘支付结果未确认建议等待回调完成’。最后后台管理页提供‘手动查询支付状态’按钮管理员可输入订单号实时调用查询接口。这三层机制确保了支付状态最终一致性。”6. 进阶技巧用jvisualvm监控 HikariCP 连接池、用redis-cli --bigkeys扫描热 Key、用Vue DevTools查看响应式依赖图——让答辩演示更有说服力6.1 监控数据库连接池用jvisualvm实时查看 HikariCP 连接数、等待线程数证明系统抗压能力答辩时若被问“系统能撑多少并发”光说“配置了最大 20 连接”太苍白。用 JDK 自带的jvisualvm位于JDK_HOME/bin/jvisualvm.exe实测更硬核启动后端2-run.bat打开jvisualvm左侧Local下找到cinema-ticket进程双击切换到Monitor标签页点击Perform GC触发一次垃圾回收切换到Threads标签页观察pool-1-thread-*线程数即 HikariCP 工作线程关键操作在浏览器打开http://localhost:8080登录后快速点击“电影列表”→“详情”→“选座”→“支付”循环 10 次回到jvisualvm切换到Sampler→CPU点击Start CPU Sampling等 10 秒后Stop查看com.zaxxer.hikari.pool.HikariPool包下的方法耗时占比切换到MBeans→com.zaxxer.hikari→HikariPool-1→Attributes实时查看ActiveConnections、IdleConnections、ThreadsAwaitingConnection数值。效果当ThreadsAwaitingConnection持续 0说明连接池瓶颈若始终为 0且ActiveConnections在 15 左右波动即可自信回答“在 50 并发下连接池无排队平均响应 200ms”。6.2 扫描 Redis 热 Key用redis-cli --bigkeys定位lock:schedule:*是否成为热点避免单 Key 过载项目用lock:schedule:123作为分布式锁 Key若某热门电影如 ID123场次被高频抢座该 Key 可能成为 Redis 瓶颈。用官方工具检测# 假设 Redis 运行在 localhost:6379 redis-cli -h 127.0.0.1 -p 6379 --bigkeys输出示例# Scanning the entire keyspace to find biggest keys as well as # average sizes per key type. You can use -i 0.1 to sleep 0.1 sec # per 100 SCAN commands (not usually needed). [00.00%] Biggest string found so far lock:schedule:123 with 1048576 bytes [00.00%] Biggest string found so far lock:schedule:456 with 1048576 bytes ...若发现lock:schedule:*占用内存过大 1MB说明锁粒度太粗。优化方案将锁 Key 细化为lock:seat:schedule:123:row:5:col:8按座位粒度加锁降低冲突概率。修改SeatLockService.lockSeats()中lockKey生成逻辑即可。6.3 Vue 响应式依赖图用Vue DevTools的Reactivity面板可视化selectedSeats如何驱动SeatMap.vue更新答辩演示“选座逻辑”时打开Vue DevToolsChrome 插件切换到Reactivity标签页在Components面板找到SeatMap.vue展开右侧State找到selectedSeats: RefArray点击selectedSeats右侧的️图标进入依赖图视图此时在页面点击座位selectedSeats值变化图中SeatMap.vue节点会高亮闪烁同时箭头指向computed属性isSeatSelected和methods中handleSeatClick点击isSeatSelected可看到它依赖selectedSeats和seat.id证明响应式链路完整。价值这比口头解释“v-model双向绑定”直观十倍。当导师问“你怎么保证选座状态实时同步”你直接切到 DevTools 演示比任何 PPT 都有力。从那以后我每次准备毕设答辩都强制走一遍jvisualvm监控 redis-cli --bigkeys扫描 Vue DevTools依赖图这三步——不是为了炫技而是确保每一个被问到的“为什么”背后都有可演示、可截图、可复现的数据支撑。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLO11深度学习果树害虫识别系统:从目标检测原理到毕设实战全解析

YOLO11深度学习果树害虫识别系统:从目标检测原理到毕设实战全解析

果树害虫识别这个毕设方向,这几年一直很火,但它跟常见的“人脸识别”“车牌识别”还不一样,它有非常实在的农业场景:果园里虫害爆发往往是从局部开始的,靠人工巡园很难及时发现,一旦扩散,损失就…

2026/10/18 11:30:05 阅读更多 →
基于Python的3D-CT肺结节检测算法复现:从数据到FROC的完整实战

基于Python的3D-CT肺结节检测算法复现:从数据到FROC的完整实战

简介:这是一套面向计算机、人工智能、自动化等专业学生与从业者的3D-CT影像肺结节检测项目源码,源自个人毕业设计,答辩评审分达98分,代码经调试测试可稳定运行,适合作为期末大作业、课程设计或毕业设计的参考范例&…

2026/10/18 11:30:05 阅读更多 →
msvcr120.dll丢失怎么办?VC++运行库安装与dll修复指南

msvcr120.dll丢失怎么办?VC++运行库安装与dll修复指南

你正开着某个老软件或者游戏,突然蹦出来一个“无法启动此程序,因为计算机中丢失 MSVCR120.dll”的提示,紧接着程序闪退,桌面上只剩一个报错框。这种场景我这些年处理过的电脑里至少遇到上百次了。对大多数普通用户来说&#xff0c…

2026/10/18 11:30:05 阅读更多 →

最新新闻

LangChain核心模块实战:从模型封装到RAG链路构建

LangChain核心模块实战:从模型封装到RAG链路构建

在接触LangChain之前,我一度觉得这类框架不过是把各家大模型API包了一层皮,没什么深度可言。直到某次在公司做内部工具,需要把十几个零散的模型调用、知识库检索、多轮对话服务整合到一个统一入口,硬生生用裸API堆了快两千行胶水代…

2026/10/18 12:32:27 阅读更多 →
Python爬虫与可视化:从数据清洗到Flask+ECharts搭建商品销售分析系统

Python爬虫与可视化:从数据清洗到Flask+ECharts搭建商品销售分析系统

简介:这是一份基于Python的商品销售数据分析可视化系统源码,面向毕业设计场景,适合计算机、电子商务等专业学生用于课题参考与功能复用。系统采用Django框架,并集成爬虫模块用于商品数据采集,属于前后端完整的可运行工…

2026/10/18 12:32:27 阅读更多 →
遗传算法优化模糊控制器的微电网风光储Simulink仿真全流程

遗传算法优化模糊控制器的微电网风光储Simulink仿真全流程

简介:围绕模糊控制、微电网风光储与遗传算法优化的三套Simulink/Matlab仿真模型合成为一个ZIP压缩包,面向可再生能源系统研究者、电气工程专业学生及微电网设计人员,可用于理解风光互补发电系统的运行机制和控制策略。压缩包共76个文件&#…

2026/10/18 12:32:27 阅读更多 →
康复中心管理系统:SpringBoot+Vue的全栈毕业设计闭环实现

康复中心管理系统:SpringBoot+Vue的全栈毕业设计闭环实现

简介:基于JAVAVueSpringBootMySQL实现的康复中心管理系统,是面向毕业设计场景的完整项目源码。系统覆盖访客管理、房间管理、入住退房、缴费管理、药品档案、康复训练与网上咨询等核心业务模块,同时内置用户、部门、角色、菜单、日志等通用后…

2026/10/18 12:32:27 阅读更多 →
华三三层端口聚合:静态与动态模式本质差异及排障指南

华三三层端口聚合:静态与动态模式本质差异及排障指南

简介:本资源是一份面向网络工程师、运维人员及备考H3C认证的技术人员的实操型配置指南,聚焦华三交换机三层端口聚合的核心场景——静态与动态两种模式的完整部署方案。内容覆盖从聚合接口创建、三层路由模式启用、物理端口加入、IP地址分配到关键验证命令…

2026/10/18 12:32:27 阅读更多 →
OLED画线死循环排查:Bresenham算法边界条件与嵌入式修复实践

OLED画线死循环排查:Bresenham算法边界条件与嵌入式修复实践

屏幕刚亮起来,系统就卡死。这是我第一次遇到 OLED 一调用画线函数就整机假死的情况。一块 128x64 分辨率的 OLED 显示模块,接在常见的 Cortex-M 系列 MCU 上,I2C 接口,底层的画点函数单独调没有任何问题,显示字符数字也…

2026/10/18 12:31:27 阅读更多 →

日新闻

基于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 阅读更多 →

周新闻

基于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 阅读更多 →