电话:15190038649
关闭
您当前的位置:首页 > 职场资讯 > 职业指导

Java面试总结:从基础到高级的全面指南

来源:灌南人才网 时间:2025-07-22 作者:灌南人才网 浏览量:

一、Java基础面试题总结

1. Java语言特性

Java作为一门成熟的编程语言,具有以下核心特性:
- 面向对象:封装、继承、多态
- 平台无关性:一次编写,到处运行(Write Once, Run Anywhere)
- 自动内存管理:垃圾回收机制
- 多线程支持:内置线程支持
- 安全性:字节码验证、安全管理器等

2. 基本数据类型与包装类

Java有8种基本数据类型:
- 整型:byte(1)、short(2)、int(4)、long(8)
- 浮点型:float(4)、double(8)
- 字符型:char(2)
- 布尔型:boolean(1)

对应的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean

自动装箱与拆箱是面试常考点:
java
Integer a = 100; // 自动装箱
int b = a; // 自动拆箱

3. String相关考点

String是Java中最常用的类之一,面试常问:
- String的不可变性(immutable)
- String、StringBuilder和StringBuffer的区别
- 字符串常量池(String Pool)
- equals()和==的区别
- String的intern()方法

4. 面向对象特性

封装:隐藏实现细节,提供公共访问方式
java
public class Person {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}

继承:子类继承父类的属性和方法
java
class Animal { void eat() { System.out.println("eating"); } }
class Dog extends Animal { void bark() { System.out.println("barking"); } }

多态:同一操作作用于不同对象,产生不同结果
java
Animal myDog = new Dog(); // 向上转型
myDog.eat(); // 运行时确定调用Dog的eat方法

5. 异常处理

Java异常体系:

Throwable
├── Error (不可恢复,如OutOfMemoryError)
└── Exception
├── RuntimeException (未检查异常)
└── 其他Exception (已检查异常)

try-catch-finally使用:
java
try {
// 可能抛出异常的代码
} catch (IOException e) {
// 处理IO异常
} catch (Exception e) {
// 处理其他异常
} finally {
// 无论是否发生异常都会执行的代码
}

二、Java集合框架面试总结

1. 集合框架体系

Java集合框架主要分为:
- Collection接口
- List:有序可重复(ArrayList、linkedList、Vector)
- Set:无序不重复(HashSet、TreeSet、linkedHashSet)
- Queue:队列(PriorityQueue、ArrayDeque)

- Map接口
- HashMap、TreeMap、linkedHashMap、Hashtable

2. ArrayList vs linkedList

| 特性 | ArrayList | linkedList |
|------------|----------------|----------------|
| 底层结构 | 动态数组 | 双向链表 |
| 随机访问 | O(1) | O(n) |
| 插入删除 | O(n) | O(1) |
| 内存占用 | 较少 | 较多 |

3. HashMap深度解析

HashMap是面试必问点,重点包括:
- 底层结构:数组+链表/红黑树(JDK8+)
- 扩容机制:默认容量16,负载因子0.75,扩容为2倍
- hash算法:(h = key.hashCode()) ^ (h >>> 16)
- 线程安全性:非线程安全,可使用ConcurrentHashMap
- JDK7和JDK8的区别

4. ConcurrentHashMap实现原理

ConcurrentHashMap是线程安全的HashMap实现:
- JDK7:分段锁(Segment)
- JDK8:CAS + synchronized
- 重要方法:putVal、get、size

三、多线程与并发面试总结

1. 线程基础

创建线程的三种方式:
1. 继承Thread类
2. 实现Runnable接口
3. 实现Callable接口(可返回结果)

java
// 方式1
class MyThread extends Thread { public void run() { /.../ } }
new MyThread().start();

// 方式2
new Thread(() -> { /.../ }).start();

// 方式3
FutureTask task = new FutureTask(() -> { return 123; });
new Thread(task).start();
Integer result = task.get();

2. 线程状态

Java线程有6种状态:
1. NEW:新建
2. RUNNABLE:可运行
3. BLOCKED:阻塞
4. WAITING:等待
5. TIMED_WAITING:计时等待
6. TERMINATED:终止

3. 线程同步

synchronized关键字:
- 同步方法:public synchronized void method() { ... }
- 同步代码块:synchronized(obj) { ... }

volatile关键字:
- 保证可见性
- 禁止指令重排序
- 不保证原子性

Lock接口:
java
Lock lock = new ReentrantLock();
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock();
}

4. 线程池

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

Executors工具类提供的线程池:
- newFixedThreadPool:固定大小线程池
- newCachedThreadPool:可缓存线程池
- newSingleThreadExecutor:单线程线程池
- newScheduledThreadPool:定时任务线程池

四、JVM面试总结

1. JVM内存结构

- 程序计数器:线程私有,记录当前线程执行位置
- 虚拟机栈:线程私有,存储栈帧(局部变量表、操作数栈等)
- 本地方法栈:为Native方法服务
- 堆:线程共享,存放对象实例
- 方法区:存储类信息、常量、静态变量等(JDK8后为元空间)

