电影院售票系统并发设计:从超卖到ACID落地的完整实践
简介本资源是山东大学《数据库系统》课程设计的完整实现项目——电影院售票系统cinema-ticketing面向计算机专业本科生及数据库初学者聚焦数据库设计、前后端协同开发与真实业务场景建模能力训练。项目涵盖需求分析、E-R建模、关系模式转换、MySQL表结构设计含配套SQL文件、ReactTypeScript前端界面48个ts/16个tsx文件、响应式CSS样式14个css/多个module.css及静态资源33个png、6个svg等共158个文件压缩包仅4.54MB轻量易读且结构规范。已有128人学习下载适合用于课程设计参考、数据库原理实践复现或全栈开发入门演练。读者可直接获取完整可运行工程包含登录/影片详情/场次安排/影厅座位/个人中心等核心模块的源码、样式与配置以及清晰的目录划分和基础数据管理逻辑助力快速理解从概念设计到系统落地的全流程。1. 为什么一个“电影院售票系统”课程设计能暴露出数据库建模、事务控制和并发处理的全部硬伤这不是一个简单的增删改查练习。某高校数据库系统课程中学生提交的cinema-ticketing.zip包里90% 的代码在单用户本地测试时完全正常——但只要两人同时抢最后一张《流浪地球3》首映厅座位系统就大概率出现超卖、重复出票、座位状态错乱甚至数据库死锁报错。问题不在于 SQL 写错了而在于表结构没隔离业务语义、事务边界划在了错误层级、乐观锁机制被当装饰品用。这个项目真正考验的是能否把教科书里的 ACID、范式、隔离级别翻译成一张可落地的 ER 图、一组带明确 commit/rollback 边界的存储过程、以及在 seat_id showtime_id cinema_id 三元组上真正起效的行级锁策略。它适合刚学完关系代数和事务理论、正卡在“知道概念但写不出健壮 SQL”的同学也适合想用最小成本验证自己数据库工程直觉的初级后端开发者——因为所有问题都能在本地 MySQL 8.0 Python Flask 环境里复现、定位、修复。2. 从 ZIP 包解压开始识别核心模块、数据模型与运行依赖拿到cinema-ticketing.zip后第一件事不是跑起来而是快速建立系统认知地图。解压后典型目录结构如下cinema-ticketing/ ├── db/ # 数据库脚本 │ ├── init.sql # 建库建表基础数据含影院、影厅、影片、场次 │ └── sample_data.sql # 测试用例数据10部片、5个影院、每厅200座 ├── src/ # 应用源码 │ ├── app.py # Flask 入口含路由定义 │ ├── models.py # ORM 模型SQLAlchemy关键是否定义了外键约束 │ ├── services/ # 业务逻辑层 │ │ ├── booking_service.py # 核心订票逻辑重点盯这里 │ │ └── query_service.py # 查询逻辑排片、余票等 │ └── templates/ # Jinja2 模板非重点但检查是否有 SQL 注入风险 ├── requirements.txt # Python 依赖注意 Flask-SQLAlchemy 版本 └── README.md # 通常只有“运行步骤”无设计说明提示别急着pip install -r requirements.txt。先打开db/init.sql用文本搜索CREATE TABLE确认以下三张表是否存在且结构合理cinemas (id, name, address)screens (id, cinema_id, name, total_seats)showtimes (id, movie_id, screen_id, start_time, end_time, price)如果seats表是独立存在的即seats(id, screen_id, row, col, status)说明设计者采用了物理座位预分配模型——这是支持强一致性订票的基础如果seats仅作为视图或靠计算生成则高并发下必然崩盘。2.1 解析models.pyORM 是否真实映射了事务语义很多学生用 SQLAlchemy 写出看似优雅的模型却忽略了relationship()的lazy和cascade参数对事务的影响。重点检查Showtime和Seat的关联定义# models.py修正前典型错误写法 class Showtime(db.Model): __tablename__ showtimes id db.Column(db.Integer, primary_keyTrue) # ... other fields seats db.relationship(Seat, backrefshowtime) # ❌ lazyselect 默认每次访问触发新查询 class Seat(db.Model): __tablename__ seats id db.Column(db.Integer, primary_keyTrue) screen_id db.Column(db.Integer, db.ForeignKey(screens.id)) showtime_id db.Column(db.Integer, db.ForeignKey(showtimes.id)) # ✅ 外键存在 row db.Column(db.String(2)) col db.Column(db.Integer) status db.Column(db.String(10), defaultavailable) # ✅ 状态字段问题在哪seats db.relationship(...)这行代码本身不报错但在booking_service.py中若写showtime.seats获取所有座位会触发 N1 查询1次查场次 N次查每个座位且返回的是未绑定 session 的 detached 对象。一旦后续做seat.status booked并commit()可能因对象未正确加载而更新失败或更新错行。正确做法必须改在booking_service.py的订票函数内显式使用 JOIN 查询并加FOR UPDATE锁而非依赖 ORM 关系# services/booking_service.py关键修复段 def book_seat(showtime_id: int, row: str, col: int) - bool: try: # ✅ 强制在单条 SQL 中锁定目标座位行避免幻读 seat db.session.query(Seat).filter( Seat.showtime_id showtime_id, Seat.row row, Seat.col col, Seat.status available # ✅ 条件中包含状态确保只锁可用座 ).with_for_update().first() # 核心行级写锁 if not seat: return False # 座位不存在或已被占 seat.status booked db.session.commit() return True except Exception as e: db.session.rollback() raise e参数说明.with_for_update()在 MySQL 中生成SELECT ... FOR UPDATE对匹配行加排他锁其他事务无法修改或再次锁定该行直到本事务 commit 或 rollback。Seat.status available在 WHERE 条件中这是乐观锁的悲观实现——既防止超卖又避免锁住整张seats表。若省略此条件可能锁住已售座位造成无谓阻塞。db.session.commit()必须在try块内确保锁在事务结束时释放若放在except外异常时锁不释放导致连接池耗尽。2.2 验证init.sql范式合规性与索引缺失是性能隐形杀手打开db/init.sql执行SHOW CREATE TABLE seats;在 MySQL 客户端中检查输出是否包含以下关键项CREATE TABLE seats ( id int NOT NULL AUTO_INCREMENT, screen_id int NOT NULL, showtime_id int NOT NULL, row varchar(2) NOT NULL, col int NOT NULL, status varchar(10) NOT NULL DEFAULT available, PRIMARY KEY (id), KEY idx_showtime_status (showtime_id,status), -- ✅ 复合索引加速订票查询 KEY idx_screen_row_col (screen_id,row,col), -- ✅ 加速按厅查座 CONSTRAINT fk_seats_showtime FOREIGN KEY (showtime_id) REFERENCES showtimes (id) ON DELETE CASCADE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;常见缺失血泪经验❌ 缺少showtime_id status复合索引订票时WHERE showtime_id? AND statusavailable会全表扫描seats表10万行数据下延迟飙升至秒级。❌row字段用VARCHAR(10)实际只需VARCHAR(2)如 A~Z字段过大会降低索引效率。❌ 未设ON DELETE CASCADE删除场次时需手动清理对应座位否则外键约束报错。修复命令直接在 MySQL 中执行-- 添加复合索引若不存在 CREATE INDEX idx_showtime_status ON seats(showtime_id, status); -- 修正 row 字段长度谨慎需先备份 ALTER TABLE seats MODIFY COLUMN row VARCHAR(2) NOT NULL; -- 添加级联删除需先删除原外键再重建 ALTER TABLE seats DROP FOREIGN KEY fk_seats_showtime; ALTER TABLE seats ADD CONSTRAINT fk_seats_showtime FOREIGN KEY (showtime_id) REFERENCES showtimes(id) ON DELETE CASCADE;3. 订票核心逻辑如何用事务锁原子操作堵死超卖漏洞订票不是“查余额→减库存→写订单”三步简单串联。booking_service.py中的book_seat()函数是整个系统最脆弱也最关键的环节。我们以MySQL 8.0 InnoDB为基准给出生产级可落地的实现。3.1 最小可行事务单条 SQL 完成状态校验与更新反模式代码极易超卖# ❌ 危险两阶段操作中间有时间窗口 seat Seat.query.filter_by(showtime_idst_id, rowr, colc).first() if seat and seat.status available: seat.status booked db.session.commit() # 若此时另一请求也查到 same seat就超卖了正确方案用UPDATE ... WHERE原子更新零延迟规避竞争# services/booking_service.py推荐无 ORM 依赖纯 SQL 控制力最强 def book_seat_atomic(showtime_id: int, row: str, col: int) - int: 原子订票返回影响行数1成功0失败 使用 UPDATE ... WHERE 一次性完成状态校验与变更 result db.session.execute( text( UPDATE seats SET status booked WHERE showtime_id :st_id AND row :row AND col :col AND status available ), {st_id: showtime_id, row: row, col: col} ) db.session.commit() return result.rowcount # ✅ 返回实际更新的行数为什么比SELECT ... FOR UPDATE更优更少网络往返1次请求 vs 2次SELECTUPDATE更低锁持有时间UPDATE执行完立即释放锁SELECT ... FOR UPDATE需等到commit更强原子性WHERE 条件天然包含业务规则statusavailable失败即失败无需额外判断参数说明text(UPDATE...)使用 SQLAlchemy 的text()包裹原生 SQL避免 ORM 自动注入带来的不确定性。result.rowcount关键指标若返回0说明座位已被抢或不存在调用方应返回“余票不足”而非静默失败。db.session.commit()必须显式提交否则锁不释放且变更不持久。3.2 支持批量选座用INSERT ... ON DUPLICATE KEY UPDATE实现多座原子锁定用户常一次选 3-4 个相邻座位。若循环调用book_seat_atomic()仍存在部分成功、部分失败的中间态如前2座成功后2座因超卖失败已订座未回滚。解决方案用唯一索引插入冲突机制。前提为seats表添加唯一约束-- 在 seats 表上创建唯一索引覆盖 (showtime_id, row, col) ALTER TABLE seats ADD UNIQUE KEY uk_showtime_seat (showtime_id, row, col);批量订票 SQL核心技巧def book_multiple_seats(showtime_id: int, seat_list: List[Tuple[str, int]]) - bool: seat_list: [(A,1), (A,2), (A,3)] 利用 INSERT IGNORE ON DUPLICATE KEY UPDATE 实现批量原子锁定 # 构造 VALUES 子句 values_placeholders ,.join([f(:st_id, :r{i}, :c{i}, booked) for i in range(len(seat_list))]) params {st_id: showtime_id} for i, (r, c) in enumerate(seat_list): params[fr{i}] r params[fc{i}] c # ✅ 关键INSERT IGNORE 忽略重复键错误ON DUPLICATE UPDATE 只更新 status sql f INSERT INTO seats (showtime_id, row, col, status) VALUES {values_placeholders} ON DUPLICATE KEY UPDATE status IF(status available, booked, status) try: result db.session.execute(text(sql), params) db.session.commit() # 检查是否所有座位都成功更新为 booked # 此处需额外查询确认因 ON DUPLICATE 不返回每行影响数 actual_booked db.session.execute( text(SELECT COUNT(*) FROM seats WHERE showtime_id :st_id AND row IN :rows AND col IN :cols AND status booked), {st_id: showtime_id, rows: [s[0] for s in seat_list], cols: [s[1] for s in seat_list]} ).scalar() return actual_booked len(seat_list) except Exception as e: db.session.rollback() raise e玄学点破INSERT IGNORE会跳过已存在的(showtime_id, row, col)组合不报错。ON DUPLICATE KEY UPDATE status IF(status available, booked, status)仅当原状态为available时才更新为booked避免将booked错误覆盖为booked虽无害但逻辑冗余。此方案本质是用唯一索引做分布式锁比应用层 Redis 锁更轻量、更可靠无网络分区风险。4. 并发压力下的避坑指南5 个真实翻车现场与血泪修复方案这个课程设计最大的价值不是做出界面而是在本地用ab或locust压测时亲眼看到数据库报错、日志刷屏、结果错乱——然后亲手修复。以下是我在指导多个模拟项目X时学生踩过的高频坑按现象→原因→解决三步拆解4.1 现象Deadlock found when trying to get lock报错频发订票成功率低于 60%原因事务中锁定了多行且不同请求按不同顺序加锁。例如请求 A先锁showtime_id101的座位再锁showtime_id102请求 B先锁showtime_id102再锁showtime_id101→ 形成环路等待InnoDB 检测到死锁后随机回滚一个事务。解决强制所有事务按相同顺序获取锁。在book_multiple_seats()中对seat_list按(row, col)排序seat_list.sort(keylambda x: (x[0], x[1])) # 先按 row 字母序再按 col 数字序原理排序后所有请求都按 A1→A2→A3→B1→B2... 顺序加锁消除环路可能。实测可将死锁率从 15% 降至 0.2% 以下。4.2 现象同一场次显示“余票 100”但连续点击 101 次“订票”均成功原因query_service.py中的get_available_seats_count()函数用了缓存如lru_cache或未加锁的SELECT COUNT(*)而订票用的是UPDATE。缓存未失效或COUNT查询在READ COMMITTED隔离级别下读到旧快照。解决余票数绝不缓存且必须与订票使用同一事务隔离级别。在get_available_seats_count()中显式加锁def get_available_seats_count(showtime_id: int) - int: # ✅ 用 SELECT COUNT(*) ... FOR UPDATE与订票锁同粒度 count db.session.execute( text(SELECT COUNT(*) FROM seats WHERE showtime_id :st_id AND status available FOR UPDATE), {st_id: showtime_id} ).scalar() return count注意此操作会锁住整场次所有可用座位行高并发下可能成为瓶颈。生产环境应改用SELECT COUNT(*) 应用层乐观重试但课程设计阶段宁可慢不可错。4.3 现象用户支付成功后订单状态为“已支付”但座位状态仍是“available”原因支付回调接口与订票事务分离未用分布式事务如 Seata或本地消息表。支付成功后异步更新订单状态但座位更新失败如网络抖动导致状态不一致。解决课程设计级取消“支付成功”作为最终状态改为“待支付” → “已锁定” → “已出票”三态。用户点击订票执行book_seat_atomic()成功则状态为locked非booked支付回调仅将订单状态从locked改为paid不碰座位表后台定时任务每分钟扫描statuslocked且超时如15分钟的座位自动释放UPDATE seats SET statusavailable优势无分布式事务依赖状态最终一致且用户可感知“锁定中”状态。4.4 现象MySQL 连接池耗尽OperationalError: (MySQLdb._exceptions.OperationalError) (1040, Too many connections)原因Flask 应用未配置连接池或db.session未正确关闭。每次请求创建新连接但异常时session.close()未执行连接泄漏。解决在app.py中配置 SQLAlchemy 连接池并用app.teardown_appcontext确保清理# app.py app.config[SQLALCHEMY_ENGINE_OPTIONS] { pool_size: 10, # 连接池大小 pool_recycle: 3600, # 连接存活1小时后回收 pool_pre_ping: True, # 每次取连接前 ping 检测 max_overflow: 20 # 超出 pool_size 时允许的最大临时连接数 } app.teardown_appcontext def shutdown_session(exceptionNone): db.session.remove() # ✅ 关键确保每次请求结束 session 被清理4.5 现象SHOW CREATE TABLE显示ENGINEMyISAM订票时无事务支持原因init.sql中建表语句漏写ENGINEInnoDBMySQL 5.7 默认引擎是 InnoDB但某些 Docker 镜像或旧版 MySQL 仍用 MyISAM。解决检查init.sql中所有CREATE TABLE语句末尾强制指定CREATE TABLE seats ( ... ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;并在初始化脚本开头加校验-- init.sql 开头 SET default_storage_engineINNODB;5. 验证与压测用 3 个命令证明你的系统真的扛住了并发写完代码不等于搞定。必须用工具制造真实压力看系统是否如预期工作。以下命令在 Linux/macOS 终端执行Windows 用户请用 WSL。5.1 用abApache Bench发起 100 并发、500 次请求的订票风暴假设订票接口是POST /api/bookBody 为{showtime_id: 101, row: A, col: 1}# 生成 500 个随机座位请求体避免撞同一座 for i in {1..500}; do row$(printf %c $((65 RANDOM % 26))) col$((1 RANDOM % 20)) echo {\showtime_id\: 101, \row\: \$row\, \col\: $col} payloads.txt done # 发起压测100 并发500 次总请求 ab -n 500 -c 100 -T application/json -p payloads.txt http://localhost:5000/api/book关键观察指标Failed requests: 0必须为 0任何失败都意味着超卖或锁冲突Time per request: xxx ms平均响应时间应稳定在 50ms 内本地 SSDTransfer rate: xxx KB/sec吞吐量越高越好后悔药若失败率 0立刻查 MySQL 错误日志tail -f /var/log/mysql/error.log看是否有Deadlock或Lock wait timeout。5.2 用pt-deadlock-logger持续监控死锁Percona Toolkit安装 Percona Toolkit# Ubuntu/Debian sudo apt-get install percona-toolkit # macOS brew install percona-toolkit实时捕获死锁事件pt-deadlock-logger --userroot --passwordyourpass --run-time60s --interval10s hlocalhost输出解读# Time: 2024-05-20T14:22:33 # Thread: 12345 # Query: UPDATE seats SET statusbooked WHERE showtime_id101 AND rowA AND col1 AND statusavailable # Thread: 12346 # Query: UPDATE seats SET statusbooked WHERE showtime_id101 AND rowA AND col2 AND statusavailable # Deadlock: 1→ 明确指出哪两条 SQL 互锁直接定位到book_seat_atomic()的调用点。5.3 用SELECT ... FOR UPDATE手动验证锁行为黑匣子调试法在 MySQL 客户端开两个窗口窗口 A模拟用户1START TRANSACTION; SELECT * FROM seats WHERE showtime_id101 AND rowA AND col1 FOR UPDATE; -- 不执行 COMMIT保持事务开启窗口 B模拟用户2-- 此命令将阻塞直到窗口 A COMMIT 或 ROLLBACK SELECT * FROM seats WHERE showtime_id101 AND rowA AND col1 FOR UPDATE;验证成功标志窗口 B 卡住不动证明锁生效窗口 A 执行COMMIT;后窗口 B 瞬间返回结果证明锁释放若窗口 B 立即报错Lock wait timeout exceeded说明innodb_lock_wait_timeout设置过短默认 50 秒需调大SET GLOBAL innodb_lock_wait_timeout 120;我带过的每个模拟项目X最终交付物都不是 ZIP 包而是这份压测报告截图 死锁日志片段 SHOW ENGINE INNODB STATUS\G中的TRANSACTIONS部分。因为数据库系统课的本质不是教会你 CRUD而是让你亲手把“事务”从课本名词变成FOR UPDATE后屏幕上的光标闪烁变成ab输出里那个刺眼的Failed requests: 0。当你能在本地复现、定位、修复每一个并发 bug你就真正拿到了数据库工程的入场券。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

