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

51 阅读2分钟

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

第一轮提问

面试官:铁蛋,你好!先简单介绍一下HashMap的工作原理吧。

铁蛋:嘿嘿,HashMap啊,就是存键值对的嘛!放进去的时候,它会根据键的hash值找到对应的桶,然后放进去。如果桶里已经有东西了,就用链表连起来!(得意)

面试官:(点头)不错,那你知道JDK8之后HashMap有什么优化吗?

铁蛋:优化?哦哦,链表太长会变成红黑树!这样查找更快!(挠头)

面试官:很好!那你能说说为什么HashMap是线程不安全的吗?

铁蛋:线程不安全?因为多个线程一起put可能会把数据搞乱吧……(心虚)


第二轮提问

面试官:接下来聊聊多线程吧。你知道什么是线程池的核心参数吗?

铁蛋:核心参数?corePoolSize、maximumPoolSize、queueCapacity……还有keepAliveTime!(自信)

面试官:不错!那如果任务队列满了,线程池会怎么处理?

铁蛋:满了?那就……拒绝呗!(笑)

面试官:具体有哪些拒绝策略?

铁蛋:呃……AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy!(突然想起来)


第三轮提问

面试官:最后聊聊Redis吧。Redis的持久化机制有哪些?

铁蛋:持久化?RDB和AOF呗!RDB是快照,AOF是记录命令!(轻松)

面试官:那你知道AOF的重写机制吗?

铁蛋:重写?就是把没用的命令删掉,变小一点……(含糊)

面试官:好的,今天的面试就到这里,你回去等通知吧。


问题答案详解

HashMap的工作原理

HashMap通过哈希表存储键值对,使用键的hashCode计算桶的位置。JDK8后,当链表长度超过8时,链表会转为红黑树以提高查询效率。线程不安全的原因是并发操作可能导致数据覆盖或链表成环。

线程池的核心参数

  • corePoolSize:核心线程数。
  • maximumPoolSize:最大线程数。
  • queueCapacity:任务队列容量。
  • keepAliveTime:非核心线程空闲存活时间。

Redis持久化机制

  • RDB:定时生成数据快照,适合备份。
  • AOF:记录每次写操作,重启时重放命令。AOF重写通过合并冗余命令减小文件体积。