ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

三年Java经验,却挂在这些面试题上

2026/9/18 19:16:52 拓冰建站 浏览量
三年Java经验,却挂在这些面试题上 三年是Java程序员的一道分水岭。熬过了CRUD写熟了业务代码自以为跳槽涨薪十拿九稳。可面试一圈下来却发现自己挂得莫名其妙——不是栽在算法也不是败在架构而是那些“以为自己会”的基础题。问题出在哪不是你不会而是你只停留在“会用”没摸到“为什么”。第一题HashMap扩容为什么容量必须是2的幂几乎所有人都能答“为了减少哈希冲突”。但面试官接着问“具体怎么减少的扩容时元素怎么迁移”很多人就卡住了。真正的答案是容量为2的幂时hash (n-1)等价于hash % n位运算比取模快得多。扩容时JDK 1.8 不再重新计算哈希而是通过hash oldCap判断高位为0留在原索引为1移到原索引oldCap。这样迁移高效还能把链表拆成两条。如果你只背了“减少冲突”却没看过resize源码这题就挂了。第二题线程池核心参数你怎么定的背七个参数不难难的是结合项目。面试官问“你们线上核心线程数设了多少为什么”很多人答“CPU核数1”或“2倍核数”但这是教科书答案。真实场景要看任务类型IO密集型可以设大但还要看下游承受能力、队列长度、拒绝策略。更关键的是你有没有监控过线程池的活跃线程数、队列积压如果答不出“我们通过压测把核心线程从20调到50QPS从800提升到1500”面试官只会觉得你没实战。第三题线上OOM你怎么排查三年经验如果没处理过一次内存泄漏简历就少了一半含金量。面试官期待你说出完整链路先top看CPU和内存jstat看GC频率和老年代增长jmapdump堆文件再用MAT或JProfiler分析支配树找到大对象和引用链。常见元凶ThreadLocal没remove、静态集合无限增长、缓存没设过期。如果你只说“重启一下”那这轮就结束了。第四题MySQL索引为什么用B树能答“减少磁盘IO、范围查询快”算及格。但追问“联合索引(a,b,c)where b1 and c2 能用索引吗”答案是不能因为最左匹配。再问“explain中type有哪些级别你优化过哪些慢查询”很多人只见过ALL和ref没调过range和index_merge。真正的优化是看rows和filtered加覆盖索引避免回表用force index引导优化器。没有慢查询日志分析经验这题就虚了。第五题Spring循环依赖为什么要三级缓存能说出“三级缓存解决循环依赖”的人不少但面试官会问“二级缓存行不行”不行。因为二级缓存存的是早期Bean如果Bean需要AOP代理二级缓存会暴露原始对象导致注入的不是代理对象。三级缓存存的是ObjectFactory可以在需要时生成代理。理解这一点才算摸到了Spring的命门。第六题分布式锁你用Redis还是Zookeeper很多人答Redis因为性能好。但面试官追问“RedLock有什么争议锁过期了业务没执行完怎么办”这就涉及到锁续期看门狗、RedLock在时钟漂移下的安全性争议。Zookeeper的临时顺序节点更可靠但性能不如Redis。没有结合业务场景的取舍只背结论很难过关。三年经验面试官不再考你“会不会”而是考你“踩过多少坑想过多少为什么”。挂在这些题上不是能力不够而是准备方向偏了。建议挑一个你项目里最深的技术点把源码、参数、线上问题、优化过程全串起来。面试时用真实案例说话比背八股文强一百倍。三年该有深度了。