Spring Boot医疗预约系统设计与实现:从需求到答辩完整路线图
每年三四月份我都会在后台收到一批同款私信Spring Boot的毕设题目还有没有有没有医疗预约类的其实不用多问你去毕设题库搜一下“Spring Boot”翻不了几页“会员制医疗预约服务管理信息系统”一定在里面。这题眼熟、稳定、资料多但真正动手的人十有七八会卡在同一类问题上号源怎么扣才不超卖会员等级和积分放哪儿才不会算错账前后端怎么连才不被跨域坑死。所以这篇我以这个题目为例把选题逻辑、需求拆解、技术选型、数据库设计、核心代码链路、开发排期到答辩演示完整讲一遍给正在选题目或者已经选了类似题目的同学一份可以直接用的路线图。1. 为什么这个题目年年热门角色、功能与“会员制”的边界1.1 三个标题变体其实说的是同一套系统我在毕设清单里见过这个题目的三种写法springboot会员制医疗预约服务管理信息系统基于Spring Boot的会员制医疗预约与管理信息化平台Spring Boot架构下的会员制医疗服务预约管理系统设计与实现名字虽然不一样实质都是同一套东西一端是会员/患者使用的预约服务一端是医生和管理员使用的管理后台再加一套会员体系贯穿其中。很多同学拿到题目以后开始纠结“我到底选哪一版标题”其实这个不关键关键是你在整个文档和答辩PPT里保持一致。真正需要拆清楚的是“会员制”三个字带来的需求变化而不是措辞。1.2 先把角色和功能画出来再想技术我习惯开工前先列一张“谁会打开这个系统、他要干什么”的表格。医疗预约系统最常见的角色是三类角色核心诉求典型功能会员/患者快速约到医生按时去就诊注册登录、科室/医生查询、查看排班、预约/取消/改约、支付/充值、查看病历、积分与优惠医生管理自己的出诊安排和患者查看排班、查看预约患者、处理停诊/加号、填写诊断建议、查看历史病历管理员维护平台数据和运营规则科室/医生/排班管理、号源设置、会员等级与套餐维护、订单与支付管理、统计报表如果只做一个朴素的信息管理系统那条线比较简单增删改查加登录注册。但“预约服务”意味着有库存、有状态流转、有支付结算这是它和普通“管理系统”最大的区别。所以你在开题阶段就要把“预约闭环”想清楚排班 - 预约 - 支付 - 就诊 - 完成/取消/爽约这个主流程通了系统基本成立。1.3 会员制不是加个等级字段那么简单这是这个标题里最容易被低估的部分。我见过不少同学在 member 表加一个 level 字段就宣布自己做了“会员制”然后被答辩老师一个问题问住你会员等级变化之后以前订单的价格怎么算“会员制”在这个系统里应该拆成几个可以落地的业务规则等级划分按充值金额或累计消费/积分划分会员等级不同等级享受不同折扣储值与余额支付会员可以预先充值预约时用余额支付积分体系下单或就诊送积分积分可用来兑换/抵扣套餐/次卡会员可以买“某科室N次检查套餐”预约时扣除次数。以上四条里你不用做全但至少要选两到三条落地。原因是如果标题带了“会员制”答辩时老师很自然会往这个方向问。你有一条能讲通、能演示的业务链路大概率不会冷场如果完全没做题目就名不副实。提示功能清单不要只抄网上的“六大模块”最好画成“会员端、医生端、管理端”三个入口每个入口只保留 5-6 个高频功能这个粒度对毕设来说刚刚好。2. 技术栈这样搭不容易翻车版本、ORM、鉴权与前端方案2.1 为什么一定是 Spring Boot而不是 SSH/SSM很多同学纠结“我用 JSP/Servlet 行不行”“SSM 是不是更经典”。我的态度很直接能用 Spring Boot 就不要给自己上难度。Spring Boot 最大的价值是把 Tomcat 内嵌、自动配置、起步依赖这三件事做完了你从 IDEA 新建项目到接口跑通可能只需要几分钟。SSM 也不是不行但你要手动配 Spring、配 SpringMVC、配 MyBatis那些 XML 在毕设周期里就是纯粹的干扰项。还有一个更现实的原因资料好找。Spring Boot 的问答、示例、视频教程数量远超其他组合你半夜卡住搜一条报错可能五分钟就解决了。选技术栈的本质是选“出问题时的兜底能力”对毕设来说这是第一优先级。2.2 版本怎么选2.3.x、2.6.x、2.7.x 还是 3.x这个点特别值得说因为我发现大多数同学根本不看自己的 JDK 版本就直接创建项目。Spring Boot 的版本选择和 Java 版本强绑定选错了会出现一堆莫名其妙的编译错误。Spring Boot 版本最低JDK关键差异选择建议2.3.xJDK8旧教程常用已停止维护不推荐新项目2.6.xJDK8javax 命名空间资料最全可接受但已被 2.7 替代2.7.xJDK82.x 系列的收官版本稳定毕设首选3.xJDK17jakarta 命名空间依赖变化大旧教程基本不适用我的建议先打开终端执行java -version看一眼。如果是 JDK8直接选 Spring Boot 2.7.x搭配 MyBatis-Plus 3.5.x如果你电脑已经是 JDK17学有余力可以上 3.x但别用老教程硬套因为 javax 到 jakarta 的包名迁移会让旧代码全部报红。2.3 前端选型与 ORM 选择ORM 我推荐 MyBatis-Plus。它比原生 MyBatis 少写大量 SQL比 JPA 少踩懒加载和关联序列化的坑。你的核心业务是“库存扣减 状态流转”这种场景需要 SQL 完全可控MyBatis-Plus 的 UpdateWrapper 和自定义 SQL 都能很好支持。前端有两个主流选择服务端渲染Thymeleaf Bootstrap/AdminLTE。适合后端为主、前端能力一般的同学。部署简单不用考虑跨域Demo 也能说得过去。前后端分离Vue 3 Element Plus Axios。界面更现代演示效果更好但你需要额外处理跨域、Token 存储、打包部署。如果你已经有 Vue 基础推荐如果没有谨慎。鉴权方面Spring Security 太重毕设里最常见的选择是 Sa-Token 或者自己写 JWT 拦截器。我的建议是登录注册用一个基于 JWT 的拦截器方案就够了自己在 PreHandle 里校验 Token再配合 Redis 或 Caffeine 做在线状态这条链路你自己能讲得最清楚。如果真要更安全可以用 Spring Security但对毕设来说投入产出比不高。3. 数据库设计决定这个项目好不好做核心表与状态机3.1 先建这十张表后期不会大改数据库是这类系统的地基表结构定了后面写代码会顺很多。参考表表名核心字段作用departmentid, name, status科室维护doctorid, dept_id, name, title, intro医生信息memberid, phone, password, level_id, balance, points会员基础信息member_levelid, name, discount_rate, threshold会员等级与折扣scheduleid, doctor_id, work_date, time_slot, total_count, remain_count排班与号源appointmentid, order_no, member_id, schedule_id, doctor_id, amount, status预约单paymentid, appointment_id, member_id, amount, status支付流水medical_recordid, appointment_id, member_id, doctor_id, content病历/诊断points_logid, member_id, change, reason, ref_id积分流水comboid, name, times, price, status会员套餐几条经验schedule 表一定要有 total_count 和 remain_count而不是每次统计预约条数。预约查询接口直接读 remain_count速度更快逻辑也更清晰。appointment 表要有 order_no 业务单号不要用自增主键给用户看也不要用 UUID 做主键自增主键只做内部关联对外展示用 order_no。医生和会员不要混用一张表。虽然都是“人”但属性差异太大拆开以后权限和业务会简单很多。管理员单独放一张 admin 表或者用 user 表的 role 字段区分。我个人建议如果不想多建一张表就在 member 表上加 role 字段但要注意接口鉴权。3.2 预约状态机待支付、已完成、取消与爽约预约单不是“约了就完事”它有一个完整的生命周期。你可以约定一组状态0 待支付下单成功但未付款1 已预约支付完成号源占用2 已完成就诊结束3 已取消用户取消或超时未支付取消4 已爽约就诊日结束后仍未到状态流转里必须注意两个点超时未支付要释放号源这个可以用定时任务每分钟扫一次也可以在下单时用延迟队列毕设用定时任务最简单取消预约要把号源 remain_count 加回去同时走退款流程。爽约则不能简单退款通常会扣一部分或者取消积分。这个状态机在代码里就一个 status 字段配合 create_time / pay_time / finish_time 等时间字段驱动不要用一堆布尔字段去存状态否则后面写统计 SQL 会很难受。3.3 会员等级、积分与价格快照的落地方式前面说“会员制不是加个 level 字段”这里具体落地。会员等级表里存 discount_rate比如普通会员 1.0、银卡 0.95、金卡 0.9。关键规则是订单里的价格必须是“下单那一刻”的价格快照。我见过很多同学只存一个 amount然后说“我这个单子打折了啊”结果会员等级一变历史订单金额全变。正确做法是在 appointment 表里冗余三列original_amount 原价、discount_rate 折扣、pay_amount 成交价。这三列在下单时一次性计算并保存之后不管会员等级怎么调整历史订单都不受影响。积分同理。下单时不直接加积分而是把“预计赠送积分”写入订单支付完成后写一条 points_log取消预约再扣回。这样积分流水才说得清答辩时可以理直气壮地说“我的积分是对账有依据的”。注意所有涉及金额和积分的地方优先用事务。预约扣号源、插入订单、扣减余额、写积分流水要么一起成功要么一起回滚。4. 最容易卡壳的几段代码号源扣减、下单事务与模拟支付4.1 号源扣减为什么不能用“先查询再更新”预约系统最常见的问题是超卖一共 10 个号第 11 个人也预约成功了。原因很简单如果代码是“先查询 remain_count0 再 update remain_count-1”两个并发请求同时读出 remain_count1就都会走到 update结果超卖。解决办法是用一条原子 SQL 扣减。MyBatis 里可以这样写Update(update schedule set remain_count remain_count - 1 where id #{scheduleId} and remain_count 0) int deductRemain(Param(scheduleId) Long scheduleId);这条 SQL 把“判断是否有号”和“扣减号源”合并成一次数据库原子操作。受影响行数返回 1 说明抢到了返回 0 说明号源不足业务层抛异常即可。4.2 一个标准的预约下单 Service 怎么组织下单是一个典型的“事务状态机”过程。参考伪代码Transactional(rollbackFor Exception.class) public AppointResult createAppointment(AppointRequest request) { Member member memberMapper.selectById(request.getMemberId()); Schedule schedule scheduleMapper.selectById(request.getScheduleId()); // 校验排班、时间、状态 if (schedule null || schedule.getRemainCount() 0) { throw new BizException(号源已约满); } int row scheduleMapper.deductRemain(schedule.getId()); if (row 0) { throw new BizException(号源不足请刷新重试); } // 计算价格快照并保存预约单 BigDecimal payAmount calcPayAmount(member, schedule); Appointment appointment buildAppointment(request, payAmount); appointmentMapper.insert(appointment); return new AppointResult(appointment.getId(), payAmount); }有三个细节容易被扣分Transactional 要写在 public 方法上且失败时必须抛出 RuntimeException。如果你在方法里 try-catch 把异常吞了事务不会回滚会出现“号源扣了订单没建”的脏数据。同类内部方法调用会导致事务失效。比如 A 方法调用同类 B 方法B 方法上的 Transactional 可能不生效最好把下单逻辑放到 Service 里Controller 只做参数校验。如果抽了公共方法不要用 this 调用要用注入的 Bean 调用事务代理才能生效。4.3 会员折扣、支付与积分的处理顺序下单时计算价格快照的要点是取 member 的当前等级找到 discount_rate然后乘原价。注意金额用 BigDecimal不能用 double/float否则金额看起来没问题但对账时全是误差。支付环节毕设里不建议接真实微信/支付宝个人主体没有签约通道而且评审往往也不希望你把真实支付接进来。标准做法是做一个“模拟支付”在支付页展示一个二维码图片点击按钮后走本地支付回调把订单状态从“待支付”改为“已预约”。积分返还的边界条件也要想清楚支付成功才送积分取消要扣回如果已经完成就诊并且积分已入账再取消的场景要么禁止取消要么做积分扣减。我在毕设里通常这样约定完成就诊后不允许用户取消只能申请管理员介入这样积分业务就闭环了。4.4 通知、缓存这些加分项什么时候加热词里出现了 WebSocket、Caffeine 这类关键词很多同学看到以后想要全加进去。我的建议是先跑通主流程再加加分项。Caffeine 很适合缓存三个场景科室列表、医生列表、会员等级配置。这些都是低频变化的数据每次查库没意义。代码上引入依赖后一条 Cacheable 注解就能搞定Cacheable(cacheNames deptList, key T(java.lang.String).valueOf(#root.method.name)) public ListDepartment listAll() { return departmentMapper.selectList(null); }WebSocket 不要无中生有。最合理的场景是“医生端实时看到新预约提醒”你可以在医生工作台页面建立 WebSocket 连接预约成功后通过服务端推送一条通知。这个功能演示起来很直观也属于很好的加分项。但如果你对 WebSocket 不熟宁可做一个简单的“预约成功 toast 提示”也不要因为 WebSocket 卡住整体进度。5. 四周开发计划、常见翻车点与答辩演示清单5.1 不带缓冲区的开发计划都是耍流氓我给带过的同学反复强调一个节奏前三周做出“能演示的主流程”最后一周做收尾美化。周次任务里程碑第1周需求确认、数据库建表、搭建项目骨架表建完项目可启动第2周排班、预约、支付、会员积分核心接口Postman 跑通主流程第3周管理端/医生端/会员端页面权限路由页面与接口联调通过第4周修 bug、补测试数据、录屏、PPT、答辩演练可完整演示很多同学死在第 2 周的“先去做登录注册界面”上。登录注册虽然是刚需但它不是你的业务亮点。烂大街的登录注册不会给你加分预约闭环才是。所以我建议把主流程开发放在前面界面美化放后面。5.2 毕设最容易翻车的六个点我列一下我见过频率最高的坑MySQL 连接串不对。URL 里没有加serverTimezoneAsia/ShanghaiuseSSLfalseJDBC 驱动报错或乱码。MyBatis-Plus 的 mapper 扫描路径没配。启动后报 mapper 找不到或 XML 里的 namespace 和接口对不上。前后端分离时跨域报错。前端跑 5173后端跑 8080没有配置 CorsFilter 或者 CrossOrigin。事务不生效。上面说过同类调用、异常被吞、非 public 方法都会让 Transactional 变摆设。表名撞保留字。比如 order、level、time 这种字段名尽量加反引号或改名不然 SQL 报语法错误。数据乱删。联调过程中直接 DELETE 数据库数据然后再跑主流程发现“数据怎么少了”建议准备一份 seed SQL随时可以恢复。除了技术坑还有一类是“时间坑”想着先配好 IDEA、配好 Maven、配好数据库结果一星期过去了项目还是空白。环境配置能跑就行遇到报错先搜不要反复折腾版本。5.3 答辩前按这张清单过一遍最后一步答辩演示和开题报告同样重要。演示脚本不要设计成“我点开每个表格给你看”而是按一条业务主线来注册新会员 - 选择科室医生 - 查看排班 - 预约 - 余额支付 - 医生端收到提醒并填写诊断 - 会员查看病历和积分变化。这条线能完整跑通比你把十几个页面都点一遍有说服力。高频答辩问题提前准备这五个为什么选 Spring Boot——自动配置、敏捷开发、生态成熟同一个医生的同一时刻会不会被约两次——原子扣减 SQL 事务讲一行代码会员等级变化后历史价格怎么保证——价格快照字段登录退出是怎么做的——JWT 校验和拦截器逻辑如果以后要加一个“短信提醒”怎么改——预留了消息表/通知模块扩展点在这里。PPT 里的架构图尽量自己画不要拿网图因为老师会顺着你的图往下问你画你不熟的内容等于给自己挖坑。最后说一点个人体会。这类医疗预约系统我带过不少学生做大家最容易丢分的地方反而不是代码而是“没形成一条完整故事线”。你只做了一堆 CRUD评委看不出你理解业务你把“预约、号源、支付、积分”这条链路讲透了哪怕前端朴素一点分数也不会低。如果你只记住一句话先跑通最小闭环再补功能再谈优化。毕设是拿来证明动手能力的主流程通了你就已经赢了。

相关新闻

团队协同与沟通能力好的6款一站式AI智能办公平台横向对比与选型指南

团队协同与沟通能力好的6款一站式AI智能办公平台横向对比与选型指南

需要团队协同与沟通能力都比较强的一站式 AI 智能办公平台,候选大致分五类:企业级基座、中小团队套件、政企安全协同、AI 轻办公与门户型 OA。本文按同一口径对比 6 款产品:快鹭办公、Worktile、360织语、蓝信、360纳米Work、万户软件&#x…

2026/10/11 7:07:38 阅读更多 →
Python爬虫实战:抓取广东省租房数据并存入SQLite

Python爬虫实战:抓取广东省租房数据并存入SQLite

1. 做这件事之前,先想清楚这几个问题我去年有一阵子想找个合适的住处,顺手查了广东省几个城市的租房行情,结果发现多数平台要么数据藏在交互式页面上,要么只给你看前10页,翻到最后也凑不齐一个像样的统计样本。后来我干…

2026/10/11 7:07:38 阅读更多 →
artcraft:一种可控的创意生产方法论

artcraft:一种可控的创意生产方法论

1. 项目概述:什么是“artcraft”?它不是艺术展,也不是手作市集,而是一套可落地的创意生产方法论“artcraft”这个词最近在设计圈、独立开发者社区和高校创意工坊里频繁出现,但它既不是某个新发布的软件,也不…

2026/10/11 7:06:37 阅读更多 →

最新新闻

从0到1搭建内容分发体系:2026自媒体矩阵运营全攻略

从0到1搭建内容分发体系:2026自媒体矩阵运营全攻略

流量逻辑已彻底更迭,单账号单打独斗的运营模式红利消退。当下多数自媒体创作者、中小品牌布局多账号矩阵时,普遍面临内容同质化、违规踩坑、数据难溯源、人力成本高、转化效率低等问题。专业的内容分发体系绝非简单一键转载内容,而是围绕用户…

2026/10/11 10:26:10 阅读更多 →
Eclipse Core:统一后端启动、配置与链路追踪的应用内核实践

Eclipse Core:统一后端启动、配置与链路追踪的应用内核实践

在项目组里待久了,你会发现很多系统最后不是死在业务上,而是死在基础层上。Eclipse Core 是我们团队内部研发的一套应用内核项目,代号就叫 Eclipse Core,它主要负责统一管理应用的启动引导、模块加载、配置拉取、事件分发和链路追…

2026/10/11 10:26:10 阅读更多 →
深度学习加速核心:GEMM优化从分块到TensorCore的实战解析

深度学习加速核心:GEMM优化从分块到TensorCore的实战解析

做深度学习部署这些年,我几乎每天都要和GEMM(通用矩阵乘法)打交道。刚开始写算子时,我以为把三層循环写对就算完事,直到用Profiler一看,才发现手写版连硬件峰值算力的5%都跑不到。后来我仔细研究了一个叫De…

2026/10/11 10:26:10 阅读更多 →
XPath Helper插件实战:从元素定位到Python爬虫提取的完整指南

XPath Helper插件实战:从元素定位到Python爬虫提取的完整指南

简介:xPath helper 是一款面向 Python 爬虫开发者与前端调试人员的 Chrome 浏览器插件,安装后可在页面中直接获取任意 HTML 元素的 XPath 路径,省去逐行翻阅源码、手动定位 id 与层级结构的繁琐过程,尤其适合刚接触网页解析、需要…

2026/10/11 10:26:10 阅读更多 →
DeepSeek部署实战:从选型、量化到调参与排障

DeepSeek部署实战:从选型、量化到调参与排障

简介:面向深度学习部署与运维人员的 DeepSeek 模型部署指南,以单个 docx 文档系统梳理模型落地全流程:从操作系统选型、CPU/GPU/内存配置、Python 与 CUDA/cuDNN 依赖安装,到官方代码与预训练模型获取、虚拟环境搭建,再…

2026/10/11 10:26:10 阅读更多 →
深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

简介:基于深度学习的文字识别系统完整项目包,面向毕业设计、课程设计与期末大作业场景,适合需要快速搭建OCR系统的计算机相关专业学生。项目采用CNN与RNN结合实现文字检测与识别,覆盖图像预处理、模型训练、后端接口与移动端展示全…

2026/10/11 10:25:10 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/10 10:38:42 阅读更多 →