java面试八股文

java面试八股文
最新回答
几闲人

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超时释放。

三、MySQL
  • 索引原理

    B+树:非叶子节点存储键值,叶子节点存储数据或指针,支持范围查询。

    聚簇索引:主键索引,叶子节点存整行数据(InnoDB)。

    覆盖索引:查询字段全在索引中,避免回表。

  • 优化方法

    SQL优化:避免SELECT *、使用EXPLAIN分析执行计划、合理使用JOIN和子查询。

    索引优化:选择高区分度字段、避免索引失效(如!=、OR、函数操作)。

    架构优化:读写分离、分库分表(水平拆分按哈希或范围)。

  • 高频面试题

    事务隔离级别:读未提交、读已提交、可重复读(InnoDB默认)、串行化。

    MVCC实现:通过ReadView和undo log实现非锁定读。

四、Redis
  • 数据结构

    String:缓存、计数器。

    List:消息队列、最新消息排行。

    Set:去重、共同好友。

    ZSet:排行榜、延迟队列。

    Hash:存储对象字段。

  • 持久化

    RDB:快照(SAVE/BGSAVE),适合备份。

    AOF:记录写命令(always/everysec/no),适合数据安全。

  • 缓存问题

    穿透:查询不存在的数据,用布隆过滤器或缓存空值。

    雪崩:大量缓存同时失效,用随机过期时间或互斥锁。

    击穿:热点key过期,用互斥锁或setnx续期。

五、Docker
  • 核心概念

    镜像:只读模板(如Ubuntu:18.04)。

    容器:镜像的运行实例,可读写。

    仓库:存储镜像(如Docker Hub)。

  • 常用命令

    docker build:构建镜像。

    docker run:启动容器。

    docker-compose:管理多容器应用。

  • 网络模式

    Bridge:默认模式,容器通过虚拟网桥通信。

    Host:共享主机网络栈。

    None:无网络配置。

六、Spring Cloud
  • 核心组件

    Eureka:服务注册与发现。

    Ribbon:负载均衡(轮询、随机等策略)。

    Feign:声明式HTTP客户端。

    Hystrix/Resilience4j:熔断降级。

    Gateway:API网关(路由、过滤)。

  • 配置中心

    Spring Cloud Config:集中管理配置,支持Git/SVN。

    Nacos:动态配置+服务发现。

七、前端面试题
  • JavaScript

    闭包:函数能访问外部变量,用于封装私有变量。

    原型链:对象通过__proto__访问原型,实现继承。

    事件循环:宏任务(setTimeout)与微任务(Promise)的执行顺序。

  • React

    虚拟DOM:通过Diff算法减少真实DOM操作。

    Hooks:useState/useEffect管理状态和副作用。

  • 浏览器

    缓存策略:强缓存(Cache-Control)与协商缓存(Last-Modified)。

    跨域:CORS、JSONP、postMessage。

学习建议
  1. 分模块突破:按集合、多线程、数据库等模块逐个击破。
  2. 结合源码:如HashMap的扩容、ConcurrentHashMap的锁优化。
  3. 实战演练:通过LeetCode(如多线程题)、MySQL优化案例加深理解。
  4. 关注更新:如JDK1.8+、Redis6.0+的新特性(如Redis模块、Java的VarHandle)。

通过系统化准备,可高效应对Java面试中的高频考点。