Sunday面试指南

CDN 是什么?回源、缓存刷新和缓存命中率应该怎么理解?

🧑‍💻 面试官:CDN 为什么快?

🙋‍♂️ 我:把静态资源放到离用户近的服务器。

🧑‍💻 面试官:同一个地址返回不同用户的数据,能放进同一个缓存吗?

🙋‍♂️ 我:不能,需要区分或不共享缓存。

🧑‍💻 面试官:刚更新文件用户还看到旧图,清 CDN 缓存就一定解决了吗?

CDN 不只是就近存文件,还要定义缓存键、有效期与失效路径;命中错内容比不命中更糟。

面试速答(60 秒版)

CDN 通过边缘节点分发内容,缓存命中时减少回源访问与传输距离,但不保证所有用户物理最近或所有请求都缓存。

缓存键决定哪些请求共用表示,可能涉及路径、查询参数、请求头和 Cookie 等策略。不能忽略影响响应的维度,也不能把无关参数全部加入导致命中率很低。

新鲜度、验证和主动失效要一起设计。HTTP no-cache 是使用前验证,不等于禁止存储;no-store 才表达不存储意图,还需确认 CDN 配置没有覆盖期望。

静态资源常用内容版本化地址,HTML 采用合适策略。更新后还要检查浏览器缓存、边缘缓存、回源负载和实际响应,不能只刷新一个层。

CDN 的缓存命中与回源路径由缓存键和新鲜度策略控制

知识点详解:缓存命中之前,先保证大家拿的是同一份内容

边缘命中和回源是两条路径

假设用户读取版本化图片。边缘已有可使用的表示,直接返回;未命中或需要验证时,按部署路径向上游或源站获取。

CDN 还可以有分层缓存、请求合并和流量调度,具体依赖产品。源站慢、首个未命中和动态处理不会因为有 CDN 就全部消失。

观察要分命中请求延迟与回源请求延迟,不只看整体平均数。

缓存键遗漏维度,会让不同请求共用错误内容

假设 /profile 根据登录 Cookie 返回个人资料,但共享缓存只按路径区分,就可能复用不属于当前用户的响应。

公共页面若按语言返回不同版本,也要把必要维度放进正确策略。反过来,把随机追踪参数全计入键,又会让相同内容产生许多副本。

转发到源站的字段与计入缓存键的字段并不一定相同,必须核对产品配置。个性化和授权内容尤其需要谨慎,不用命中率掩盖泄露风险。

到期、验证和失效各有作用

max-age、s-maxage 等表达不同缓存范围的新鲜度,验证器可以帮助判断已有表示是否还能用。no-cache 不等于不保存,它要求按规则验证后使用。

主动失效可以清除指定边缘对象,但浏览器中已经保存的副本不一定被远程清掉。使用内容版本化路径,可以让新页面引用新资源,同时保留旧页面所需旧文件。

具体产品还有 TTL 下限、上限和策略。以 CloudFront 为例,非零最小 TTL 会影响某些源站缓存头的预期效果,不能只检查应用代码。

缓存一起失效时,源站承不承受得住

假设热门资源大批到期,许多边缘同时回源,会把平时命中节省的请求集中压到源站。预热、错开过期或相关陈旧内容策略要结合产品能力评估。

更新上线先看正确版本,再看边缘命中、回源错误、带宽和成本。敏感内容不得为了稳定就随意允许陈旧副本继续使用。

面试答案讲到这里,CDN 就从“更近的服务器”变成了可验证的分发与缓存方案。

本题机制参考:HTTP Caching RFC 9111、CloudFront 缓存键、CloudFront 有效期、CloudFront 失效。

面试官继续追问

用了 CDN,源站就不用扩容了吗?

不是。未命中、动态请求和集中回源仍依赖源站容量。

no-cache 和 no-store 相同吗?

不同。前者允许保存但使用前按规则验证,后者表达禁止存储;具体部署还需检查策略。

清边缘缓存会清掉浏览器缓存吗?

通常不能这样认为。需要版本化、浏览器缓存策略或等待相关有效期。

面试速记卡

  • 路径:边缘命中与回源分开。
  • 缓存键:必须区分会改变响应的必要维度。
  • 新鲜度:到期、验证和主动失效各有职责。
  • 版本化:新 URL 配合页面更新,不是删光旧文件。
  • 验收:正确内容、回源峰值、错误与成本。

公司面试真题

真题根据求职者公开面经整理,题意经过概括,非逐字原话或公司官方题库;本文为 Sunday 的独立解析。

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历