Java电商毕设实战:库存并发与退款一致性解决方案
简介本资源是一份面向计算机专业本科生与Java初学者的毕业设计类实践文档聚焦B/S架构下零食电商系统的全流程设计与实现。文档完整覆盖绪论、系统架构、数据库设计、各功能模块用户管理、商品展示、购物车、订单处理、定制服务、促销管理的编码实现细节以及单元测试、集成测试与压力测试方案特别适合课程设计、毕设参考或Spring Boot全栈开发入门学习。资源为单个771KB的Word文档.docx内容结构清晰含摘要、中英文关键词、五章正文及详细目录涵盖技术选型Spring BootMyBatisMySQLBootstrap、三层架构图、核心表设计说明与关键代码逻辑描述。目前已有300人学习下载读者可直接获取可落地的电商系统设计思路、模块划分方法、安全实践如密码加密、HTTPS集成及未来优化方向AI推荐、物流对接、移动端拓展具备较强的教学参考价值与工程复用性。1. 为什么一个“网上零食购物网站”要用 Java 做——不是为了炫技而是因为库存、并发和退款这三件事根本绕不开你可能在毕业设计选题表里随手勾了“基于Java的网上零食购物网站系统设计与实现”但真正动手时才发现这不是做个带商品列表的JSP页面就完事的事。零食类目天然具备高周转、短保质期、多SKU、强促销节奏的特点——用户凌晨下单仓库凌晨打单次日中午前必须出库同一款薯片可能同时被3个校区的学生抢购库存扣减差0.1秒就会超卖用户刚付款就反悔退款要实时回滚订单释放库存通知物流取消揽收。这些不是业务逻辑是系统底座能力。Java生态尤其是Spring Boot MyBatis-Plus Redis组合之所以成为高校毕设和中小电商落地的默认选择恰恰因为它把事务一致性、连接池管理、缓存穿透防护这些“看不见的脏活”封装成了可配置、可调试、可监控的模块。本文不讲MVC分层理论只聚焦你明天就要跑通的6个关键动作环境怎么搭不踩坑、数据库表怎么从Java实体自动生成、购物车怎么用Redis存才不会丢数据、订单状态机怎么写才不怕并发修改、支付回调怎么验签防重放、以及——最常被忽略的——如何用MyBatis-Plus的TableField(fill FieldFill.INSERT)自动填充创建时间而不是靠前端传参或SQL写死。适合正在赶毕设进度、想两周内跑通核心链路的Java初学者也适合需要快速验证方案可行性的技术负责人。2. 环境筑基JDK 17 Spring Boot 3.2 MySQL 8.0 的最小可行组合很多同学卡在第一步下载了JDK却配不好环境变量或者用Spring Initializr生成项目后发现启动报java.lang.UnsupportedClassVersionError。这不是你的问题是版本错配的必然结果。当前2024年中最稳的组合是JDK 17LTS、Spring Boot 3.2.x支持Jakarta EE 9、MySQL 8.0.33原生支持caching_sha2_password认证插件。别碰JDK 21——虽然新但部分MyBatis-Plus插件尚未完全适配也别用Spring Boot 2.7——它依赖的Hibernate 5.6对MySQL 8.0的JSON类型支持有缺陷。下面是你必须执行的三步2.1 JDK 17 安装与验证别再用JAVA_HOME指向bin目录Windows用户常犯的错误是把JAVA_HOME设为C:\Program Files\Java\jdk-17.0.1\bin这会导致mvn命令找不到javac。正确路径是去掉bin# Windows PowerShell管理员运行 $env:JAVA_HOMEC:\Program Files\Java\jdk-17.0.1 $env:PATH$env:JAVA_HOME\bin;$env:PATH java -version # 输出应为 openjdk version 17.0.1 2021-10-19Linux/macOS用户注意/usr/libexec/java_home -v 17能准确定位JDK路径避免手动猜。2.2 Spring Boot 3.2 项目初始化用官方脚手架拒绝IDE内置模板IntelliJ IDEA自带的Spring Boot项目向导默认选2.x极易埋坑。务必访问 https://start.spring.io 注意是官方域名按以下配置生成ZIPProjectMavenLanguageJavaSpring Boot3.2.7最新稳定版PackagingJarJava17DependenciesSpring Web, Spring Data JPA, MySQL Driver, Lombok, Validation, Spring Boot DevTools提示不要勾选“Spring Security”——毕设阶段先保证功能跑通权限控制可后期补。若IDEA提示“Cannot resolve symbol SpringBootApplication”说明Maven未刷新右键pom.xml → “Reload project”。2.3 MySQL 8.0 配置重点解决Public Key Retrieval is not allowed错误这是MySQL 8.0最经典的连接失败原因。在application.yml中JDBC URL必须显式开启allowPublicKeyRetrievaltrue且指定serverTimezoneAsia/Shanghaispring: datasource: url: jdbc:mysql://localhost:3306/snack_shop?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaicharacterEncodingutf8mb4 username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver注意useSSLfalse仅用于本地开发生产环境必须启用SSL并配置证书utf8mb4是必须的否则emoji表情如零食包装上的图标会存成??。3. 数据建模用 MyBatis-Plus 的AutoGenerator从 Java 实体类一键生成建表 SQL“系统设计与实现”文档里常写“数据库E-R图见附录”但实际开发中你根本不想手写几十行CREATE TABLE语句。MyBatis-Plus的代码生成器AutoGenerator能根据Java实体类自动生成建表SQL、Mapper接口、Service层代码——这才是现代Java开发的常态。关键不是生成而是生成什么、怎么改、改完怎么验证。3.1 实体类定义用TableName和TableId控制建表行为以核心的Product商品实体为例注意三个强制约定import com.baomidou.mybatisplus.annotation.*; TableName(product) // 显式指定表名避免MP默认下划线转驼峰导致product_info→product_info public class Product { TableId(type IdType.ASSIGN_ID) // 使用雪花算法生成Long型ID比AUTO_INCREMENT更易分布式扩展 private Long id; TableField(name) // 显式映射字段名防止Java字段名变更影响SQL private String name; TableField(stock) // 库存字段必须设为NOT NULL默认值0 private Integer stock 0; TableField(price) // 价格用BigDecimal避免float精度丢失0.10.2≠0.3 private BigDecimal price; TableField(fill FieldFill.INSERT) // 创建时间由MP自动填充无需前端传 private LocalDateTime createTime; TableField(fill FieldFill.INSERT_UPDATE) // 更新时间在insert/update时都填充 private LocalDateTime updateTime; }逻辑说明TableId(type IdType.ASSIGN_ID)生成的ID是19位Long如1823456789012345678MySQL需用BIGINT UNSIGNED存储TableField(fill ...)要求在配置类中注入MetaObjectHandler否则无效。3.2 生成器配置只生成SQL不生成冗余代码很多教程教你怎么生成Controller、ServiceImpl但毕设项目真正需要的是可读、可调试、可修改的SQL。以下是最简生成器代码放在test/java包下Test public void generateSql() { FastAutoGenerator.create(jdbc:mysql://localhost:3306/snack_shop, root, your_password) .globalConfig(builder - builder .author(your_name) // 作者名生成SQL注释用 .outputDir(src/main/resources/sql) // SQL输出到resources/sql目录方便后续执行 .disableOpenDir()) // 生成后不自动打开文件夹 .packageConfig(builder - builder .parent(com.snack) // 包名前缀 .entity(entity) // 实体类放entity包 .mapper(mapper) // Mapper接口放mapper包 .xml(mapper.xml)) // XML文件放mapper.xml目录虽然后续用注解但保留兼容性 .strategyConfig(builder - builder .addInclude(product, order, order_item, user) // 只生成这4张表 .entityBuilder() .enableLombok() // 用Lombok减少getter/setter .logicDeleteColumnName(is_deleted) // 逻辑删除字段名 .mapperBuilder() .enableMapperAnnotation() // 启用Mapper注解不用XML .serviceBuilder() .formatServiceFileName(%sService) // Service类名格式 ) .execute(); }运行此测试后在src/main/resources/sql下会生成product.sql等文件内容类似-- product.sql CREATE TABLE product ( id bigint NOT NULL COMMENT 主键ID, name varchar(100) NOT NULL COMMENT 商品名称, stock int NOT NULL DEFAULT 0 COMMENT 库存数量, price decimal(10,2) NOT NULL COMMENT 价格, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表;3.3 手动执行SQL前的三道检查生成的SQL不能直接source进MySQL必须人工核验字符集检查确认DEFAULT CHARSETutf8mb4不是utf8MySQL的utf8实际是utf8mb3不支持emoji时间字段检查create_time和update_time必须有DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP否则MP的fill机制失效索引检查对高频查询字段如product.category_id、order.user_id手动添加索引MP不会自动生成ALTER TABLE order ADD INDEX idx_user_id (user_id); ALTER TABLE order_item ADD INDEX idx_order_id (order_id);4. 核心链路购物车、下单、支付回调的三段式落地零食网站的生死线不在首页美观度而在“加购→结算→支付→发货”这条链路是否原子化、幂等、可观测。很多毕设项目演示时卡在“下单失败”根源是没处理好库存扣减与订单创建的事务边界。这里给出经过真实压测验证的最小实现。4.1 Redis购物车用Hash结构存用户购物车避免关系型数据库锁表关系型数据库MySQL不适合存购物车——每次增删都要UPDATE高并发下极易锁表。Redis的Hash结构是天然解法HSET cart:{userId} {productId} {quantity}。Spring Boot整合Redis只需两步在pom.xml添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency在application.yml配置Redisspring: redis: host: localhost port: 6379 database: 0 timeout: 2000Java操作购物车的核心方法Service public class CartService { Autowired private StringRedisTemplate redisTemplate; // 添加商品到购物车原子操作 public void addToCart(Long userId, Long productId, Integer quantity) { String key cart: userId; // HINCRBY实现原子增减避免先GET再SET的竞态 redisTemplate.opsForHash().increment(key, String.valueOf(productId), quantity); // 设置过期时间30天不活跃自动清理 redisTemplate.expire(key, Duration.ofDays(30)); } // 获取购物车所有商品 public MapString, String getCartItems(Long userId) { String key cart: userId; return redisTemplate.opsForHash().entries(key); // 返回MapproductIdStr, quantityStr } }参数说明HINCRBY是Redis原子命令redisTemplate.opsForHash().increment()底层调用它确保多个请求同时增加同一商品数量不会覆盖expire设置TTL防止Redis内存无限增长。4.2 下单事务用Transactional包裹库存扣减与订单创建但必须加库存校验这是最容易翻车的环节。常见错误是Transactional public Order createOrder(Long userId, ListCartItem items) { // 错误示范先扣库存再创建订单 for (CartItem item : items) { productMapper.decreaseStock(item.getProductId(), item.getQuantity()); // 可能超卖 } orderMapper.insert(order); // 如果这里抛异常库存已扣但订单未建 }正确做法是先查库存再扣减最后建单且扣减SQL必须带WHERE stock #{quantity}条件Mapper public interface ProductMapper { // 关键UPDATE时校验库存充足返回影响行数 Update(UPDATE product SET stock stock - #{quantity} WHERE id #{id} AND stock #{quantity}) int decreaseStock(Param(id) Long id, Param(quantity) Integer quantity); } Service public class OrderService { Transactional(rollbackFor Exception.class) public Order createOrder(Long userId, ListOrderItem items) { // 1. 检查每件商品库存是否充足 for (OrderItem item : items) { Product product productMapper.selectById(item.getProductId()); if (product null || product.getStock() item.getQuantity()) { throw new RuntimeException(商品 item.getProductName() 库存不足); } } // 2. 批量扣减库存原子性由SQL WHERE保证 for (OrderItem item : items) { int affected productMapper.decreaseStock(item.getProductId(), item.getQuantity()); if (affected 0) { // 被其他事务抢先扣减触发重试或失败 throw new RuntimeException(库存扣减失败请重试); } } // 3. 创建订单此时库存已锁定 Order order new Order(); order.setUserId(userId); order.setStatus(OrderStatus.UNPAID.name()); orderMapper.insert(order); // ... 关联插入order_item return order; } }4.3 支付回调用MD5验签幂等Token防重放拒绝裸URL接收参数支付宝/微信支付回调是安全重灾区。绝不能写PostMapping(/pay/callback) public String callback(RequestParam String out_trade_no)——这等于把支付结果暴露在GET参数里极易被伪造。标准做法是验签用支付平台提供的密钥对回调参数做MD5签名比对幂等回调参数中必须包含out_trade_no商户订单号数据库订单表对该字段建唯一索引异步处理回调接口只做验签和落库发MQ或线程池处理发货逻辑避免阻塞。简化版验签工具类Component public class PaySignUtil { private static final String KEY your_alipay_merchant_key; // 从支付宝后台获取 public static boolean verifySign(MapString, String params) { String sign params.remove(sign); // 移除sign字段参与验签 String content params.entrySet().stream() .filter(entry - !entry.getKey().equals(sign_type)) .sorted(Map.Entry.comparingByKey()) .map(entry - entry.getKey() entry.getValue()) .collect(Collectors.joining()); String expectedSign DigestUtils.md5Hex(content KEY).toUpperCase(); return expectedSign.equals(sign); } }回调ControllerPostMapping(/pay/callback) public String alipayCallback(HttpServletRequest request) { MapString, String params getParameterMap(request); // 封装request.getParameterMap() if (!PaySignUtil.verifySign(params)) { return fail; // 验签失败直接返回fail不处理 } String outTradeNo params.get(out_trade_no); String tradeStatus params.get(trade_status); if (TRADE_SUCCESS.equals(tradeStatus)) { // 更新订单状态为已支付并发消息通知库存服务 orderMapper.updateStatus(outTradeNo, OrderStatus.PAID.name()); // TODO: 发送RocketMQ消息触发发货 } return success; // 必须返回success否则支付宝会重复推送 }5. 避坑指南上线前必须排查的5个血泪问题这些坑我在带3届毕设学生时反复遇到轻则功能异常重则答辩被问住。每一条都按“现象→原因→解决”给出可立即执行的动作。5.1 现象商品详情页图片显示为http://localhost:8080/images/1.jpg部署到服务器后404原因开发时用img src/images/1.jpgSpring Boot静态资源默认路径是src/main/resources/static但生产环境Nginx未配置/images/代理到该目录。解决方案A推荐将图片存到src/main/resources/static/images/Nginx配置location /images/ { alias /path/to/project/static/images/; }方案B用OSS或本地文件服务Java代码中ResourceLoader.getResource(classpath:static/images/1.jpg)读取流。5.2 现象MySQL中price字段存入19.9查出来变成19.899999999999998原因Java用float或double接收数据库DECIMAL类型浮点数二进制表示精度丢失。解决实体类中价格字段必须声明为BigDecimalMyBatis-Plus会自动映射JSP页面用fmt:formatNumber value${product.price} pattern#.##/格式化显示。5.3 现象用户登录后点击“我的订单”返回空列表但数据库里明明有数据原因User实体类中id字段用了TableId(type IdType.AUTO)而MySQL表主键是BIGINT但MP生成的SQL用了INT导致ID截断。解决检查product.sql中id字段类型是否为BIGINT NOT NULL若为INT手动改为BIGINT并重新执行SQL。5.4 现象TableField(fill FieldFill.INSERT)不生效create_time始终为NULL原因未在Spring Boot配置类中注入MyMetaObjectHandler或实体类字段名与数据库字段名不一致如Java是createTime数据库是create_time但没加TableField(create_time)。解决Component public class MyMetaObjectHandler implements MetaObjectHandler { Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, createTime, LocalDateTime.class, LocalDateTime.now()); // 起始字段填充 this.strictInsertFill(metaObject, updateTime, LocalDateTime.class, LocalDateTime.now()); } Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, updateTime, LocalDateTime.class, LocalDateTime.now()); } }5.5 现象用redisTemplate.opsForHash().entries(cart:1)返回空Map但用redis-cli能查到数据原因StringRedisTemplate默认使用StringRedisSerializer序列化Key和Value而entries()方法要求Key和Value都是String类型如果之前用Jackson2JsonRedisTemplate存过数据序列化格式不兼容。解决统一使用StringRedisTemplate存入时确保Value是StringredisTemplate.opsForHash().put(cart:1, 1001, 2)或彻底清空Redisredis-cli FLUSHALL。6. 进阶技巧用 MyBatis-Plus 的LambdaQueryWrapper写出可维护的查询告别硬编码字段名毕设答辩时老师常问“如果数据库字段user_name改成username你的代码要改几处”——答案若是“到处找WHERE user_name ?”说明你没用好MyBatis-Plus的Lambda表达式。它能把字段名检查从运行时提前到编译期改字段名时IDE会直接报错而不是等上线后查不到用户才崩溃。6.1 传统写法 vs Lambda写法对比传统方式脆弱字段名拼错无提示// ❌ 危险字段名user_name写成user_nam编译通过运行时报错 QueryWrapperUser wrapper new QueryWrapper(); wrapper.eq(user_name, zhangsan).eq(status, 1); ListUser users userMapper.selectList(wrapper);Lambda方式安全改字段名立刻编译失败// ✅ 安全User::getUserName是方法引用IDE能跳转、能重构、拼错直接红标 LambdaQueryWrapperUser wrapper new LambdaQueryWrapper(); wrapper.eq(User::getUserName, zhangsan).eq(User::getStatus, 1); ListUser users userMapper.selectList(wrapper);6.2 复杂查询实战查“近7天销量Top10零食”含关联统计需求统计每个商品近7天的销售总量按销量降序取前10。传统写法要手写JOIN SQL而MyBatis-Plus可组合Lambda与自定义SQL// 在Mapper接口中定义 Select(SELECT p.id, p.name, SUM(oi.quantity) as total_quantity FROM product p LEFT JOIN order_item oi ON p.id oi.product_id LEFT JOIN order o ON oi.order_id o.id WHERE o.status #{status} AND o.create_time #{sevenDaysAgo} GROUP BY p.id, p.name ORDER BY total_quantity DESC LIMIT 10) ListProductSales selectTop10ByWeek(Param(status) String status, Param(sevenDaysAgo) LocalDateTime sevenDaysAgo); // 调用时传参 LocalDateTime sevenDaysAgo LocalDateTime.now().minusDays(7); ListProductSales top10 productMapper.selectTop10ByWeek(PAID, sevenDaysAgo);其中ProductSales是DTO类非实体类Data public class ProductSales { private Long id; private String name; private Integer totalQuantity; // 注意SUM返回Integer不是Long }6.3 动态条件组装搜索框输入“薯片”时查商品名输入“1001”时查ID用户搜索时后端需根据输入内容智能匹配字段。LambdaQueryWrapper支持链式动态拼接public ListProduct searchProducts(String keyword) { LambdaQueryWrapperProduct wrapper new LambdaQueryWrapper(); if (StringUtils.isNumeric(keyword)) { // 输入纯数字按ID精确匹配 wrapper.eq(Product::getId, Long.parseLong(keyword)); } else { // 按商品名模糊匹配 wrapper.like(Product::getName, keyword); } return productMapper.selectList(wrapper); }关键点StringUtils.isNumeric()来自Apache Commons Lang需引入依赖wrapper.like()生成WHERE name LIKE %keyword%注意性能数据量大时需加全文索引。我带过的最后一届学生有个男生在答辩前夜发现订单状态更新不及时追查到是Transactional没加rollbackFor Exception.class导致自定义异常不回滚。他改完代码凌晨三点给我发消息说“老师终于看到库存回滚了”。那一刻我意识到所谓“系统设计与实现”不是画几张UML图而是让每一行代码都在真实场景里扛住压力、守住边界、兜住底线。希望这篇笔记里那些带// ✅和// ❌的注释能帮你少走些弯路。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Java+微信小程序+SSM小区管理系统毕设实战指南

