字节跳动Java基础专项面试:ArrayList扩容、volatile可见性、泛型擦除,道道有坑

发布时间:2026/7/26 9:25:54
字节跳动Java基础专项面试:ArrayList扩容、volatile可见性、泛型擦除,道道有坑 架构师那篇聊完宏观设计,从这篇开始进入专项深挖。第一篇是Java基础——别觉得"谁不会",字节面试的Java基础跟学校考试完全不是一个level。面试官不问概念定义,问源码实现细节和实际踩过的坑。7道题是字节初级Android岗Java基础高频题,每题有追问,扛住了才算真会。Q1:ArrayList扩容策略是什么?别只说"动态数组"ArrayList默认容量10,每次扩容为原来的1.5倍(oldCapacity + oldCapacity 1)。扩容创建新数组,System.arraycopy拷过去。注意一个细节:用无参构造创建的ArrayList初始容量是0,第一次add时才扩容到10。提前知道数据量的话构造时指定容量,避免多次扩容带来的数组拷贝开销。LinkedList不只链表,还实现了Deque接口能当栈和队列用。每个节点是Node对象(prev、next、item三个字段),存100个Integer实际创建100个Node,内存开销比ArrayList大得多。追问:ArrayList线程安全吗?不是。多线程用CopyOnWriteArrayList(读多写少,写时复制新数组)或Collections.synchronizedList(所有操作加synchronized)。Q2:volatile保证什么?跟synchronized的区别?volatile保证两件事:可见性和有序性。可见性是一个线程修改volatile变量,其他线程立刻看到新值(内存屏障强制刷到主内存)。有序性是禁止指令重排序。但

相关新闻