互联网大厂Java面试故事:谢飞机的灾难现场
面试官(严肃):
谢飞机,说说Java内存模型?
谢飞机(自信):内存模型?就是JMM啊!它规定了线程如何与主存交互,比如volatile关键字能保证可见性...
面试官(点头):不错,那说说HashMap底层实现?
谢飞机(抓耳挠腮):呃...是不是数组加链表?对对对!链表解决哈希冲突,当链表过长会转成红黑树...
面试官(微笑):很好,那线程池参数有哪些?
谢飞机(突然严肃):核心线程数、最大线程数、队列容量、拒绝策略...这些参数我都能背下来!
面试官(严肃):
讲讲Spring的IoC和AOP原理?
谢飞机(突然搞笑):IoC就是把对象交给容器管理,AOP是动态代理!哦对了,JDK动态代理和CGLIB的区别...
面试官(叹气):那RabbitMQ的死信队列怎么配置?
谢飞机(认真):需要设置消息TTL和队列长度限制,当消息过期或队列满时自动转移到死信队列...
面试官(严肃):
说说Redis的持久化机制?
谢飞机(突然慌张):呃...RDB是快照,AOF是日志...对对对!不过我上次用Redis的时候,不小心把配置文件删了...
面试官(无奈):那Docker的网络模式有哪些?
谢飞机(认真):桥模式、主机模式、none模式...还有自定义网络,这个我之前在项目里用过!
面试官(严肃):
最后一个问题,DDD领域驱动设计的核心思想?
谢飞机(突然搞笑):就是把业务逻辑封装成领域模型,用聚合根来管理...啊对了,我之前做项目的时候把领域层和基础设施层搞混了...
面试官(摇头):谢飞机,你回去等通知吧。
附:技术点详解
Java内存模型(JMM)
定义线程与主存交互规则,volatile保证可见性,synchronized保证原子性和可见性。
HashMap底层实现
数组+链表+红黑树,链表长度超过阈值转红黑树,put方法通过hash计算索引。
线程池参数
corePoolSize核心线程数,maximumPoolSize最大线程数,workQueue任务队列,handler拒绝策略。
Spring IoC/AOP
IoC通过反射创建对象,AOP通过动态代理实现切面,JDK动态代理需要接口,CGLIB代理子类。
RabbitMQ死信队列
配置消息TTL和队列长度限制,消息过期或队列满时自动转移,用于异常消息处理。
Redis持久化
RDB通过dump生成快照,AOF记录每条命令,混合持久化结合两者优势。
Docker网络模式
bridge默认桥接网络,host直接使用主机网络,none无网络,自定义网络隔离。
DDD核心思想
以领域模型为核心,通过限界上下文划分业务边界,聚合根维护数据一致性,分离领域层与基础设施层。