SpringBoot+Vue疾病防控系统开发实战:从数据库设计到部署全流程
很多同学在拿到“基于SpringBootVue的疾病防控综合系统”这类题目时第一反应是到处搜源码、下模板结果要么代码老旧跑不起来要么结构混乱根本没法写进自己的文档。我在实际开发这个系统的过程中把需求分析、数据建模、接口设计、前端页面到最后的部署打包完整走了一遍踩了不少坑也沉淀了一些很实用的套路。这篇文章就把我当时的完整实施思路和关键代码细节整理出来覆盖Java、MySQL、MyBatis这几个核心环节特别适合准备做课程设计、毕业设计或者想快速上手前后端分离项目的人参考。这个项目本质上是一个典型的Java全栈管理系统解决的是疾控中心日常业务里的“上报、汇总、审核、预警”问题。技术人员可以拿它练手学习SpringBoot如何整合MyBatis、Vue如何对接接口、MySQL如何设计业务表非技术人员也可以拿它理解传染病防控业务流程是如何信息化的。我尽量把每一步选择背后的原因也讲清楚而不只是丢出一堆代码。1. 项目整体定位与技术选型思路1.1 这个系统解决的实际业务问题疾病防控综合管理系统从业务链条上看核心是“监测—上报—审核—分析—预警”这条闭环。基层医院发现传染病病例后要在规定时间内填报传染病报告卡疾控中心的工作人员需要审核、查重、统计、归档管理层则要实时查看辖区内的疫情趋势、疫苗库存、物资消耗等情况。所以在设计功能模块时我没有一上来就堆功能而是围绕这个业务链路拆出了五大块系统管理用户、角色、菜单、传染病报卡管理填报、审核、查重、疫苗接种管理记录、统计、物资管理入库、出库、库存预警、数据可视化看板。每一块都能独立成一个页面又都能在数据上串起来。这个业务模型的好处是它既有单表单的增删改查也有多表关联的复杂查询还有事务性的库存扣减操作正好能把Java后端开发的常见知识点都覆盖到非常适合作为一个学习型项目来练手。1.2 为什么选SpringBootVue而不是传统单体模板技术选型上很多人会纠结用不用微服务前端要不要前后端分离后端用SSM还是SpringBoot我的结论很明确单机版SpringBootVue是这个规模业务的最优解。先说后端。SSMSpringSpringMVCMyBatis在早期确实是主流但配置繁琐光一个spring-mvc.xml和mybatis-config.xml就能写一堆。SpringBoot把自动配置做到了极致内嵌了Tomcat一个spring-boot-starter-web依赖就能跑起Web项目。我们做单体应用根本不需要Eureka那一套注册中心也不需要OpenFeign远程调用SpringBoot足够支撑全部需求。再说前端。Vue组件化开发能让我们把报卡填写、表格展示、弹窗表单这些复用度高的部分提取成组件开发效率比传统的JSPJQuery高出很多。前后端分离的好处是接口和页面可以并行开发但代价是产生了跨域问题。跨域这个问题我在后面专门有一节讲怎么解决这里先提一句开发环境用Vite或Webpack的代理转发生产环境直接把前端打包后的dist目录扔进SpringBoot的static目录从源头规避跨域。很多教程没讲这一步导致很多人部署时一头雾水。1.3 项目结构目录设计我见过很多半途而废的项目最大的问题不是代码写不出来而是目录乱成一锅粥。为了让后续的扩展和维护不痛苦后端我用的是标准的分层架构com.example.disease ├── controller // 接口层只做参数接收和结果封装 ├── service // 业务层写核心业务逻辑 │ └── impl ├── mapper // MyBatis的Mapper接口 ├── entity // 数据库实体类 ├── dto // 前端数据传输对象 ├── vo // 视图对象比如统计结果 ├── config // 配置类如JWT拦截器、跨域配置 ├── utils // 工具类 └── common // 统一返回结果、异常处理、常量前端用Vue CLI创建结构如下src ├── api // 接口请求封装 ├── assets // 静态资源 ├── components // 公共组件 ├── router // 路由配置 ├── store // 状态管理 ├── views // 页面视图 ├── utils // 工具函数 └── App.vue这个目录结构看着简单但实际做下来你会发现它的分层界限非常清楚Controller里不写SQLMapper里不写业务判断Service里不写前端字段解析。这样即使后面换人接手也能快速定位问题。2. 数据库设计先把表结构想明白再动手2.1 核心数据表及字段设计数据库是整个系统的地基地基不稳后面写多少代码都是空中楼阁。我设计时主要围绕五个核心表用户表、传染病人报卡表、疫苗接种记录表、防控物资表、异常预警记录表。用户表sys_user设计时考虑到疾控系统的角色划分至少要有超级管理员、疾控中心工作人员、医院上报人员三种角色。我加了role字段来区分同时项目经理类的管理系统喜欢用中间表做角色权限但对于学习和中小型项目直接加一个role字段更简洁查询也更快。传染病报卡表disease_report是核心中的核心字段比较多我摘几个关键设计report_no报卡编号唯一索引用于查重。patient_name、patient_id_card患者姓名和身份证号查重的主要依据。disease_code、disease_name病种编码和名称。report_date填报日期做趋势统计的核心字段。report_status状态字段0待审核、1已通过、2已驳回、3已删除。region_code地区编码用于按区域统计。疫苗接种表vaccine_record包含疫苗名称、批号、接种日期、接种人、接种点等字段。这里我说一个比较隐蔽的问题很多新手把“接种疫苗的剂次”设计成布尔字段“是否接种”这是完全错误的。实际业务中乙肝疫苗要打三针每一针的批号都可能不同所以一定要用记录表而不是字段来存。物资表material_info和出入库记录表material_io是连在一起设计的。物资表只管当前库存总量出入库记录表则保存每一笔操作记录。这两个表通过material_id关联。2.2 索引设计加快查询速度的关键这个系统最频繁的操作是按照时间范围查报卡、按照区域统计病例数、按照用户ID查待办。所以索引设计上我重点考虑了三类唯一索引report_no必须有唯一索引这是查重机制的基础也能避免同一编号重复入库。组合索引disease_report表里(report_date, region_code)组合索引因为大多数统计报表都是“按日期按地区”两个条件一起查询。普通索引vaccine_record.batch_no经常被按批号追踪也加索引。这里我犯过一个错误前期为了省事在disease_report表里建了五六个单列索引结果插入数据时明显变慢。后来才明白MySQL对组合索引的支持要好得多(A, B)组合索引可以同时支持以A查和以AB查但两个独立索引往往只能用其中一个。2.3 MySQL表设计中容易被忽略的细节关于时间字段我强烈建议用datetime而不是timestamp。虽说两者都能存日期时间但timestamp有2038年问题而且会自动根据数据库时区做转换排查起来很麻烦。直接用datetime存MyBatis查出来就是LocalDateTime前端拿到之后格式化链路简单清晰。关于逻辑删除疾控系统的数据是要留痕的严禁物理删除。我在每张业务表都加了deleted字段默认值为0删除操作统一走UPDATE。这带来一个小麻烦MyBatis写SQL时每个查询都要记得加AND deleted 0我后期是通过MyBatis-Plus的逻辑删除注解解决的如果你手写SQL要特别留意。关于表前缀统一用sys_表示系统表、biz_表示业务表。这样数据库里表一多也不会乱Navicat里一眼就能区分模块。3. 后端核心实现认证、动态SQL与业务事务3.1 基于JWT的登录认证实现疾控系统的数据安全等级较高接口不能裸奔必须做登录认证。这里我选择用JWT而不是传统Session主要因为前后端分离后Session跨域处理麻烦而JWT本身是无状态的后端只负责签发和验签。我的实现思路是这样的用户登录成功后后端生成一个有效期2小时的Token然后把Token返回给前端前端保存在本地存储里每次请求都在请求头里带上Authorization: Bearer token。后端写一个JwtInterceptor拦截器统一校验Token校验不过直接返回401。Component public class JwtInterceptor implements HandlerInterceptor { Autowired private StringRedisTemplate redisTemplate; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 放行登录接口和静态资源 if (request.getRequestURI().contains(/login) || request.getRequestURI().startsWith(/static)) { return true; } String token request.getHeader(Authorization); if (token ! null token.startsWith(Bearer )) { token token.substring(7); try { // 使用JJWT库解析Token Claims claims Jwts.parser() .setSigningKey(secretKey) .parseClaimsJws(token) .getBody(); // 把用户ID放入request上下文供后续接口使用 request.setAttribute(userId, claims.get(userId)); return true; } catch (Exception e) { // Token过期或非法返回未授权状态 response.setStatus(401); response.setContentType(application/json); response.getWriter().write({\code\:401,\msg\:\登录状态已过期\}); return false; } } response.setStatus(401); return false; } }密码存储上我用了BCrypt加密没用MD5。原因很简单MD5是可逆查表的市面上有大量彩虹表防不住碰撞攻击。BCrypt则自带盐值同一个密码每次加密结果都不同安全性高一个量级。3.2 MyBatis动态SQL报卡查询的关键写法疾病防控系统的查询条件非常多变用户可能只选日期、可能只选地区、可能同时选病种加状态如果为每一种组合写一个SQL方法那代码会爆炸。MyBatis的动态SQL正好解决这个问题用where加if标签拼条件。我举一个筛分页查询的例子这个写法几乎是整个系统中最常用的select idselectReportPage resultTypecom.example.disease.vo.ReportVO SELECT id, report_no, patient_name, disease_name, report_date, report_status, region_name FROM disease_report where deleted 0 if testdiseaseCode ! null and diseaseCode ! AND disease_code #{diseaseCode} /if if testregionCode ! null and regionCode ! AND region_code #{regionCode} /if if teststartDate ! null AND report_date gt; #{startDate} /if if testendDate ! null AND report_date lt; #{endDate} /if if testreportStatus ! null AND report_status #{reportStatus} /if /where ORDER BY report_date DESC /select注意这里有两个小坑。第一是if判断空字符串MyBatis里! 判断的是Java字符串的空值如果前端传的是nullnull ! 结果是null这个条件会被跳过所以最好在Controller层统一做空处理。第二是XML里的和符号会被XML解析器当作标签开头必须用gt;和lt;转义。3.3 疫苗库存扣减事务和并发控制疫苗接种记录和物资出入库的核心难点在库存扣减。用户每录入一条接种记录对应物资表里的疫苗库存就要减一。这个操作必须在一个数据库事务里要么都成功要么都失败。我在MaterialService里写了这样一个扣减逻辑Transactional(rollbackFor Exception.class) public void deductStock(Long materialId, Integer count) { // 查询当前库存 MaterialInfo material materialMapper.selectById(materialId); if (material.getStock() count) { throw new BusinessException(库存不足当前库存 material.getStock()); } // 更新库存SQL中强制加入stock count条件防止并发超卖 int rows materialMapper.deductStock(materialId, count); if (rows 0) { throw new BusinessException(库存扣减失败请刷新后重试); } // 插入出库记录 MaterialIo ioRecord new MaterialIo(); ioRecord.setMaterialId(materialId); ioRecord.setChangeCount(-count); ioRecord.setOperateType(1); // 1表示出库 materialIoMapper.insert(ioRecord); }这里最关键的一步不是在Java里判断库存而是在SQL里把库存条件也带上UPDATE material_info SET stock stock - #{count} WHERE id #{materialId} AND stock #{count}如果两个请求同时进来都读到库存还剩50先执行的那条会把库存改成49后执行的那条因为stock #{count}不满足影响行数就是0从而避免超卖。这是比加同步锁更优雅的解决方式因为它利用了数据库行锁本身的原子性。3.4 自动预警逻辑的落地预警是这个系统的特色功能。我的实现方案是建一张预警规则表配置病种和阈值比如“某地区某病种近七天内上报数超过5条则触发预警”。用一个定时任务每天跑一次检查Scheduled(cron 0 30 1 * * ?) public void checkWarningRules() { ListWarningRule rules warningRuleMapper.selectActiveRules(); for (WarningRule rule : rules) { // 统计近N天的上报数量 Integer count reportMapper.countByRegionAndDisease( rule.getRegionCode(), rule.getDiseaseCode(), rule.getDays()); if (count rule.getThreshold()) { // 插入预警记录并推送站内消息 warningRecordMapper.insert(buildWarningRecord(rule, count)); messageService.send(rule.getRegionUserId(), 触发预警 rule.getDiseaseName()); } } }定时任务记得在启动类上加EnableScheduling注解这个也很容易漏。预测数值类型的比较我用的是Integer而非int因为如果数据库查询结果是null拆箱会直接报空指针异常用包装类更安全。4. Vue前端实现与前后端部署细节4.1 工程搭建与路由权限控制前端我用的Vue2生态加上Element UI组件库因为这套组合的文档最全遇到问题能搜到的案例也最多。实测下来Element UI内置的表格、表单校验、弹窗、日期选择器几乎不需要二次封装开发速度非常快。路由层面不只是配几个路径这么简单关键是配合登录状态做页面拦截。我用路由守卫实现每次跳转前检查本地存储是否有token没有就强制跳到登录页。router.beforeEach((to, from, next) { const token localStorage.getItem(token) if (!token to.path ! /login) { next(/login) } else if (token to.path /login) { next(/) } else { next() } })axios请求封装上我做了一个请求拦截器把Token统一加到请求头上同时响应拦截器里统一处理401和500service.interceptors.response.use( (response) { const res response.data if (res.code 401) { localStorage.removeItem(token) router.push(/login) } return res }, (error) { Message.error(error.message || 系统异常) return Promise.reject(error) } )4.2 核心页面与可视化统计实现项目里最复杂的页面是“传染病报卡填报”一个表单有将近二十个字段。直接写在一个dialog里会非常长也不利于用户操作。我采用Element UI的分步骤表单分成“患者信息”“疾病信息”“报告信息”三步每一步做独立的表单校验。报表统计页使用了ECharts图表组件。我按期初需求做了一个折线图展示近30天上报趋势一个柱状图展示各类病种上报排行。注意ECharts在Vue里并不是单独引入而是封装成一个组件通过props接收图表配置这样多个页面可以复用同一个图表组件。ECharts有个很常见的坑在弹窗或隐藏的标签页里初始化图表宽度会变成0。解决办法是在图表容器显示后再调用myChart.resize()。我在标签页切换的钩子里做了强制刷新。4.3 打包部署前端打进SpringBoot里开发环境需要处理跨域所以我在vue.config.js里配置了代理devServer: { proxy: { /api: { target: http://localhost:8080, changeOrigin: true } } }工程完成后跑npm run build会把前端文件生成到dist目录。我操作时发现很多人直接把dist单独部署到Nginx这当然可以但在单机部署的场景下更简单的办法是把dist目录下的全部文件拷贝到SpringBoot项目的src/main/resources/static目录下重启后端服务直接访问http://localhost:8080就能看到页面。这个方案之所以能成立是因为SpringBoot默认把static目录作为静态资源根目录接口和页面同源彻底避免了跨域。但有个容易踩的坑前端路由用的history模式如果直接访问/report这类子路径后端没有对应接口会404。解决办法是后端加一个转发配置把所有非/api开头的路径都转发到index.htmlConfiguration public class WebMvcConfig implements WebMvcConfigurer { Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController(/{path:[^\\.]*}).setViewName(forward:/index.html); } }5. 常见问题与排查技巧实录5.1 运行环境异常速查表我把实际运行中遇到的高频问题整理成了一个速查表照着这个表排查效率很高现象根本原因解决方案启动时报Access denied for userMySQL账号密码或权限配置错误检查application.yml中数据库地址、用户名、密码用Navicat连一下确认接口返回NULL但数据库有数据MyBatis驼峰映射未开启在yml中设置map-underscore-to-camel-case: true上传报卡后中文乱码数据库连接未指定UTF-8字符集在JDBC URL上加characterEncodingutf8端口被占用8080端口被其他进程占用换端口或netstat -ano找到进程并处理页面404且控制台没报错前端history模式未配置转发加WebMvcConfig转发到index.html时间查出来相差8小时MySQL时区和Java时区不一致JDBC URL加serverTimezoneAsia/Shanghai5.2 MyBatis调试打印SQL配置MyBatis排查问题时看不到SQL是很痛苦的。项目初期我经常写出逻辑完美的XML但数据就是不对后来才发现是参数传入有误。所以强烈建议在开发环境打印SQL日志mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl配置这行之后控制台会完整打印每个Mapper执行的SQL语句和参数值。这时候一眼就能看出是where条件少了还是参数类型错了。注意线上环境把日志级别调成WARN否则日志会非常多。5.3 关于后期维护的一点心得系统做完后最容易被忽略的是数据库的定时备份。疾控系统的数据是核心资产我在服务器上用crontab每天凌晨两点做一次全量备份保存最近7天的备份文件。这条不是我一开始就做的是吃了一次数据被误删的亏之后才补上的。另外版本管理一定用Git而且从项目第一天开始就提交不要等全部写完再一次性提交。我见过太多同学写了两个月一份备份都没有一旦代码丢失就前功尽弃。每次功能完成就commit配上清晰的信息哪怕改坏了也能回滚。这套系统做到最后其实已经从单纯的“作业”变成了一个能运行的业务工具。如果后续想扩展可以接入消息推送、升级成前后端分离加Nginx部署、引入Redis做缓存加速报表查询。但无论怎么扩展SpringBootMyBatisVue这套地基是稳稳够用的把地基打好上面盖什么样的楼都不慌。

