D14_第二周数据链路验收
Android 学习笔记 D14第二周验收取消全部收藏为什么不能删除缓存摘要通过“取消所有本地收藏”这个真实业务变更检验网络、分页、搜索、数据库与 UI 的边界并设计能证明缓存未被误删的验证。标签Android、项目复盘、数据一致性、测试、面试表达本文对应 28 天课程 D14回顾《第一行代码》第 3 版第 7、10、11、13 章涉及的存储、异步、网络与 Room。今天冻结新框架用一个小需求检查第二周的代码是否能承受变化。下面是可执行的验收方案和推演不虚构已经发生的个人排错经历。1. 把需求写到能够判断对错需求是“取消全部本地收藏”不是“重置应用数据”。操作完成后收藏页为空首页和详情的收藏标记全部取消已经缓存的文章元数据与首页顺序保留断网重启仍可以看到先前缓存的文章。这个功能仅针对当前本地库不调用服务端账号的收藏接口也不影响主题设置。如果只在 UI 中把收藏列表赋为空重启后数据库会重新发出旧记录功能没有真正完成。如果直接清空整个数据库收藏虽然消失但首页缓存也丢失需求同样失败。一个操作是否正确既要检查目标发生的变化也要检查本应保留的数据。这也是分开存储用户选择与网络缓存的实际收益需求可以对应到清楚的表和 DAO 操作。若当前把缓存和收藏塞进同一张表也可以用精确更新完成但必须确认不会把文章内容一起删除。2. 从按钮追踪到数据库再从数据库返回页面事件路径设计为用户点击、ViewModel 发起、Repository 调用收藏 DAO、数据库提交、观察流发出新值、相关页面更新。按钮的忙碌状态用于防止重复触发并反馈执行过程但收藏数量应由数据库查询决定不能长期依赖一个手工维护的减法计数。以下是局部 Room 3 DAO 扩展与 Repository 装配示例沿用 D12 的bookmark表代码未在工程编译。后文检查步骤中的快照读取能力需由测试 DAO 提供不能当作已经存在的项目方法。DaointerfaceBookmarkMaintenanceDao{Query(DELETE FROM bookmark)suspendfunclearBookmarks():Int}classBookmarkRepository(privatevaldao:BookmarkMaintenanceDao){suspendfunclearAllLocalBookmarks():Intdao.clearBookmarks()}单条删除语句在数据库中完成本次修改返回行数可用于诊断或操作反馈。如果还要同步修改多张关联表应把需要共同提交的本地写入放入事务。不能把“先清收藏、后发网络”包装成一个跨网络的数据库事务并假定两边拥有同样的原子性。Room DAO 写入说明操作失败时保留原有收藏显示并给出重试入口成功后由查询推送空收藏集合。重复执行清空可以返回零行属于可接受的幂等效果不应被误判为数据库故障。UI 应区分“正在清空”与“目前没有收藏”避免用同一个状态同时表达过程和结果。3. 一条足够有力的检查在测试库插入文章 A、B、C其中 B、C 为收藏首页顺序为 C、A、B。清空之前读取文章内容快照、首页成员顺序和收藏 ID。执行 Repository 的清空入口再查询三组数据。预期收藏为空而文章内容快照与首页成员顺序逐项相同。准备cache [A, B, C]home [C, A, B]bookmark [B, C] 操作repository.clearAllLocalBookmarks() 断言bookmark 为空 断言cache 的 ID、标题、作者、URL 均与操作前相同 断言home 的 ID 顺序与操作前相同 再次执行返回删除数量为 0以上断言仍成立只比较缓存数量还不够因为删除三条后插入另外三条数量一样但内容已损坏。因此检查关键字段与顺序不以“页面还有三行”作为唯一证据。随后断网重启做一次集成验证确认可见页面也使用这份未被删除的缓存。测试完成后再记录实际结果文中的预期不能提前写成“全部通过”。并发场景也应有约定清空时是否允许另一页面新增收藏本课可通过 Repository 串行管理收藏写入按提交顺序定义最终状态。若清空之后用户又明确添加一篇它应该重新出现“清空完成后永远为零”并不是合理的不变量。4. 第二周其余链路怎么串起来先在线加载首页进入详情收藏再退出重开确认数据能从持久层恢复。随后断网查看缓存同时看到刷新失败提示。搜索使用 Fake 制造 A 慢、B 快确认最终只接受 B分页让请求参数一失败后重试核对仍请求一。这些场景对应不同事实不应一次打开所有故障开关。每次只改变一个条件日志记录操作、输入、请求身份、页码和提交结果。若出现首页收藏标记不更新先看 DAO 的记录是否删除记录已删除再查查询与合并不要一上来就重建 Activity 或发送全局“刷新”事件掩盖问题。这样可以把一段复盘写成可核验的因果链现象是什么、哪些假设被排除、证据在哪一层、修改如何改变状态路径。没有真实执行过时就写“计划验证”与“预期”不要为了博客完整度编造一段自己的排错故事。5. 原创面试问答与追问问一如何证明清空收藏没有误删缓存比较操作前后的缓存字段和首页成员顺序再断网重启。追问只检查行数够吗不够同样数量也可能是不同数据。问二清空后立刻又有一条收藏一定是 bug 吗不一定要看是否有后续合法添加以及提交顺序。追问怎样减少歧义串行管理相关写入明确状态由数据库提交结果决定。问三复盘为什么不能只列做了哪些功能功能清单不解释数据正确性与排错能力。追问面试时怎么讲选择一次明确变更说明边界、反例、实现和验证证据。问答为针对本验收原创整理可以在复习面试鸭的线程、异步基础后继续练习数据库与数据架构部分属于本课程扩展不是题库原文。6. 验收产物应该是什么交付一份数据流草图、一张故障场景表、一条清空收藏但保留缓存的检查记录以及尚未通过的限制说明。能够独立在六十分钟内完成小变更并解释数据边界比继续堆库更能证明第二周学到了什么。书本知识在这里形成闭环异步负责等待网络负责更新来源数据库负责长期事实UI 根据可观察状态展示结果。

