Java与Android面试知识点总结:内存泄露、OOM、ANR与代理模式

1 下载量 152 浏览量 更新于2024-08-29 收藏 173KB PDF 举报
本文主要涵盖了Java和Android开发中的关键知识点,包括内存泄露、避免OOM异常、ANR处理、布局属性的区别以及引用类型、反射、代理模式和I/O操作的相关概念。 1. **内存泄露**:内存泄露的根本原因是长生命周期的对象持有短生命周期的对象,导致短生命周期的对象无法及时释放。常见的内存泄露场景包括静态集合类(如HashMap)存储了大量对象引用,未关闭的数据连接(如数据库或网络连接),内部类和单例模式。避免内存泄露的关键是确保正确地管理和释放资源。 2. **避免OOM异常**:当应用程序需要大量内存但虚拟机无法及时分配时,会发生OOM异常。Android为每个应用设定了内存限制。减少内存对象的占用和重复利用是预防OOM的重要策略。例如,通过使用SparseArray代替HashMap来优化内存使用,以及在不再需要时及时释放资源。 3. **ANR(Application Not Responding)**:当应用程序在规定时间内未响应用户操作时,系统会弹出ANR对话框。为了避免ANR,应避免在UI线程、BroadcastReceiver和Service的主线程中执行耗时操作,这些操作应放在后台线程处理。 4. **layout_gravity与gravity的区别**:layout_gravity用于设置控件在父容器中的位置,而gravity则设置控件内容在其自身的对齐方式。 5. **Java引用类型**:Java中有四种引用强度,从强到弱分别是强引用、软引用、弱引用和虚引用。强引用是最常见的引用,不会被垃圾回收;软引用在内存不足时会被回收;弱引用的生命周期更短,只要被扫描到就会回收;虚引用则几乎不提供任何保障,任何时候都可能被回收。 6. **Java反射**:Java反射允许程序在运行时检查和操作类的信息,包括获取类、字段、方法和构造函数等。通过Class对象,可以动态创建对象、调用方法和访问属性。 7. **代理模式**:代理模式分为静态代理和动态代理。静态代理在编译时创建代理类,而动态代理则在运行时动态生成代理类的字节码。Java的动态代理主要通过`java.lang.reflect.Proxy`类的`newProxyInstance`方法实现。 8. **I/O操作**:FileNameFilter是文件过滤器接口,用于按特定条件筛选文件。字节流和字符流是Java I/O的两种基本类型。字节流处理所有类型的数据,而字符流基于字符编码,适用于文本数据。两者在读写单位和处理对象上有所区别。 这些知识点对于Java和Android开发者来说至关重要,尤其在面试和日常开发中都有广泛的应用。理解和掌握这些概念能帮助开发者写出更高效、更稳定的代码。