面试官:App中的崩溃问题是由哪些因素造成的?详细说说

#1024程序员节|征文#
在这里插入图片描述

在面试客户端测试时,经常会被问到崩溃问题由哪些因素造成,小编整理了以下因素,也作为自己的知识梳理,供小伙伴们参考。

一 哪些因素导致崩溃 😡

  1. 代码逻辑错误

    1. 比如说常见的空指针Null Pointer Exception)导致的崩溃。
    2. 数组越界:访问数组或集合中不存在的索引会导致崩溃。
    3. 类型强制转换错误:将对象强制转换为不兼容的类型会引发异常
    4. 死循环:代码逻辑出现无限循环,导致耗尽内存,从而导致崩溃
  2. 多线程问题

    1. 线程安全问题:在多线程环境中,如果多个线程同时修改同一数据而未加索,可能导致数据不一致或崩溃
    2. UI线程操作:在非UI线程中更新UI组件会导致崩溃。
  3. 异常处理不当:比如异常未捕获;或者不合理的错误处理逻辑。

    1. 常见的异常

      NullPointerException - 空指针引用异常
      
      ClassCastException - 类型强制转换异常
      
      IllegalArgumentException - 传递非法参数异常
      
      ArithmeticException - 算术运算异常
      
      ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
      
      IndexOutOfBoundsException - 下标越界异常
      
      NegativeArraySizeException - 创建一个大小为负数的数组错误异常
      
      NumberFormatException - 数字格式异常
      
      SecurityException - 安全异常
      
      UnsupportedOperationException - 不支持的操作异常
      
  4. 内存管理

    1. 内存不足:比如设备性能较差,往往会出现内存不足;处理大图像未进行合适的压缩可能会导致内存不足。
    2. 内存泄漏:未释放不再使用的对象会导致内存占用不断增加,最终导致崩溃。
    3. 内存溢出:当应用尝试使用超过设备可用内存的资源时,会导致崩溃。
  5. 权限:比如获取读取、写入文件权限、网络权限等

  6. 第三方库问题

    1. 有时会出现与第三方库不兼容问题,导致崩溃;或者本地使用的库与第三方库重名也会出现崩溃问题。
    2. 第三方库可能存在缺陷,从而导致崩溃
  7. 兼容性问题

    1. 资源格式不规范问题;未适配对应的资源规格
    2. 设备兼容性问题,比如最新系统兼容、版本兼容问题
  8. 网络问题

    1. 网络请求失败:在进行网络请求时,如果未正确处理异常(如超时、链接失败等),可能导致崩溃。
    2. 数据解析错误:从服务器接收的数据格式不符合预期,解析时可能会引发崩溃。
  9. 配置和资源问题

    1. 错误的配置
    2. 资源文件缺失等

如果还有其他的崩溃因素,欢迎小伙伴们评论补充。

二 内存泄漏示例展示 ⬇️

在java中,内存泄漏通常指对象仍然被引用,但实际上已经不再需要这些对象,导致无法被垃圾回收,从而占用了系统的内存。一个常见的内存泄漏情况是集合类对象持有对其他对象的引用,但不再需要这些对象时未将引用释放。

import java.util.ArrayList;
import java.util.List;

public class MemoryLeakExample {

    private static List<Object> list = new ArrayList<>();

    public static void main(String[] args) {
        for (int i = 0; i < 10000; i++) {
            Object obj = new Object();
            list.add(obj);
        }

        // 不再需要list中的对象,但是忘记清空list
        // list = null; // 修复内存泄漏问题的方法
    }
}

在上述示例中,MemoryLeakExample类创建了一个静态的ArrayList对象 list,并向其中添加了大量 Object 对象。在循环结束后,尽管 list 对象仍然存在,但实际上不再需要这些 Object 对象。如果在不需要list时不将其清空,就会导致这些Object对象无法被垃圾回收,从而产生内存泄漏。
为了修复这个内存泄漏问题,可以在不再需要list对象时将其设置为null,如下所示:

list = null;

这样做可以使 list 对象及其引用的 Object 对象成为垃圾,从而在下一次垃圾回收时被正确地释放,防止内存泄漏。这种做法有助于释放不再需要的对象,优化内存使用,并减少内存泄漏的风险。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曾同学.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值