ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

大厂Java面试与微服务架构:从八股文到工程落地的体系化梳理

大厂Java面试与微服务架构:从八股文到工程落地的体系化梳理 又到了互联网大厂集中放岗的招聘季后台私信里问得最多的还是那两类问题Java 技术栈到底要学到什么程度微服务架构又该怎么讲才不像背课本。这两年“java 面试八股文”“微服务面试题”的热度一直没降过但真正能拿到 Offer 的人往往不是背得最多的而是能把技术栈和微服务串成体系、讲出自己理解的那批人。我前后经历过多次大厂面试也坐到过面试官那一侧这篇总结就是想把两个话题放在一起拆透——它面向正在冲刺 Java 求职面试的同学也适合工作两三年、想系统性梳理技术的工程师。全文不劝你死磕八股而是把面试官真正想听到的思路、底层原理和实操细节摊开来讲。1. 大厂 Java 面试到底在考什么1.1 从热搜词看面试风向先看一组很有意思的现象。在求职话题下常年霸榜的搜索词是“java 基础面试题”“java 面试八股文”“微服务面试题”“java 后端完整成长路线”而这两年明显多了“单节点 k8s 上的若依微服务整套环境”“不停服迁移到阿里云 ECS”“JMeter 高并发测试”这类非常具体的部署与压测场景。这个变化本身就说明问题大厂面试早就从“考记忆”转向了“考工程落地能力”。我按面试模块整理了常见的考察维度。考察模块典型问题面试官真正想判断的东西Java 基础与集合ArrayList 和 LinkedList 区别、HashMap 底层是否真的读过源码能不能讲出设计取舍并发编程synchronized 和 ReentrantLock 区别、线程池参数是否理解锁的底层机制有没有线上调优经验JVM内存区域、GC 算法、类加载过程遇到 OOM 有没有排查思路而不是只会调 -Xmx数据库索引失效场景、事务隔离级别、MVCC面对慢 SQL 能否快速定位根因缓存Redis 持久化、缓存穿透/击穿/雪崩高并发场景下的防御意识微服务服务拆分原则、服务间调用方式、分布式事务是否设计过真实业务系统还是只看了 demo工程化部署、压测、链路追踪、监控告警有没有完整交付过的项目闭环从表格里可以看出来纯理论题的比例在下降“结合项目讲方案”的题目比例在上升。这也是为什么很多同学抱着几百道八股文背了一个月面试仍然挂掉——因为面试官追问三层以上背书式回答就会露馅。1.2 技术栈体系化比死记硬背更重要“八股文”这个词被吐槽了很多年但我不反对背我反对的是只背不理解。举个例子面试官问 HashMap 和 ConcurrentHashMap 的区别标准答案谁都会背“HashMap 线程不安全ConcurrentHashMap 线程安全。”但如果追问一句“JDK 8 的 ConcurrentHashMap 为什么放弃了分段锁”只背结论的同学当场就愣住了。真正的体系化复习是什么样的是把每个知识点放进一条因果链里。HashMap 为什么在链表长度超过 8 时转红黑树因为红黑树查询复杂度是 O(log n)能减缓 hash 冲突极端情况下的退化。ConcurrentHashMap 为什么 JDK 8 改用 CAS synchronized因为分段锁粒度太大锁竞争激烈时吞吐上不去。这样一串下来你回答的不是一个孤立结论而是一段完整的方案演进史。我自己的习惯是“树枝式”梳理主干是一条从 Java 基础到并发、JVM、框架、数据库、缓存、再到微服务和分布式的链路每个节点再长出自己的分支。比如数据库这条枝干从索引底层 B 树长出来可以伸向聚簇索引、覆盖索引、索引失效、慢 SQL 优化、分库分表。等你把整棵树画完再遇到没见过的题也能顺着树干推导出大概方向而不是只能摇头说不会。1.3 面试官判断“可培养性”的三个信号面过很多候选人之后我发现面试官在技术题之外其实在快速捕捉三个信号。第一个信号遇到不会的问题时有没有推导过程。同样被问“Redis 为什么快”有人说“不知道”有人会从单线程模型、IO 多路复用、内存存储三个角度逐步推。后者哪怕答案不完整也会被高看一眼。第二个信号能不能从业务场景反推技术选型。比如面试官问“如果订单量翻十倍你会怎么处理”合格的答案不是直接报一堆中间件名字而是先问清瓶颈在哪、是数据库连接耗尽还是接口响应变慢再给出对应方案。第三个信号有没有自己的复盘沉淀。聊到项目时候选人能主动说“这里我当初选型选错了后来怎么改的”这种真实的踩坑记录比任何华丽的技术名词都有说服力。所以后面我会花一整节讲项目经验怎么讲这部分准备到位了面试基本上就稳了一半。2. 技术栈主线Java 基础到框架的复习策略2.1 Java 基础、集合与并发高频必考区先说基础。很多人觉得“面向对象”“String 不可变”这种题太简单不重视结果一追问就翻车。“String 为什么设计成不可变”其实可以答出三个层次安全HashMap key、网络参数传递、性能字符串常量池复用、线程安全不可变对象天然并发安全。这种基础题其实是面试官用来定调的答得有层次后面才有继续聊的意义。集合是另一个必考点尤其是 HashMap。复习 HashMap 时至少要能画出它的数据结构数组 链表 红黑树说清楚 put 流程、resize 机制、默认容量 16 和负载因子 0.75 为什么这么设计。0.75 是时间和空间的一个折中太小了浪费空间太大了冲突概率升高。能讲出这层权衡就已经超过了一大批背书选手。并发这一块我建议按“内存模型 → 锁 → 线程池”的顺序过。Java 内存模型JMM解决的是可见性问题volatile 靠内存屏障实现可见性和禁止重排synchronized 在 JDK 6 之后引入了偏向锁、轻量级锁、重量级锁的升级过程AQS 是 ReentrantLock、Semaphore、CountDownLatch 的公共底座。线程池更要背熟那几个参数核心线程数、最大线程数、阻塞队列、拒绝策略面试官特别喜欢问“核心线程数怎么定”。这里没有标准答案但有个常见的参考公式CPU 密集型设为 N1IO 密集型设为 2NN 是 CPU 核数。更关键的是你要解释为什么而不是抛一个数字。另外别忽略手写代码。像“冒泡排序 java”这种词能上热搜说明很多候选人连基础排序都写不流畅。我见过不止一个候选人讲并发头头是道结果手写一个双检锁单例volatile 都不加。代码题写不写得出会直接影响面试官对你的最终判断。2.2 JVM、MySQL、Redis面试三板斧JVM 这块最常被问的是内存区域、类加载、垃圾回收和调优。刷题的时候不要只背分区名称要能串联起来线上出现 CPU 飙高你用 jstack 看线程在干什么出现内存溢出你用 jmap 导 dump 文件再用 MAT 分析大对象。面试官问 JVM 调优想听的就是这套完整排查流程而不是一堆 JVM 参数名。MySQL 的高频考点集中在索引和事务。你能讲清楚 B 树为什么适合做索引吗三句话概括多叉树高度低减少磁盘 IO叶子节点有序链表方便范围查询非叶子节点只存索引值一页能装更多记录。事务方面默认隔离级别是 RR可重复读底层靠 MVCC 多版本并发控制实现快照读间隙锁解决幻读。建议再去练几个慢 SQL 分析的例子把 explain 的 type 从 const 到 ALL 都过一遍知道什么时候会走全表扫描。Redis 的复习重点在数据结构、持久化和缓存三大问题。缓存穿透是查不存在的数据布隆过滤器或缓存空值能防缓存击穿是热点 key 过期可以用互斥锁或逻辑过期缓存雪崩是大面积 key 同时过期过期时间加随机值就能规避。面试里答这三个问题一定要带着解决方案的取舍细节去说而不是停留在现象描述。2.3 Spring Boot 与主流框架从会用到底层原理Spring 是面试的必争之地。IOC 和 AOP 已经升级为“必考题”但很多人只会背概念。我建议花时间看一遍 Bean 的生命周期实例化、属性填充、初始化、AOP 代理、销毁每一步都有对应扩展点。循环依赖为什么能用三级缓存解决关键在提前暴露对象的引用。这块读懂了Spring 相关的追问基本都能接住。框架层面的另一个高价值考点是设计模式在源码里的落地。比如职责链模式在过滤器链中的应用、模板方法模式在 JdbcTemplate 中的体现、观察者模式在事件监听里的实现。“java 策略模式多种组合”这个热词背后其实是面试官在考察你能不能把策略模式和工厂模式结合处理一堆 if-else 的分支逻辑。回答的时候用实际场景举例比如支付渠道对接微信支付、支付宝支付各自是一个策略通过工厂根据渠道号取出对应的实现类比堆 if-else 好维护得多。另外现在面试还会顺带看技术广度。热搜词里出现了“嵌入式技术栈”“agent 开发需要哪些技术栈”说明很多团队也在关注跨界能力。如果你有余力了解一点容器化、CI/CD、云原生哪怕只是能说出它们和 Spring Cloud 的关系都会是加分项。但主线一定要稳Java 基础和 Spring 生态不能有任何短板。2.4 复习路线的实际安排结合“java 学习路线”“java 后端完整成长路线”这类高频搜索我给一个三个月版的冲刺计划参考。第一个月主攻基础与原理Java 集合源码、并发编程、JVM、MySQL、Redis每天保证 2 小时阅读加 1 小时动手写代码。第二个月主攻框架与项目Spring Boot 自动配置、Spring Cloud 微服务组件把你手里已有的项目翻出来重构往里面加缓存、消息队列、分布式事务让项目真正具备微服务形态。第三个月主攻面试模拟与查漏补缺每天做 2 到 3 道高频面试题用录音或打字的方式完整回答再对照参考答案检查漏点。这里有个很有效的做法每周写一篇简短的“技术复盘文档”记录这周踩过的坑、学到的知识点、讲不清楚的疑问。面试前翻一遍这些文档比你临时抱佛脚管用得多。我到现在都还留着当初面试前写的复盘笔记那些从实战里挤出来的内容面试官一听就知道你是真做过而不是背过。3. 微服务架构面试中必须讲透的底层逻辑3.1 微服务拆分边界划不好后面全白搭不管面试官问“微服务基础知识”还是“微服务拆分”本质都是在考察你有没有架构设计意识。微服务拆分的第一原则是业务边界不是技术边界。常见的错误是太早拆用户模块、订单模块、商品模块看着挺合理但业务逻辑之间的依赖没理清楚拆完反而每个服务都要调两三个别的服务才能完成一个基础功能。比较稳妥的拆分路径是先画业务领域图找出限界上下文再按数据归属划分服务边界。比如电商系统的核心域是订单、库存、支付每个域独立一套数据表服务间只通过 API 或消息通信不共享数据库。拆的时候还要考虑团队协作服务数量最好能和团队结构对齐不然一个服务十个人改分支冲突都够受的。面试里如果问到你“你们项目为什么这么拆”你要能从业务体量、团队规模、迭代速度三个角度回答。“当时用户量不大单体架构最快满足业务后来订单模块迭代频繁其他模块发版受影响我们才把订单先拆出来。”这种演进式拆分的回答比“我们用了微服务”这种空话有说服力得多。3.2 服务调用方式与中间件选型“微服务之间的调用方式”是问到烂的题但高分回答不是报出 RestTemplate、OpenFeign、Dubbo 几个名词而是说清同步和异步两条路各自的适用场景。同步调用适合实时性要求高的查询比如商品详情异步调用适合解耦和削峰比如下单后发消息通知物流系统。注册中心和配置中心也要熟。现在市面上主流是 Nacos它同时承担了注册中心和配置中心两个角色。回答“为什么选择 Nacos 而不是 Eureka”时可以从功能对比说起Eureka 只有服务注册发现且官方已停止维护Nacos 支持配置动态刷新、临时和永久实例、权重负载均衡、命名空间隔离和 Spring Cloud Alibaba 集成也更自然。中间件选型是面试官非常喜欢深挖的点。比如热词里提到的“java 微服务 spring boot spring cloud 中间件选择 redis”实际上是在问缓存中间件怎么选。Redis 适合做分布式缓存性能高、支持丰富的数据结构但要注意内存容量和数据一致性如果做消息中间件Redis 的发布订阅并不是首选Kafka 或 RocketMQ 在持久化、回溯消费、高吞吐方面更可靠。选型不能只看名气要结合业务场景去说。中间件主要用途面试高频考察点Nacos注册中心、配置中心服务发现原理、配置动态刷新OpenFeign声明式 HTTP 客户端超时配置、负载均衡集成Sentinel熔断降级、流量控制雪崩防护、限流算法Redis分布式缓存缓存穿透/击穿/雪崩Kafka/RocketMQ消息队列、异步解耦消息不丢失、顺序消费3.3 微服务架构图与高可用设计面试现场被要求“画一下你们系统的微服务架构图”是个高频环节。很多人只画了一堆框和箭头然后讲不出每层的职责这等于给自己挖坑。一张合格的架构图至少要包含客户端接入层、API 网关、注册中心、配置中心、业务服务、中间件集群缓存、消息队列、数据层以及可观测性组件链路追踪、监控告警。按这个顺序画完图讲解的时候也按数据流走用户请求到网关做鉴权和路由网关通过注册中心发现后端服务地址服务之间用 OpenFeign 或消息队列通信缓存扛住热点读数据库最终落盘全链路 TraceId 贯穿每一步。面试官让你画架构图看的不是你画得多好看而是你能不能把一条请求从进来到落库的完整路径讲清楚以及故障发生时能不能快速定位。这里插一个实用技巧很多同学会觉得微服务项目本地调试很痛苦。热门搜索里就有人问“idea 微服务架构如何快速查看启动各服务 main 函数”。我的做法是在 IDEA 里用 Services 工具窗口把多个 Spring Boot 启动类全部加进去能统一看启动状态、端口、日志不用每次去 Run 面板里翻。再配合一个启动顺序清单先注册中心、再配置中心、然后网关、最后业务服务本地联调会顺畅很多。高可用设计方面至少要把限流、熔断、降级、超时重试这四件事说全。Sentinel 限流有 QPS 线程数两种模式熔断有慢调用比例、异常比例、异常数三种策略降级则要区分写降级和读降级写降级往往需要配合削峰填谷。每一条都要能对应到一个你亲手配置过的场景。3.4 分布式难题事务、幂等、链路追踪微服务面试里最硬核的题目集中在分布式事务。这个问题的本质是一个业务操作跨多个服务各自有独立数据库怎么保证数据最终一致。2PC两阶段提交有同步阻塞和协调者单点问题TCC 需要写大量的补偿代码SAGA 适合长事务但实现复杂。我在实际项目中比较常用的是本地消息表 消息队列的最终一致性方案本地事务里写业务数据的同时写一条消息表记录异步任务把消息投递到 MQ消费方处理成功后回执确认。虽然做不到实时一致但可靠性和业务复杂度比较平衡。幂等性是另一个必考点因为它直接关系到线上不出现重复扣款、重复下单。常见的实现思路有三种唯一索引约束、状态机前置校验、Token 机制。比如支付回调场景用支付流水号做唯一索引重复请求直接插入失败就天然实现了幂等。回答这类题配上一个具体业务场景的代码思路比干答概念强太多。链路追踪在面试中通常以“线上排查问题怎么查”的形式出现。你要能说出 TraceId 的传递方式通过请求头或消息头以及 SkyWalking、Zipkin 这类工具的基本原理在客户端埋点将所有调用链路上的 Span 串成一条 Trace再通过采集器上报到存储端展示。当面试官问你“A 服务调 B 服务超时怎么排查”如果你能说出先看 TraceId、再看两个服务的耗时分布、定位到是网络开销还是 GC 停顿这道题就稳了。4. 实操场景k8s 上的微服务环境、不停服迁移与压测4.1 单节点 k8s 上的微服务整套环境怎么搭最近“单节点 k8s 上的若依微服务整套环境”这种搜索热度很高说明大家已经不只满足于本地跑 IDEA而是想把微服务像生产环境一样跑起来。单节点 k8s 很适合做这件事资源要求低一台 4C8G 的服务器就行环境却和集群版基本一致。搭建思路可以分五步。第一步装好 Docker 和 Kubernetes单节点环境一般用 k3s 或 minikube 都能跑起来。第二步把微服务各个模块打成 Docker 镜像注意写对 Dockerfile基础镜像选择要精简比如 eclipse-temurin:17-jre。第三步把配置外置到 ConfigMap数据库连接串、Redis 地址这些不要写死在镜像里不然换个环境就得重新打镜像。第四步编写 Deployment 和 Service 的 YAML 文件Service 负责集群内服务发现Ingress 负责把外部请求路由到网关。第五步按依赖顺序部署先基础设施MySQL、Redis、Nacos再业务服务最后网关。以 Spring Cloud 体系为例Nacos 本身也可以用容器方式部署注册地址写服务名而不是 IP这样服务之间调用走 k8s 的 Service DNS迁移环境时不用改代码。建议所有资源文件用一个 Git 仓库管理环境版本一目了然。4.2 不停服、不丢数据迁移到云服务器搜索热词里有一句话很具体“单节点 k8s 上的若依微服务整套环境准不停服、不丢数据地迁移到阿里云 ECS”。这个场景本质上是把本地的微服务环境整体搬到云上同时要求业务不中断、数据不丢。这里“准不停服”的含义是尽量少停机而不是零停机你需要和业务方对好一个可接受的维护窗口。我的迁移步骤是这样做的。第一步先在云上搭好整套 k8s 环境把镜像推送到云端镜像仓库用相同的 YAML 文件部署一套新环境。第二步处理数据迁移用增量同步方式先在旧库做全量备份并恢复到新库然后开启基于 binlog 的增量同步这个过程中业务完全不受影响。第三步做数据校验对比旧库和新库的关键数据量、最大 ID、关键时间戳确认数据一致。第四步切换入口流量把客户端域名解析或网关入口从旧环境切到新环境切换后立刻观察日志和监控。第五步观察稳定后关停旧环境如果发现异常还能秒级回滚到旧环境。整个过程中最容易出问题的是增量同步中断常见原因是建表语句里没有主键导致 binlog 同步工具无法定位行。迁移前先检查所有核心表有没有主键这个坑我踩过一次之后就再也没跳过。4.3 JMeter 压测验证高并发承载力“迁移完成后由压测人员peseman使用配套的 jmeter 脚本做高并发测试”这是整套落地动作的收尾环节也是面试中可以反复拿来当案例的亮点。JMeter 压测不是把线程数拉满跑一下就行而是要有明确的测试计划。我的压测思路是分四轮。第一轮基准测试用低并发把接口的正常耗时测出来比如 10 线程跑 3 分钟拿到响应时间和 TPS 的基线。第二轮阶梯加压线程数从 50 逐步升到 200、500观察 TPS 是否线性增长响应时间的 P99 拐点在哪里。第三轮稳定性测试用最大可承受并发持续跑 15 到 30 分钟看有没有内存泄漏、连接池耗尽的问题。第四轮异常场景模拟后端某个服务不可用观察网关限流和熔断是否生效。命令行跑 JMeter 的示例jmeter -n -t performance.jmx -l result.jtl -e -o report跑完看聚合报告时要重点关注三个指标TPS、错误率、响应时间分位数。如果发现 TPS 上不去先看是不是数据库连接池满了再看有没有 Redis 超时最后查 GC 频率。压测中发现的每个问题都应该记录成优化清单比如“将 MySQL 连接池从 20 调到 50TPS 提升了 30%”这些数据在面试中就是最有说服力的项目成果。5. 真题解析与应答框架5.1 高频微服务面试题怎么答把网上的“微服务面试题”翻一遍就会发现翻来覆去就那几十道但答得好和答不好差别很大。我挑三道最典型的拆一下。第一道“微服务之间如何调用”低分回答是“用 Feign 调”没有然后了。高分回答会分两层同步层面用 OpenFeign底层通过 Ribbon 集成负载均衡从注册中心拿到服务列表后按策略选一个实例发起 HTTP 请求异步层面用消息队列比如下单成功后发送订单事件下游服务监听事件做库存扣减。再补充一句“调用之间要设置超时和重试但不能盲目重试否则可能造成雪崩”这就把自己的工程意识带出来了。第二道“服务雪崩怎么解决”不要只说“用 Sentinel”。要讲清楚雪崩的链路单个服务实例超时 → 调用方线程被占满 → 资源耗尽 → 上游服务跟着挂。解决方案从三层说预防层做好超时控制和资源隔离缓冲层用消息队列削峰兜底层用熔断降级让系统快速失败而不是无限等待。第三道“分布式事务一致性怎么保证”按最终一致性的思路展开重点说方案选择的依据。如果业务允许秒级延迟本地消息表是个简单可靠的方案如果对一致性要求更高可以考虑 TCC但要有完善的取消和补偿逻辑。最后一定强调没有银弹每个方案都有代价。5.2 场景题与代码题的应答套路大厂面试现在特别爱出场景题。比如“设计一个秒杀系统”“订单超时未支付怎么关单”“如何保证转账接口幂等”。场景题没有标准答案但有一套稳定的应答套路先问清楚约束再给整体架构然后讲关键细节最后说潜在风险和优化方向。以“接口幂等”为例。先说业务约束是 POST 还是 PUT会不会有重复提交重复提交的后果是什么。然后给方案前端按钮置灰 后端 Token 机制 数据库唯一索引兜底。接着讲关键细节Token 怎么生成、存 Redis 的过期时间设多少、唯一索引冲突后怎么处理。最后补一句风险如果引入消息队列做异步消费端也要做幂等。这一套下来即使不是最优解面试官也能看出你有完整思维链路。代码题方面重点刷几类单例的线程安全写法、排序算法、线程池提交任务的流程、策略模式消除 if-else、LRU 缓存实现、手写一个简单的生产者消费者。写代码时注意先想清楚边界条件再动笔写完主动说一下时间和空间复杂度这些细节都比代码本身更能加分。5.3 项目经验怎么讲才不打折项目介绍是面试的“定生死”环节但大部分人讲得像流水账我们用了 Spring Cloud做了订单模块我负责写接口。这种讲法拿到大厂基本就提前结束了。我建议用 STAR 法则组织你的项目故事。背景Situation项目是什么业务、服务多少用户、原架构有什么痛点。任务Task你负责的是哪块目标是什么。行动Action你具体做了什么为什么这么做。结果Result做完之后有什么量化收益比如响应时间从 800ms 降到 200msQPS 从 100 提升到 800。另外准备三到四个“深挖点”主动扔给面试官。比如你负责过“java 开发 API 接口以供外部调用”可以主动说我做了接口的鉴权设计、流量控制、参数校验、异常统一封装、日志埋点和文档输出。这一段讲完面试官想不追问都难而他追问的正好是你已经准备好的内容。还有一个容易被忽视的细节项目里的失败经历比成功经历更值钱。主动说“我当时选型选错了用 A 方案导致数据不一致后面改用了 B 方案”这会让你的整个项目描述可信度提升一个档次。6. 避坑指南与实用速查6.1 我踩过的坑和复盘这一节分享几个我自己在求职和带新人过程中反复见到的坑。第一个坑只刷题不写代码。很多同学把面试准备等同于背八股但面试官让你手写代码时半天写不出一个双检锁单例的大有人在。面试前一定保证每天手写几个算法或设计模式写不出来的重点标记第二天再来一遍。代码手感是“看”不出来的。第二个坑项目讲得太宽太浅。简历上写了十个系统每个都讲不深。不如只挑两三个最有含金量的项目把架构图、数据表、核心接口、踩过的坑全部搞清楚。面试官只要沿着一条线问下去深入程度立判高下。第三个坑忽略部署和环境问题。热词里出现“k8s 若依微服务不停机迁移”“jmeter 脚本压测”说明这个维度正在成为面试新宠。能把自己的项目部署到云上、做一次无人值守的压测把过程写成文档这是性价比极高的差异化准备。哪怕面试官不细问你随口一句“这个项目跑在 k8s 上迁移时做过增量数据同步压测峰值 TPS 是 xxx”就足以把很多人甩开。第四个坑不重视软技能表达。技术面试不是笔试你不仅要会还要会说。我见过一个候选人技术很强但说话一直低着头、声音越来越小最后给面试官留下不自信的印象评价就打了折扣。条件允许的话找朋友做一次模拟面试或者用手机录下自己的回答回头听一下表达是否流畅、结论是否清晰。6.2 常见问题速查表平时复习到后期我会把最容易混淆或最容易忘的知识点放进一张速查表面试前一晚快速过一遍。问题核心要点一句话回答示例HashMap 为什么线程不安全put 并发时可能丢数据扩容时可能死循环多个线程同时 put 触发 resize链表会形成环volatile 能保证原子性吗不能只保证可见性和有序性可见性可以保证但 i 这类复合操作仍然不安全Spring 如何解决循环依赖三级缓存提前暴露对象引用通过 earlySingletonObjects 提前暴露未完成实例化的 BeanRedis 为什么快内存存储、单线程、IO 多路复用基于内存加 epoll 模型避免线程切换开销服务间调用失败怎么处理超时、重试、熔断、降级先设超时配合 Sentinel 熔断快速失败替代无限阻塞消息队列怎么保证不丢消息生产者确认、Broker 持久化、消费者手动 ack三个环节都要确认落盘消费成功后再提交偏移量分布式锁有哪几种实现Redis 分布式锁、ZooKeeper 分布式锁、数据库锁Redis 用 SETNX 加过期时间注意加锁与设置过期时间要原子如何排查线上 OOM看 dump、分析堆内存jmap 导 dump 后用 MAT 查大对象和 GCRoot 引用链数据库和缓存一致性怎么做先更新数据库再删除缓存延迟双删先写库再删缓存配合短暂延迟补偿删除微服务和单体怎么选看业务规模和团队复杂度业务小、团队小就单体业务模块间独立演进需求明显时才拆这张表不是为了让你背答案而是帮你快速回忆起每个知识点背后的完整脑图。如果表格里某一行的内容你可以滔滔不绝讲三分钟那这一块基本就算过关了。6.3 面试前夜我一般会翻这几个重点还有一点之前的经历想分享。很多人问面试有没有捷径我的体会是面试最好的状态不是“我全背下来了”而是“这个场景我见过这个问题我自己推过一遍”。面试官其实不怕你说“这个底层原理我没深入研究过”怕的是你连基本的深度探索意愿都没有。面试前夜我建议只做三件事。第一件把上面表格里的 10 个问题自己口头答一遍哪里卡住就翻笔记。第二件把你项目里最想做亮点的两个技术点完整讲一遍注意 STAR 法则控制在三分钟以内。第三件早点休息别熬夜。准备到这个程度你需要的已经不再是临时抱佛脚而是保持头脑清醒的样子。说到底技术面试是一场“沟通游戏”既要证明你能搞定问题也要让面试官觉得你是一个适合共事的工程师。那些搜索热度很高的名词只是入场的门票真正决定你走多远的是把一门技术讲透、把一个系统落地、把一次踩坑复盘成经验的能力。
返回列表