相关新闻

MiniMax M Plan 额度迁移与 Claude Code、Cursor 免密接入实战

MiniMax M Plan 额度迁移与 Claude Code、Cursor 免密接入实战

1. 从 Token Plan 到 M Plan:这次额度体系到底改了什么如果你最近一直在用 MiniMax 的 API 做开发,大概率已经注意到一个明显的变化:过去那套按 Token 单独计费、按模态分别扣额度的逻辑,正在被一套更统一的东西取代。这就是 M Pl…

2026/10/7 12:33:33 阅读更多 →
MATLAB调试全指南:从报错定位到性能优化

MATLAB调试全指南:从报错定位到性能优化

你盯着屏幕上的红色报错,程序跑了二十分钟断在这一行,旁边同事还等着你出结果。这种时刻,MATLAB调试的水平就决定了你是卡在错误信息前不知所措,还是花三分钟定位问题、五分钟修完收工。这篇内容我把这些年跟MATLAB错误打交道攒下…

2026/10/7 12:33:33 阅读更多 →
刀开关矩阵结构设计详解:从多路切换到可靠隔离

刀开关矩阵结构设计详解:从多路切换到可靠隔离

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

2026/10/7 12:33:33 阅读更多 →

最新新闻

Agent-Reach:一类轻量级CLI工具的设计与实现