相关新闻

创业公司没招聘团队,我一个人用一张表撑了三个月

创业公司没招聘团队,我一个人用一张表撑了三个月

创业公司没招聘团队,我一个人用一张表撑了三个月我是这家公司唯一的 HR。对,就我一个。没有招聘团队,没有 SaaS 后台,连个像样的 ATS 都没有。前台兼行政的是另一个人,老板自己偶尔也上 BOSS 直聘刷人。去年九月到十二…

2026/10/14 4:05:42 阅读更多 →
JSP服装营销系统开题报告:从设计到答辩全攻略

JSP服装营销系统开题报告:从设计到答辩全攻略

开题报告这个东西,最折磨人的往往不是写不出来,而是不知道“写什么才像那么回事”。我帮好几个朋友看过JSP方向的选题报告,十个里有八个是把教科书目录抄了一遍,剩下两个是把需求分析写成了流水账。今天我就拿“基于JSP的服装营销…

2026/10/14 4:05:42 阅读更多 →
Mac中文LaTeX配置全攻略:TeXStudio+MacTeX+XeLaTeX实战

Mac中文LaTeX配置全攻略:TeXStudio+MacTeX+XeLaTeX实战

Mac上装好TeXStudio之后,第一次写中文文档,点下编译按钮,输出面板跳出来一屏英文报错,这事儿我太熟了。后来把整个链条理顺才发现,问题根本不在TeXStudio本身,而是三件事没做好:发行版没装对、编…

2026/10/14 4:05:42 阅读更多 →

最新新闻

一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一次线上事故让我把socket连接这件事彻底搞明白了。当时某个项目组反馈所有本地应用突然连不上MySQL,我登录服务器一看,mysqld进程明明活着,3306端口也在正常监听,可本地应用全部报socket错误。查了半个多小时,最后发现…

2026/10/14 4:45:56 阅读更多 →
最大熵补丁采样:让少样本分类模型学会“看哪里”

最大熵补丁采样:让少样本分类模型学会“看哪里”

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 4:45:56 阅读更多 →
个人开发者软著申请全流程指南:材料准备、提交与避坑要点

个人开发者软著申请全流程指南:材料准备、提交与避坑要点

软著这个东西,说白了就是给软件“上户口”。我是从独立开发那会儿开始接触的,一开始也觉得麻烦,无非就是写代码的人做点文档工作。但真正自己走完一遍以后,才发现里面门道不少,很多细节不去实际踩一遍根本想不到。这篇…

2026/10/14 4:45:56 阅读更多 →
JavaScript基础核心概念详解:变量、类型、函数、闭包与异步

JavaScript基础核心概念详解:变量、类型、函数、闭包与异步

我教过不少刚接触代码的人,发现大家学 JavaScript 都会经历同一个尴尬阶段:跟着教程能写出例子,合上教程就不知道下一步该干嘛。原因很简单——基础概念没有变成自己的。这篇文章是「JavaScript 基础」系列的第一讲,目标只有一个&…

2026/10/14 4:45:56 阅读更多 →
Modbus报文从入门到实战:帧结构、寄存器映射与CRC校验详解

Modbus报文从入门到实战:帧结构、寄存器映射与CRC校验详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 4:45:56 阅读更多 →
Personal Agent 省钱实战:从订阅替代到混合架构搭建

Personal Agent 省钱实战:从订阅替代到混合架构搭建

1. 从一条动态说起:Personal Agent 到底在解决什么问题前阵子刷到一条动态,标题大意是“又一 Personal Agent 发布,帮我省下不止200刀”。评论区一半人在问“这玩意儿到底能干啥”,另一半人在晒自己的订阅账单——原来大家每个月花…

2026/10/14 4:44:56 阅读更多 →

日新闻

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/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

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