基于SpringBoot的船舶维保管理系统设计与实践
船舶维保管理系统这个题目这几年在毕业设计里出现频率相当高。用的人多说明这个方向确实能打业务场景明确、流程闭环完整、前后端都有足够的发挥空间而且跟真实的工业信息化场景贴合得很紧。我前后帮朋友公司搭过类似的船队维保工具也带过几位同学做过这个方向今天就把这套基于SpringBoot的船舶维保管理系统从设计思路到落地实现连同踩过的坑一起整理出来。这套系统到底解决什么问题简单说船舶不是开出去就完事的主机、舵机、压载系统、消防设备都有严格的保养周期跑船的人都清楚漏一次保养或者保养记录缺失轻则设备故障重则审核过不了。传统做法是纸质台账加Excel记录散、查询慢、没人提醒。维保管理系统就是把“什么时候该保养、保养了什么、用的什么备件、花了多少钱”全流程管起来。基于SpringBoot来做是因为这个项目天然适合这套技术栈单体应用加Vue前端加MySQL数据库就能完整落地不绕弯路。适合谁来参考做毕业设计的同学这个题目从难度、完整度、答辩可讲性三个维度看都是性价比很高的选择如果你在船舶或海事相关行业做信息化这套模块拆解思路也可以直接套到实际项目里。1. 项目整体设计与思路拆解1.1 为什么选SpringBoot而不是SSH或SSM先说结论对于船舶维保管理系统这种典型的业务管理系统SpringBoot就是对的选择没有之一。早些年做这类项目主流方案是SSHStruts2SpringHibernate或者SSMSpringSpringMVCMyBatis。这两个组合的问题在于配置太繁琐光一个Spring的XML配置文件就能写几百行而且各个版本之间的兼容性经常让人抓狂。我记得以前帮人调一个SSH项目光处理Struts2和Spring的插件冲突就花了两天那还是在有网络可以查资料的情况下。SpringBoot的核心价值在于“约定大于配置”。它把Tomcat内嵌进来把常用的第三方框架通过Starter自动装配开发者只需要关注业务代码。对于毕业设计这种时间紧、任务重的场景省下来的配置时间可以全部投入到业务逻辑上。而且SpringBoot的生态系统非常成熟整合MyBatis-Plus、Shiro、Redis、EasyPOI这些常用组件都只需要加依赖和写少量配置。还有一个现实因素网上关于SpringBoot的学习资料和现成代码量非常大遇到问题基本都能查到解决方案。这对独立做项目的同学来说是隐形的保障。不要觉得“用的人多”是缺点对于要交付结果的场景成熟稳定比标新立异重要得多。1.2 功能模块划分与业务流程闭环船舶维保管理系统核心是“维保”两个字但它的业务范围不只是“修东西”那么简单。一个完整可用的系统至少包含以下模块船舶档案管理维护船队信息、船舶基本参数、设备清单。维保计划管理按设备类型、保养周期制定年度/月度保养计划。维修工单管理计划到期自动生成或手动创建工作单走审批、执行、验收流程。备品备件管理登记备件库存领用出库记录低库存预警。统计分析报表按船舶、按月份统计维保完成率、费用支出。系统管理用户管理、角色权限、操作日志。这些模块不是孤立存在的它们串成了一条业务闭环设备档案是基础数据维保计划依据设备保养周期生成计划到期触发工单工单执行时领用备件领用记录回写库存最终工单数据和备件消耗数据汇总到报表模块。这个闭环设计听起来简单但在实际做系统的时候很多人的误区是把各个模块做成独立的功能堆砌没有在数据流上打通导致做出来的系统只是一个“表单录入工具”。在数据库设计阶段就要把这个闭环用外键关系和数据流固定下来。比如工单表和备件领用表之间的关联工单状态和计划状态的联动都要提前想清楚。我见过不少半途而废的项目问题就出在刚开始建表时没有考虑模块间的关系后面越写越乱。1.3 角色权限设计的细节船舶维保系统涉及的工种和职责差异很大权限设计不能只做“管理员”和“普通用户”两个角色就完事。按照实际业务一般需要这样划分管理员系统配置、用户管理、数据维护拥有全部权限。 机务主管审批维保计划、查看统计报表、管理备件采购。 船舶轮机长制定本船保养计划、上报维修需求、验收维修结果。 维修工程师接收工单、填写维修记录、申请备件领用。 普通船员查看本船维保记录、提交问题反馈。权限控制的粒度上建议做两层菜单级权限加按钮级权限。菜单级控制“能不能看到这个功能入口”按钮级控制“能不能执行这个操作”。比如普通船员可以看到工单列表但没有审批按钮轮机长可以看到备件库存但不能修改库存数据。实现上用Spring Security加JWT做认证授权配合拦截器做接口级别的权限校验。数据权限层面因为船舶维保涉及多家船舶可能需要限制“看不到别的船的数据”简单做法是在查询的时候强制加上船舶ID的条件不要依赖前端传参。2. 核心功能模块设计与数据建模2.1 船舶档案模块的字段设计思路船舶档案是整个系统的数据基石字段设计不好后面所有模块都会跟着受影响。这里说的字段不只是简单的“船名、吨位”而是要结合维保业务的实际需求来设计。我的建议是分两张表来建。一张是船舶主表存固定信息船名、IMO编号、船舶类型、总吨位、建造年份、船籍港、主机型号、主机功率。另一张是设备清单表因为一艘船的维保对象是具体的设备不是整艘船。设备表要有自关联的层级结构比如“主机系统”下面挂“主机”、“增压器”、“冷却系统”这些子设备每个设备设置自己的保养周期。保养周期的定义要区分两种模式按运行小时和按日历时间。主机保养通常看运行小时比如每运转1000小时换一次滑油救生设备检查按日历时间比如每月检查一次救生筏压力。这个字段在设备表里要用一个“周期类型”字段区分后续维保计划模块要靠它来计算到期时间。这里有一个实际开发中很容易忽略的点设备的基础信息尽量做到标准化枚举。比如船舶类型、设备类型、保养级别这些字段不要直接存字符串用字典表维护。一是避免同一设备在不同记录里叫法不统一二是后续做筛选统计的时候不会乱。2.2 维保计划与到期提醒机制维保计划模块是整个系统的“引擎”没有它其他模块就是死的。计划的生成方式有两种分别对应不同的业务需求。第一种是自动生成系统每天通过定时任务扫描所有设备根据最近一次保养时间和保养周期自动计算出到期设备生成待确认的保养计划。比如某台辅机是每500小时保一次当前运行小时数已达480小时系统提前预警生成“即将到期”的计划项。第二种是手动创建人工录入突发性维修需求比如某台设备出现异响需要检修或者船检提出整改要求手动创建工单并指派到具体人员。到期提醒的落地方式除了系统内的待办列表还可以考虑接入消息通知。实际做的时候最省事的是邮件加站内信短信或微信通知需要额外对接服务商在毕业设计里性价比不高。提醒规则也可以做得细腻一点提前7天发“即将到期”提醒到期当天发“已逾期”警告逾期超过3天升级通知到机务主管。这个逻辑用定时任务加几张状态判断就能实现不难。2.3 维修工单的状态机流转工单模块最忌讳的是状态混乱——同一张工单在数据库里同时出现多个合理状态或者状态跳转没有约束。所以从一开始就要把状态机定义清楚。我设计的工单状态链是这样的待审批 → 待执行 → 执行中 → 待验收 → 已完成另有分支状态已驳回、已取消、已挂起。状态流转的规则是待审批可以由审批人驳回或通过待执行可以由调度人指派或取消执行中只能由维修人员标记完成待验收由验收人确认通过或退回。在代码层面我的做法是写一个状态流转校验工具类每次更新状态时先校验当前状态是否允许跳转到目标状态不允许就直接抛异常。不要只在前端控制按钮显示后端接口也要做同样的校验。这点太重要了因为前端只是用户体验的一部分真正保证数据安全的是后端逻辑。还要注意工单的时间字段设计。创建时间、计划开始时间、计划完成时间、实际开始时间、实际完成时间都要分开存因为统计报表里会用到这些数据来计算维修及时率和平均维修时长。很多同学图省事只存一个创建时间后面做报表的时候才发现数据不够用回头补字段很痛苦。2.4 备品备件库存管理的关键点备件模块在评审老师眼里是一个加分项因为它在普通的增删改查之上引入了一点业务逻辑的复杂性。备件出入库的核心是两张流水表入库流水和出库流水。库存数量不是直接存一个“当前库存”字段反复修改而是通过出库入库流水动态计算。这样做的好处是每一笔变动都有记录可以追溯而且报表模块里的“备件消耗趋势”就是从流水表里统计出来的。备件领用和维修工单要关联。工单执行过程中维修人员选择“申请领用备件”系统校验库存充足后锁定预占后续核销。如果工单取消了预占的库存要回滚。这个逻辑如果不想做得太复杂可以简化为领用备件时直接把库存减掉工单取消时做退库操作。但要在界面和需求文档里明确这一层逻辑。库存预警阈值可以设置在每个备件上比如某个型号的滑油过滤器库存低于5个就预警。定时任务扫描低库存备件生成采购建议单采购完成后关联入库单。这部分虽然业务逻辑不难但在毕业设计里的“完整性”价值很高。3. 实操过程与核心环节实现3.1 开发环境选型与版本搭配先给出我推荐的版本组合这些都是我实际验证过能稳定跑起来的搭配JDK 8、SpringBoot 2.7.x、MyBatis-Plus 3.5.x、MySQL 5.7、Spring Security 5.7、JWT 0.9.x、Vue 2.x前端或直接使用Thymeleaf模板。这里特别提醒一下SpringBoot版本的问题。现在访问Spring官网默认推荐的是SpringBoot 3.x版本要求JDK 17起步。很多同学直接下载了最新的3.x版本结果项目跑不起来原因通常是MyBatis-Plus还没有完全适配、某些旧版本的依赖不兼容。如果你是在做毕业设计或者生产项目最稳妥的做法是选择SpringBoot 2.7.18作为最后的2.x版本搭配JDK 8这个组合的资料最多、踩坑经验也最丰富。前端方面我建议如果你的重点是后端不要花太多时间折腾复杂的Vue全家桶加Element-Plus加Vite。用Vue 2加Axios加一个现成的后台模板就够了把精力集中在业务逻辑和数据库设计上。如果非要上Vue 3也可以但要注意和SpringBoot的数据交互格式一致性特别是日期格式和JSON序列化的问题。3.2 基于MyBatis-Plus的数据访问层实现MyBatis-Plus是这个项目里提升开发效率最大的功臣它把单表CRUD的代码量减少到几乎为零让你把时间花在真正复杂的业务逻辑上。核心就三步实体类加注解、Mapper继承BaseMapper、Service继承IService。实体类设计有一个值得注意的规范数据库表字段用下划线命名如ship_name实体类属性用驼峰命名shipName并且开启MyBatis-Plus的驼峰映射。这样自动映射的时候不用写一大堆TableField注解。条件构造器是MyBatis-Plus的精华。比如实现“查询某个船舶下所有待审批的工单”可以这样写LambdaQueryWrapperWorkOrder wrapper new LambdaQueryWrapper(); wrapper.eq(WorkOrder::getShipId, shipId) .eq(WorkOrder::getStatus, OrderStatus.PENDING_APPROVAL); ListWorkOrder list workOrderMapper.selectList(wrapper);LambdaQueryWrapper的好处是编译期就能检查字段名是否正确不会出现手写字符串拼错的情况。对于复杂的多表联查再写XML里的自定义SQL。记住一个原则简单查询用Wrapper复杂统计用SQL不要为了用Wrapper把复杂的关联查询拆成一堆单表查询再在内存里组装那样性能和可读性都差。3.3 Spring Security加JWT实现登录鉴权认证授权这块我的建议是不要用Shiro直接上Spring Security加JWT。虽然Spring Security的学习曲线比Shiro略陡但它和SpringBoot的契合度更高而且后续如果需要接入OAuth2之类的协议扩展性也更好。核心实现流程是这样的用户通过登录接口提交用户名密码后端校验成功后生成JWT Token返回前端。前端在后续请求的Header里带上Token。后端用一个拦截器拦截所有除登录和放行接口外的请求取出Token进行校验。校验通过后从Token中解析出用户信息和角色权限存入当前请求上下文。在Spring Security的配置类里定义哪些接口需要什么角色才能访问比如工单审批接口需要机务主管权限备件入库接口需要管理员权限。一个容易踩的坑是Spring Security的过滤器链配置不对导致静态资源或者登录接口被拦截。解决办法是在配置类里用permitAll方法显式放行登录接口、静态资源路径和Swagger文档路径。密码存储一定不要明文用BCryptPasswordEncoder加密。这个类Spring Security自带加密切入成本很低但很多同学图省事跳过了。在答辩或者实际项目评审时密码明文存储是一个很严重的扣分项安全评分直接拉低得不偿失。3.4 定时任务与到期提醒的落地定时任务用的是SpringBoot内置的Scheduled加EnableScheduling开启调度支持。这个方案足够应对毕业设计和中小型项目的需求不需要引入Quartz或者XXL-Job那种重量级框架。实现上我把定时任务分成三个独立的任务类避免把所有逻辑塞在一个方法里每日凌晨执行设备保养计划扫描生成未来30天内到期的保养计划项。每小时执行一次到期提醒检查调用消息服务发送通知。每天检查一次备件库存生成低库存预警记录。需要注意的事项有两条一是Scheduled默认是单线程串行执行的如果你的任务之间有依赖或者多个任务耗时较长要配置线程池否则会出现任务互相阻塞的情况。二是定时任务里的时间获取要用系统当前时间不要缓存时间变量以免部署服务器时区不同导致任务执行时间错乱。在实际项目中我踩过一次这样的坑一台服务器的时间比标准时间快了5分钟导致所有的保养提醒都提前了5分钟。虽然影响不大但用户会困惑。解决办法是在配置类里统一时区并在服务器上配置时间同步。3.5 报表导出与数据可视化报表模块是展示系统价值的窗口这一块做好了答辩时的效果和实际使用中的好感度都会提升一大截。数据统计这块我的建议是不要用复杂的SQL去做很花哨的统计先把几个最核心的指标做扎实维保计划完成率、工单及时完成率、各船维修费用占比、备件月度消耗趋势。这些指标都是用户最关心的实现了就足够体现系统的实用性。Excel导出用EasyPOI或者阿里开源的EasyExcel都支持自定义样式和复杂表头。以EasyExcel为例核心代码其实很少ListMaintenanceReportVO dataList maintenanceService.getMonthlyReport(year, month); String fileName URLEncoder.encode(月度维保统计, UTF-8) .xlsx; response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet); response.setHeader(Content-Disposition, attachment;filename fileName); EasyExcel.write(response.getOutputStream(), MaintenanceReportVO.class) .sheet(月度统计) .doWrite(dataList);导出的数据量一般几百条直接用同步导出就行。但要注意如果后面数据量大了导出操作要改成异步生成先把文件生成到服务器再用链接供用户下载避免长时间占用HTTP连接。前端图表我用的是ECharts它支持Vue组件封装图表类型丰富维保完成率用饼图费用趋势用折线图维修类型分布用柱状图基本覆盖了需求。4. 常见问题与排查技巧实录4.1 SpringBoot版本太高导致的兼容性问题这个问题在最近的项目里遇到了不止一次专门拿出来说一下。新同学去Spring官网下载项目默认拿到的是3.x甚至3.2以上的版本随之而来的是一连串适配问题MyBatis-Plus官方虽然已经支持SpringBoot 3但你需要用3.5.3以上的版本如果你的代码拷贝自网上旧版本教程很可能因为依赖冲突直接启动失败。Druid连接池也存在类似情况旧版本在SpringBoot 3下会报NoClassDefFoundError。此外SpringBoot 3用的是Jakarta命名空间原来javax.servlet下的类全部换了包名如果你引用了旧封装的工具类各种类找不到。我的建议很明确如果用SpringBoot 2.7.18加JDK 8上面所有问题都不存在网上的教程和代码几乎全部通用。除非你的项目有特殊的JDK 17需求否则没有必要为了“用新版”而给自己增加排查成本毕业设计求稳比求新重要得多。4.2 事务注解失效的两个场景Transactional用起来很简单但失效的场景防不胜防。最常见的两种失效情况我都在项目里实际遇到过。第一种是内部方法自调用。Spring的事务管理基于代理机制当你在一个Service方法里直接调用同类中的另一个带Transactional的方法它走的是this引用绕过了代理事务注解完全不会生效。比如你在saveMaintenance方法里调用了this.updateStock()后者就算标了事务注解也不起作用。解决办法是用ApplicationContext获取代理对象再调用或者把需要事务的方法拆到另一个Service类里。第二种是异常被吞掉。Spring默认只在RuntimeException和Error类型异常时回滚事务如果是受检异常比如IOException、SQLException事务不会回滚。你如果在Service方法里捕获了异常并且没有重新抛出那么整个事务看起来“执行成功”但数据库里的部分操作已经提交数据就处于半完成状态。我的习惯是调Service方法时不捕获异常让事务管理器统一处理捕获异常的边界放在Controller层。4.3 LocalDateTime与前端交互的格式统一实体类用LocalDateTime替代Date是大趋势但它和前端交互时有个常见的坑默认序列化出来的格式是“2024-05-26T14:30:00”而前端表格和表单通常需要“2024-05-26 14:30:00”这种格式不统一就会导致显示异常。解决办法是在项目的统一配置里加一个Jackson的自定义序列化配置Bean public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() { return builder - { builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer( DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss))); builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer( DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss))); }; }设置之后整个项目的LocalDateTime对象在返回前端时都统一成“yyyy-MM-dd HH:mm:ss”接收前端参数时也能解析这个格式。避免在几十个实体类上逐个写JsonFormat注解全局配置一劳永逸。4.4 定时任务重复执行的问题在单机部署时定时任务一般不会重复执行。但如果你把系统部署到了多个实例上做负载均衡或者你本地连着开发库同时开启了两套服务定时任务就会在多个实例上同时执行导致重复生成保养计划、重复发送提醒消息。我做过的处理方案有两种。如果你不想引入额外的中间件最简单的方法是建一张任务执行记录表每次执行任务前往表里插入一条带任务类型和业务日期的记录利用唯一索引保证同一天同一任务只能插入一次插入成功的那个实例才执行任务逻辑。另一个方案是用Redis的分布式锁但考虑到毕业设计项目的复杂度一张唯一索引表完全够用还不用额外依赖。当然如果你觉得这样不够“高级”也可以用ShedLock这个轻量级调度锁框架接入成本也不高。4.5 数据库连接池连接耗尽这个问题在长时间跑着的项目中容易出现症状就是系统一开始正常过一段时间接口变慢然后报出“HikariPool-1 - Connection is not available, request timed out”这类错误。原因大多是连接没释放。排查时重点看几个地方自查代码中的所有数据库操作是否用在了有事务包裹的方法里因为有事务时连接会被事务管理器持有到事务结束如果事务方法里做了耗时的外部接口调用或者大幅度的循环操作一个连接会占用很久。自查流式查询是否正确关闭MyBatis的Cursor等资源用完后要释放。再检查配置的连接池最大大小是否合适HikariCP默认最大池大小是10如果项目并发不高这个值没问题但如果定时任务和报表导出同时跑可能不够用。最直接有效的排查手段是打开HikariCP的日志配置观察连接池活跃数变化。如果发现活跃数涨上去就不降下来基本可以判断是代码里存在连接泄漏逐段定位代码去修。不建议盲目调大连接池最大数量这只是掩盖问题而不是解决问题。最后再分享一个做这类管理系统的小技巧抽出一张操作日志表用AOP记录用户的关键操作比如创建工单、审批通过、备件入库时间戳和操作人、操作内容都记录下来。这个功能实现成本很低但对项目的完整性和答辩效果提升很大也是实际系统运维时经常需要回溯的依据。做好这个细节你在项目展示时讲出的“业务流程闭环”才真正站得住脚。

