
互联网大厂Java面试实录严肃面试官 vs. 搞笑程序员谢飞机第一轮基础问题面试官你好谢飞机。既然你是来应聘Java开发岗位的那我先问一些简单的问题。第一个问题Java中的HashMap是线程安全的吗谢飞机呃线程……线程安全当然安全啦它有锁嘛面试官好吧那请说说ArrayList和LinkedList的区别。谢飞机这个简单ArrayList是数组LinkedList是链表区别就是一个快一个慢……心虚地笑了笑面试官嗯那最后一个问题Spring的IOC是什么谢飞机IOC就是……控制反转嘛就是把控制权交给SpringSpring就帮我们做了很多事第二轮进阶问题面试官不错那我们进入下一轮。先说说JVM中垃圾回收机制的原理是什么谢飞机垃圾回收就是把没用的东西回收掉嗯……大概是这么回事吧。面试官皱眉好吧那多线程中线程池的核心参数有哪些谢飞机线程池……最大线程数、最小线程数还有……呃线程池名字面试官无奈那最后一个问题MyBatis的一级缓存和二级缓存有什么区别谢飞机一级缓存是本地的二级缓存……可能跑到别的地方去了第三轮高级问题面试官谢飞机我们最后一轮了。Redis的持久化机制有哪些谢飞机持久化……就是存到硬盘上吧面试官扶额那分布式系统中如何保证消息的可靠性投递谢飞机消息可靠性……发两次总有一次能收到面试官……最后一个问题设计模式中单例模式有哪些实现方式谢飞机单例啊用static就可以了吧面试官行吧。你回去等通知吧。面试问题答案详解第一轮答案HashMap是否线程安全HashMap本身不是线程安全的。如果需要线程安全可以使用Collections.synchronizedMap方法或使用ConcurrentHashMap。ArrayList和LinkedList的区别ArrayList基于动态数组实现随机访问快但增删操作慢。LinkedList基于双向链表实现增删操作快但随机访问慢。Spring的IOCIOCInversion of Control即控制反转指对象的创建和依赖的管理由Spring容器负责。第二轮答案JVM垃圾回收机制JVM通过分代收集机制进行垃圾回收主要分为年轻代、老年代和永久代使用标记-清除、标记-整理、复制算法等。线程池核心参数corePoolSize核心线程数。maximumPoolSize最大线程数。keepAliveTime非核心线程的存活时间。workQueue任务队列。MyBatis一级缓存和二级缓存一级缓存是SqlSession级别的默认开启。二级缓存是跨SqlSession的需要手动配置。第三轮答案Redis持久化机制RDB快照定期将数据保存到磁盘。AOF追加日志记录每次写操作。保证消息可靠性投递消息确认机制ACK。消息重试机制。死信队列处理。单例模式实现方式饿汉式在类加载时就初始化实例。懒汉式在需要时才初始化实例。双检锁结合懒汉式和线程安全的优化方案。静态内部类通过静态内部类实现延迟加载。以上是本次面试的全部内容希望对读者有所帮助