个人对于Java面试考点进行了相关总结,便于后续查找。
重写 vs 重载
重写(overriding):签名相同,运行时判断。
重载(overloading):签名不同,编译时判断。fork vs 生成进程
fork:新进程与父进程执行相同代码,内存空间不同。
生产进程:生成新的代码执行路线,共享内存空间。临界区
一段代码,在多线程中同一时间只能被一个线程执行。synchronized
值类型 vs 引用类型
值类型:不可变的,指向一个值。
引用类型:指向一个对象,可变可不变。堆 vs 栈
堆:共享变量
栈:存放原始值和指向对象的引用类型,每个线程有自己的栈。块设备 vs 字符设备
块设备一般有缓存,字符设备没有缓存。
start() vs run()
start():开启新进程,调用run()方法。
run():本线程启动。Runnable vs Callable
Runnable:调用run()
Callable:调用call(),有返回值。volatile
遵循happens-before原则
ThrealLocal变量
- 为何wait notify在object中定义,不在Thread类中
- submit() vs execute()
- transient vs seriable
class.forName() vs loadClass()
class.forName():加载、解释、初始化
loadClass():加载JVM加载类的过程
加载、编译、链接
String常量池
- JDK vs JRE vs JVM
- path vs classpath
- Vector vs ArrayList
- fail-fast vs fail-safe
- throw vs throws
- checked vs unchecked Exception
- FIFO vs LRU OPT三种置换算法
- Runnable vs Thread
- StringBuffer vs StringBuilder
- try catch 中有return或者exit语句,finally 块是否执行?
- 为什么private 和static方法不能被重写?
- 存储过程 vs 函数
- 事物的ACID
- 聚簇索引 vs 非聚簇索引
- 游标
- 语句级触发 vs 行级触发
Java为何不支持多重继承?
不是技术问题,便于代码的维护,简明设计原则。
为何接口可以实现多重继承?
只声明、不实现,不存在歧义性。
为什么String是不可变类型
- hashcode用在何处?
- 为什么非静态变量不能被静态上下文引用?
- Java如何实现平台独立性?
- ClassLoader如何加载?
- HashMap vs HashTable vs ConcurrentHashMap
- wait vs sleep
- Java 内部类的作用?
- IO vs NIO
- 字符流 vs 字节流 vs 介质流、管道流、装饰流
- B树(B+树) vs 红黑树
数据库索引为何采用B+树
索引存储,需要IO操作,B+树减少IO操作,磁盘预读策略。一个node存储一页空间。
B+树在B树的结构上进行优化,从而提高了区间访问的性能。