第一轮提问:Java基础与集合框架
面试官:谢飞机,先简单介绍一下Java中的ArrayList
和LinkedList
的区别吧。
谢飞机:啊?ArrayList
是数组,LinkedList
是链表,一个快一个慢,对吧?
面试官:(微笑)不错,能说出数据结构区别。那ArrayList
的扩容机制是怎样的?
谢飞机:扩容?就是不够用了就变大呗,具体咋变我也不知道……
面试官:好吧,那你知道HashMap
的底层实现吗?
谢飞机:HashMap
?就是键值对嘛,存数据用的!
面试官:(摇头)看来基础还需要加强啊。
第二轮提问:多线程与JUC
面试官:接下来聊聊多线程。synchronized
和ReentrantLock
有什么区别?
谢飞机:synchronized
是关键字,ReentrantLock
是个类,锁的东西差不多吧?
面试官:(点头)方向对了。那线程池的核心参数有哪些?
谢飞机:核心线程数、最大线程数、队列……还有啥来着?
面试官:不错,能说出几个。那ThreadLocal
的作用是什么?
谢飞机:ThreadLocal
?是不是用来存线程自己的数据?
面试官:(微笑)这次回答得不错。
第三轮提问:框架与中间件
面试官:最后聊聊框架。Spring的IoC和AOP是什么?
谢飞机:IoC就是控制反转,AOP是面向切面编程,对吧?
面试官:(满意)很好。那MyBatis中#{}
和${}
的区别是什么?
谢飞机:#{}
能防SQL注入,${}
不行?
面试官:对。最后一个问题,Redis的持久化机制有哪些?
谢飞机:RDB和AOF?
面试官:(点头)今天面试就到这里,回去等通知吧。
答案详解
-
ArrayList
与LinkedList
ArrayList
基于动态数组,支持快速随机访问,扩容时默认增加50%。LinkedList
基于双向链表,插入删除高效,但随机访问慢。
-
HashMap
底层- JDK1.8后采用数组+链表+红黑树结构,链表长度超过8转红黑树。
-
线程池参数
corePoolSize
:核心线程数。maximumPoolSize
:最大线程数。workQueue
:任务队列。keepAliveTime
:非核心线程空闲存活时间。
-
ThreadLocal
- 为每个线程提供独立的变量副本,解决线程安全问题。
-
Redis持久化
- RDB:定时快照,恢复快但可能丢失数据。
- AOF:记录写操作,数据更安全但文件较大。