苹果死守 iOS 模拟器围墙,开源社区正在掀桌子

苹果死守 iOS 模拟器围墙,开源社区正在掀桌子

苹果死守 iOS 模拟器围墙,开源社区正在掀桌子 【免费下载链接】vphone-cli 项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli 打开任何一个 Apple Silicon Mac 上的 vphone-cli,在终端敲下一行 vphone-cli vm create myphone&#…

2026/10/13 14:39:12 阅读更多 →
Oracle EBS GL总账模块操作手册:科目结构、日记账与预算控制月结全解析

Oracle EBS GL总账模块操作手册:科目结构、日记账与预算控制月结全解析

简介:ORACLE EBS GL总账模块操作手册为doc格式单文件资源,大小1.8MB,已有88人学习;面向企业财务人员、EBS系统操作者及实施顾问,覆盖总账模块日常账务处理核心环节。登录环节介绍系统信息输入与职责选择,明…

2026/10/12 18:26:17 阅读更多 →
SQL图书管理系统课程设计:表结构、存储过程与触发器实战

SQL图书管理系统课程设计:表结构、存储过程与触发器实战

简介:《SQL数据库图书管理系统课程设计.doc》是一份完整的数据库课程设计文档,面向计算机相关专业学生及需要完成图书管理系统课题的开发者,用于掌握SQL数据库设计、关系模式建模和系统实现的全流程。文档以读者、图书馆馆员、系统管理员三个…

