Java停车场系统实战:PostgreSQL并发分配与状态机建模
简介本资源是一份面向计算机专业本科生与Java初学者的课程设计/毕业设计参考文档聚焦城市停车难问题提供基于Java技术栈的停车场管理系统完整设计方案。文档涵盖课题背景意义、国内外研究综述、SpringBootVue前后端框架选型依据、MySQL数据库设计含ER图与核心表结构、B/S架构可行性分析技术/经济/操作三维度以及用户管理、车辆信息、车位调度、收费结算等六大功能模块的详细实现说明。资源为单文件Word文档.docx共1个文件大小937KB内容结构清晰含摘要、目录、章节详述及系统测试小结适合作为开发实践参照或论文写作范本。目前已有55人学习下载读者可直接获取规范化的系统分析逻辑、模块化功能描述、主流框架整合思路及可落地的数据库设计细节有效支撑课程设计报告撰写与项目复现。1. 为什么一个“基于Java的停车场管理系统”至今还在被反复重写它不是练手Demo而是校验工程能力的试金石你见过多少个写着“基于Java的停车场管理系统”的.docx文档十份里八份停在UML图和数据库ER图就断了剩下两份跑起来后车位状态错乱、缴费金额对不上、高峰期并发插入直接报主键冲突——最后被塞进课程设计压缩包角落再没人打开。这不是代码写得糙而是多数人从没真正把「停车场」当做一个有物理约束、时间敏感、状态强一致的业务系统来建模。它表面是增删改查内里藏着实时计费策略、车位锁联动逻辑、离线补录容错、多终端状态同步等一整套工业级落地细节。本文不讲Spring Boot怎么配MyBatis也不堆砌SSM三层结构图我们只聚焦一件事用最简可控的技术栈JDK 17 Spring Boot 3.2 PostgreSQL把“车辆进场→分配空位→计时计费→扫码离场→自动释放”这条主链路在本地环境跑通、压测过、日志可追溯、异常不丢数据。适合刚写完学生信息管理系统、想啃下第一个真实业务闭环的开发者也适合带实训课的导师——文中的每一步命令、每个SQL、每个状态机转换条件都来自某高校实训平台的真实翻车现场。2. 从物理约束出发建模为什么停车场不能用“用户-订单-商品”思维设计数据库停车场不是电商网站。它的核心矛盾从来不是“库存是否充足”而是“某个固定坐标如A区03排05号在某一毫秒是否被占用”。强行套用通用电商表结构必然在并发场景下崩盘。我们必须先承认三个铁律① 车位是不可分割的物理实体编号即主键不能靠“库存数量”抽象② 车辆状态切换有严格时序依赖必须先“入场登记”才能“开始计费”必须“缴费完成”才允许“释放车位”③ 离线操作必须可补偿断网时手动登记的车辆网络恢复后要能自动对齐状态不能覆盖或丢失。基于此我们放弃“订单表商品表库存表”的惯性设计采用状态机驱动的事件溯源式建模——所有业务动作都转化为带时间戳的事件记录状态由事件流实时聚合生成。2.1 核心表结构用复合主键锁死物理约束-- 车位基础表物理位置即主键禁止逻辑删除 CREATE TABLE parking_spot ( area_code VARCHAR(10) NOT NULL, -- A区/B区/C区 row_num SMALLINT NOT NULL, -- 第几排如03 spot_num SMALLINT NOT NULL, -- 第几个如05 spot_type VARCHAR(10) NOT NULL CHECK (spot_type IN (STANDARD, DISABLED, ELECTRIC)), is_active BOOLEAN DEFAULT true, PRIMARY KEY (area_code, row_num, spot_num) ); -- 车辆入场事件表每次进场生成唯一记录status为初始态 CREATE TABLE entry_event ( id BIGSERIAL PRIMARY KEY, plate_number VARCHAR(10) NOT NULL, -- 车牌号统一格式京A12345 area_code VARCHAR(10) NOT NULL, row_num SMALLINT NOT NULL, spot_num SMALLINT NOT NULL, entry_time TIMESTAMPTZ NOT NULL DEFAULT NOW(), status VARCHAR(20) NOT NULL CHECK (status IN (ENTERED, PAID, EXITED)) DEFAULT ENTERED, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- 计费明细表按分钟粒度生成支持随时重算 CREATE TABLE fee_record ( id BIGSERIAL PRIMARY KEY, entry_id BIGINT NOT NULL REFERENCES entry_event(id), start_time TIMESTAMPTZ NOT NULL, end_time TIMESTAMPTZ, -- NULL表示仍在计费中 duration_min INTEGER, -- end_time - start_time 的分钟数整数 fee_amount NUMERIC(8,2) DEFAULT 0.00, fee_rule VARCHAR(50) NOT NULL, -- FIRST_HOUR_5_YUAN, EACH_ADDITIONAL_30MIN_2_YUAN created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() );关键参数说明parking_spot表的联合主键(area_code, row_num, spot_num)强制物理位置唯一性避免“同一车位被分配两次”的底层错误entry_event.status字段不存“已缴费”“已离场”等中间态只存三个确定态杜绝状态歧义fee_record表的end_time允许为 NULL意味着该记录代表“当前正在计费的区间”而非历史结算单——这是支持动态调价、优惠券抵扣、离线补费的核心设计。2.2 为什么不用MySQL而选PostgreSQL两个不可替代的能力很多教程用MySQL但实际部署时你会被逼着换。原因只有两点①原生支持行级锁与SKIP LOCKED当多个入口闸机同时抢同一个空闲车位时MySQL的SELECT ... FOR UPDATE会锁住整个索引范围导致高并发下大量线程阻塞PostgreSQL的SELECT ... FOR UPDATE SKIP LOCKED能跳过已被锁的行直接返回下一个可用车位实测QPS提升3倍以上②JSONB字段支持复杂计费规则存储不同区域、不同时段、不同车型的费率组合多达20种用JSONB存规则比建10张配置表更轻量、更易热更新。例如-- 在parking_spot表中增加配置字段 ALTER TABLE parking_spot ADD COLUMN fee_rules JSONB DEFAULT []; -- 示例值[{hour: 1, fee: 5.00, type: STANDARD}, {hour: 2, fee: 8.00, type: DISABLED}]2.3 状态机引擎用Spring State Machine还是手写Spring State Machine看着高大上但实际项目中90%的翻车源于它状态转换配置分散在XML/YAML里调试时根本看不到当前状态流转路径一旦加入异步操作如调用微信支付回调状态机就变成黑匣子。我的血泪经验是——用数据库字段应用层校验比任何框架都可靠。核心逻辑只做三件事入场时检查parking_spot是否is_active true且该(area_code, row_num, spot_num)在entry_event中无status ENTERED的未结单缴费时检查entry_event.status ENTERED且fee_record.end_time IS NULL离场时检查entry_event.status PAID且fee_record.end_time IS NOT NULL。所有校验失败直接抛IllegalStateException前端捕获后提示具体原因如“该车位已被其他车辆占用”而不是让框架默默吞掉异常。3. 并发安全的车位分配如何让10个闸机同时抢3个空位而不死锁停车场最真实的压测场景不是查报表而是早高峰10台入口设备在同一秒发起“找空位”请求。此时若用传统SELECT ... FOR UPDATE加锁再INSERT必然触发死锁——A锁了A区01B锁了A区02A又想锁A区02B又想锁A区01。解决方案只有一个用PostgreSQL的SKIP LOCKED实现无锁抢占。3.1 最小可行分配SQL一行命令解决死锁-- 从A区随机取一个空闲车位跳过所有被锁的行 SELECT area_code, row_num, spot_num FROM parking_spot WHERE area_code A AND is_active true AND (area_code, row_num, spot_num) NOT IN ( SELECT area_code, row_num, spot_num FROM entry_event WHERE status ENTERED ) ORDER BY RANDOM() LIMIT 1 FOR UPDATE SKIP LOCKED;逻辑说明NOT IN子查询排除所有“已入场未离场”的车位确保逻辑空闲FOR UPDATE SKIP LOCKED保证即使多个事务同时执行此SQL每个事务拿到的都是互不重叠的车位行锁不会互相等待ORDER BY RANDOM()避免总是分配同一排模拟真实停车习惯人倾向于停靠近入口的位置但系统需打散负载。3.2 Java层封装把SQL变成可复用的Service方法Service public class SpotAllocationService { Transactional public OptionalSpotKey allocateSpot(String areaCode) { // Step 1: 执行SKIP LOCKED查询 String sql SELECT area_code, row_num, spot_num FROM parking_spot WHERE area_code ? AND is_active true AND (area_code, row_num, spot_num) NOT IN ( SELECT area_code, row_num, spot_num FROM entry_event WHERE status ENTERED ) ORDER BY RANDOM() LIMIT 1 FOR UPDATE SKIP LOCKED ; try { MapString, Object result jdbcTemplate.queryForMap(sql, areaCode); return Optional.of(new SpotKey( (String) result.get(area_code), ((Number) result.get(row_num)).shortValue(), ((Number) result.get(spot_num)).shortValue() )); } catch (EmptyResultDataAccessException e) { return Optional.empty(); // 无空位 } } // SpotKey用于封装联合主键避免String拼接 public static class SpotKey { public final String areaCode; public final short rowNum; public final short spotNum; // 构造函数与equals/hashCode省略 } }参数说明方法用Transactional保证整个分配登记原子性jdbcTemplate.queryForMap()直接映射结果比Entity类更轻量EmptyResultDataAccessException捕获无结果异常返回Optional.empty()调用方清晰知道“没空位”而非抛出未知异常。3.3 压测验证用JMeter模拟100并发抢位配置JMeter线程组100线程Ramp-Up Period 1秒循环1次。HTTP请求调用/api/entry/allocate?areaCodeA。预期结果成功率100%无SQL异常分配到的车位row_num分布均匀非集中于01-03排平均响应时间 50ms实测PostgreSQL 15 SSD盘下为12ms。翻车现象若去掉SKIP LOCKED成功率骤降至30%大量线程卡在waiting for transaction lock。4. 计费引擎的实时性与可审计性为什么不能用“入场时间-离场时间”硬算新手最容易犯的错是把计费逻辑写成fee (exitTime - entryTime) / 60 * 5。这在演示时很美上线后立刻暴雷用户离场时网络中断系统无法记录exitTime计费永远卡在“进行中”运营商临时调整费率如夜间半价旧记录无法按新规则重算财务对账时发现某笔费用多收了0.5元却找不到计算依据。真正的解法是计费动作必须显式触发且每次触发都生成一条不可篡改的fee_record。系统只负责“记录发生了什么”不负责“自动推导结果”。4.1 计费触发的三种合法时机触发时机调用方是否生成fee_record说明入场后5分钟后台定时任务是防止车辆长期占位不缴费生成首条fee_recordstart_timeentry_time用户扫码缴费微信支付回调接口是end_time设为当前时间duration_min和fee_amount实时计算管理员后台补费运维人员手动操作是支持修改start_time/end_time重新走费率计算逻辑4.2 动态费率计算用Groovy脚本实现热更新将费率规则从Java代码中剥离存入数据库fee_rules字段运行时用Groovy解析执行// 示例从parking_spot查出的fee_rules值 String rulesJson [{\hour\:1,\fee\:5.00},{\hour\:2,\fee\:8.00}]; ListMapString, Object rules new JsonSlurper().parseText(rulesJson); LocalDateTime now LocalDateTime.now(); Duration duration Duration.between(entryTime, now); long totalMinutes duration.toMinutes(); // 按规则逐条匹配 BigDecimal fee BigDecimal.ZERO; for (MapString, Object rule : rules) { int hourLimit ((Number) rule.get(hour)).intValue(); BigDecimal baseFee new BigDecimal(rule.get(fee).toString()); if (totalMinutes hourLimit * 60) { fee baseFee; break; } }优势运营人员修改费率只需更新JSON字段无需重启服务规则变更实时生效且每次计算都有完整输入输出日志。4.3 可审计性保障每笔费用必须关联原始事件fee_record表必须强制关联entry_event.id且entry_event表的plate_number字段加NOT NULL约束。这样财务查账时输入车牌号即可拉出该车所有入场、计费、离场事件流形成完整证据链。没有entry_event.id外键约束的计费系统等于没有会计凭证。5. 避坑指南那些让停车场系统在验收前一夜崩溃的5个致命细节这些坑全来自某高校实训平台的真实翻车记录不是理论推测是凌晨三点救火后记下的血泪经验。5.1 现象车辆离场后同一车位被立即分配给下一辆车但前车缴费时显示“该车位已被占用”原因离场操作只更新了entry_event.status EXITED但未同步清除fee_record.end_time为NULL的记录。新车辆入场时NOT IN子查询仍把该车位视为“已占用”。解决离场逻辑必须包含UPDATE fee_record SET end_time NOW() WHERE entry_id ? AND end_time IS NULL确保计费记录闭合。5.2 现象微信支付回调成功但数据库里entry_event.status仍是ENTERED原因支付回调接口未加幂等性校验运营商重试导致多次调用第二次调用时因状态已变而抛异常事务回滚。解决回调接口开头加SELECT status FROM entry_event WHERE id ?若已是PAID则直接返回成功不执行后续逻辑。5.3 现象PostgreSQL连接池耗尽所有请求超时原因Transactional方法内调用了外部HTTP接口如调用微信API外部接口响应慢导致数据库连接长时间占用。解决支付回调等涉及外部依赖的操作必须拆分为两个事务① 更新本地状态并记录待发送消息② 单独线程消费消息并调用外部接口。用spring-kafka或RabbitMQ解耦。5.4 现象导出报表时CPU飙升100%页面卡死原因报表SQL使用SELECT * FROM entry_event JOIN fee_record ...且未加时间范围限制单表数据超10万行后全表JOIN。解决所有报表接口强制要求start_date和end_date参数并在SQL中添加WHERE entry_time BETWEEN ? AND ?条件对高频查询字段如plate_number,entry_time建立复合索引。5.5 现象管理员修改车位类型如STANDARD→DISABLED后新入场车辆仍按旧费率计费原因fee_rules字段存在缓存应用层读取后未监听数据库变更。解决fee_rules不做本地缓存或使用PostgreSQL的LISTEN/NOTIFY机制数据库字段更新时主动推送刷新信号。6. 生产就绪的最后一道关用PrometheusGrafana监控你的停车场“心跳”系统跑通只是起点上线后你真正需要的是“一眼看清哪里快不行了”。我给某跨平台系统部署的监控方案只用3个指标就覆盖90%故障6.1 必监指标与Grafana看板配置指标名Prometheus查询语句告警阈值说明parking_entry_queue_lengthsum(rate(http_server_requests_seconds_count{uri/api/entry/allocate,status~5..}[5m])) 0.5每秒5xx错误率超0.5次说明分配服务异常parking_fee_unsettled_countcount by (area_code) (entry_event{statusENTERED}) 50某区域未缴费车辆超50辆可能计费模块宕机parking_db_lock_wait_secondspg_locks{modeExclusiveLock,statewait} * on(instance) group_right() (1) 2数据库行锁等待超2秒预示并发瓶颈落地技巧parking_entry_queue_length指标直接关联JVM线程池队列长度用Micrometer暴露Bean public MeterRegistryCustomizerMeterRegistry metricsCommonTags() { return registry - registry.config() .commonTags(application, parking-system); } // 在分配服务中注入ThreadPoolTaskExecutor其queueSize自动成为指标6.2 日志追踪用MDC串联一次入场的全链路当用户投诉“我明明交了钱为啥还扣费”你需要5秒内定位问题。在Controller入口处注入MDCPostMapping(/allocate) public ResponseEntity? allocate(RequestParam String areaCode) { String traceId UUID.randomUUID().toString().substring(0, 8); MDC.put(traceId, traceId); // 所有log自动带上traceId log.info(Start allocate spot in area {}, areaCode); OptionalSpotKey spot spotAllocationService.allocateSpot(areaCode); if (spot.isPresent()) { log.info(Allocated spot: {}-{}-{}, spot.get().areaCode, spot.get().rowNum, spot.get().spotNum); return ResponseEntity.ok(spot.get()); } else { log.warn(No available spot in area {}, areaCode); return ResponseEntity.status(409).body(No spot available); } }效果在ELK中搜索traceId: a1b2c3d4即可看到从分配、计费、支付回调的完整日志流无需翻10个服务的日志。6.3 我的运维习惯每周五下午执行的3条SQL健康检查这不是可选项是上线后我雷打不动的习惯。把它写成Shell脚本加入Crontab# 1. 检查是否存在“已入场但无对应计费记录”的脏数据 psql -c SELECT COUNT(*) FROM entry_event e WHERE e.statusENTERED AND NOT EXISTS (SELECT 1 FROM fee_record f WHERE f.entry_ide.id); # 2. 检查是否存在“已缴费但fee_record.end_time为空”的异常记录 psql -c SELECT COUNT(*) FROM entry_event e JOIN fee_record f ON e.idf.entry_id WHERE e.statusPAID AND f.end_time IS NULL; # 3. 检查车位占用率预警超85%的区域 psql -c SELECT area_code, ROUND(100.0 * COUNT(e.id) / (SELECT COUNT(*) FROM parking_spot p WHERE p.area_codee.area_code), 1) AS usage_rate FROM entry_event e WHERE e.statusENTERED GROUP BY area_code HAVING ROUND(100.0 * COUNT(e.id) / (SELECT COUNT(*) FROM parking_spot p WHERE p.area_codee.area_code), 1) 85;这三条SQL跑完5分钟内就能判断系统是否健康。如果第一条结果0说明计费模块有漏触发第二条0说明支付回调有失败未重试第三条返回某区域就得立刻通知运营加临时车位。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

两阶段鲁棒优化微网容量配置:CCG算法与Matlab实战

两阶段鲁棒优化微网容量配置:CCG算法与Matlab实战

从微网容量配置的实际痛点切入,两阶段鲁棒优化是处理风光不确定性的关键手段。本文以一个実際に运行的Matlab代码项目为例,拆解从数学建模到代码落地的完整链路,重点讲清楚min-max-min结构怎么理解、C&CG算法怎么迭代、以及我在调试过程中…

2026/10/12 17:18:34 阅读更多 →
机器学习实战源码包:从解压到跑通数据替换的避坑指南

机器学习实战源码包:从解压到跑通数据替换的避坑指南

简介:《Python机器学习编程与实战》配套源码与数据包,适合从零起步的Python机器学习学习者,用于跟随教材动手完成从数据预处理、特征工程到模型训练与评估的完整实践。资源共77个文件,以27个py脚本、25个csv数据集为主&#xff0c…

2026/10/13 18:00:33 阅读更多 →
基于Matlab+Yalmip的储能调峰调频模型复现与优化实践

基于Matlab+Yalmip的储能调峰调频模型复现与优化实践

做电力系统优化方向的研究生,大概率绕不开储能调峰调频这个方向。原因很直接:新能源渗透率不断提高,系统对灵活性资源的需求已经从“锦上添花”变成了“刚性需求”,而储能恰恰是目前公认的最灵活的调节手段。这篇博文想写的是&…

2026/10/13 18:01:13 阅读更多 →

最新新闻

Sufer 8.0英文版等值线图实战:从散点插值到批量出图的完整避坑指南

Sufer 8.0英文版等值线图实战:从散点插值到批量出图的完整避坑指南

简介:Surfer 8.0英文版是Golden Software公司推出的专业地形图绘制与三维建模软件,面向地质、环境科学、工程及地球科学领域的从业者与学习者,用于将离散数据转化为连续格网表面并生成专业图件。压缩包共234个文件,约12.41MB&…

2026/10/13 20:10:07 阅读更多 →
校园外卖系统数据库课设实战:三端闭环与状态机设计

校园外卖系统数据库课设实战:三端闭环与状态机设计

简介:本资源是一套完整的微信小程序校园外卖系统课程设计实践项目,面向高校数据库原理与应用、Web前端开发及小程序实战类课程的学生与教师,解决课程设计中缺乏真实业务场景、前后端协同与数据库建模结合案例的问题。压缩包共123个文件&#…

2026/10/13 20:10:07 阅读更多 →
二值图中心线提取实战:从细化算法到毛刺修剪与亚像素优化

二值图中心线提取实战:从细化算法到毛刺修剪与亚像素优化

做图像处理开发的朋友,十有八九都碰到过这类需求:从一张二值图里,把细长目标的中心线稳定地提出来。PCB走线、打印字符的笔画中心、纤维或者线缆的轴线,甚至医学影像里的血管路径,本质上都是同一个问题。最直觉的方案是…

2026/10/13 20:10:07 阅读更多 →
布匹瑕疵数据集-2019天池:工业表面检测小目标与低对比度缺陷基准

布匹瑕疵数据集-2019天池:工业表面检测小目标与低对比度缺陷基准

简介:本资源为2019年天池平台发布的布匹表面瑕疵检测专项数据集,面向计算机视觉方向的初学者与工业质检算法研究者,适用于缺陷识别、目标检测模型训练与小样本学习等实践场景。压缩包共935个文件,含689张JPG格式布匹瑕疵图像&…

2026/10/13 20:10:07 阅读更多 →
STM32F407ZG智能门锁实战:矩阵键盘+OLED+蓝牙+舵机全链路实现

STM32F407ZG智能门锁实战:矩阵键盘+OLED+蓝牙+舵机全链路实现

简介:本资源是一套基于STM32F407ZGT6的智能门锁完整嵌入式开发项目,面向电子/自动化/物联网方向本科生及毕业设计学生,聚焦密码验证、本地交互与蓝牙远程控制三大核心功能,切实解决毕业设计中硬件选型、多外设协同与系统集成等典型…

2026/10/13 20:10:07 阅读更多 →
PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

直接接PS5玩家一个很现实的问题:这台机器买回来之后,是不是基本就长在客厅电视柜上了?客厅被占、卧室想玩、出差想刷两把,每次都只能乖乖回到电视前。我捣鼓AnyPS5这套串流方案,就是为了把这台主机从HDMI线的长度里解放…

2026/10/13 20:09:06 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →