zoukankan      html  css  js  c++  java
  • java异常常见面试问题

    java异常常见面试问题

    一、java异常的理解

    异常主要是处理编译期不能捕获的错误。出现问题时能继续顺利执行下去,而不导致程序终止,确保程序的健壮性。

    处理过程:产生异常状态时,如果当前的context不具备处理当前异常的能力,将在heap上new出来一个异常对象,停止当前的执行路线,把产生的异常对象抛给更高层的context。

    Throwable:异常类    Error:系统异常;不能恢复;Exception :普通异常;可恢复

    利用try/catch/finally处理异常

    什么时候使用Finally呢?

    某些事物(除内存外)在异常处理完后需要恢复到原始状态,如:开启的文件,网络连接等。

    二、运行时异常和一般异常有何异同:

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,

    是一般常见的运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出

    未被捕获的运行时异常。

    异常分为runtime exception和checked exception

    checked exception :java编译器强制要求catch此类异常,如io异常、sql异常。

    runtime exception:不需要强制性处理,一旦出现异常,交由虚拟机接管。

     三、遇到的异常类有哪些?产生的原因?

    NullPointException:空指针

    ArrayIndexOutOfBoundsException:数组越界

    IllegalArgumentException:参数非法

    BufferOverflowExeption:缓存溢出

    ClassNotFoundException:在编译时无法找到指定类

    ClassCastException:类型强转

    ExceptionInInitializerError:静态初始值或静态变量初始值期间发生异常

    UnsatisfiedLinkError:JNI加载dll或者so文件时未找到

    NoClassDefFoundError:在编译时能找到合适的类,而在运行时不能找到合适的类

    四、OutOfMemoryError(内存溢出)

    产生原因:

    1、内存中加载的数据量过于庞大,如上一次从数据库取出过多的数据。

    2、集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。

    3、代码中存在死循环或循环产生过多重复的对象实体。

    4、使用的第三方软件中的Dug

    5、启动参数内存值设定的过小

    重点排查一下几点:

    1、检查代码中是否有死循环或递归循环

    2、检查是否有大循环重复产生新对象实体。

    3、检查对数据库查询中,是否有一次获得全部数据的查询,一般来说,如果一次取出十万条记录到内存中,就可能引起内存溢出,这个问题

    比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出,因此对于数据库查询尽量采用分页

    的方式查询。

    4、检查LIst、Map等集合对象是否有使用后,未清除的问题,List、Map等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

    5、检查对大文件的读取是否采用类nio的方式。

  • 相关阅读:
    iOS中按钮点击事件处理方式
    用PNChart绘制折线图
    用PNChart绘制饼状图简介
    MWeb发布到博客园配置
    对数组排序后,获取排序前元素索引
    iOS学习笔记之触摸事件&UIResponder
    iOS学习笔记之UITableViewController&UITableView
    4.matplotlib绘制直方图
    2. matplotlib绘制散点图
    3.matplotlib绘制条形图
  • 原文地址:https://www.cnblogs.com/tangjiang-code/p/8051351.html
Copyright © 2011-2022 走看看