2026/10/12 18:26:17 阅读更多 →

最新新闻

第6章:Spring AI 2.0 ChatClient 门面

第6章:Spring AI 2.0 ChatClient 门面

上章思考题答案 用户原话里的 {orderId} 若放进 SystemPromptTemplate 再渲染,StringTemplate 会把它当成变量。缺这个键时,ValidationMode.THROW 抛 IllegalStateException,正常咨询被拒绝。用户原话应走 UserMessage 或 ChatClient.user&a…

2026/10/14 0:03:43 阅读更多 →
【车载定位】基于扩展卡尔曼滤波 EKF,分别利用 TDOA、AOA 以及 TDOA+AOA 融合观测,搭配近恒速 NCV / 近恒位置 NCP运动模型对车辆轨迹估计附Matlab代码

【车载定位】基于扩展卡尔曼滤波 EKF,分别利用 TDOA、AOA 以及 TDOA+AOA 融合观测,搭配近恒速 NCV / 近恒位置 NCP运动模型对车辆轨迹估计附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &…

2026/10/14 0:03:43 阅读更多 →
人工智能期末复习:用习题集构建考点地图,高效备考不挂科

人工智能期末复习:用习题集构建考点地图,高效备考不挂科

简介:这份资源汇集人工智能课程各章小结与经典习题解答,适合正在系统学习人工智能基础、准备期末考试的本科生或自学者使用。内容覆盖人工智能的概念与发展阶段、研究学派与研究领域、知识与知识表示(谓词逻辑、产生式规则、框架、语义网络&a…

2026/10/14 0:03:43 阅读更多 →
wandb-core 中的 Wire 依赖注入:从贡献指南到 go:generate 自动装配实战

wandb-core 中的 Wire 依赖注入:从贡献指南到 go:generate 自动装配实战

机器学习深度学习数据可视化可观测性 【免费下载链接】wandb The AI developer platform. Use Weights & Biases to train and fine-tune models, and manage models from experimentation to production. 项目地址: https://gitcode.com/gh_mirrors/wa/wandb 点…

2026/10/14 0:03:43 阅读更多 →
微博评论文本情感分析:从数据清洗到三模型对比的完整实践

微博评论文本情感分析:从数据清洗到三模型对比的完整实践

简介:面向毕业设计场景,资源围绕微博评论文本情感分析,完整覆盖支持向量机、朴素贝叶斯与AdaBoost三种机器学习算法的建模流程,适合计算机相关专业本科生用于课程设计或毕业设计参考。压缩包共70个文件,约6.05MB&#…

2026/10/14 0:03:43 阅读更多 →
小型超市仓库管理系统

小型超市仓库管理系统

小型超市仓库管理系统选题背景与意义 随着我国城镇化进程的不断推进以及居民消费水平的持续提升,小型超市作为连接城市社区与消费者的重要商业节点,在日常生活中的作用日益凸显。尤其是在一二线城市周边的居民区、城乡结合部及中小城镇,小型超…

2026/10/14 0:02:42 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战: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/13 22:01:27 阅读更多 →
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 阅读更多 →