Java+微信小程序+SSM小区管理系统毕设实战指南

简介:本资源是一套完整的毕业设计实战项目,面向计算机专业本科生及Java全栈初学者,聚焦微信小程序与SSM后端协同开发的小区管理场景。系统采用前后端分离架构:后端基于SSM(SpringSpringMVCMyBatis)框架&…

2026/10/9 14:31:57 阅读更多 →
Text-to-CAD实战解析:从自然语言到三维模型的生成原理与避坑指南

Text-to-CAD实战解析:从自然语言到三维模型的生成原理与避坑指南

1. 非标设计的一天,从一段描述开始做机械设计或者产品结构设计的人,应该都有过这种经历:脑子里想得清清楚楚的一个零件——比如一块带折弯的钣金支架、四个安装孔、一个加强筋——打开CAD软件之后,却要先选基准面、画草图、标约束、拉伸、切除、倒角,一顿操作下来十分钟过去了,…

2026/10/9 14:31:57 阅读更多 →
PIC18F87J10与PCA9422协同实现电池供电系统的动态电源管理

PIC18F87J10与PCA9422协同实现电池供电系统的动态电源管理

做电池供电的便携设备时,电源管理往往比业务逻辑更让人头疼。之前我把 PCA9422 和 PIC18F87J10 搭在一起做了一套完整的电源管理方案,从硬件设计、I2C 配置、动态调压到低功耗切换都实际跑了一遍。这篇文章就是这次实践的整体记录,核心思路是…

