1. Java语言有哪些特点?
- 跨平台性(JVM实现"一次编译,到处运行")
- 面向对象(封装、继承、多态)
- 自动内存管理(GC垃圾回收机制)
- 健壮性(强类型、异常处理、指针安全)
- 多线程支持(内置线程API)
- 丰富的类库(Java标准库+第三方生态)
2. 面向对象和面向过程的区别
维度 | 面向过程 | 面向对象 |
核心思想 | 以过程(函数)为中心 | 以对象(数据+方法)为中心 |
代码组织 | 线性流程控制 | 类与对象的关系 |
数据与操作 | 数据与函数分离 | 数据与行为封装在对象中 |
典型应用 | C语言 | Java/C++ |
扩展性 | 修改复杂,易产生冗余 | 继承/多态提高扩展性 |
3. 基本数据类型
基本类型 | 大小(位) | 封装类 | 默认值 |
byte | 8 | Byte | 0 |
short | 16 | Short | 0 |
int | 32 | Integer | 0 |
long | 64 | Long | 0L |
float | 32 | Float | 0.0f |
double | 64 | Double | 0.0d |
char | 16 | Character | '\u0000' |
boolean | - | Boolean | false |
4. 标识符命名规则
- 允许:字母、数字、_、$(数字不能开头)
- 大小写敏感
- 不能是关键字(如 class, public)
- 规范建议:驼峰命名法(myVariableName),类名首字母大写
5.instanceof关键字的作用
- 类型检查:判断对象是否属于特定类/接口或其子类
Object obj = "Hello";
if (obj instanceof String) { // 返回true
System.out.println("It's a String");
}
6. Java自动装箱与拆箱
- 装箱:基本类型 → 包装类(int → Integer)
Integer i = 10; // 自动装箱
- 拆箱:包装类 → 基本类型(Integer → int)
int num = i; // 自动拆箱
- 注意事项:null拆箱会抛出NullPointerException
7. ArrayList和LinkedList的区别
特性 | ArrayList | LinkedList |
底层结构 | 动态数组 | 双向链表 |
随机访问 | O(1)(高效) | O(n)(需遍历) |
头部插入/删除 | O(n)(需移动元素) | O(1)(直接修改指针) |
内存占用 | 较少(仅存数据) | 较高(额外存储前后节点指针) |
适用场景 | 频繁查询 | 频繁增删 |
8. HashMap和HashTable的区别
特性 | HashMap (JDK1.2+) | HashTable (旧版) |
线程安全 | 不安全(需用ConcurrentHashMap) | 安全(方法同步) |
null键值 | 允许 | 不允许 |
性能 | 高(无锁竞争) | 低(同步开销) |
迭代器 | Iterator(快速失败) | Enumeration(较慢) |
9. Collection包结构 vs Collections
- java.util.Collection:容器接口
└── List (有序可重复)
└── Set (无序唯一)
└── Queue (队列) - java.util.Collections:工具类
- 提供静态方法:排序、同步控制、不可变集合等
Collections.sort(list); // 排序
List Collections.synchronizedList(list); // 线程安全包装
10. Java的四种引用
引用类型 | GC行为 | 使用场景 |
强引用 | 永不回收(Object obj=new Object()) | 普遍使用 |
软引用 | 内存不足时回收(SoftReference) | 缓存(如图片缓存) |
弱引用 | 下次GC必定回收(WeakReference) | 弱缓存(如WeakHashMap) |
虚引用 | 无法获取对象,GC时收到通知(PhantomReference) | 堆外内存管理(如NIO) |
11. Java创建对象的方式
- new关键字:User user = new User();
- 反射:Class.forName("User").newInstance()
- 克隆:User copy = (User) original.clone();
- 反序列化:ObjectInputStream.readObject()
- 工厂模式:UserFactory.createUser()
12. 深拷贝和浅拷贝的区别
class A { B b; }
- 浅拷贝:复制对象引用(默认Object.clone())
A浅拷贝后:A1.b 与 A2.b 指向同一个B对象
- 深拷贝:递归复制所有引用对象
A深拷贝后:A1.b 与 A2.b 指向不同的B对象
13.a=a+b与a+=b的区别
- 类型转换:
byte a = 1;
int b = 2;
a = a + b; // 编译错误(int不能直接赋给byte)
a += b; // 等价于 a = (byte)(a + b); 自动强转
14. OOM 与 SOF 常见场景
- OOM (OutOfMemoryError):
- 堆溢出:对象过多(如大列表未释放)
- 方法区溢出:动态生成类(如CGLib)
- 直接内存溢出:NIO的ByteBuffer.allocateDirect()
- SOF (StackOverflowError):
- 无限递归调用
- 栈帧过大(如局部变量巨量)
15. 线程,程序,进程
- 程序:静态代码(如.exe文件)
- 进程:程序的一次执行(独立内存空间)
- 线程:进程内的执行单元(共享进程资源)
16. 线程的基本状态
- NEW:新建未启动
- RUNNABLE:可运行(含就绪和运行中)
- BLOCKED:等待监视器锁(同步阻塞)
- WAITING:无限等待(Object.wait())
- TIMED_WAITING:限时等待(Thread.sleep(1000))
- TERMINATED:执行结束
17 SpringMVC常用注解
注解 | 作用 |
@Controller | 定义控制器类 |
@RequestMapping | 映射URL到方法 |
@GetMapping | GET请求映射(简化版) |
@PostMapping | POST请求映射 |
@RequestParam | 获取请求参数 |
@PathVariable | 获取URL路径变量(如/user/{id}) |
@ResponseBody | 返回JSON/XML数据 |
@RequestBody | 接收JSON/XML请求体 |
@ModelAttribute | 绑定参数到Model对象 |
@Valid | 参数校验(配合JSR-303) |
以上总结覆盖了Java核心基础及SpringMVC高频考点,适合面试快速复习。如需深入某个知识点,可进一步探讨!