相关新闻

写Prompt总翻车?把任务、对象、依据、交付说清楚

写Prompt总翻车?把任务、对象、依据、交付说清楚

搭 AI 对话工具到现在,我前前后后写了不下几百条 prompt,从最开始只会丢一句"帮我写个文案",到后来能稳定产出我要的东西,中间踩过的坑真的能写一本小册子。今天不聊那些花里胡哨的"万能公式",就聊…

2026/10/9 4:14:37 阅读更多 →
9点标定+Halcon+C#:产线视觉引导链路实战拆解

9点标定+Halcon+C#:产线视觉引导链路实战拆解

简介:本资源面向工业机器人与机器视觉方向的开发者,提供一套完整的9点标定Halcon程序及C#联合Halcon的源码实现,可用于机器人手眼标定、相机坐标与机器人坐标映射等实际项目场景。包内共577个文件,以385个ico图标、73个ssk皮肤资源…

2026/10/9 4:13:37 阅读更多 →
SpringBoot+Vue前后端分离婚庆伴娘伴郎预约系统设计与实现

SpringBoot+Vue前后端分离婚庆伴娘伴郎预约系统设计与实现

1. 项目概述:这是一个什么样的系统先把这个项目的定位说清楚。市面上提到"婚庆服务",大部分人的第一反应是婚纱摄影、婚宴酒店、司仪跟妆,但"伴娘伴郎"这一环长期处于非常尴尬的位置——新人需要找靠谱的伴娘伴郎&#x…

