Java面试深度解析:接口与抽象类、JVM内存、HashMap与HashTable

需积分: 10 1 下载量 112 浏览量 更新于2024-07-19 收藏 429KB PDF 举报
"Java面试题整理" 在Java面试中,常常会遇到关于接口与抽象类、Java虚拟机的运行时数据区以及特定类如HashMap和HashTable的深入问题。以下是这些知识点的详细解释: 1. 接口和抽象类的区别: - 构造方法:抽象类可以有构造方法,用于初始化子类,而接口不能有构造方法。 - 成员变量:抽象类可以有普通成员变量,接口则不允许。 - 非抽象方法:抽象类可以包含非抽象方法,接口所有方法必须是抽象的。 - 访问修饰符:抽象方法在抽象类中的访问权限可以是public、protected或默认,接口中只能是public或默认。 - 静态方法:抽象类可以有静态方法,接口不能。 - 静态成员变量:两者都可有静态成员变量,但接口中必须是public static。 - 继承:一个类可以实现多个接口,但只能继承一个抽象类。 2. Java虚拟机的运行时数据区: - 程序计数器:每个线程都有自己的计数器,存储当前线程执行的字节码行号。 - 虚拟机栈:线程私有,用于存储局部变量、方法返回地址等。 - 本地方法栈:为JNI(Java Native Interface)方法服务。 - Java堆:线程共享,用于对象实例的分配和垃圾收集。 - 方法区:线程共享,存储类信息、常量、静态变量等。 - 运行时常量池:方法区的一部分,存储字面量和符号引用。 - 直接内存:非JVM管理区域,NIO使用,可能导致OutOfMemoryError。 3. HashMap和HashTable的区别: - 基础:Hashtable较老,基于Dictionary,HashMap是1.2引入的Map实现。 - 同步性:Hashtable的所有方法都是同步的,HashMap则不是,因此HashMap在单线程环境下性能更好。 - 空值:HashMap允许null键和值,而Hashtable不允许。 - 数据结构:HashMap是“链表数组”结构,使用Entry[]存储键值对,可自动扩容。 此外,面试中可能还会涉及其他Java核心概念,如异常处理、多线程、集合框架、I/O流、设计模式等。了解并熟练掌握这些知识点对于Java开发者来说至关重要,特别是在面试过程中,它们能展示你的专业能力和深度理解。