🔗 因果链 — 因为…所以…

技术不是凭空出现的,每个方案都因为一个问题而诞生

❓ 因为有问题 → 💡 所以有方案 → ⚡ 但方案引入新问题 → 🔗 所以又需要新方案

📖 因果链阅读法

❓ 因为有问题💡 所以有方案⚡ 方案引入新问题💡 所以又需要新方案
面试题不是孤立的——它们都在因果链上。
理解了因果关系,面试时从根因出发推导,而不是死记硬背。
⚙️
后端因果链
MySQL→Redis + Spring + Java并发 + 微服务 + MQ + 分布式 · 6篇
🗄️MySQL → Redis 因果链
因为数据量增长→所以索引优化→因为并发增长→所以读写分离→因为主从延迟→所以缓存→因为穿透击穿雪崩→所以布隆/互斥锁/随机过期→因为一致性→所以延迟双删/Canal→因为单库装不下→所以分库分表→因为跨库事务→所以分布式事务
索引因果读写分离主从延迟缓存引入穿透击穿雪崩缓存一致性分库分表分布式事务
🍃Spring 生态因果链
因为手动new耦合→所以IoC→因为Bean有依赖→所以DI→因为横切关注点重复→所以AOP动态代理→因为AOP能拦截→所以@Transactional→因为配置太多→所以自动装配→因为通用功能重复→所以Starter→因为循环依赖→所以三级缓存
IoCDIAOP@Transactional失效自动装配Starter循环依赖Bean生命周期
🔀Java 并发因果链
因为串行效率低→所以多线程→因为共享变量不可见→所以volatile→因为竞态条件→所以synchronized→因为锁不够灵活→所以Lock/读写锁/StampedLock→因为线程创建开销→所以线程池→因为阻塞等待→所以CompletableFuture→因为变量隔离→所以ThreadLocal
volatilesynchronized锁升级ReentrantLock线程池CompletableFutureThreadLocalJMM
🏗️微服务因果链
因为单体太大→所以拆分→因为地址硬编码→所以注册发现→因为没有统一入口→所以网关→因为故障级联→所以熔断降级→因为调用链复杂→所以链路追踪→因为配置散落→所以配置中心
服务拆分NacosGatewaySentinelSleuth配置中心
📨消息队列因果链
因为同步阻塞→所以MQ→因为消息丢失→所以确认+持久化→因为消息重复→所以幂等→因为顺序要求→所以顺序消费→因为消费失败→所以死信队列→因为有延迟需求→所以延迟队列→因为积压→所以扩容应急
异步解耦消息丢失幂等顺序消费死信队列延迟队列积压
🌐分布式系统因果链
因为单机瓶颈→所以分布式→因为网络不可靠→所以CAP→因为CAP选AP→所以BASE→因为跨库事务→所以2PC/TCC/Saga/Seata→因为互斥→所以分布式锁→因为ID冲突→所以雪花算法
CAPBASE分布式事务分布式锁雪花算法
💾
数据库因果链
存储选型 · 1篇
🗃️存储选型因果链
因为需要结构化+事务→所以MySQL→因为schema不灵活→所以MongoDB→因为全文搜索→所以ES→因为热点数据→所以Redis→因为大文件→所以OSS→因为没有银弹→所以多存储协作
MySQLMongoDBElasticsearchRedisOSS多存储协作
🎨
前端因果链
渲染+状态+构建+跨端 · 1篇
🖼️前端技术因果链
因为DOM繁琐→所以MVVM→因为SPA首屏慢→所以SSR→因为SSR贵→所以SSG/ISR→因为状态共享难→所以Pinia/Redux→因为Webpack慢→所以Vite→因为要跨端→所以RN/Flutter/UniApp
SPA→SSR→SSGMVVM状态管理Vite跨端
🛡️
安全攻防 + 高可用因果链
安全攻防 + 容错容灾 · 2篇
🔒安全攻防因果链
因为明文被窃听→所以HTTPS→因为密码泄露→所以哈希→加盐→bcrypt→因为Session共享难→所以Token→JWT→因为XSS→所以转义+CSP→因为CSRF→所以Token+SameSite→因为SQL注入→所以预编译→因为接口被刷→所以限流
HTTPSbcryptJWTXSSCSRFSQL注入限流
🚀高可用容错因果链
因为单点故障→所以冗余→因为流量集中→所以负载均衡→因为故障级联→所以熔断降级→因为流量突增→所以限流→因为发布出错→所以蓝绿/金丝雀→因为停机丢请求→所以优雅停机→因为机房故障→所以异地多活
冗余负载均衡熔断限流蓝绿部署优雅停机容灾