2026/9/28 8:54:43

Java面试八股文该不该背?从原理到实战的完整应对指南

Java面试八股文该不该背?从原理到实战的完整应对指南 最近经常看到Java面试背八股还有没有用这类讨论很多准备跳槽或者在读的同学都挺纠结。今天想从这些年的实际面试和被面经验出发把这件事掰开聊清楚背八股到底有没有用哪些东西值得背怎么背才不会白费无论你是刚学Java准备找实习还是工作了两三年想换个平台这篇文章应该都能给你些真实可用的参考。我不想给大家灌不用背、要靠理解这种鸡汤事情没那么简单背东西本身也不该被妖魔化关键看你背的是什么、怎么背。先说结论八股当然要背纯靠背也确实容易被问倒真正的问题在于面试考察的到底是什么。下面我用实际案例和个人踩坑经历展开聊聊。1. 首先搞清楚面试官问八股到底在问什么1.1 八股文到底是什么样的存在Java面试八股文说白了就是一套约定俗成的面试题库JVM内存模型、垃圾回收算法、HashMap底层原理、ConcurrentHashMap加锁机制、Spring Bean生命周期、MySQL索引为什么用B树、Redis为什么快、线程池参数怎么配……这套东西流传太广以至于不少人都知道要背它。但大多数人没有想过为什么面试官喜欢问这些真的只是为了刁难人吗我个人的理解是这套题是天然的知识图谱索引。Java后端开发的核心知识体系盘根错节面试官在一个小时内没法看完你所有的项目代码更没法判断你的真实水平。通过几个高频八股问题他能快速探测你知识体系的完整程度和深度边界。比如问HashMap底层结构其实是想从集合类切入看你有没有继续往下挖的能力为什么用数组加链表链表什么时候转红黑树扩容为什么是2倍多线程下为什么会丢数据讲到ConcurrentHashMap的时候能不能说出CAS加synchronized的加锁思路这一连串顺下去你的并发功底就基本暴露了。所以八股不是无用而是有用到不行。它是一个供面试官使用的探测协议用标准问题去度量你的知识存储方式。真正没用的是死记答案、不会延伸、不会联系项目的背法。1.2 上班几年后你还记得多少八股知识我有个特别直观的感受前两年准备跳槽时把JVM调优、类加载、AQS那一堆重新过了一遍当时感觉每个字都认识也能背出来。面完试回到工作中真正在用的其实是这些东西排查线上OOM时需要看懂堆内存快照要能区分是堆内存泄漏还是GC频率过高导致的。优化接口耗时会看一下是不是Full GC太频繁是不是有大对象直接被分到了老年代。写多线程代码时线程池拒绝策略、队列长度需要自己算过一遍。调MySQL慢查询时会看explain里的type、key、rows决定要不要给某个字段加索引。你会发现工作中真正用到的是思想和原理而不是背诵的准确表述。但如果没有背过、没有形成概念框架遇到线上问题时连排查方向都没有。八股知识在工作里像是内功心法——你不需要每天念口诀但内功要够不然遇到复杂问题只能瞎试。1.3 现在的招聘环境对八股的要求反而更高了很多人吐槽面试造火箭、工作拧螺丝抱怨Java面试问得太深太偏。但从企业角度想候选人池子里什么样的人都有有自学三个月就来投简历的有培训速成班出来的也有实打实写了几年代码的。在这么卷的环境里面试官如果不问深一点怎么区分谁是真行、谁是全靠背我面试别人的时候最怕遇到一种候选人简历写得很漂亮项目经验看着挺全但问两句底层原理就漏洞百出。比如写精通多线程问线程池核心参数答得上来再问如果核心线程都在忙新任务怎么处理队列满了怎么办什么时候会创建非核心线程答得模棱两可。这说明什么说明他的精通是背概念背出来的没有在实际场景里推演过。所以在这个环境下八股不是过时了而是变成了筛选门槛你得先把地基上的这些概念都背熟才能站在同一对话平台上。背不熟、背不深、背不透第一步就被筛掉了。2. 盘点 Java 面试里真正值得投入的核心知识清单2.1 Java 基础与面向对象不是学校考试是工程判断很多同学觉得Java基础简单无非是面向对象三大特性、重载和重写、接口和抽象类的区别、equals和hashCode约定。可面试官问这些的时候背后往往藏着工程判断题。举个例子面试官问接口和抽象类有什么区别标准答案谁都能背单继承、多实现、抽象类有构造方法、可以有成员变量……但好的加分答法是补一句实际工作中如果多个类有共同的通用逻辑实现我会用抽象类做基类把模板方法放在里面如果只是定义能力和契约让调用方不依赖具体类型我会用接口。这一句话就能让面试官知道你不仅知道区别还知道怎么选。再比如String、StringBuilder、StringBuffer这题几乎每场面试都问。如果只会背String不可变、StringBuilder线程不安全、StringBuffer线程安全那只是及格。真正的加分点是实际项目中字符串拼接到底该用哪个做高频接口的时候在循环里做字符串拼接如果不用StringBuilder会出现什么问题JVM对String拼接有没有优化编译期优化为StringBuilder从性能角度怎么给这个老八股注入新的工程认知。还有深拷贝和浅拷贝热词里也出现了。这题的经典场景是你有一个对象需要复制一份去修改如果直接赋值过去引用类型字段会被共享改了一个另一个也变。面试时可以现场展开手写一个深拷贝怎么实现序列化方式实现深拷贝有什么坑性能差、对象必须可序列化、有循环引用风险Spring的BeanUtils.copyProperties是深拷贝还是浅拷贝这几个问题串起来比单纯背什么是深拷贝有说服力得多。2.2 集合源码与并发HashMap 是绕不开的试金石集合这块Java面试八股文的主战场非HashMap莫属。热词里也直接出现了aqs java、java容器这类词条。如果时间有限我建议你把HashMap和ConcurrentHashMap花大力气吃透值得背的点包括HashMap底层数据结构数组加链表、链表转红黑树的阈值8和退化条件6为什么链表长度到8才转红黑树泊松分布同时为了平衡查询性能和节点插入性能。HashMap的put流程计算hash、扰动函数高16位异或低16位、确定桶下标、插入、判断是否扩容。为什么要二次哈希就是为了让高位也参与进下标计算减少hash冲突。HashMap扩容机制为什么默认负载因子是0.75为什么是2倍扩容为什么要求初始容量是2的幂次因为这样能用位运算替代取模效率高。这些东西如果只是背结论面试官追问到数学层面就容易露馅但至少要能说出0.75是空间和时间的一个折中。HashMap为什么线程不安全多线程put时JDK7可能头插法造成环形链表JDK8虽然有改进但会出现数据覆盖。这个点是引出ConcurrentHashMap的天然桥梁。ConcurrentHashMap的锁机制JDK7是分段锁SegmentsJDK8改成了CAS加synchronized锁住数组槽位。为什么改因为锁粒度更细、并发度更高而且synchronized经过锁升级优化后性能已经不输Lock。你看光一个HashMap就能串出一整套Java并发知识。背这些不是让你在面试官面前表演人工背诵机而是为了让你遇到任何变体题都能有底气。AQSAbstractQueuedSynchronizer是Java并发包里的底层框架Lock、Semaphore、CountDownLatch、ReentrantLock都是建立在它之上的。这个知识点比较硬核但值得啃。你至少得能说清楚AQS的内部状态state、CLH变体队列、独占锁和共享锁的区别、获取资源失败的线程会进入等待队列并且通过park挂起、释放资源时如何唤醒后继节点。能画出来最好画不出来至少要能讲清楚大概流程。2.3 JVM 内存与垃圾回收背完能排查问题才有价值同样是高频重点。JVM这块被问得最多的就是内存区域划分和GCJava面试问你项目中遇到OOM怎么排查几乎已经成为保留项目。如果只背堆、栈、方法区、程序计数器、本地方法栈五个名词那是会被当场追问到怀疑人生的。我建议你理解着背一套完整的链路JVM运行时数据区有哪些哪些线程共享、哪些线程私有对象分配流程是怎样的新对象一般分配到新生代的Eden区大对象直接进老年代长期存活的对象经过几次Minor GC后晋升老年代。GC怎么判断对象是否可回收引用计数法有循环引用问题主流JVM用的是可达性分析GC Roots有哪些什么时候触发Minor GC、Major GC、Full GC你写的代码里什么操作最容易触发Full GC比如大对象分配、System.gc()调用、MetaSpace空间不足。常见垃圾收集器怎么选CMS和G1各自适合什么场景G1为什么能做到可预测的停顿时间ZGC又解决了什么问题这套链路背下来再叠加一个真实场景如果线上有个接口频繁Full GC你会怎么排查你就能用上面的概念去套先看监控确认GC频率和堆内存使用曲线再想办法拿到堆转储文件用MAT分析大对象定位到具体代码之后看是不是一次性把大量数据加载进内存了还是没有复用对象导致频繁创建。这一整套走下来面试官会觉得你不仅会背还能干活。2.4 Spring 与 Spring Boot从使用到原理的进阶之路Spring几乎是Java后端面试必考的领域。热词里也有springboot 面试详解这条。别管你是刚学Java还是已经用过SpringCloudIOC和AOP这两个词都应该刻在脑子里。IOC控制反转要理解到容器帮你管理对象生命周期和依赖关系这个本质。面试者最好能从工厂模式的角度去理解BeanFactory和ApplicationContext的关系能说出Bean的生命周期大概有哪些关键节点实例化、属性填充、初始化前BeanPostProcessor、初始化、初始化后、销毁最好能知道三级缓存是用来解决循环依赖的A引用B、B引用A时为什么三级缓存能兜住。AOP要理解动态代理JDK动态代理和CGLIB动态代理的区别是什么JDK代理要求目标对象实现接口基于接口生成代理类CGLIB是通过继承目标类生成子类重写方法实现增强。Spring中事务管理就是典型的AOP应用事务的传播行为REQUIRED、REQUIRES_NEW、NESTED等要背熟尤其是同一个类内部调用事务方法为什么失效这个坑几乎每场面试都有。Spring Boot部分自动配置原理要能讲清楚SpringBootApplication组合了哪些注解EnableAutoConfiguration怎么通过META-INF/spring.factories加载自动配置类条件装配ConditionalOnClass、ConditionalOnMissingBean怎么起作用不要求背到源码级别但至少要说出约定优于配置的具体体现默认端口、默认数据源、自动扫描包路径这些。2.5 数据库与分布式数据一致性是后端面试的分水岭热词里有一条java怎么保证数据一致性这问题太贴合实战了。分布式系统面试几乎绕不开CAP定理和BASE理论但光会背一致性、可用性、分区容错性三选二没用。面试官真正想听的是你在实际项目里怎么做的如果项目用了Redis缓存和MySQL缓存和数据库的一致性怎么保证是先更新数据库再删缓存还是先删缓存再更新数据库为什么会出现不一致双写的时候怎么处理可以提延迟双删、binlog订阅刷新缓存、设置较短过期时间兜底这些方案。如果涉及跨服务调用的数据一致性分布式事务方案怎么选2PC两阶段提交有什么问题同步阻塞、协调者单点TCC是怎么通过Try、Confirm、Cancel三个阶段保证最终一致性的可靠消息最终一致性方案是什么套路Seata这种分布式事务中间件底层支持了几种模式这些问题其实没法靠背一个标准答案解决你得真正理解自己业务场景为什么选了这个方案。但要注意如果不先背下有哪些方案这个地图你在面试时连选择都无从谈起。所以顺序是先背地图、再理解取舍、最后结合项目。Binder工作原理出现在热词里这个多少有点跨界。它严格来说是Android进程间通信IPC的机制不是Java后端面试的高频考点。但如果简历写了Android相关项目被问到也正常。简单说Binder基于Client-Server架构用一次拷贝替代传统IPC的两次拷贝性能更好同时也是Android系统权限管控的关键通道。不属于Java后端的核心线不用在这上面花太多时间。3. 从背会到讲会把知识点变成面试能力的方法3.1 强制三步法概念、结构、联系我自己从大学第一次面试被问倒到后来能比较顺畅地应对面试中间靠的不是加大背诵量而是换了一套整理知识的方式。我把这方法叫三步法。第一步能说出这个概念是什么。这一步是基础比如什么是JMMJava内存模型定义了多线程环境下共享变量的可见性、有序性、原子性规则。背到这里只是完成了概念层。第二步能画出它的结构或者讲出它的核心流程。例如JMM就要能说清楚主内存和工作内存的关系是什么volatile为什么能保证可见性——因为每次读写都要刷新到主内存并且通过内存屏障禁止指令重排序。有了这个结构你才算把概念撑开了。第三步能说清楚它和邻近概念的关系、和实际开发的关系。比如讲到JMM可以自然串到Java并发编程的三个特性原子性、可见性、有序性分别靠什么保证synchronized管原子性和可见性volatile主要保证可见性和有序性AQS也涉及对这些特性的底层支持。再进一步高并发场景下单例模式为什么要用双重检查锁加volatile因为指令重排可能导致拿到未初始化完成的对象。每次准备一个知识点的时候都按照概念—结构—联系走一遍你会发现过一段时间这些知识点就不再是孤立的词条了而是互相连接的网。3.2 背主线、舍细枝用提问串起知识体系很多人背八股失败是因为把知识当碎片背今天背完JVM明天背Spring脑子里全是独立的小卡片。这张卡和那张卡之间没有任何通路。学文科的都知道一个朝代要按政治、经济、文化、军事几条线去整理Java知识也是一样的。我建议你给自己建几条主线然后沿着主线像面试官那样不断对自己提问JVM线内存布局 → 对象创建 → 垃圾回收 → 类加载 → 调优工具。并发线synchronized → volatile → Lock → AQS → 线程池 → 并发容器。集合线HashMap → ConcurrentHashMap → ArrayList → CopyOnWriteArrayList → 常见线程安全集合。Spring线IOC → Bean生命周期 → AOP → 事务 → SpringBoot自动装配。数据库线索引 → 事务隔离级别 → MVCC → 锁 → 日志 → 主从复制。每一条主线都像一棵树主节点是树干分支是细节点。面试官从任何一个节点往下追问你都能沿着树枝顺下去这比硬背一百个零散题目要有效得多。3.3 把八股翻译成项目语言告别技术黑话这可能是最核心的一招。面试官问八股往往下一步就问你在项目中怎么用的。如果你只会说术语不会落地印象分会大打折扣。举个例子面试官问你在项目里怎么保证接口幂等性你可以这样翻译我们系统里下单接口用的方案是前端生成一个唯一请求号requestId随请求带过来后端先查Redis看这个requestId是不是已经处理过了。如果处理过就直接返回上次的结果避免重复下单。如果没处理过就以requestId为key写入Redis同时把处理结果也存进去。这个方案本质上是利用Redis的单线程特性来保证原子性配合分布式锁或者数据库唯一索引可以做到多节点情况下也能防重。这段话里其实藏了很多八股考点唯一索引、Redis原子性、分布式锁、幂等设计。你不需要把八股词汇喊出来但面试官一听就知道你懂这些。这就是翻译能力——把抽象概念对应到具体业务场景的能力。4. 面试翻车现场复盘我见过的高频死法4.1 只能背标准定义连环追问就崩盘我做了几年面试官最常看到的场景是面试官HashMap的负载因子是多少候选人0.75。面试官为什么是0.75候选人……默认值就是这样。面试官如果我想让内存占用更小该调大还是调小候选人……这个候选人把结论背了但没有理解结论的推导过程。0.75实际上是空间利用率和冲突概率的折中太小了数组频繁扩容空间浪费太大了桶中链表变长查询效率下降。你能说出这一层才说明你真的理解了说不出面试官只会觉得你是临时抱佛脚背的答案。这个问题怎么解决就是前面说的概念—结构—联系三步法平时准备一个知识点时多问自己几层为什么。可以找一个朋友或者用录音笔模拟面试官追问自己直到每个高频考点都能连问三层不崩。4.2 只背知识点不写代码手撕算法露馅现在Java面试不只是说说概念很多公司还会有手撕代码环节。热词里的冒泡排序java其实是个比较基础的算法。但别小看它有些候选人直到面试前还在背各种排序算法的代码却连稳定排序是什么意思都解释不清。我的建议是背算法的思路不要死背代码。比如冒泡排序你要知道它的核心思想是相邻元素两两比较大数慢慢浮到末尾每轮都会确定一个最大值的位置所以外层循环跑n-1次内层循环跑n-1-i次。理解了思路哪怕代码记得不精确你也能当场写出来。反之只背代码的人是扛不住面试官改一个要求的如果这个数组大部分是有序的你怎么优化冒泡排序——这就需要在每轮循环里加一个是否有交换的标记没有交换就提前结束。4.3 不懂装懂编造答案是大忌在线上面试遇到一个候选人我问他MySQL的redo log和binlog有什么区别他先愣了一下然后开始讲redo是物理逻辑日志binlog是……磕磕绊绊讲了半天其实两个日志都搞混了。我当时心里就已经有结论了他对MySQL日志体系是一团浆糊后面的问题就算答得好也很难挽回技术上不够诚实的印象。其实这道题不会完全不正常但更好的做法是诚实地划出边界这块我平时主要看的是binlog做数据恢复redo log在崩溃恢复里的细节研究得还不够透我讲讲我理解的部分如果有不对的地方您纠正我。这种回答至少说明你对自己知识的边界有清醒认识大多数人反而会觉得这人踏实。面试官最怕的不是候选人不会而是候选人不懂装懂把错的答案讲得自信满满这在工程协作里是要出大事的。注意我平时自己准备面试时有个习惯——不熟的问题宁可主动说不太了解也绝不硬编。这个原则在真正的生产环境里一样适用线上出了问题最怕的就是有人拍脑袋说好像没事最后出了大事故。4.4 常见面试翻车问题速查下面整理一些我自己被问过、或者作为面试官问过的高频问题大家可以对着自测一下看看你背的八股是不是只停留在第一层问题及格答法加分答法HashMap为什么线程不安全并发put可能数据覆盖能展开说JDK7头插法死循环、JDK8覆盖引出ConcurrentHashMap线程池核心参数有哪些corePoolSize、maxPoolSize、workQueue、handler能把拒绝策略四种类型对应到实际场景并说出为什么不能用Executors默认缓存队列Spring事务失效的场景有哪些访问权限非public、方法内部调用、异常被捕获能一条条说明背后原理动态代理失效、异常类型匹配volatile能不能保证原子性不能能举例说明count为什么不是原子操作并说明volatile的适用场景MySQL索引为什么用B树矮胖减少磁盘IO能对比B树和B树的差异说明叶子节点链表对范围查询的帮助Redis为什么快基于内存、单线程IO多路复用、高效数据结构、避免上下文切换这张表做完你就发现了所谓八股加分从来不是答案加长而是能说到位。多一层原理多一个落点面试官心里的印象就完全不一样。5. 不同阶段的人到底应该怎么准备 Java 面试5.1 在校生和转行新人先建立知识地图再填充细节如果你刚学完Java基础还没有太多实战经验这个阶段最需要做的事其实是快速建立知识地图。把我上面列的主线JVM、并发、集合、Spring、数据库过一遍不要求每条都深挖到底但至少要知道Java面试会问哪些山头。对于你来说八股不是没用而是最宝贵的复习指南。你连一个项目都没有的时候面试官能考察你的唯一手段就是基础知识。所以我建议每天给自己定一个小目标比如今天吃透线程池的五种状态或者今天搞懂ConcurrentHashMap的锁机制。每一类知识都画一张脑图不需要精美自己能看懂就行让知识点有归属感。多去搜java面试大全及答案这类汇总材料也看看最新的面经因为你还没分辨力所以最好找那些同时给为什么的答案纯结论的题库看起来省力实际上害人不浅。5.2 工作三五年想跳槽以八股为镜反查自己的工程短板如果你已经有几年工作经验还只会死背八股那确实容易被面试官识破。但这个阶段八股依然重要只是用法不一样——它像一面镜子帮你在准备跳槽时对照自查哪些基础概念模棱两可哪些原理在实际工作中被自己忽略了我的建议是先找几份整理的比较好的面经热词里的java面试八股文pdf下载java面试宝典pdf能帮你快速找到把题目从头到尾扫一遍。会的题快速跳过不会的题或者说不清楚原理的题圈出来逐项去搞明白。这个过程相当于给自己做一次技术体检效率比漫无目的地看源码高得多。同时不要浪费你的项目经验。面试官问到项目里遇到过什么问题的时候试着把你背过的八股知识跟真实经历挂钩。比如项目里有没有遇到过线上OOM你做没做过JVM参数调优如果没遇到也可以坦诚说这个我了解过但没真正处理过。5.3 资深和架构方向八股退后方法论登场到了这个层级面试官基本不会再问HashMap的负载因子是多少这种题了他们更在意的是你的技术判断力、架构设计能力、跨团队协作能力。但八股并没有消失而是变成了你大脑底层操作系统的一部分。比如讨论一个系统设计题给你一个用户积分系统日活几百万你怎么设计你脑子里自然浮现出的不再是一道道八股题而是数据怎么存储分库分表、热点用户怎么处理缓存热Key、一致性问题怎么解异步对账消息队列重试、可用性怎么保证降级、限流、熔断。这些能力恰恰是你当年背熟的分布式、缓存、MQ原理经过项目经验改造之后长成的。6. 一个真实的面经复盘从被问倒到拿Offer最后分享一个比较典型的例子。有个朋友去年跳槽投的是一家做Saas的中型互联网公司。他说面试官问了一道题既然你说读过Spring源码那请你讲一下Spring Bean的循环依赖为什么能被解决三级缓存分别是什么他当时的回答大致是 假设A依赖BB又依赖A。创建A的时候实例化出A的早期引用放进三级缓存放ObjectFactory填充属性时发现需要B就去创建BB在创建过程中发现需要A从三级缓存里拿到A的早期引用完成注入B创建完成后把自己放入一级缓存A再从一级缓存拿到B完成自己的创建。整个过程里A虽然还不完整但已经有了引用不会因为互相等待而报错。面试官继续追问那为什么还要二级缓存直接用提前存在的A实例注入不行吗他停顿了几秒老实地回答这个问题我复习的时候没有思考过细节我理解二三级缓存的区分是为了处理AOP代理对象生成时机的问题但具体到源码层面我说不太准确。面试官听完说不过你能知道扩展点在哪已经很不错了。后来他顺利拿到了Offer。复盘下来他被问倒的那一题并没有成为减分项因为他没有不懂装懂而前面几个关联问题都答得清晰有层次面试官很快就判断出这个人只要愿意很快能补上细节。这个故事里面试官考察的不只是知不知道三级缓存更是候选人遇到知识盲区时的反应方式。背过的八股给了你足够的底气让你在被追问的瞬间不慌而那些没背到的地方反而是展示诚实和应变力的机会。7. 准备 Java 面试的几个关键建议7.1 别把力用在背更新日志上很多同学复习的时候总喜欢追最新框架的最新特性比如Spring Boot 3.x、JDK 21的新特性背得滚瓜烂熟。但我个人的实际经验是大多数公司面试考察的还是底层基础新特性往往是加分项不是必选项。与其花一天背新特性不如把半天给JVM、半天给并发、半天给MySQL这些才是基础分。7.2 关注热词但不盲从热词准备面试的时候多看看热搜和面经是好的能帮你感知市场在考什么。比如热词里出现的事件冒泡、事件捕获、事件委托(面试口述)这在Java后端面试里其实不常考但对前端同学很重要。如果你面的是Java岗就不要花太多精力去背前端事件流。观察热词的时候要结合自己的目标岗位去筛选不然会浪费很多时间。7.3 给自己计时练习有节奏的口述表达一项被反复忽略的技能是用口语把八股知识讲出来。很多人在脑子里背得很熟一张嘴就结巴。最好的办法是找一个同样在准备面试的朋友每天互相模拟面试15分钟一个问一个答录下来回放。你会发现你以为会的和说出来的之间有巨大的鸿沟。7.4 用写技术笔记的方式巩固背诵如果只是读、背遗忘曲线会教你做人。我自己的经验是每搞懂一个知识点就在笔记里用自己的话写一遍这个东西是什么、为什么这样设计、我在实际开发中怎么用。写这个动作能把短时记忆转成长时记忆而且面试前翻笔记比自己重新翻题库要高效得多。8. 再多说几句心里话写了这么多核心想法其实很简单在现在这个就业环境下直接说背八股没用的多半是没认真背过但把八股当成万能钥匙、指望背完就能拿Offer的也早晚会在面试连环追问里碰壁。真正靠谱的态度是——把八股当成一份高质量的知识地图老老实实按图索骥把核心原理理解透再结合自己的项目把它们织成一张网。面试的时候有底气地讲明白、讲出层次、讲出应用场景比背一百道标准答案要有用得多。我个人在实际面试里感受最深的一点是面试官其实并不讨厌你背过他讨厌的只是只背过三个字。知识就像工具你用起来的时候它才有价值摆在脑子里落灰再全也没用。希望这篇文章能给正在准备Java面试的朋友一点方向参考少走一些我已经走过的弯路。