Agent-Reach:一类轻量级CLI工具的设计与实现

1. Agent-Reach 是什么:一个被误读的 CLI 工具命名陷阱“Agent-Reach”这个名称在当前技术社区里,正经历一场典型的语义漂移——它既不是某个广为人知的开源项目主仓库名,也不是主流模型厂商发布的官方 SDK 名称,更不是 PyPI 上注…

2026/10/7 13:05:08 阅读更多 →
Java多人联机飞机游戏:服务端权威模型与网络同步实战

Java多人联机飞机游戏:服务端权威模型与网络同步实战

简介:基于JAVA语言开发的多人联机飞机游戏客户端与服务器端设计源码包,面向Java游戏开发学习者和网络编程爱好者,帮助理解多人实时交互游戏的客户端/服务器架构与实现流程。项目包含客户端与服务器端两部分,客户端负责界面渲染、用…

2026/10/7 13:05:08 阅读更多 →
GroupMamba实战:分组状态空间模型在图像分类中的高效训练与部署

GroupMamba实战:分组状态空间模型在图像分类中的高效训练与部署

简介:这套面向图像分类与状态空间模型实战的资源包,以GroupMamba为核心,旨在为计算机视觉算法工程师和研究者提供一套可参考的工程实现,缓解SSM扩展到视觉任务时常见的大模型不稳定、显存效率低等问题。压缩包内共两千个文件&…

