简介这是一份面向计算机专业本科毕业设计选题阶段的《短视频内容理解与推荐系统》开题报告文档围绕Python、Hadoop、Flask与Vue技术栈展开适合正在准备开题答辩、需要确定研究方向与技术路线的学生参考。压缩包共1个docx文件约121KB内容按选题背景与意义、国内外研究现状、研究内容、研究思路与方法、拟解决的主要问题及措施等章节编排并给出系统功能模块划分。读者可从中获取完整开题框架与写作范式理解深度学习做视频特征提取、分布式计算处理海量数据、前后端分离搭建推荐系统的整体思路也可作为答辩PPT与任务书撰写的素材底稿。目前已有76人学习下载适合需要快速搭建开题材料的中高级学习者。1. 拆一份短视频推荐系统的开题报告它到底能帮你省下哪几步答辩前一周被导师打回来重写的开题报告很多问题都出在同一处背景写得像行业白皮书方案却落不到一行代码上。这份《短视频内容理解与推荐系统》的开题报告好在它没有停在概念层而是把 Python 做数据处理和模型推理、Hadoop 承担大规模视频存储与并行计算、Flask 提供接口、Vue 构建交互界面这四件事串在“内容理解 个性化推荐”这条主线上再配上功能模块划分、四种研究方法、五段式进度安排和参考文献格式。它适合两类人要交毕业设计开题材料、需要一个能自圆其说的选题框架的以及想顺着这个技术栈把系统真正跑起来、后面还要做二次开发的。下面按“文档怎么读、系统怎么搭、坑在哪、怎么改”的顺序拆开讲。2. 技术栈拆解Python、Hadoop、Flask、Vue 各站在哪一环2.1 四层架构与一条数据的完整流向开题报告里技术栈列了四个词但真正写代码时必须回答一个更具体的问题一条视频从用户点击上传到出现在另一个用户的推荐流里中间到底经过哪些进程。按这类系统的常见落地方式可以拆成四层每层职责单一边界清楚后面换组件时也不用大改。层次组件职责关键产出接入层Flask 上传接口 行为埋点接口收视频、收点击/停留/点赞事件视频文件、行为日志存储层HDFS MySQL Redis原始视频与抽帧图归 HDFS元数据归 MySQL推荐结果缓存进 Redis可查询的视频库与特征库计算层PythonOpenCV、PyTorch、scikit-learn Hadoop/PySpark抽帧、提特征、离线批量算相似度与热门榜视频向量、用户画像、离线召回表服务层Flask Gunicorn Nginx召回、排序、组装 JSON推荐流接口展示层Vue3 Vite axios首页信息流、播放页、个人中心、后台管理用户可见页面数据流向大致是上传接口把文件写进 HDFS 并落一条 MySQL 记录状态标为“待处理”计算层的离线任务扫描到新记录抽帧、提取视觉与文本特征写进特征表用户在前端产生的行为经埋点接口落日志离线任务每天汇总成用户向量推荐接口实时读 Redis 里的离线召回结果做一次轻量排序后返回前端。这条链路讲清楚答辩时被问“你的 Hadoop 到底干什么用”就不会卡壳。2.2 为什么是 Hadoop以及什么时候不该上 Hadoop毕设架构图上放一个 Hadoop 几乎成了惯例但真正跑起来代价不小单机伪分布式最少要 8G 内存三节点虚拟机建议 16G 起步光环境就能吃掉两天。判断要不要上我一般看两个指标——视频总量是否超过单机磁盘舒适区大致几百 GB 以上以及是否存在需要反复全量扫描的批处理任务比如全量重算视频相似度矩阵。两个都不满足硬上 HDFS 更多只是让架构图好看对功能没有实质帮助。更务实的做法是把 Hadoop 收窄到一个具体环节只用 HDFS 存原始视频和抽帧结果用 PySpark 替代原生 MapReduce 写特征聚合任务因为 Spark 的 DataFrame API 写起来比 MapReduce 的 map/reduce 两个函数短得多调试也方便。规模再小一点完全可以用本地目录 MySQL 先跑通全流程把 HDFS 做成可插拔的存储适配层等数据量上来再切。开题报告里写“利用 Hadoop 进行大规模数据存储与并行计算”是没问题的但方案章节最好补一句“在小规模验证阶段以单机模式运行接口保持不变”这样评审老师问起来有台阶下。2.3 功能模块清单与角色权限划分文档里列的功能看着零散其实可以归成两块一块是通用后台基础功能一块是差异化核心。通用基础功能包括管理员对用户和短视频的管理、个人中心、通知公告、交流论坛、个人资料编辑差异化核心是内容理解和个性化推荐。写代码时把这两块分开前者照抄任何一套后台模板都行后者才是要花时间的地方。角色可见模块对应接口前缀游客首页推荐流、视频详情、注册登录/api/recommend、/api/video、/api/auth登录用户上述 点赞收藏评论、论坛发帖、个人中心、通知/api/interact、/api/forum、/api/user管理员用户管理、视频管理审核/下架、公告发布、论坛管理/api/admin权限用 Flask 的装饰器统一拦截最省事别在每个视图里手写if role ! admin。后面二次开发要加“创作者”角色时只改装饰器的白名单不动业务代码。3. 文档结构拆解一份能过审的开题报告由哪几块拼成3.1 选题背景与意义写成一条因果链不要写成行业综述这份文档的背景部分其实已经踩在正确路径上内容量激增导致用户难以找到感兴趣的内容现象传统推荐算法在多样性和实时性上吃力不足于是需要内容理解 个性化推荐方案再落到 Python/Hadoop/Flask/Vue 的组合选型最后给出可衡量的目标体验提升、创作者受众分析。这条链条里每一环都能被追问也都能被回答比堆“短视频行业蓬勃发展”之类的句子强太多。写的时候有个技巧把“意义”拆成技术意义和应用意义两段技术意义写你的方案解决了现有方法的哪个具体短板比如单一模态特征对视频理解不足应用意义写系统上线后谁受益、受益在哪。别两段都写“具有重要意义”评审看三行就烦了。还有一处容易翻车——技术选型要在背景里埋下伏笔先说数据规模大后面出现 Hadoop 才不突兀先说用户兴趣多样后面出现深度模型才顺理成章。3.2 国内外研究现状按三条线组织每条都要有落点研究现状最怕写成文献罗列。这份文档的组织方式值得借鉴按“内容理解”“推荐算法”“系统架构”三条线分开写每条线内先列代表方法再补一句评述。内容理解这条线从 CNN 提视觉特征、RNN/LSTM 抓时序讲到用 Inception-v3、ResNet 做帧级特征提取再到 Transformer 做跨模态融合推荐算法这条线从协同过滤、基于内容、混合推荐讲到矩阵分解、自编码器处理稀疏性以及用强化学习优化长期满意度系统架构这条线落在分布式计算框架和前后端分离上。研究线代表方法评述落点写你自己系统的差异内容理解CNN、LSTM、ResNet、Transformer 多模态融合单一视觉特征对标题语义不敏感需要文本特征加权推荐算法协同过滤、基于内容、矩阵分解、强化学习冷启动阶段协同过滤不可用需内容侧兜底系统架构Hadoop/Spark 分布式、Flask Vue 前后端分离离线批处理与在线服务解耦接口层保持稳定每条评述都要指向“所以我的系统怎么做”这是评审最想看到的部分。国内外分开写的时候不用凑对称国外偏模型创新、国内偏工程落地这个差异如实写出来反而显得读过东西。3.3 研究方案、方法与进度把“怎么做”拆成可验收的动词文档里列了类比法、文献研究法、定量分析法、定性分析法四种方法光列名字没意义得绑定具体动作。类比法是拿现有平台的功能做对照找出自己系统的缺口文献研究法是给技术选型找依据定量分析法是对调研数据做统计用数字说明痛点定性分析法是对核心功能做特性归纳。写成“采用 XX 法对 XX 进行分析得出 XX 结论”一行一个干脆利落。进度安排同理五个阶段每段都要有可验收的产出物不能只写“完善系统设计”。参考这种排法第一阶段出系统初设与论文初稿第二阶段完成编码与联调产出可运行版本第三阶段做功能、性能、安全测试并修论文第四阶段定稿上交第五阶段准备答辩材料与演示脚本。每个阶段的产出物写清楚中期检查时对着表打勾比临时回忆进度靠谱得多。参考文献部分记得格式统一中英文混排时标点、卷期号、页码对齐这类细节扣分最冤。4. 从文档到可跑系统把功能模块翻译成接口和目录4.1 后端目录结构蓝图按业务切服务层单独抽Flask 项目最容易写成一坨app.py几百行路由堆在一起加个功能就得全文搜索。按业务拆蓝图、把业务逻辑抽到 service 层是这类系统最省心的结构后面换推荐算法只动 service路由一行不改。shortvideo/ ├── app/ │ ├── __init__.py # create_app 工厂注册蓝图与扩展 │ ├── models/ # SQLAlchemy 模型User/Video/Comment/Behavior │ ├── api/ │ │ ├── auth.py # 注册登录、JWT 签发 │ │ ├── video.py # 上传、详情、列表 │ │ ├── recommend.py # 推荐流 │ │ ├── interact.py # 点赞、收藏、评论、埋点 │ │ └── admin.py # 后台管理 │ ├── service/ │ │ ├── recall.py # 多路召回 │ │ ├── rank.py # 融合排序 │ │ └── storage.py # HDFS / 本地存储适配层 │ └── utils/ ├── offline/ # 离线任务抽帧、提特征、算相似度 ├── web/ # Vue3 前端 ├── config.py └── requirements.txtservice/storage.py这一层值得单独说把“写文件”抽象成save(file) - uri本地实现写磁盘HDFS 实现走hdfs dfs -put或 pyarrow 的 HadoopFileSystem。开发阶段用本地答辩演示前切 HDFS只改配置不改代码这就是前面说的可插拔。4.2 核心接口设计三条线撑起整个推荐闭环接口不用多推荐流、视频详情、行为埋点这三个就能跑通闭环其余都是外围。推荐接口要做参数兜底前端传什么都不能把服务打挂。# app/api/recommend.py from flask import Blueprint, request, jsonify from app.service.recall import recall_by_content, recall_by_itemcf from app.service.rank import merge_rank bp Blueprint(recommend, __name__, url_prefix/api/recommend) bp.get(/feed) def feed(): uid request.args.get(user_id, typeint) page request.args.get(page, default1, typeint) # 单页上限 50防止前端一次拉全量把离线表扫穿 size min(request.args.get(size, default10, typeint), 50) if not uid: return jsonify(code400, msguser_id 必填), 400 # 两路召回各取 200合并后再排序保证候选池足够大 cand recall_by_content(uid, top_n200) recall_by_itemcf(uid, top_n200) items merge_rank(uid, cand, pagepage, sizesize) return jsonify(code0, data{list: items, page: page, size: size})uid为空直接 400别用游客兜底逻辑悄悄返回热门榜否则前端联调时永远发现不了登录态丢失。size封顶 50 是保命条款离线候选表通常只有几千行一个size10000的请求就能把内存打满。top_n200是经验值太小排序空间不够太大排序耗时上来两千条候选以内 Python 侧排序都在毫秒级。行为埋点接口建议做成批量写入前端攒 10 条或每 3 秒发一次后端一次性bulk_insert比一条一条打接口省一个数量级的数据库连接。4.3 内容理解链路抽帧、提特征、融合打分视频理解的第一步是抽帧。整段视频直接喂模型既慢又没必要按固定间隔采样 32 帧左右足够表达画面主题。# offline/extract_frame.py import cv2, os def sample_frames(video_path, out_dir, fps1, max_frames32): cap cv2.VideoCapture(video_path) src_fps cap.get(cv2.CAP_PROP_FPS) or 25 step max(int(src_fps / fps), 1) # 每秒取一帧源帧率低时退化为逐帧 saved, idx, n [], 0, 0 while True: ok, frame cap.read() if not ok or n max_frames: # 视频结束或达到上限 break if idx % step 0: path os.path.join(out_dir, f{n:03d}.jpg) cv2.imwrite(path, cv2.resize(frame, (224, 224))) # ResNet 标准输入 saved.append(path) n 1 idx 1 cap.release() return savedfps1控制采样密度短视频一般 15 到 60 秒取 32 帧封顶刚好。max_frames是硬约束防止有人传十分钟的长视频把离线队列堵死。有些视频第一帧是纯黑封面可以跳过前 0.5 秒再开始采这个细节能让特征质量明显好转。抽完帧就提特征视觉侧用 ResNet50 去掉分类头输出 2048 维向量文本侧对标题和话题标签做 TF-IDF 或句向量两路归一化后加权拼接。# offline/build_vector.py import numpy as np, torch from PIL import Image from torchvision import models, transforms backbone models.resnet50(weightsmodels.ResNet50_Weights.DEFAULT) backbone.fc torch.nn.Identity() # 去掉分类头输出 2048 维特征 backbone.eval() pre transforms.Compose([ transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) torch.no_grad() def visual_vector(frames, alpha0.7): imgs torch.stack([pre(Image.open(f).convert(RGB)) for f in frames]) vis backbone(imgs).mean(0).numpy() # 帧级特征取均值 视频级视觉向量 vis vis / (np.linalg.norm(vis) 1e-8) # L2 归一化方便后面算余弦 return visbackbone.fc torch.nn.Identity()这一步别省不去掉分类头拿到的是 1000 类概率区分度极差。帧级特征取均值是最朴素的时序聚合比 LSTM 便宜得多短视频场景下效果差距不明显。alpha预留给视觉与文本的加权融合视觉为主时取 0.7 左右标题党内容多的数据集可以往下调到 0.5。上线时把模型导出成 ONNX 或 TorchScript离线批量推理能快两三倍。最后是排序多路召回的结果必须去重再融合权重别拍脑袋先用经验值跑通再拿日志调。# app/service/rank.py W {content: 0.6, cf: 0.3, fresh: 0.1} def merge_rank(uid, cand, page, size): seen, scored set(), [] for c in cand: if c[vid] in seen: # 多路召回去重 continue seen.add(c[vid]) score (W[content] * c[sim] # 内容相似度余弦 W[cf] * c[cf_score] # 协同过滤分归一化到 0~1 W[fresh] * c[fresh_score]) # 新鲜度 1/(1发布天数) scored.append((score, c[vid])) scored.sort(reverseTrue) start (page - 1) * size return [{vid: v, score: round(s, 4)} for s, v in scored[start:start size]]三个权重加起来是 1方便解释fresh_score用倒数衰减是为了让新视频有机会冒头否则冷启动内容永远排不上。真要在答辩时讲出深度可以在排序后加一步打散同作者连续出现超过两条就往后挪这条改动只要十几行但对“推荐多样性”这个常被追问的点是实打实的回应。5. 避坑清单五个让答辩和联调同时翻车的现场5.1 现象架构图画了 Hadoop跑起来只有一台 Flask原因基本是把“技术栈”当成了“已实现”环境没搭、代码没写演示时只有 CRUD 页面。解决办法是二选一要么真搭一个伪分布式把抽帧结果往 HDFS 里写一遍录屏留证要么把方案改成“本地存储 预留 HDFS 适配层”在论文里明确写清当前规模不需要分布式。后者更诚实也更容易自圆其说。最忌讳的是两边都不做被追问时只能干笑。5.2 现象推荐流每次刷新顺序都一样像静态列表原因是分数在离线阶段算好后直接按序返回没有在线扰动。改法是在merge_rank之后加一层轻量随机对 Top 20 做加权采样或者给分数加一个 ±3% 的噪声项让相近分数的内容轮换出现。另外检查缓存 key 是不是只按user_id拼的如果是同一用户一天内拿到的永远是同一份缓存把page和日期拼进 key 就能缓解。5.3 现象上传稍大的视频接口直接 502这是典型的同步阻塞Flask 开发服务器单进程处理上传文件一大就超时Nginx 那边还有client_max_body_size默认 1M 的限制。解决分三步——Nginx 调大到 200M 并放宽proxy_read_timeout上传接口只负责落盘和写记录抽帧提特征丢给后台任务Celery 或简单的线程队列都行前端做分片上传单片 5M。三步做完百兆级视频也不会卡住整个服务。5.4 现象中文标题提不出有效特征推荐全靠画面多半是分词环节没配好没装分词库、停用词表为空、或者读文件时编码不对导致中文变成乱码。检查顺序是先用jieba.lcut打印一条标题看看切出来什么再看特征矩阵是不是整行零。TF-IDF 的analyzer要设成char_wb或自定义分词函数默认按空格切对中文完全无效。这个坑很隐蔽因为流程不报错只是效果差靠肉眼看推荐结果才发现。5.5 现象被问“你的创新点是什么”答“用了 Flask 和 Vue”技术栈不是创新点是工具。把创新点落到具体的策略差异上内容特征与行为特征的双路融合权重、冷启动阶段用内容召回兜底、排序后的多样性打散规则。每一条都能对应到代码里的某个函数和一组可对比的实验数据讲起来才有底气。反过来如果确实没有策略层面的改动就老实说“工程实现与验证”别硬编。6. 二次开发换模型、换场景、换存储的三条改法拿到这份开题报告和配套代码后最常见的需求是换题目——短视频换成商品、课程、文章都行。改动量其实集中在三处特征提取、召回策略、展示字段。视觉特征那一段如果换的是图文场景extract_frame.py整个可以删掉直接对主图跑 ResNet 或者换成 CLIP 拿到图文共享空间文本侧换成句向量模型融合逻辑一行不用改因为输入都是归一化后的定长向量。改造方向要动的文件风险点换特征模型ResNet → CLIP / 视频模型offline/build_vector.py维度变化要同步改特征表字段与相似度计算换召回策略加向量检索service/recall.py需要引入向量库注意与 MySQL 的一致性换存储HDFS → 对象存储 / 本地service/storage.py只改适配层别把路径拼进业务代码换前端形态Vue → 小程序api/保持不变接口返回结构别随便改加字段可以删字段不行验证方法别只靠肉眼刷推荐流那玩意儿玄学得很。离线侧算 Recall10 和 NDCG10用历史行为做留一法切分在线侧如果没条件做 A/B至少记录点击率和平均观看时长两个指标改动前后各跑三天做对比。我一般会在offline/下放一个eval.py每次改完权重就跑一遍把结果追加到 CSV 里答辩时那张趋势图比任何形容词都有说服力。还有个血泪经验改造前先把原始版本完整跑通并打一个 git tag后面无论怎么折腾都能回滚。我曾经图省事直接在主干上换模型结果特征维度对不上离线任务静默失败推荐流退化成按时间倒序三天后才发现。从那以后每次动特征层之前我都会强制走一遍“跑通基线 → 打 tag → 改一列 → 对指标”的流程宁可慢半天也不给自己留后悔药。希望这份拆解能帮你少走几步弯路把开题报告里的架构图真正变成能点开、能刷新的页面。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
网站ICP备案全流程:从域名实名到备案号悬挂与驳回排查 第一次给域名做备案,最难受的从来不是流程有多复杂,而是你根本不知道下一步该点哪里、该准备什么、卡住了找谁。上个月我陪一位做独立站的朋友从零走了一遍,从注册域名到页脚挂上备案号,中间被打回两次,前后耗了十七天… · 2026/11/4 8:41:38
导弹打航母建模:分段参数方程与三维升维方法 简介:本资源为第八届MathorCup高校数学建模挑战赛特等奖优秀论文(编号C3289),聚焦陆基导弹打击航母这一典型军事应用场景,面向数学建模竞赛参赛者、国防领域建模初学者及高校相关专业师生。论文完整呈现从静止目标到移… · 2026/11/3 11:48:27
周口低压电工证在哪考 外省证怎么转 这含金量你别忽视 周口低压电工证在哪考 外省证怎么转 这含金量你别忽视 之前考的证在外省能不能转过来?这是很多周口朋友最关心的问题。别急,今天就从 周口低压电工证在哪考 这个关键词切入,告诉你怎么把外省的证转过来,还有这个证的 含金量… · 2026/11/8 1:58:55
工地太忙根本没时间复习考试?几月报考电工证在哪考全攻略 工地太忙根本没时间复习考试?几月报考电工证在哪考全攻略 工地太忙根本没时间复习考试?你不是一个人。尤其是像低压电工、高压电工这些特种作业证,考试内容多、实操要求高,很多一线施工人员总觉得“哪有时间准备”。但问题来了, 几月报考电工证 ?… · 2026/11/8 1:58:55
上海电工证合格分数你知道多少?考前押题助你一次过 上海电工证合格分数你知道多少?考前押题助你一次过 你正在找电工相关工作,但手里没证,连面试机会都少?别急,上海电工证合格分数你知道多少?考前押题练好了,一次过不是梦! 电工证在上海找工作有多重要… · 2026/11/8 1:58:55
长沙电工证报名优惠通过率揭秘:工地太忙怎么高效备考? 长沙电工证报名优惠通过率揭秘:工地太忙怎么高效备考? 工地太忙根本没时间复习考试,但又得考电工证才能上岗?别急,今天就告诉你怎么在忙碌中高效拿证。很多人以为电工证只是走个流程,其实考试内容、通过率、报名优惠这些细节,直接影响你能不能一次过。… · 2026/11/8 1:58:55
塔城托里县电工证官方回应:不知道去哪报名怕被中介坑?这几点必须知道 塔城托里县电工证官方回应:不知道去哪报名怕被中介坑?这几点必须知道 不知道去哪报名怕被中介坑?塔城托里县电工证官方回应来了!别再被那些打着“包过”旗号的机构骗了。很多新乡市政公用工程从业者也面临同样的问题,如何避开套路,找到靠谱的报考渠道?… · 2026/11/8 1:58:55
架子工特种作业证样图值不值得考?这些干货别错过 架子工特种作业证样图值不值得考?这些干货别错过 怕考不过白交培训费,这是很多信阳房建工程从业者在考架子工特种作业证前最担心的事。你是不是也担心花了钱最后还是考不过?别急,今天就带你搞清楚架子工特种作业证样图到底值不值得考,还有报名材料、考试… · 2026/11/8 1:57:55
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/8 1:18:25