2026/10/9 14:30:56 阅读更多 →

最新新闻

CFF_Explorer 入门:PE 结构、导入导出表与样本初筛实战指南

CFF_Explorer 入门:PE 结构、导入导出表与样本初筛实战指南

简介:这是一份面向逆向工程师、安全研究人员及程序员的 Windows 文件格式分析工具资源包,聚焦 PE/COFF/NE 文件的结构解析与编辑。包内提供 CFF Explorer 主程序,并配有处理器架构签名 XML、扩展模块与示例脚本,可查看节区、资源、…

2026/10/9 14:59:31 阅读更多 →
CrystalReports 10.5 安装包完整指南:兼容性、静默部署与运行时验证

CrystalReports 10.5 安装包完整指南:兼容性、静默部署与运行时验证

简介:本资源为SAP Crystal Reports 10.5官方运行时安装包,面向企业开发人员、报表维护工程师及.NET/Windows平台应用集成者,解决在无完整设计环境情况下部署与运行水晶报表的核心依赖问题。压缩包共5个文件,含2个MSI运行时安装程序…

2026/10/9 14:59:31 阅读更多 →
收藏必看:让Agent效率提升98.7%!MCP代码执行范式解决token爆炸问题

收藏必看:让Agent效率提升98.7%!MCP代码执行范式解决token爆炸问题

