第一轮Java基础与核心知识考察 面试官严肃: - 请简述Java内存模型中堆和栈的区别 - 你能解释一下JUC包中ReentrantLock的基本用法吗 - 多线程中synchronized和Lock的区别有哪些 程序员稍显紧张: - 堆指的是存储对象的地方栈是存储方法调用和局部变量的…… - ReentrantLock就是一个可重入的锁它可以…… - synchronized是关键字Lock是一个接口是这样…… 面试官点头: “你的回答很基础继续保持。” - 你知道HashMap是如何实现的有碰撞时怎么处理吗 - ArrayList和LinkedList的区别简单说说。 程序员: “HashMap就是用数组和链表发生碰撞就用链表存储……”语焉不详 “ArrayList就是数组LinkedList是链表插入删除快一点……” 面试官: “回答得不够深入注意细节。” 第二轮框架与中间件技术考察 面试官 - 讲讲Spring中依赖注入的实现原理 - SpringBoot与Spring相比有什么优势 - MyBatis的一级缓存和二级缓存有什么区别 - 你用过Dubbo吗简单描述它的服务调用流程。 - RabbitMQ支持哪些消息模式 程序员回答中出现犹豫细节不足: - Spring通过XML配置或者注解把对象管理统一…… - SpringBoot是Spring的简化版本自动配置很方便…… - MyBatis缓存是存储SQL执行结果…… - Dubbo是一个RPC框架可以…… - RabbitMQ就是消息队列能发消息收消息…… 面试官: “回答框架上的理解要更系统多结合实际业务场景。” 第三轮分布式、高级及运维方向 面试官 - 说说你对Redis数据淘汰策略的了解 - MySQL如何进行查询优化解释下索引原理。 - 请描述下线程池的工作原理和常用类型。 - 在Linux系统中你怎么监控Java应用的性能 - Docker容器和虚拟机有什么区别 - 了解设计模式和DDD吗请举一个你用过的设计模式实例。 程序员开始胡乱回答逻辑混乱: - Redis有过期时间什么最久没用删掉…… - MySQL用索引能快点索引是个树形结构…… - 线程池就是线程的集合管理线程生命周期…… - Linux里top命令看CPU和内存就行了…… - Docker就是虚拟机的轻量版…… - 设计模式好像是代码重用方式DDD是开发好方法…… 面试官严肃: “你对高级知识掌握明显不足今天面试先到这里回去多准备准备我们会尽快通知你。” 面试问题答案详解 1. Java内存模型堆 vs 栈 堆用于存放对象实例生命周期不定由GC管理栈存放方法调用的局部变量和操作数生命周期短且受限。栈线程隔离堆共享。 2. ReentrantLock 是JUC包中的显式锁可重入且灵活有tryLock、lockInterruptibly等功能替代synchronized更细粒度控制锁释放。 3. synchronized与Lock区别 前者为关键字隐式释放锁死锁难排查后者为接口需手动释放锁可以响应中断支持公平锁。 4. HashMap实现及碰撞处理 基于数组链表Java8后链表大于8转红黑树碰撞时链表挂载在桶中。扩容时重新hash。 5. ArrayList和LinkedList区别 ArrayList基于动态数组读取快、增删慢LinkedList基于双向链表增删快、读取慢。 6. Spring依赖注入 通过反射和容器管理Bean生命周期实现控制反转支持构造器、Setter注入。 7. SpringBoot特色 约定优于配置自动装配大大减少配置文件复杂度内置Web容器。 8. MyBatis缓存 一级缓存为SqlSession级别简单缓存查询结果二级缓存为mapper级别跨SqlSession共享缓存。 9. Dubbo服务调用 基于注册中心服务提供方注册服务消费者拉取服务列表通过RPC网络调用接口。 10. RabbitMQ消息模式 支持点对点、发布/订阅、路由和主题等各种消息通信模式。 11. Redis淘汰策略 包括volatile-lru、allkeys-lru、volatile-ttl、noeviction等根据键的过期策略和访问频率决定淘汰。 12. MySQL查询优化与索引 索引通过B树结构加快查找优化包括避免全表扫描、合理使用索引、查询分解、慢查询分析。 13. 线程池工作原理 线程池维护线程池大小任务队列线程复用减少频繁创建销毁线程常用类型如FixedThreadPool、CachedThreadPool。 14. Linux应用性能监控 使用top、ps、jstat、jmap、jstack等工具监控CPU、内存、线程、GC。 15. Docker vs 虚拟机 Docker基于容器共享内核资源开销小启动快虚拟机带完整OS隔离性更强但资源重。 16. 设计模式与DDD 设计模式如单例、工厂、观察者解决常见设计问题DDD强调领域驱动设计聚焦业务模型。