2026/10/9 4:13:37 阅读更多 →

最新新闻

LRE框架:重构AI智能体的时间感知与因果记忆机制

LRE框架:重构AI智能体的时间感知与因果记忆机制

1. 这不是“给AI加个备忘录”,而是重构智能体的时间感知能力很多人第一次看到“AI智能体记忆管理”这个词,下意识会想:不就是让大模型多存点上下文、加个向量数据库当外挂硬盘吗?我试过——在某个模拟项目X里,给一个任…

2026/10/9 4:48:03 阅读更多 →
10分钟上手 douyin-downloader:抖音批量下载与无水印提取完整指南

10分钟上手 douyin-downloader:抖音批量下载与无水印提取完整指南

10分钟上手 douyin-downloader:抖音批量下载与无水印提取完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fal…

2026/10/9 4:48:03 阅读更多 →
answer-me-with-html 完整参考指南:从 Markdown 稿件格式到代码块、自定义主题与 STE 写作检查

answer-me-with-html 完整参考指南:从 Markdown 稿件格式到代码块、自定义主题与 STE 写作检查

【免费下载链接】answer-me-with-html Answer me with HTML — an agent skill that answers hard questions with a one-page HTML you can actually read. 让 AI Agent 用一页 HTML 回答复杂问题。 项目地址: https://gitcode.com/gh_mirrors/an/answer-me-with-h…