2. 垃圾回收

GC算法:
- 标记-清除
- 标记-整理
- 复制算法
- 分代收集

垃圾收集器:
- Serial/Serial Old
- ParNew
- Parallel Scavenge/Parallel Old
- CMS
- G1
- ZGC

3. 类加载机制

类加载过程:
1. 加载:获取类的二进制流
2. 验证:确保Class文件符合规范
3. 准备:为静态变量分配内存并设置默认值
4. 解析:将符号引用转为直接引用
5. 初始化:执行静态代码块和静态变量赋值

类加载器:
- Bootstrap ClassLoader
- Extension ClassLoader
- Application ClassLoader
- 自定义ClassLoader

双亲委派模型:子加载器先委托父加载器加载,父加载器无法完成时子加载器才尝试加载。

五、Spring框架面试总结

1. Spring核心概念

- IoC(控制反转):将对象创建和依赖注入交给容器管理
- DI(依赖注入):通过构造函数、setter方法或字段注入依赖
- AOP(面向切面编程):将横切关注点(如日志、事务)与业务逻辑分离

2. Bean生命周期

1. 实例化Bean
2. 属性赋值
3. 调用BeanNameAware的setBeanName方法
4. 调用BeanFactoryAware的setBeanFactory方法
5. 调用ApplicationContextAware的setApplicationContext方法
6. 调用BeanPostProcessor的postProcessBeforeInitialization方法
7. 调用InitializingBean的afterPropertiesSet方法
8. 调用自定义的init-method方法
9. 调用BeanPostProcessor的postProcessAfterInitialization方法
10. Bean可以使用
11. 容器关闭时调用DisposableBean的destroy方法
12. 调用自定义的destroy-method方法

3. Spring事务

事务传播行为:
- REQUIRED(默认):如果当前没有事务,就新建一个事务
- SUPPORTS:支持当前事务,如果没有则以非事务方式执行
- MANDATORY:必须在一个已有的事务中执行
- REQUIRES_NEW:新建事务,如果当前有事务则挂起
- NOT_SUPPORTED:以非事务方式执行,如果当前有事务则挂起
- NEVER:以非事务方式执行,如果当前有事务则抛出异常
- NESTED:如果当前有事务,则在嵌套事务内执行

事务隔离级别:
- DEFAULT:使用数据库默认隔离级别
- READ_UNCOMMITTED:读未提交
- READ_COMMITTED:读已提交
- REPEATABLE_READ:可重复读
- SERIALIZABLE:串行化

六、数据库与MyBatis面试总结

1. MySQL索引

索引类型:
- B+Tree索引(最常用)
- Hash索引
- 全文索引
- 空间索引

索引优化:
- 最左前缀原则
- 避免索引失效(如使用函数、类型转换、!=、or等)
- 覆盖索引
- 索引下推

2. 事务隔离级别

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

3. MyBatis核心概念

- SqlSessionFactory:创建SqlSession的工厂
- SqlSession:执行SQL的主要接口
- Mapper接口:通过动态代理实现
- 一级缓存:SqlSession级别
- 二级缓存:Mapper级别

七、面试技巧与准备建议

1. 面试前准备

- 复习核心知识点:Java基础、集合、多线程、JVM、数据库、框架
- 准备项目经验:能清晰描述项目架构、技术难点、个人贡献
- 刷算法题:LeetCode中等难度题目
- 模拟面试:找朋友或使用在线平台进行模拟

2. 面试中表现

- 清晰表达:使用STAR法则(情境、任务、行动、结果)回答问题
- 诚实回答:不会的问题坦诚说明,但可以尝试分析
- 展示思维过程:解决算法题时先讲思路再编码
- 提问环节:准备有深度的问题询问面试官

3. 常见面试问题

1. 自我介绍(1-2分钟,突出技术栈和项目经验)
2. 为什么离职/换工作?
3. 你最大的优点和缺点是什么?
4. 职业规划是什么?
5. 期望薪资是多少?

八、最新Java技术趋势

- Java新特性:了解JDK11-17的新特性(如var、record、switch表达式等)
- 微服务架构:Spring Cloud、Dubbo等
- 响应式编程:Spring WebFlux、Project Reactor
- 云原生:Docker、Kubernetes、Service Mesh
- 性能优化:JVM调优、数据库优化、缓存策略

通过全面掌握这些Java面试知识点,结合项目经验和良好的沟通表达,相信你能在Java开发岗位的面试中脱颖而出。祝你面试成功!

Java面试总结:从基础到高级的全面指南
微信扫一扫分享资讯
相关推荐
暂无相关推荐
微信公众号
手机浏览

Copyright C 20092014 All Rights Reserved 版权所有

地址: EMAIL:admin@admin.com

Powered by PHPYun.

关注

用微信扫一扫

反馈
顶部