
在线 Java 面试刷题已更新241题图文并茂https://www.quanxiaoha.com/java-interview面试考察点基础概念掌握度面试官不仅仅是想知道 CDN 的全称和定义更是想确认你是否理解 CDN 解决的核心问题——网络延迟和源站压力以及它是如何从架构层面来解决这些问题的。缓存原理理解考察你是否理解 CDN 缓存的底层机制包括缓存命中、缓存过期、缓存更新等关键流程而不是只笼统地知道 CDN 能缓存静态资源。架构设计思维看你能否从全局视角理解 CDN 在整个系统架构中的定位以及何时该用 CDN、何时不该用。核心答案CDNContent Delivery Network内容分发网络是一种分布式服务器网络核心思路就是把内容缓存到离用户最近的边缘节点上让用户就近获取数据而不是每次都跑到源站origin server去拿。为什么 CDN 能做缓存一句话概括CDN 的边缘节点本质上就是一个反向代理缓存服务器它拦截用户请求如果本地有缓存且未过期就直接返回没有才回源。这个机制和浏览器缓存、Nginx 缓存本质上是一回事只是 CDN 把缓存节点部署到了全球各地的机房里。img上图展示了 CDN 的核心工作流程整体分为三个层次用户层分布在不同地域的用户发起请求DNS 会将请求解析到最近的边缘节点。边缘节点层每个边缘节点维护自己的本地缓存。用户请求先到边缘节点如果缓存命中且未过期直接返回数据响应时间通常在毫秒级。如果缓存未命中边缘节点会代替用户去源站拉取资源拿到后缓存一份再返回给用户。源站层真正的业务服务器只在边缘节点没有缓存时才会被访问。CDN 的核心价值就是把绝大多数请求拦截在边缘节点源站的 QPS 能降低 90% 以上。关键点在于没有 CDN 的时候所有用户都直接访问源站距离远、延迟高、源站压力大有了 CDN 之后每个用户就近访问边缘节点延迟低、速度快、源站轻松了。深度解析一、CDN 能做缓存的技术原理很多人知道 CDN 能缓存但说不清楚具体是怎么实现的。其实 CDN 的缓存机制依赖几个核心技术1. DNS 智能解析GSLBCDN 能让用户访问到 最近的 节点靠的是GSLBGlobal Server Load Balancing全局负载均衡。当用户访问一个接入了 CDN 的域名时用户发起 DNS 解析比如static.example.comDNS 查询到的是 CDN 的权威 DNS而不是源站的 IPCDN 的 GSLB 根据用户的 IP 地址、各边缘节点的负载情况返回一个最优的边缘节点 IP用户直接向这个边缘节点发起请求这就是为什么北京用户和上海用户访问同一个域名拿到的 IP 不一样。加入小哈的星球你将获得:专属的项目实战4个项目 / 1v1 提问 / 简历修改 /Java 学习路线 /社群讨论 /学习打卡 / 每月赠书《仿小红书微服务架构》 已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《Spring AI 应用RAG 智能客服》已完结, 基于 Spring AI Spring Boot 3.x JDK 21《秒杀系统设计》正在更新中单体到微服务高并发架构演进《前后端分离博客项目全栈开发》已完结,演示链接http://116.62.199.48/项目阅读地址https://quanxiaoha.com/column截止目前累计输出 120w 字讲解图 4013 张还在持续爆肝中..戳我加入学习解锁全部项目已有4500小伙伴加入2. 缓存命中与回源边缘节点收到请求后处理逻辑非常类似一个缓存代理步骤动作说明1接收请求边缘节点收到用户请求2查找缓存根据请求的 URL 查找本地缓存3a缓存命中直接返回缓存内容附加X-Cache: HIT响应头3b缓存未命中向源站发起请求获取内容后缓存并返回4缓存过期如果缓存已过期向源站验证304或重新拉取你可以通过响应头里的X-Cache字段判断是否命中了 CDN 缓存HIT表示命中MISS表示未命中。3. 缓存过期与刷新策略CDN 的缓存时效不是随便定的主要依赖 HTTP 协议里的缓存控制头**Cache-Control: max-age3600**——资源在 3600 秒内被视为新鲜直接用缓存**Expires**——指定绝对过期时间HTTP/1.0 的老方案优先级低于Cache-Control**ETag/Last-Modified**——缓存过期后用这些头做条件请求如果源站资源没变就返回304 Not Modified省带宽我在实际项目中踩过一个坑更新了静态资源但 CDN 缓存没刷新用户看到的还是老版本。后来我们的方案是给静态资源文件名加hash 指纹比如app.a3b2c1.js每次更新文件名都变了自然就不会命中旧缓存了。这也是现在前端工程化的标配做法。二、CDN 适合缓存什么不适合缓存什么这个面试官特别爱追问因为它考察的是你对业务场景的理解。适合缓存不适合缓存静态资源JS、CSS、图片、字体实时性要求高的接口股票行情大文件下载安装包、视频用户个性化数据个人中心页面直播/点播视频流频繁变更的动态数据不常变更的 API 响应商品详情页涉及敏感操作的交易请求说白了读多写少、更新频率低、对实时性要求不高的内容都适合放 CDN。三、CDN 缓存 vs 浏览器缓存 vs Nginx 缓存面试中经常让你对比这几种缓存区别在哪对比维度浏览器缓存CDN 缓存Nginx 本地缓存缓存位置用户本地CDN 边缘节点源站同机房的代理层服务范围仅当前用户同区域的所有用户所有经过该 Nginx 的用户网络延迟最低本地读取低就近机房中需到源站机房缓存命中率取决于单个用户高大量用户共享较高源站保护无缓存未命中直接打源站强拦截大部分请求中等一个完整的链路是用户请求 → 浏览器缓存 → CDN 边缘节点缓存 → Nginx 缓存 → 源站。每一层都挡住一部分请求最终到源站的请求量就很小的。面试高频追问CDN 缓存和浏览器缓存有什么区别浏览器缓存是用户本地的只对当前用户有效CDN 缓存在边缘节点上对该区域内所有用户共享。浏览器缓存未命中直接打源站CDN 缓存未命中是 CDN 节点去回源用户感知不到。打个比方浏览器缓存是你自己冰箱里的存货CDN 缓存是你小区门口便利店的存货。如何解决 CDN 缓存更新不及时的问题三种方案一是文件名加 hash 指纹推荐二是主动调用 CDN 服务商的缓存刷新 API三是缩短max-age但这会增加回源频率需要权衡。CDN 是怎么防止被盗链的常见手段包括Referer 鉴权检查请求来源、IP 黑白名单、URL 签名/鉴权生成带过期时间的加密 URL、回源鉴权。生产环境中 URL 签名方案用得最多比如视频网站的播放链接通常带有token参数过期就失效。常见面试变体CDN 的回源机制是什么什么情况下会回源CDN 是如何实现就近访问的CDN 缓存和 Redis 缓存有什么区别各适合什么场景如何设计一个高可用的静态资源分发方案记忆口诀CDN 缓存四要素就近缓存响应快DNS 智能来调度缓存未命中才回源源站压力自然降。记住一个链路用户 → 浏览器 → CDN 边缘 → Nginx → 源站越往后请求越少。总结CDN 的核心价值就是 就近缓存 智能调度通过在全球各地部署边缘缓存节点配合 DNS 智能解析让用户拿到最近的缓存数据。面试中抓住GSLB 调度、缓存命中/回源机制、HTTP 缓存控制头这三条主线再结合静态资源 hash 指纹、防盗链等实际经验就能把这道题答得比较扎实。加入小哈的星球你将获得:专属的项目实战4个项目 / 1v1 提问 / 简历修改 /Java 学习路线 /社群讨论 /学习打卡 / 每月赠书《仿小红书微服务架构》 已完结基于 Spring Cloud Alibaba Spring Boot 3.x JDK 17..., 点击查看项目介绍演示地址http://116.62.199.48:7070/《Spring AI 应用RAG 智能客服》已完结, 基于 Spring AI Spring Boot 3.x JDK 21《秒杀系统设计》正在更新中单体到微服务高并发架构演进《前后端分离博客项目全栈开发》已完结,演示链接http://116.62.199.48/项目阅读地址https://quanxiaoha.com/column截止目前累计输出 120w 字讲解图 4013 张还在持续爆肝中..戳我加入学习解锁全部项目已有4500小伙伴加入1. 我的私密学习小圈子从0到1手撸企业实战项目~ 2. 面试官YoungGC 和 FullGC 的触发条件是什么 3. 百度面试官RabbitMQ 如何防止重复消费5种解决方案你知道几个 4. 面试被拷打什么是 TCP 的粘包、拆包问题我了解这个有嘛用最近面试BAT整理一份面试资料《Java面试BATJ通关手册》覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式点“在看”关注公众号并回复 Java 领取更多内容陆续奉上。PS因公众号平台更改了推送规则如果不想错过内容记得读完点一下“在看”加个“星标”这样每次新文章推送才会第一时间出现在你的订阅列表里。 点“在看”支持小哈呀谢谢啦