Android 高级工程师面试核心知识点与高频题库解析
Java 基础部分
抽象类与接口的区别?
- 语法层面:接口只能定义常量、默认方法、静态方法和抽象方法;抽象类可以包含成员变量、构造器、普通方法。
- 继承关系:一个类可以实现多个接口,但只能继承一个抽象类。
- 设计目的:接口是对行为的抽象,用于定义规范;抽象类是对类的抽象,用于代码复用和模板设计。
- 访问修饰符:接口中的方法默认为 public abstract(Java 8+ 支持 default/static);抽象类方法可以是任意访问级别。
分别讲讲 final, static, synchronized
- final:修饰类表示不可继承,修饰方法表示不可重写,修饰变量表示常量(基本类型值不变,引用类型地址不变)。
- static:修饰成员属于类而非实例,可通过类名直接访问,常用于工具方法或常量。
- synchronized:关键字,用于保证多线程环境下的线程安全,可修饰方法或代码块,实现互斥锁机制。
String、StringBuffer 和 StringBuilder 的区别
- String:不可变字符序列,每次修改都会生成新对象,适合少量字符串操作。
- StringBuffer:可变字符序列,线程安全(方法加锁),性能较低,适合多线程环境。
- StringBuilder:可变字符序列,非线程安全,性能较高,适合单线程大量字符串拼接。
equals 与 ==、hashCode 的区别和使用场景
- ==:比较基本类型的值或对象的内存地址。
- equals():默认比较地址,Object 子类通常重写以比较内容(如 String)。
- hashCode():返回哈希码,用于哈希表(HashMap)快速定位。若重写 equals 必须重写 hashCode,且相等对象的 hashCode 必须相同。
Java 中深拷贝与浅拷贝的区别
- 浅拷贝:复制对象本身,但引用类型字段仍指向原对象内存地址。
- 深拷贝:完全复制对象及其引用的所有对象,新旧对象无关联。
Error 和 Exception 的区别
- Error:系统级错误,如 OutOfMemoryError,程序无法处理,通常不捕获。
- Exception:程序运行异常,分为受检异常(Checked)和非受检异常(Runtime),建议捕获处理。
什么是反射机制?应用场景?
- 定义:在运行时动态获取类的信息(属性、方法、构造器)并操作对象的能力。
- 场景:框架开发(Spring IOC/AOP)、动态代理、序列化/反序列化、插件化架构。
如何重写 equals() 方法?为什么还要重写 hashCode()?
- 重写 equals:通常使用 IDE 生成,需遵循自反性、对称性、传递性、一致性、非空性原则。
- 重写 hashCode:因为 HashMap 等集合依赖 hashCode 确定存储位置。若 equals 相等但 hashCode 不同,会导致集合无法正确识别对象重复。


