2026-07-26 15:58:34
Java面试八股文涵盖Java集合、多线程、MySQL、Redis、Docker、Spring Cloud及前端相关高频考点,需结合知识体系与实战经验系统准备。 以下是核心内容总结:
一、Java集合HashMap原理
基于哈希表实现,通过key.hashCode()计算哈希值,结合数组+链表/红黑树解决冲突。
扩容机制:当元素数量超过负载因子*容量(默认0.75*16)时触发扩容,容量翻倍且重新哈希。
线程不安全:多线程下可能死循环(JDK1.7链表倒置)、数据丢失,需用ConcurrentHashMap或Collections.synchronizedMap。
高频问题:
为什么容量是2的幂次方?
减少哈希冲突((n-1)&hash等价于取模,但位运算更快)。
JDK1.8优化点?
链表转红黑树(链表长度>8且数组长度>64时触发)。
ArrayList与LinkedList区别
ArrayList:基于动态数组,随机访问快(O(1)),增删慢(需扩容或移动元素)。
LinkedList:基于双向链表,增删快(O(1)),随机访问慢(需遍历)。
ConcurrentHashMap实现
JDK1.7:分段锁(Segment数组),每个Segment独立锁。
JDK1.8:CAS+synchronized(锁桶或节点),支持更高并发。
继承Thread类、实现Runnable接口、实现Callable接口(配合FutureTask获取返回值)。
corePoolSize:核心线程数。
maximumPoolSize:最大线程数。
keepAliveTime:空闲线程存活时间。
workQueue:任务队列(如LinkedBlockingQueue)。
拒绝策略:AbortPolicy(抛异常)、CallerRunsPolicy(调用者执行)等。
synchronized:锁对象或类(静态同步方法)。
ReentrantLock:可中断、超时、公平锁。
volatile:保证可见性(不保证原子性),禁止指令重排序。
条件:互斥、占有且等待、非抢占、循环等待。
避免:按固定顺序获取锁、使用tryLock超时释放。
B+树:非叶子节点存储键值,叶子节点存储数据或指针,支持范围查询。
聚簇索引:主键索引,叶子节点存整行数据(InnoDB)。
覆盖索引:查询字段全在索引中,避免回表。
SQL优化:避免SELECT *、使用EXPLAIN分析执行计划、合理使用JOIN和子查询。
索引优化:选择高区分度字段、避免索引失效(如!=、OR、函数操作)。
架构优化:读写分离、分库分表(水平拆分按哈希或范围)。
事务隔离级别:读未提交、读已提交、可重复读(InnoDB默认)、串行化。
MVCC实现:通过ReadView和undo log实现非锁定读。
String:缓存、计数器。
List:消息队列、最新消息排行。
Set:去重、共同好友。
ZSet:排行榜、延迟队列。
Hash:存储对象字段。
RDB:快照(SAVE/BGSAVE),适合备份。
AOF:记录写命令(always/everysec/no),适合数据安全。
穿透:查询不存在的数据,用布隆过滤器或缓存空值。
雪崩:大量缓存同时失效,用随机过期时间或互斥锁。
击穿:热点key过期,用互斥锁或setnx续期。
镜像:只读模板(如Ubuntu:18.04)。
容器:镜像的运行实例,可读写。
仓库:存储镜像(如Docker Hub)。
docker build:构建镜像。
docker run:启动容器。
docker-compose:管理多容器应用。
Bridge:默认模式,容器通过虚拟网桥通信。
Host:共享主机网络栈。
None:无网络配置。
Eureka:服务注册与发现。
Ribbon:负载均衡(轮询、随机等策略)。
Feign:声明式HTTP客户端。
Hystrix/Resilience4j:熔断降级。
Gateway:API网关(路由、过滤)。
Spring Cloud Config:集中管理配置,支持Git/SVN。
Nacos:动态配置+服务发现。
闭包:函数能访问外部变量,用于封装私有变量。
原型链:对象通过__proto__访问原型,实现继承。
事件循环:宏任务(setTimeout)与微任务(Promise)的执行顺序。
虚拟DOM:通过Diff算法减少真实DOM操作。
Hooks:useState/useEffect管理状态和副作用。
缓存策略:强缓存(Cache-Control)与协商缓存(Last-Modified)。
跨域:CORS、JSONP、postMessage。
通过系统化准备,可高效应对Java面试中的高频考点。