跳到主要内容
哒哒星球DADA PLANET

实践笔记

库存明明剩 4 本,为什么页面还显示 5 本

库存明明剩 4 本,为什么页面还显示 5 本

图书管理员查完库存,把“5 本”写在手边卡片上。下一次有人问,他先看这张卡,就省去一次查库。

问题出在两次提问之间:库里借走了一本,卡片却没更新。这份合成例子把几个时刻分开列了出来:

时刻真实库存卡片值(本步前→后)读到的值是否重新查询
t05空→空不读取否
t15空→55是
t245→5不读取否
t345→55(旧值)否
t445已过期→44是

最容易混淆的是 t2 和 t3。t2 只改变真实库存,没有人读取;t3 才有人来问,管理员拿仍可使用的卡片回答,于是说了旧值 5。

到 t4,卡片过期,管理员重新查库,读到 4,并把卡片改成 4。

这就是本例里三个词的意思:命中是手边有可用答案,未命中是需要重新查询,过期是旧记录超过了约定的使用期限。软件还可以采用主动更新等别的做法,这个例子只演示按期限重新查询。

可以用末尾的小题自查一下:其他条件不变,只把 t2 的真实库存改成 3,t3 会读到多少?沿着“这一步有没有刷新卡片”去看。

复用这份示例的完整提示词:

请给完全没学过编程的人解释缓存。变量示例:【概念】缓存;【读者】能理解图书馆借书流程;【类比】管理员把常用查询答案写在手边卡片上;【范围】只讲命中、未命中、过期与旧数据,不讲分布式系统;【演示数据】t0真实库存为5且卡片为空,t1第一次读取库存,t2后台把真实库存改成4但卡片没刷新,t3再次读取,t4卡片过期后再读。先用两句话解释为什么要保存一份结果,再用不超过五行的表展示每个时刻的真实值、卡片值、读到的值和是否重新查询;没有读取的时刻写“不读取”。必须让t3读到旧值5、t4重新取得4,不要假设后台一改卡片就自动更新。之后分别用一句话解释命中、未命中和过期,避免用术语解释术语。明确指出图书卡片类比的一个边界:真实软件的刷新策略并不都靠固定时间。最后提出一道只有一个变量变化的理解题,暂不提供答案。总解释控制在350个汉字左右,不用“像高速公路一样快”这类无法检查的说法。

本次输入(确切变量取值;以上要求保持不变):
概念:缓存;读者从未学过编程;类比:图书管理员把常用查询答案写在手边卡片上;数据序列t0库存5,t1读取,t2后台库存改成4但卡片未刷新,t3再次读取,t4卡片过期后读取;不讨论分布式系统。