程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Java面试必备八股文(java面试必备八股文案例)

balukai 2025-06-28 12:13:32 文章精选 3 ℃

Java基础

1. Java的特点

  • 面向对象
  • 平台无关性(JVM实现)
  • 健壮性(自动内存管理、异常处理)
  • 多线程支持
  • 安全性

2. Java基本数据类型

  • 8种基本类型:
    • 整型:byte(1), short(2), int(4), long(8)
    • 浮点:float(4), double(8)
    • 字符:char(2)
    • 布尔:boolean(1)

3. ==和equals的区别

  • ==:比较基本类型值或引用类型的内存地址
  • equals:Object类的方法,默认比较地址,可重写(如String重写为比较内容)

4. String、StringBuilder、StringBuffer

  • String:不可变,线程安全
  • StringBuilder:可变,非线程安全,性能高
  • StringBuffer:可变,线程安全(方法加synchronized)

5. 自动装箱与拆箱

  • 装箱:基本类型 → 包装类(Integer.valueOf())
  • 拆箱:包装类 → 基本类型(intValue())
  • 注意:Integer缓存-128~127

集合框架

1. List、Set、Map区别

  • List:有序可重复(ArrayList、LinkedList)
  • Set:无序不可重复(HashSet、TreeSet)
  • Map:键值对(HashMap、TreeMap)

2. HashMap原理

  • 数组+链表+红黑树(JDK8)
  • 初始容量16,负载因子0.75
  • 哈希冲突解决:拉链法
  • put过程:计算hash→定位桶→遍历链表/树→插入

3. ConcurrentHashMap

  • JDK7:分段锁(Segment)
  • JDK8:CAS+synchronized(锁单个桶)
  • 并发度更高

多线程

1. 线程创建方式

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口(有返回值)
  4. 线程池创建

2. 线程状态

  • NEW:新建
  • RUNNABLE:可运行
  • BLOCKED:阻塞
  • WAITING:等待
  • TIMED_WAITING:限时等待
  • TERMINATED:终止

3. synchronized和Lock

  • synchronized:JVM实现,自动释放锁
  • Lock:API层面,需手动释放,更灵活(可尝试获取锁、可中断等)

4. volatile关键字

  • 保证可见性
  • 禁止指令重排序
  • 不保证原子性

5. 线程池参数

  • corePoolSize:核心线程数
  • maximumPoolSize:最大线程数
  • keepAliveTime:空闲线程存活时间
  • workQueue:任务队列
  • threadFactory:线程工厂
  • handler:拒绝策略

JVM

1. 内存区域

  • 方法区:类信息、常量、静态变量
  • 堆:对象实例
  • 虚拟机栈:局部变量表、操作数栈
  • 本地方法栈:Native方法
  • 程序计数器:当前线程执行的字节码行号

2. 垃圾回收算法

  • 标记-清除:产生碎片
  • 复制算法:无碎片,空间利用率低
  • 标记-整理:无碎片,效率较低
  • 分代收集:新生代(复制)、老年代(标记-清除/整理)

3. GC Roots对象

  • 虚拟机栈引用的对象
  • 方法区静态属性引用的对象
  • 方法区常量引用的对象
  • 本地方法栈JNI引用的对象

4. 类加载过程

  1. 加载:获取二进制字节流
  2. 验证:格式、语义等检查
  3. 准备:分配内存并设初始值
  4. 解析:符号引用转直接引用
  5. 初始化:执行<clinit>方法

设计模式

1. 单例模式

// 双重检查锁
public class Singleton {
    private volatile static Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

2. 工厂模式

  • 简单工厂:一个工厂类创建所有产品
  • 工厂方法:每个产品对应一个工厂
  • 抽象工厂:产品族概念

3. 观察者模式

  • 主题(Subject)维护观察者列表
  • 观察者(Observer)实现更新接口
  • 主题状态变化时通知所有观察者

Spring框架

1. IOC和AOP

  • IOC:控制反转,对象创建交给Spring容器
  • AOP:面向切面编程,通过动态代理实现

2. Bean生命周期

  1. 实例化
  2. 属性赋值
  3. 初始化(InitializingBean、init-method)
  4. 使用
  5. 销毁(DisposableBean、destroy-method)

3. Spring事务传播行为

  • REQUIRED(默认):有则加入,无则新建
  • REQUIRES_NEW:新建事务
  • SUPPORTS:有则加入,无则非事务
  • NOT_SUPPORTED:非事务执行
  • MANDATORY:必须存在事务
  • NEVER:必须不存在事务
  • NESTED:嵌套事务

数据库

1. 事务特性(ACID)

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

2. 隔离级别

  • 读未提交:可能脏读
  • 读已提交:解决脏读,可能不可重复读
  • 可重复读(MySQL默认):解决不可重复读,可能幻读
  • 串行化:解决所有问题,性能最低

3. 索引类型

  • 普通索引
  • 唯一索引
  • 主键索引
  • 组合索引
  • 全文索引

4. 索引失效场景

  • 使用不等于(!=或<>)
  • 使用函数操作列
  • 类型转换
  • like以通配符开头
  • or条件未全部索引
  • 违反最左前缀原则

Redis

1. 数据类型

  • String:字符串
  • Hash:键值对集合
  • List:双向链表
  • Set:无序集合
  • ZSet:有序集合
  • Bitmaps:位图
  • HyperLogLog:基数统计
  • Geospatial:地理位置

2. 持久化方式

  • RDB:定时快照,恢复快
  • AOF:记录写命令,数据更安全
  • 混合持久化(Redis4.0+)

3. 缓存问题

  • 缓存穿透:查询不存在数据(解决方案:布隆过滤器)
  • 缓存击穿:热点key过期(解决方案:互斥锁)
  • 缓存雪崩:大量key同时过期(解决方案:随机过期时间)

分布式

1. CAP理论

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition tolerance)
  • 只能同时满足其中两项

2. BASE理论

  • Basically Available(基本可用)
  • Soft state(软状态)
  • Eventually consistent(最终一致性)

3. 分布式锁实现

  • 数据库唯一索引
  • Redis(SETNX)
  • Zookeeper(临时顺序节点)

算法与数据结构

1. 排序算法

  • 冒泡排序:O(n^2)
  • 选择排序:O(n^2)
  • 插入排序:O(n^2)
  • 快速排序:O(nlogn)
  • 归并排序:O(nlogn)
  • 堆排序:O(nlogn)

2. 查找算法

  • 顺序查找:O(n)
  • 二分查找:O(logn)
  • 哈希查找:O(1)

3. 常用数据结构

  • 数组:随机访问快,插入删除慢
  • 链表:插入删除快,查找慢
  • 栈:FILO
  • 队列:FIFO
  • 树:二叉树、AVL树、红黑树
  • 图:邻接矩阵、邻接表

以上内容是Java面试中常见的基础知识点,实际面试中可能会根据岗位需求有所侧重。建议在掌握这些基础的同时,结合项目经验进行深入理解。

#java# #java面试# #java面试#

最近发表
标签列表