/* 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 14:59:31 阅读更多 →
数控机床数据采集系统方案:数据源、协议与实施避坑指南

数控机床数据采集系统方案:数据源、协议与实施避坑指南

简介:这份PDF方案面向制造企业信息化人员、MES系统集成工程师及数控机床数据采集二次开发者,系统阐述数据采集系统的整体架构与开发要求。资源共1个PDF文件,压缩包大小1.62MB,内容完整精炼。目前已有653人学习下载。方案详细说明B…

2026/10/9 14:59:31 阅读更多 →
Linux嵌入式I2C触摸屏调试全链路指南

Linux嵌入式I2C触摸屏调试全链路指南

1. 项目概述:一块触摸屏如何在Linux里“开口说话”I2C总线上的触摸屏,不是插上就能用的USB设备,它更像一个需要你亲手“唤醒”的沉默伙伴。当你把一块电容式或电阻式触摸屏焊接到开发板上,接好SCL/SDA两根线,通电后屏幕…

2026/10/9 14:59:31 阅读更多 →
智慧工地解决方案PPT落地指南:感知层、网络供电与数据模型

智慧工地解决方案PPT落地指南:感知层、网络供电与数据模型

简介:这份智慧工地解决方案PPT面向建筑施工企业管理者、项目安全负责人及信息化建设人员,围绕传统工地监管体制不健全、安全事故频发等痛点,系统梳理了物联网、BIM、VR、大数据与云计算等关键技术的落地路径。资源共1个pptx文件,压…

2026/10/9 14:58:30 阅读更多 →

日新闻

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/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/9 6:17:20 阅读更多 →