互联网大厂Java面试实录:严肃面试官与搞笑程序员铁蛋的对话

73 阅读2分钟

互联网大厂Java面试实录:严肃面试官与搞笑程序员铁蛋的对话

第一轮:Java基础与集合框架

面试官:铁蛋,先来聊聊Java基础吧。你能说说ArrayList和LinkedList的区别吗?

铁蛋:哎呀,这个简单!ArrayList是数组,LinkedList是链表。ArrayList查询快,增删慢;LinkedList增删快,查询慢。

面试官:不错,回答得很清晰。那HashMap的底层原理呢?

铁蛋:HashMap啊,就是数组加链表,后来还加了红黑树。put的时候先算hash,然后放桶里,冲突了就链表解决,链表长了就变树。

面试官:很好!那你能说说ConcurrentHashMap和HashMap的区别吗?

铁蛋:呃……ConcurrentHashMap是线程安全的,HashMap不是。具体咋实现的?好像是用了分段锁?(挠头)

面试官:嗯,方向对了,但细节不够。


第二轮:多线程与JUC

面试官:接下来聊聊多线程。线程池的核心参数有哪些?

铁蛋:corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、rejectedExecutionHandler!

面试官:不错!那线程池的拒绝策略有哪些?

铁蛋:有AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy。

面试官:很好!那你能说说AQS的原理吗?

铁蛋:AQS?啊,就是那个AbstractQueuedSynchronizer,用来搞锁的。具体咋实现的?好像是用了CLH队列?(一脸懵)

面试官:嗯,回去再复习一下吧。


第三轮:框架与中间件

面试官:最后聊聊Spring。Spring的IoC和AOP是什么?

铁蛋:IoC是控制反转,把对象的创建交给Spring;AOP是面向切面编程,比如日志、事务啥的。

面试官:不错!那SpringBoot的自动配置原理呢?

铁蛋:这个……好像是用了@EnableAutoConfiguration和spring.factories?(不确定)

面试官:嗯,方向对了。那Redis的持久化机制有哪些?

铁蛋:RDB和AOF!RDB是快照,AOF是日志。(自信)

面试官:回答得不错。今天就到这里吧,回去等通知。


问题答案详解

  1. ArrayList和LinkedList的区别

    • ArrayList基于动态数组,支持随机访问,增删慢;LinkedList基于双向链表,增删快,查询慢。
  2. HashMap的底层原理

    • 数组+链表+红黑树,通过hash计算索引,冲突时链表解决,链表过长转为红黑树。
  3. ConcurrentHashMap的线程安全实现

    • JDK1.7使用分段锁,JDK1.8改用CAS+synchronized。
  4. 线程池的核心参数

    • corePoolSize:核心线程数;maximumPoolSize:最大线程数;keepAliveTime:空闲线程存活时间;workQueue:任务队列;threadFactory:线程工厂;rejectedExecutionHandler:拒绝策略。
  5. AQS原理

    • 基于CLH队列,通过state变量和CAS操作实现锁的获取与释放。
  6. SpringBoot自动配置原理

    • 通过@EnableAutoConfiguration加载META-INF/spring.factories中的配置类。
  7. Redis持久化

    • RDB:定时快照;AOF:记录写操作日志。