2026/10/7 13:05:08 阅读更多 →
ABAP CDS Association 实战,从 Travel 与 Customer 关系建模到路径导航

ABAP CDS Association 实战,从 Travel 与 Customer 关系建模到路径导航

在 ABAP CDS 数据模型里看到 _Customer、_SalesOrder、_Supplier、_Product 这类以下划线开头的名称时,背后通常不是普通字段,而是一条 Association。 很多刚接触 CDS 的开发人员会把 Association 理解成一种写法更漂亮的 SQL Join。这样的理解只能解释一部分现象,却很难解…

2026/10/7 13:05:08 阅读更多 →
MOS管好坏判断的五大物理本质诀窍

MOS管好坏判断的五大物理本质诀窍

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

2026/10/7 13:05:08 阅读更多 →
GEO实战:让AI在同城搜索中主动推荐你的本地生意

GEO实战:让AI在同城搜索中主动推荐你的本地生意

1. 同城流量新入口:AI回答里的那个"推荐位"正在决定生意去留在洛阳做本地品牌推广这几年,我遇到最明显的一个变化是:客户开口问的东西不一样了。以前上来就问抖音怎么投、百度排名怎么上,现在越来越多的老板会拿着手机问…

2026/10/7 13:04:07 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 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/6 8:21:32 阅读更多 →
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/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练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/6 1:18:13 阅读更多 →