# New_Guide **Repository Path**: zxinrun/new_guide ## Basic Information - **Project Name**: New_Guide - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-26 - **Last Updated**: 2026-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 面试指南 > 系统梳理 Java 后端核心知识,覆盖面试高频考点,助你从容应对技术面试。 --- ## 这份指南能帮你解决什么问题? 很多人学了三四年 Java,知识点零零散散,面试前东拼西凑,看十篇博客发现各有说法,做算法题靠背答案,系统设计完全没思路——最后稀里糊涂地面,稀里糊涂地挂。 这份指南的目标是:**让你有体系地准备,有信心地上场,有条理地表达。** 它不是面试题库的堆砌,也不是 API 手册的搬运。每一篇文档都遵循「是什么 → 为什么 → 怎么用 → 面试怎么问」的结构,从原理出发,到实战落地,再到面试应对。读完这些文档,你应该能做到:看到一个知识点,不仅知道「怎么用」,还能说清楚「为什么这样设计」,以及「如果换个场景会怎样」。 --- ## 知识体系总览 本项目涵盖 Java 后端面试的 **九大核心模块**,每个模块都经过精心设计,覆盖从基础概念到高级应用的完整链路: | 模块 | 路径 | 核心内容 | | --- | --- | --- | | **面试准备** | [interview/](/interview/index) | 简历优化、算法训练、系统设计、HR 面、面试复盘 | | **Java** | [java/](/java/index) | JVM、并发编程、集合框架、新特性 | | **计算机基础** | [cs/](/cs/index) | 操作系统、计算机网络、数据结构与算法 | | **数据库** | [database/](/database/index) | MySQL(索引、事务、锁)、Redis(缓存、持久化、集群) | | **常用框架** | [framework/](/framework/index) | Spring IoC/AOP、Spring Boot 自动装配、MyBatis | | **分布式架构** | [distributed/](/distributed/index) | CAP/BASE、分布式事务、一致性算法、分布式锁 | | **高性能与高可用** | [high-performance/](/high-performance/index) | 性能优化、缓存策略、限流熔断、负载均衡 | | **中间件** | [middleware/](/middleware/index) | Kafka、RabbitMQ、RocketMQ、Dubbo、gRPC、Nacos、Gateway | | **工程化与运维** | [devops/](/devops/index) | Docker、Kubernetes、CI/CD、监控与日志 | --- ## 面试准备模块速览 面试准备是整个项目最核心的模块,包含 **68 篇文档**,覆盖从简历到 offer 的全流程。这个模块分五个子方向: ### 一、简历优化(6 篇) 简历是面试的敲门砖。很多人的简历石沉大海,不是因为技术不行,而是因为简历没有把技术亮点讲清楚。 | 文章 | 核心内容 | | --- | --- | | [一份优秀简历的标准](/interview/resume/standard) | 好简历的五个标准,以及 HR 和面试官真正想看到什么 | | [简历各模块写法](/interview/resume/write) | 个人信息、技术栈、项目经历、教育背景的正确写法与常见坑 | | [STAR 法则](/interview/resume/star) | 用 STAR 法则(Situation-Task-Action-Result)写出有说服力的项目描述 | | [项目经历包装](/interview/resume/project) | 让没有大厂背景的项目也有亮点,从数据量、优化幅度、团队贡献切入 | | [简历常见问题与修改建议](/interview/resume/problem) | 十大高频简历问题:空洞的描述、模糊的技术栈、缺少量化指标等 | | [技术简历模板参考](/interview/resume/template) | 1-3 年、3-5 年、5 年+ 各经验层级的简历模板参考 | ### 二、算法训练(16 篇) 算法是大多数面试的第一关,但它考察的不是「你背了多少题」,而是「你分析和解决问题的思维方式」。本模块按照算法类型划分,每种类型讲解核心思路和模板,再通过高频 LeetCode 题巩固。 | 文章 | 核心内容 | | --- | --- | | [双指针与滑动窗口](/interview/algorithm/array-linkedlist) | 对撞指针、快慢指针、滑动窗口最大值,覆盖「两数之和」「三数之和」「无重复字符最长子串」等高频题 | | [哈希表高频题](/interview/algorithm/hash) | 两数之和、字母异位词、最长连续序列,教你「什么时候用哈希、怎么设计 key」 | | [栈与队列](/interview/algorithm/stack-queue) | 有效括号、单调栈、单调队列,解决「括号匹配」「每日温度」「滑动窗口最大值」 | | [二叉树高频题](/interview/algorithm/binary-tree) | 前中后序遍历(递归+迭代)、层序遍历、路径和、最近公共祖先、树的深度 | | [动态规划高频题](/interview/algorithm/dp) | 背包问题、打家劫舍、股票买卖、子序列问题,核心是「状态定义」和「状态转移方程」 | | [回溯高频题](/interview/algorithm/backtracking) | 全排列、组合、N 皇后、复原 IP 地址,核心是「选择列表」和「剪枝」 | | [二分查找高频题](/interview/algorithm/binary-search) | 标准二分、旋转数组、搜索区间、左边界与右边界,边界条件是精髓 | | [排序算法高频题](/interview/algorithm/sort) | 快速排序、归并排序、TopK 问题、外部排序思想 | | [单调栈专题](/interview/algorithm/monotonic-stack) | Next Greater Element、接雨水、最大矩形,掌握单调性维护的核心模板 | | [前缀和与差分数组](/interview/algorithm/prefix-sum) | 区间和查询、区间增减操作,把 O(n) 查询变成 O(1) | | [位运算技巧](/interview/algorithm/bit) | 异或运算性质、位掩码实战、只出现一次的数字 | | [并查集](/interview/algorithm/union-find) | 朋友圈数量、岛屿数量、合并集合,路径压缩与按秩合并优化 | | [字典树](/interview/algorithm/trie) | 前缀匹配、异或最大问题,字符串场景下的高效数据结构 | | [线段树与树状数组](/interview/algorithm/segment-tree) | 区间查询与修改,LeetCode 困难题常客 | | [LeetCode 高效刷题方法](/interview/algorithm/method) | 分类刷题、三遍法则、模板提炼、刷题顺序推荐 | | [面试算法题类型总结](/interview/algorithm/summary) | 五大高频类型全景图与应对策略,面试前必看 | ### 三、系统设计(27 篇) 系统设计是 3 年以上工程师面试的核心环节,考察的是你对大规模系统的理解、设计决策的权衡、以及技术沟通的能力。本模块分为三个层次: **系统设计基础(6 篇)**:面试方法论、CAP 理论、一致性哈希、分库分表、消息队列选型、缓存策略。这些是所有系统设计的底层知识。 **经典系统设计题(16 篇)**:每道题都对应一个真实业务场景,教你「需求分析 → 估算规模 → 设计架构 → 优化迭代」的完整流程。包括短链接系统、时间线推送、分布式 ID 生成器、延迟消息队列、排行榜/热搜、Redis 三穿透(穿透/击穿/雪崩)、秒杀系统、抢票系统、Auto Complete、关注/粉丝系统、分布式锁、OTP 短信系统、Feed 流、红包雨/抽奖、配置中心。 **架构设计思想(5 篇)**:可扩展架构、高可用、一致性、容量规划、微服务拆分原则。学完这些,你看到任何系统设计题都能找到切入点。 | 分类 | 核心文章 | | --- | --- | | **系统设计基础** | [面试方法论](/interview/system-design/method)、[CAP 理论](/interview/system-design/cap)、[一致性哈希](/interview/system-design/consistent-hash)、[分库分表](/interview/system-design/sharding)、[消息队列](/interview/system-design/mq)、[缓存策略](/interview/system-design/cache) | | **经典系统设计题** | [短链接系统](/interview/system-design/url-shortener)、[时间线推送](/interview/system-design/timeline)、[分布式 ID](/interview/system-design/id-generator)、[延迟消息队列](/interview/system-design/delay-queue)、[排行榜/热搜](/interview/system-design/ranking)、[Redis 三穿透](/interview/system-design/redis-cache)、[秒杀系统](/interview/system-design/seckill)、[Auto Complete](/interview/system-design/autocomplete)、[关注/粉丝系统](/interview/system-design/follow)、[分布式锁](/interview/system-design/distributed-lock)、[OTP 系统](/interview/system-design/otp)、[Feed 流](/interview/system-design/feed)、[红包雨/抽奖](/interview/system-design/redpacket)、[配置中心](/interview/system-design/config-center) | | **架构设计思想** | [可扩展架构](/interview/system-design/scalability)、[高可用](/interview/system-design/availability)、[一致性](/interview/system-design/consistency)、[容量规划](/interview/system-design/capacity)、[微服务拆分](/interview/system-design/microservices) | ### 四、HR 面与谈薪(8 篇) 技术面过了,HR 面反而更不能掉以轻心。HR 考察的是文化匹配度、稳定性和综合素质,答得不好同样会被 pass。这个模块帮你准备好从自我介绍一下到谈薪的全流程。 | 文章 | 核心内容 | | --- | --- | | [HR 常问问题汇总](/interview/hr/common-question) | 10 类高频 HR 问题与应对话术 | | [自我介绍](/interview/hr/self-intro) | 3 分钟展现优势的自我介绍框架,不同面试轮次(初面/复面/HR面)各有侧重 | | [离职原因](/interview/hr/leave-reason) | 得体表达离职原因的技巧,不要踩的坑和可以说的理由 | | [职业规划](/interview/hr/career) | 技术路线 vs 管理路线的选择,面试官想听到什么 | | [期望薪资](/interview/hr/salary) | 薪资谈判拿到高 offer 的策略,先报数还是后报数,怎么谈 | | [福利待遇](/interview/hr/benefits) | 如何全面评估 offer 的真实价值(base、期权、签字费、股票) | | [反向提问](/interview/hr/ask-interviewer) | 问面试官什么加分,问什么减分 | | [背调注意事项](/interview/hr/background-check) | 背调流程与注意事项,提前准备好关键信息 | ### 五、面试经验与复盘(6 篇) 面试不仅是知识的比拼,更是心态和信息差的较量。这部分帮助你从「被动挨打」变成「主动掌控」。 | 文章 | 核心内容 | | --- | --- | | [如何高效准备技术面试](/interview/review/prepare) | 从知识体系到心态的全方位准备方案,列一个月的准备计划 | | [面试高频问题分类与回答框架](/interview/review/question) | 技术问题分类与结构化回答方法,用框架应对开放性问题 | | [面试沟通技巧](/interview/review/communication) | 如何清晰表达技术方案与思考过程,让面试官跟上你的思路 | | [面试复盘模板](/interview/review/template) | 面试复盘的标准模板,每场面试后用 10 分钟做好复盘 | | [如何应对压力面与追问](/interview/review/stress) | 压力面的本质是考察你在高压下的思考和表达,保持冷静的技巧 | | [面试凉了怎么办](/interview/review/after-fail) | 调整心态、总结复盘、继续投递,不让一次失败影响下一次 | --- ## 各模块深度解读 下面详细介绍每个知识模块的学习路径、核心知识点和面试高频考点,帮助你建立完整的学习计划。 ### Java 基础与核心 Java 是后端开发的基础,但很多工作 3 年的工程师对 Java 的理解还停留在「会用 API」的层面。面试官追问下去,HashMap 的死循环问题、synchronized 的锁升级、JVM 的类加载机制——这些才是拉开差距的地方。 **集合框架**是 Java 面试的重中之重。HashMap 几乎是必问题:JDK 7 的数组+链表结构和 JDK 8 的数组+链表+红黑树有什么区别?为什么 JDK 7 在并发下会有死循环?红黑树的查找、插入、删除时间复杂度分别是多少?ConcurrentHashMap 的分段锁在 JDK 8 中被废弃,取而代之的是什么?这些问题背后的原理是什么——为什么 HashMap 的容量必须是 2 的幂次?为什么负载因子是 0.75?理解了「为什么」,才能在变种题面前游刃有余。 **并发编程**是高级工程师的必备技能。synchronized 和 Lock 的区别不只是「一个自动释放一个手动释放」这么简单。synchronized 的锁升级过程(偏向锁 → 轻量级锁 → 重量级锁)是怎么实现的?Mark Word 里存了什么?volatile 的内存语义是什么?happens-before 原则解决了什么问题?线程池的 7 个参数是什么?拒绝策略在什么场景下会触发?这些问题都需要深入理解,而不是死记硬背。 **JVM**是深入理解 Java 运行的必经之路。运行时数据区里,哪些是线程共享的,哪些是线程私有的?对象在堆中的分配过程是怎样的?Minor GC 和 Full GC 的触发条件有什么区别?CMS 和 G1 收集器的工作原理是什么?类加载的双亲委派模型是为了解决什么问题?如果想破坏它怎么实现?JIT 编译器在什么时机会介入优化? ### MySQL 数据库 MySQL 是后端面试中权重最高的数据库,没有之一。无论是 InnoDB 还是 MyISAM,无论是索引还是事务,无论是主从复制还是分库分表——每一个点都可能深入追问。 **索引**是 MySQL 面试的核心中的核心。B+ 树索引为什么比 B 树更适合数据库?为什么主键推荐使用自增 ID 而不是 UUID?联合索引的底层结构是什么样的?什么是最左前缀原则?覆盖索引和回表查询有什么区别?索引条件下推(ICP)优化了什么?MRR 优化器是为了解决什么问题?理解了索引的原理,才能在面试中回答「这条 SQL 能不能用到索引」「这个查询为什么慢」这类问题。 **事务**是面试的第二核心。ACID 四个特性分别是怎么实现的?MVCC 的 read view 是怎么生成的?RC 和 RR 隔离级别下 MVCC 的行为有什么不同?redo log 和 undo log 分别解决了什么问题?binlog 和 redolog 有什么区别?两阶段提交保证了什么?死锁是怎么产生的?怎么避免? **锁**是面试中容易被忽视但实际很重要的点。InnoDB 的行锁是怎么实现的?什么是间隙锁和临键锁?意向锁的作用是什么?为什么 RR 级别下 UPDATE 操作会锁住更大范围?自增锁在什么场景下会成为性能瓶颈? ### Redis 缓存 Redis 是后端面试的第二大数据库重点。它不只是「缓存」这么简单,Redis 的多种数据结构、持久化机制、集群方案都是面试高频考点。 **数据结构**是 Redis 的基础。5 种基本数据结构(String、Hash、List、Set、Sorted Set)各自的底层编码(SDS、QuickList、ziplist、intset、skiplist)是什么?什么时候会发生编码转换?为什么 Hash 的 field 数量超过 500 会从 ziplist 转为 hashtable?Sorted Set 的 score 相同时是怎么排序的?HyperLogLog、Bitmap、Geospatial 分别适合什么业务场景? **持久化**是生产环境必须掌握的。RDB 的 fork 过程会不会阻塞?AOF 的三种刷盘策略(always、everysec、no)各自的优缺点是什么?混合持久化是怎么工作的?为什么生产环境推荐使用混合持久化?AOF 重写会对 Redis 造成什么影响? **缓存策略**是 Redis 面试的高频场景。缓存穿透(布隆过滤器、双检 Lock)、缓存击穿(互斥锁、永不过期+异步更新)、缓存雪崩(随机过期时间、服务熔限流)各自的解决方案是什么?Cache Aside 和 Read/Write Through 模式有什么区别?Redis 的内存淘汰策略(LRU、LFU、TTL、Random)分别在什么场景下使用? **集群**是 Redis 的高级话题。主从复制的原理是什么?全量同步和增量同步分别在什么时候触发?哨兵模式解决了什么问题?Redis Cluster 的槽指派和数据迁移是怎么工作的?集群模式下 pipeline 和事务有什么限制? ### Spring 框架 Spring 是 Java 后端开发的事实标准,但面试考察的不是「你会不会用 Spring」,而是「你理解 Spring 为什么这样设计」。IoC 和 AOP 是 Spring 的两大核心,也是面试深度挖掘的方向。 **IoC(控制反转)**是 Spring 的根基。Bean 的生命周期经历了哪些阶段?依赖注入的几种方式(构造器注入、setter 注入、字段注入)各有什么优缺点?循环依赖是怎么解决的——Spring 为什么能解决单例模式下的构造器循环依赖和 setter 循环依赖,却不能解决原型模式的循环依赖?三级缓存分别缓存了什么?BeanFactory 和 FactoryBean 有什么区别? **AOP(面向切面编程)**是 Spring 的另一核心。Spring AOP 和 AspectJ 有什么区别?JDK 动态代理和 CGLIB 代理各自的实现原理和适用场景?Spring 为什么在目标类实现接口时默认用 JDK 代理?AOP 的五种通知类型(前置、后置、返回、异常、环绕)在底层是怎么被调用的?@Transactional 注解在什么情况下会失效? **Spring Boot 自动装配**是近年来面试的热门。自动装配的原理是什么?`spring.factories` 和 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` 文件分别在什么版本使用?starter 依赖是怎么工作的?如何查看一个自动配置类有没有生效? ### 分布式架构 分布式是中级工程师向高级工程师跨越的核心门槛。当单体应用扩展到多台机器,数据一致性、服务治理、分布式事务——这些问题不再是「纸上谈兵」,而是生产环境必须面对的真实挑战。 **CAP 与 BASE 理论**是分布式系统的理论基础。为什么分布式系统只能同时满足 CAP 中的两个?CP 和 AP 各自有哪些代表性中间件?BASE 理论是对 CAP 中强一致性的妥协,它的核心思想是什么?最终一致性的「最终」是多久? Paxos、Raft、ZAB 都是一致性算法,它们各自的适用场景是什么? **分布式事务**是生产环境中高频出现的场景。2PC 的「协调者挂了怎么办」问题怎么解决?3PC 在 2PC 的基础上做了什么改进?TCC 的空回滚、悬挂、幂等问题分别是什么?Saga 模式适合什么样的长事务场景?为什么说 Saga 模式适合补偿机制成熟的业务? **分布式锁**是面试和实战都很重要的点。基于 Redis 的分布式锁有什么坑?SETNX + EXPIRE 的原子性问题怎么解决?RedLock 算法真的安全吗?Redisson 的看门狗机制是怎么工作的?基于 ZooKeeper 的分布式锁和 Redis 方案相比有什么优缺点? ### 系统设计 系统设计题是 3 年以上工程师面试的核心环节,也是最难准备的环节。它考察的不是你记住了多少知识点,而是你分析问题、权衡取舍、清晰表达的综合能力。 **系统设计四步法**是应对所有系统设计题的标准流程: 1. **需求澄清**:明确系统需要支持的功能、用户规模、性能要求、存储需求。不要假设你没有问清楚的事情,先向面试官确认。 2. **高层设计**:画出系统的核心组件(API 网关、业务逻辑、数据存储、缓存、消息队列),明确数据流向。 3. **核心细节**:深入设计 2-3 个关键模块,比如短链接系统中的 ID 生成算法和时间戳编码。 4. **权衡与优化**:主动讨论可能的瓶颈(如数据量增长后的分库分表、热 key 问题)和优化方案。 **Scale 估算**是系统设计的起点。「每天 1000 万次写入,存储 3 年数据需要多少磁盘」这类估算题,考察的是你对数字量级的基本感知。记住这些数字:单机 MySQL 扛几千 QPS、Redis 扛十万 QPS、千兆网卡 125MB/s。估算时,宁可保守,不要夸大。 --- ## 面试高频考点总结 以下是根据大量面试真题整理的高频考点,每个知识点都对应本项目中的详细文档,建议逐一确认自己的掌握程度。 ### Java 必考点 - [ ] HashMap JDK 7 vs JDK 8 实现差异(数组+链表 vs 数组+链表+红黑树、红黑树转换阈值、死循环问题) - [ ] synchronized 锁升级过程(偏向锁 → 轻量级锁 → 重量级锁,Mark Word 结构) - [ ] volatile 内存语义与内存屏障(happens-before 规则、MESI 协议) - [ ] ThreadLocal 内存泄漏问题(Entry 继承 WeakReference、在线程池场景下的坑) - [ ] 线程池参数与工作流程(7 个参数、拒绝策略、线程复用原理) - [ ] JVM 内存模型与 GC 算法(Minor GC / Full GC 触发条件、各收集器原理) - [ ] 类加载机制与双亲委派(破坏双亲委派的方式、线程上下文类加载器) - [ ] ConcurrentHashMap JDK 7 vs JDK 8 实现差异(分段锁 vs CAS + synchronized) ### MySQL 必考点 - [ ] InnoDB vs MyISAM 核心差异(事务支持、锁粒度、MVCC、聚簇索引) - [ ] B+ 树索引原理与最左前缀(联合索引结构、索引覆盖、回表) - [ ] 事务隔离级别与 MVCC(RC 和 RR 的区别、read view 生成时机) - [ ] MySQL 锁类型与死锁避免(行锁、表锁、间隙锁、临键锁、意向锁) - [ ] 主从复制原理与延迟问题(binlog 格式、半同步复制、GTID) - [ ] 分库分表策略与问题(ShardingSphere、分片键选择、跨分片查询) ### Redis 必考点 - [ ] 5 种数据结构与底层编码(SDS、QuickList、ziplist、intset、skiplist) - [ ] RDB vs AOF 持久化对比(fork 阻塞、文件大小、数据恢复速度) - [ ] 缓存穿透、击穿、雪崩解决方案(布隆过滤器、互斥锁、永不过期+异步更新) - [ ] Sentinel vs Cluster 选型(哨兵模式、集群模式、数据分片) - [ ] Redis 分布式锁实现(SETNX 原子性、Redisson 看门狗、RedLock) - [ ] I/O 多路复用与事件处理(select/poll/epoll 区别、Reactor 线程模型) ### 分布式必考点 - [ ] CAP 理论及其应用(C 与 A 的 trade-off、CP 系统与 AP 系统代表) - [ ] 2PC/3PC/TCC 分布式事务方案(协调者挂了怎么办、空回滚与悬挂) - [ ] Raft 共识算法核心流程(Leader 选举、日志复制、脑裂处理) - [ ] 消息队列如何保证可靠性(消息持久化、消费确认、事务消息) - [ ] 限流算法与实现(计数器、滑动窗口、漏桶、令牌桶) - [ ] 熔断与降级策略(Hystrix/Sentinel 原理、熔断器状态转换) --- ## 快速开始 ### 环境要求 - Node.js 18.x 或更高版本 - npm 9.x 或更高版本 ### 安装依赖 ```bash npm install ``` ### 本地开发 ```bash npm run dev ``` 访问 http://localhost:3000 查看文档站点。开发模式下文件修改会自动热更新。 ### 构建生产版本 ```bash npm run build ``` 构建产物会输出到 `docs/.vitepress/dist` 目录。 ### 部署到 GitHub Pages ```bash npm run deploy ``` 会自动将构建产物推送到 `gh-pages` 分支。 --- ## 学习路径建议 根据不同的经验和目标,推荐以下学习顺序: ### 经验 1-2 年:夯实基础 第一优先级是 Java 基础和数据库(HashMap、JVM、MySQL 索引与事务),这是所有面试的基础。第二优先级是 Spring 框架和 Redis。第三优先级是有余力时了解分布式基础概念(CAP 理论、分布式锁)。算法题每天刷 1-2 道,保持手感。 ### 经验 3-5 年:扩展深度与广度 这个阶段需要在核心知识上有深度(JVM 调优、MySQL 锁与事务、Redis 集群),同时系统设计开始成为面试重点。学习方法是从「会用」到「理解原理」再到「能在设计新系统时做出合理决策」。每学完一个模块,尝试用自己的话把核心概念讲清楚——这是检验是否真正理解的最好方式。 ### 经验 5 年以上:体系化与系统思维 这个阶段的面试重点是架构设计、团队管理和技术视野。需要把之前零散的知识点串联成体系,能够从业务需求出发设计技术方案,并清楚每个决策的 trade-off。多看优秀的开源项目(Dubbo、Seata、Nacos)和技术博客,培养对系统设计的感觉。 --- ## 项目结构 ``` Guide/ ├── docs/ # 文档目录 │ ├── index.md # 首页 │ ├── interview/ # 面试准备(68 篇) │ │ ├── index.md │ │ ├── resume/ # 简历优化(6 篇) │ │ ├── algorithm/ # 算法训练(16 篇) │ │ ├── system-design/ # 系统设计(27 篇) │ │ ├── hr/ # HR 面与谈薪(8 篇) │ │ └── review/ # 面试经验与复盘(6 篇) │ ├── java/ # Java 核心 │ ├── cs/ # 计算机基础 │ ├── database/ # 数据库 │ ├── framework/ # 常用框架 │ ├── distributed/ # 分布式架构 │ ├── high-performance/ # 高性能与高可用 │ ├── middleware/ # 中间件 │ └── devops/ # 工程化与运维 ├── .cursor/ │ └── rules/ # Cursor AI 规则 │ ├── rspress-codeblock.mdc # 代码块规范 │ ├── rspress-container.mdc # 容器规范 │ ├── rspress-badge.mdc # 徽章规范 │ ├── rspress-writing.mdc # 写作风格指南 │ ├── rspress-checklist.mdc # 内容质量清单 │ ├── rspress-interview.mdc # 面试专题写法 │ ├── rspress-meta.mdc # 目录与导航规范 │ └── rspress-migration.mdc # 迁移规范 ├── package.json └── README.md ``` --- ## 贡献指南 欢迎提交 Issue 和 Pull Request!无论是修正错别字、完善代码示例,还是补充新的知识点,都是对这个项目的宝贵贡献。 ### 文档规范 1. 文件放在正确的模块目录下,文件名使用 kebab-case(如 `binary-search.mdx`) 2. 链接使用绝对路径 `/module/xxx` 3. 代码中的泛型使用 HTML 转义符(如 `List<String>`) 4. **代码示例必须使用 Java 语言**,关键逻辑加注释说明「为什么这样做」 5. 面试常考点使用加粗或徽章突出 6. 开场要有「钩子」,让读者有继续读下去的动力 7. 每个知识点要有「为什么这样设计」的讲解,不只是讲「是什么」 ### 提交前检查 - [ ] 技术内容准确无误,所有结论有依据 - [ ] 代码示例为 Java 且关键处有注释 - [ ] 链接目标存在,无泛型未转义问题 - [ ] 符合写作风格指南,有钩子式开头和记忆点 - [ ] 表格中 `>=`、`<=`、`>`、`<` 运算符用反引号包裹 - [ ] 待办清单使用 GFM 任务列表语法(`- [ ]`),不用 `☐` 符号 --- ## 常见问题 **面试范围这么广,从哪里开始?** 从你当前最薄弱的地方开始。拿一张纸,写下你觉得面试中最没把握的三个知识点——那就是你的起点。不要试图一次性全部掌握,把大目标拆成小目标,每天进步一点点。 **背答案有用吗?** 短期有用,长期有害。面试官问的问题往往是追问式的,「背」的答案在追问下就会露馅。正确的做法是理解原理,然后用「自己的话」表达出来。 **系统设计题完全没思路怎么办?** 这是正常的。系统设计需要大量阅读和思考积累。先从经典的系统设计案例入手(短链接、Feed 流、秒杀),理解它们的设计思路和 trade-off,然后试着自己画图、模拟讲解。多练几遍,思路自然就有了。 **算法题刷多少够用?** 没有固定数字。有效刷题的关键是「分类刷」而不是「随机刷」——每种类型的题刷透,形成模板化的解题思路比追求数量重要得多。 --- ## 面试常见误区:这些坑,踩一个毁一个 面试失败的原因,往往不是知识不够,而是踩了不该踩的坑。以下是我从大量真实面试中总结的高频误区,逐一分析为什么这些行为会致命,以及如何规避。 ### 误区一:只背答案,不理解原理 这是最普遍的问题。HashMap 的死循环、JVM 的类加载、MySQL 的 MVCC——这些面试高频题,在网上随便一搜就是几十篇「标准答案」。很多候选人花了两周时间把答案背熟了就去面试,结果面试官追问了两句就露馅了。 **为什么这个问题致命**:面试官问技术问题,不是想考你「记住了多少」,而是看你的思考深度。一个真正理解 HashMap 死循环的工程师,应该能说清楚 JDK 7 中扩容时的头插法为什么会导致环形链表,进而导致死循环——而不是只会说「JDK 8 用尾插法解决了这个问题」。 **如何规避**:每个知识点,学三遍。第一遍知道「怎么用」,第二遍理解「为什么这样设计」,第三遍能用「自己的话」讲清楚,并举出实际场景中的例子。检验是否真正理解的标准是:能不能在面试官追问「如果换成 xxx 场景呢」的时候,依然回答得上来。 ### 误区二:项目经历讲成流水账 「我负责了一个用户系统,实现了用户的增删改查。」——这句话放到简历上,面试官看完直接跳过,放到面试里讲,面试官在心里打了一个低分。 **为什么这个问题致命**:面试中的项目经历,是展示你「解决问题能力」的最佳素材。如果你把一个涉及接口设计、数据建模、性能优化、团队协作的真实项目,讲成了一个 CRUD 流水账,面试官会认为你在这个项目里根本没有独立思考。 **如何规避**:每个项目准备三个「高光时刻」:第一,你遇到了什么困难或挑战(不是「用了什么技术」而是「为什么需要这个技术」);第二,你是怎么分析和解决的;第三,最终取得了什么量化成果。用 STAR 法则(Situation-Task-Action-Result)组织语言,重点放在 Action 和 Result 上。 ### 误区三:系统设计题只说框架不动手 「我会在前面加一个网关,然后加缓存,再加消息队列。」——系统设计题的回答,最忌讳的就是只有框架图,没有细节。 **为什么这个问题致命**:面试官想看的是你「权衡取舍」的能力,而不是你会背几种架构模式。如果你只能画出一个看起来「全面」但没有重点的架构图,面试官会觉得你对每个组件的理解都停留在表面。 **如何规避**:系统设计的回答要有层次感。先说核心思路(比如「我觉得这个场景读多写少,应该以缓存为核心」),然后说为什么这样选择,接着说 2-3 个关键细节(比如缓存怎么预热、热 key 怎么打散),最后主动说「我觉得这里可能是个瓶颈,您觉得需要深入讨论吗?」——这种主动性往往比答案本身更能加分。 ### 误区四:算法题一紧张就放弃思考 「这个题我见过,但一时想不起来了。」——算法题面试中,最可惜的不是做不出来,而是还没开始想就说放弃了。 **为什么这个问题致命**:面试官出一道算法题,观察的是你「分析问题的过程」,而不是你能不能在 5 分钟内写出最优解。一个在白板前沉默 3 分钟、完全不沟通思路的候选人,和一个边想边说「我先试试暴力解法,然后看能不能优化」但最终没能完全做出来的候选人——前者一定挂,后者可能过。 **如何规避**:三步走策略。第一步,说暴力解法的思路(哪怕时间复杂度很高,先让代码跑起来);第二步,分析能否优化(看有没有重复计算、能不能用空间换时间);第三步,如果实在卡住了,直接说「我目前卡在这里了,能给我一点提示吗?」——坦诚沟通比死撑要好得多。 ### 误区五:HR 面掉以轻心 「技术面都过了,HR 面就是聊聊嘛。」——这是很多人挂在 HR 面的真实原因。 **为什么这个问题致命**:HR 面的目的是判断你和公司的文化匹配度、稳定性和综合素质。很多候选人在技术面中展现了过硬的实力,却在 HR 面里表现得急躁、不真诚或者对公司和团队缺乏基本了解——这会让公司觉得「这个人技术可以,但可能留不住」。 **如何规避**:HR 面同样需要准备。研究一下公司的业务和最近的动态,准备好「你为什么选择我们公司」的真诚回答。薪资谈判前,先查清楚行业水平和目标公司的薪酬范围。永远保持尊重和真诚,不要在谈薪时用过激的方式施压。 --- ## 面试评分维度解析:面试官到底在打什么分? 面试不是考试,没有标准答案。但面试官打分的逻辑是清晰的——了解这个逻辑,能让你在准备和实战中都更有针对性。 ### 维度一:技术深度(占比 40%) 技术深度是敲门砖,决定了你能走多远。这个维度考察的不是「你知道多少」,而是「你能走多深」。 **三个层次的回答,对应三种分数**: | 层次 | 表现 | 典型回答 | | --- | --- | --- | | **能用** | 知道 API 和基本原理 | 「HashMap 用拉链法解决哈希冲突,JDK 8 之后当链表长度超过 8 转为红黑树。」 | | **理解** | 能讲清楚原理和 trade-off | 「JDK 7 用头插法,在并发扩容时可能产生环形链表导致死循环;JDK 8 改用尾插法解决了这个问题。但这不是 HashMap 线程不安全的唯一原因,size++ 也不是原子操作。」 | | **洞见** | 能举一反三并设计决策 | 「如果对线程安全有要求,ConcurrentHashMap 是更好的选择——JDK 8 用 CAS + synchronized 替代了分段锁,锁粒度从段级别降到了桶级别,性能大幅提升。但要注意,size() 等操作依然是弱一致性的,不能用来做精确计数。」 | 面试官通常会从「能用」开始问,然后追问到「理解」和「洞见」层次。如果你每次都能在第三个层次给出一个有见地的回答,高分是稳的。 ### 维度二:问题分析与解决能力(占比 30%) 这个维度考察的是你在面对未知问题时的思考方式。面试官出一道你没见过的题,不是想为难你,而是想看你的思路。 **一个优秀的分析过程长这样**: 1. **澄清问题**:先确认边界条件和假设(「是单机的场景还是分布式的?」) 2. **拆解问题**:把大问题拆成小问题(「这个问题可以分成存储层、计算层、服务层三层来看」) 3. **给出方案**:先说简单方案,再说优化(「最简单的方式是...但如果有 xxx 约束,可以改成...」) 4. **权衡取舍**:主动说方案的 trade-off(「这个方案的优点是...缺点是...」) 5. **迭代优化**:承认不确定性,表示愿意讨论(「这里我不太确定,我们可以一起分析一下」) ### 维度三:沟通与表达能力(占比 20%) 技术能力再强,表达不清楚也是白搭。面试中,你的沟通方式会直接影响面试官的体验。 **好的沟通习惯**:结构化表达(先说结论,再说原因),用图和例子辅助说明,主动确认理解是否一致,回答问题前可以花 2-3 秒组织思路再开口。 **致命的沟通习惯**:面试官问东你答西,一个问题绕了 3 分钟还没到重点,用大量专业术语堆砌但不解释,听不懂问题时假装懂了然后乱答。 ### 维度四:文化匹配与学习潜力(占比 10%) 这一项考察的是:你是一个「好相处」的同事吗?你有成长空间吗? **加分项**:主动说「这个我不太确定,但我可以猜一下...」,在讨论中表现出对不同意见的开放态度,对自己的短板有清醒认知(「并发编程是我的薄弱环节,最近在补《Java 并发编程实战》」)。 **减分项**:把面试当成「审讯」,对面试官的问题表现出不屑一顾,攻击前公司或前同事,过度吹嘘自己的贡献。 --- ## 30 天面试准备计划 很多候选人问:「我只剩一个月了,该怎么准备?」下面给出一个可操作的学习计划,根据不同基础和时间安排做了适配。 ### 计划 A:零基础冲刺(30 天,每天 4 小时) | 阶段 | 天数 | 重点任务 | 产出 | | --- | --- | --- | --- | | **第一周:建框架** | 第 1-2 天 | HashMap/JVM/Java 并发基础 | 能用自己的话讲清楚 HashMap 原理、GC 算法、synchronized 基础 | | | 第 3-4 天 | MySQL 索引与事务 | 能手画 B+ 树,说出 MVCC 原理,解释隔离级别 | | | 第 5-6 天 | Redis 数据结构与缓存策略 | 能讲清 5 种数据结构的底层实现,说出穿透/击穿/雪崩方案 | | | 第 7 天 | 复盘本周知识,写笔记 | 整理 5-7 个核心知识点的思维导图 | | **第二周:啃硬骨头** | 第 8-9 天 | JVM 调优与收集器 | G1、ZGC 原理;常见 JVM 参数;dump 分析 | | | 第 10-11 天 | MySQL 锁与主从复制 | 间隙锁、临键锁;binlog 格式;半同步复制 | | | 第 12-13 天 | Spring IoC/AOP 深度 | Bean 生命周期;三级缓存解决循环依赖;AOP 失效场景 | | | 第 14 天 | 复盘 + 面试高频问题自问自答 | 录下自己的回答,回听改进 | | **第三周:系统设计与算法** | 第 15-16 天 | 系统设计四步法 + 3 道经典题 | 短链接、时间线推送、分布式 ID 各过一遍 | | | 第 17-18 天 | 再刷 3 道系统设计题 + 架构思想 | 秒杀系统、Redis 三穿透、Feed 流 | | | 第 19-21 天 | 算法:数组、哈希、链表高频题 | 每天刷 5-8 题,重点理解模板 | | **第四周:模拟与冲刺** | 第 22-23 天 | 算法:树、动态规划、滑动窗口 | 重点类型达到能完整写出并分析复杂度 | | | 第 24-25 天 | 全套模拟面试(朋友陪练或对着镜子) | 限时完成,体验真实面试节奏 | | | 第 26-28 天 | 查漏补缺 + 项目经历打磨 | STAR 法则讲项目,准备好 3 个高光时刻 | | | 第 29-30 天 | 调整作息,整理材料 | 简历、项目介绍、常见 HR 问题准备完毕 | ### 计划 B:有基础强化(15 天,每天 3 小时) 如果你已经有一定基础,但知识体系有漏洞,用这个计划: | 阶段 | 天数 | 重点任务 | | --- | --- | --- | | **第 1-3 天** | 找出薄弱点 | 用高频考点清单自测,圈出不确定的知识点 | | **第 4-7 天** | 逐个突破 | 每个薄弱点找 2-3 篇高质量文章深入理解,做笔记 | | **第 8-10 天** | 系统设计专项 | 每天练 2 道系统设计题,按四步法走,录音复盘 | | **第 11-13 天** | 算法强化 | 按类型刷题,重点突破动态规划和二分查找 | | **第 14-15 天** | 模拟面试 | 完整走一遍技术面 + HR 面,调整状态 | ### 每日复盘模板 每天睡前花 10 分钟回答这三个问题: 1. **今天学到了什么新东西?**(一个知识点,用自己的话写 3 句话) 2. **哪个知识点还没真正理解?**(列出来,明天优先解决) 3. **如果我给面试官讲这个知识点,我会怎么说?**(说出来或写出来,检验是否真正掌握) --- ## 中间件方向深度解读 中间件是高级工程师的必备技能,也是 3 年以上面试的常客。很多人对中间件的掌握停留在「会用」的层面,追问下去就卡住了。以下是高频面试方向和深度学习的切入点。 ### Kafka:消息队列的核心 Kafka 是分布式系统中最常用的消息队列之一,但很多工程师对它的理解只停留在「发消息、收消息」。 **面试高频问题方向**: Kafka 的高性能来自哪里?这是理解 Kafka 的核心问题。顺序写磁盘、零拷贝技术、PageCache、批量发送、压缩——这些因素共同作用,使得 Kafka 能达到百万级 QPS。但这不是重点——重点是你要理解每一种因素的原理:顺序写为什么比随机写快 2-3 个数量级?零拷贝是怎么绕过用户态和内核态之间的拷贝开销的?PageCache 在 Kafka 中扮演了什么角色? ISR(In-Sync Replicas)机制是 Kafka 副本一致性的核心。Leader 副本和 Follower 副本之间,通过「落后的 Follower 不参与 Leader 选举」这个设计,实现了性能和一致性的平衡。你需要理解:什么情况下 Follower 会被踢出 ISR?HW(High Watermark)和 LEO(Log End Offset)分别是什么?Kafka 的 Exactly-Once 语义是怎么实现的——为什么说它需要和幂等性结合使用? 消费者组和分区分配策略是另一个高频点。Rebalance 过程中 consumer 会出现短暂不可用——这是 Kafka 的一个已知问题,Kafka 3.x 引入的 KRaft 协议正在解决这个问题。面试官可能还会问:如果一个消费者处理消息很慢,会发生什么?(答案是:同一分区的其他消费者不受影响,因为 Kafka 的分区是并行消费的最小单位。) **深入学习的路径**:先理解 Kafka 的存储机制(分段索引、稀疏索引),再看副本同步机制,最后看消费组的 Rebalance 策略和 Kafka Connect。 ### Dubbo:RPC 框架的选型与原理 Dubbo 是阿里巴巴开源的 RPC 框架,在国内企业中使用广泛。它的面试重点不在于你会配置,而在于你理解为什么这样设计。 **面试高频问题方向**: Dubbo 的工作原理是什么?这个问题考察的是你对 RPC 框架整体架构的理解。从客户端发起调用开始,经过 Proxy 层、Filter 链、序列化、协议层、网络传输,到服务端的线程池——整个链路的每一步都在发生什么?哪些地方是性能瓶颈? Dubbo 的负载均衡策略有哪些?Random、RoundRobin、LeastActive、一致性 Hash——每种策略的适用场景是什么?一致性 Hash 在 Dubbo 中是怎么实现的?为什么说它在节点数量变化时能减少路由变化? Dubbo 的集群容错策略有哪些?Failover(失败自动切换)、Failfast(快速失败)、Failsafe(失败安全)、Failback(失败自动恢复)、Forking(并行调用多个)、Broadcast(广播调用)——这是面试中经常被问到但很多人答不全的知识点。 Dubbo 3.0 的新特性(Triple 协议、应用级注册中心)是近年来的面试热点。Triple 协议兼容 gRPC,这意味着什么?应用级注册中心和接口级注册中心有什么区别? **深入学习的路径**:从 Dubbo 的整体架构图开始,画出每一层的组件和交互关系,然后重点研究 Cluster 层(负载均衡、容错)和 Filter 链的执行顺序。 ### Nacos:配置中心与服务发现 Nacos 是阿里的开源项目,是微服务架构中的核心组件。很多人在项目中用过 Nacos,但说不清楚它的原理。 **面试高频问题方向**: Nacos 的注册中心原理是什么?客户端启动时,是如何把服务信息注册到 Nacos 的?心跳机制是怎么工作的?临时实例和永久实例有什么区别?Nacos 如何实现服务发现——消费者是如何拿到服务提供者列表的? Nacos 的配置中心是怎么保证配置变更实时性的?长轮询和 WebSocket 在其中扮演了什么角色?配置变更时,Nacos 怎么做到只通知变化的部分而不是全量推送? Nacos 的 CP/AP 切换是什么意思?默认是 AP 模式,如何切换到 CP 模式?在 CAP 理论下,这个选择意味着什么? **深入学习的路径**:从 Nacos 的客户端源码入手,理解心跳续约和服务注册的实现;再看服务端如何维护注册表,最后理解配置管理的变更推送机制。 --- ## 工程化与运维方向深度解读 工程化与运维是高级工程师向架构师跨越的重要能力,也是很多人忽视的短板。这个方向在面试中的占比正在逐年提升——大厂尤其看重工程师是否有「端到端负责」的意识。 ### Docker:容器化的核心原理 Docker 已经不是「加分项」,而是「必备项」。但很多人对 Docker 的理解只停留在「构建镜像、运行容器」。 **面试高频问题方向**: Docker 和虚拟机的区别是什么?这是最基础但也最能拉开差距的问题。标准答案是「Docker 共享宿主机内核,更轻量」,但面试官追问的是:这个「更轻量」具体体现在哪里?(启动时间:虚拟机通常 30 秒到几分钟,Docker 容器通常毫秒级到秒级。资源占用:虚拟机需要运行完整的操作系统,Docker 容器共享宿主机的内核。)更进一步的追问:Docker 的 namespace 和 cgroup 分别隔离了什么?(PID、Mount、Network、IPC、UTS、User——6 种命名空间。) Docker 镜像的分层存储原理是什么?Dockerfile 中每一条指令都会创建一个新层——这意味着什么?(答案是:公共层可以被多个镜像共享,所以拉取和存储是高效的。)COPY 和 ADD 指令有什么区别?(ADD 支持 URL 和 tar 解压,COPY 更直接透明,生产环境推荐用 COPY。) Docker 网络模式(Bridge、Host、Container、None)各自的适用场景是什么?同一个 Pod 中的多个容器如何共享网络?(答案是:使用 Container 模式,让 sidecar 容器共享主容器的网络命名空间。) **深入学习的路径**:阅读 Docker 官方文档的存储和网络章节,动手在本地搭一个多容器网络环境,理解 docker-compose 的编排逻辑。 ### Kubernetes:容器编排的核心 Kubernetes(K8s)是生产环境中容器编排的事实标准。面试中不会考你会不会 `kubectl apply`,而是考你架构层面的理解。 **面试高频问题方向**: K8s 的核心组件有哪些?API Server、etcd、Scheduler、Controller Manager、Kubelet、Kube-Proxy——每个组件的职责是什么?API Server 为什么是无状态的?(答案是:便于水平扩展,保证高可用。) Pod 的设计理念是什么?为什么说 Pod 是 K8s 中调度的最小单位,而不是容器?Pod 中的多个容器如何共享存储和网络?(答案是:通过 Pause 容器作为基础设施容器,所有业务容器共享 Pause 容器的网络和存储卷。) Deployment、StatefulSet、DaemonSet 三者的区别是什么?(Deployment 管理无状态应用,StatefulSet 管理有状态应用如数据库,DaemonSet 确保每个节点都运行一个 Pod,常用于日志收集和监控代理。) Service 是怎么工作的?Kube-Proxy 的三种代理模式(Userspace、Iptables、IPVS)各有什么优缺点?ClusterIP、NodePort、LoadBalancer 三种 Service 类型的区别是什么? **深入学习的路径**:在本地用 Minikube 或 Kind 搭一个单节点集群,跑通一个完整的多层应用(前端 + 后端 + 数据库),然后逐步理解 Ingress、ConfigMap、Secret、HPA(水平 Pod 自动扩缩容)等高级特性。 ### CI/CD:持续集成与持续部署 CI/CD 是工程化成熟度的重要标志。面试中,面试官想看到的是你「如何设计」一条高质量的流水线,而不只是「会不会写 YAML」。 **面试高频问题方向**: 一条完整的 CI/CD 流水线应该包含哪些环节?代码提交 → 静态代码检查(SonarQube)→ 单元测试 → 构建镜像 → 安全扫描(Trivy)→ 推送镜像仓库 → 部署到测试环境 → 集成测试 → 部署到预发环境 → 灰度发布 → 全量上线——每一步的目的和工具是什么? 灰度发布策略有哪些?金丝雀发布(Canary Release)、蓝绿部署(Blue-Green Deployment)、滚动更新(Rolling Update)——各自的优缺点和适用场景是什么?金丝雀发布中,如何用 Istio 控制流量比例? GitOps 是什么?为什么说它比传统的 Push 模式(SSH 登录到服务器执行部署命令)更安全?ArgoCD 和 Flux 是怎么工作的? **深入学习的路径**:用 GitHub Actions 或 GitLab CI 搭一条完整的流水线,从代码检查到生产环境部署,理解每一步的配置和为什么要这样做。 --- ## 版本更新日志 本文档持续更新,每次重大更新都会在此记录。 ### v1.5.0(2026 年 3 月) - 新增中间件方向深度解读章节(Kafka、Dubbo、Nacos) - 新增工程化与运维方向深度解读章节(Docker、Kubernetes、CI/CD) - 新增面试评分维度解析,帮助候选人理解面试官的评分逻辑 - 新增面试常见误区章节,总结 5 类高频失误 - 新增 30 天面试准备计划(计划 A 和计划 B 两个版本) - 完善各模块深度解读,调整面试高频考点清单 ### v1.4.0(2026 年 1 月) - 重构面试准备模块,增加系统设计 27 篇 - 优化各模块文档结构,补充面试追问方向 - 更新面试高频考点清单,增加分布式和高可用方向 ### v1.3.0(2025 年 11 月) - 增加 HR 面与谈薪完整攻略 - 补充面试复盘模板与沟通技巧 - 完善简历优化系列(6 篇) ### v1.2.0(2025 年 9 月) - 增加分布式架构完整模块(CAP/BASE、分布式事务、分布式锁) - 补充算法训练完整系列(16 篇) - 新增高性能与高可用方向 ### v1.1.0(2025 年 7 月) - 完善 Java 核心模块(JVM、并发、集合框架) - 补充 MySQL 和 Redis 深度解读 - 优化文档写作规范,增加写作风格指南 ### v1.0.0(2025 年 5 月) - 初始版本发布 - 完成九大核心模块的基本框架 - 建立文档写作规范和贡献流程 --- ## License MIT