2026/10/9 4:48:03 阅读更多 →
ponytail插件使用指南:skill模块配置与效率提升实践

ponytail插件使用指南:skill模块配置与效率提升实践

1. 从“ponytail”这个标题说起:它到底是什么第一次看到“ponytail”这个词,大多数人脑子里蹦出来的画面是扎在脑后的那束马尾辫。但如果它出现在技术社区、插件市场或者效率工具的讨论里,那它大概率不是发型教程,而是一个被开发者…

2026/10/9 4:48:03 阅读更多 →
Java电商系统实战:JSP+JavaBean+SQL Server全链路可运行方案

Java电商系统实战:JSP+JavaBean+SQL Server全链路可运行方案

/* 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 4:48:03 阅读更多 →
HermesWorkspace Playground 可选 3D NPC 模型替换指南:基于 GLB 的 Voxel 身体升级方案

HermesWorkspace Playground 可选 3D NPC 模型替换指南:基于 GLB 的 Voxel 身体升级方案

【免费下载链接】hermes-workspace Native web workspace for Hermes Agent — chat, terminal, memory, skills, inspector. 项目地址: https://gitcode.com/gh_mirrors/he/hermes-workspace 点击查看 免费下载 本文依据仓库 public/avatars-3d/README.md 编写&am…

2026/10/9 4:47:02 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

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/8 15:26:32 阅读更多 →
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/8 15:26:40 阅读更多 →
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/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26: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/7 13:34:55 阅读更多 →