美文网首页Java面试题
2019-01-02今日内容

2019-01-02今日内容

作者: 天道灬酬勤 | 来源:发表于2019-01-02 20:00 被阅读7次

    面试题

    1.Java的堆和栈的区别?

    堆:(对象)
    引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等 方式来创建。 堆内存主要作用是存放运行时创建(new)的 对象。(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期 不需要提前确定)
    栈:(基本数据类型变量、对象的引用变量)
    基本数据类型的变量(int、 short、 long、 byte、 float、 double、 boolean、 char等 )以及对象的引用变量,其内存 分配在栈上,变量出了作用域就会自动释放。

    1. 堆内存: 存储的是数组和对象(其实数组就是对象),凡是new建 立的都是在堆中,堆中存放的都是实体(对象), 实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以 用,所以 堆是不会随时释放的,但是会被当成垃圾,Java有 垃圾回收机制不定时的收取。
    2. 栈内存: 栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局 变量,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会 被释放。栈内存的更新速 度很快,因为局部变量的生命周期都很短。
    3. 1、栈内存存储的是局部变量而堆内存存储的是实体。
      2、栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短。
      3、栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃 圾回收机制不定时的回收。 4、new创 建的对象存在于堆中,局部变量存在于栈中。在堆中定义的对象会在栈中存其的首地址,方便快速访问。

    2.for和增强for哪一个遍历list集合更快,为什么

    增强for的底 层是用迭代器实现,Iterator 主要性能开销在next方 法体,其一:对记录集进行检测,如果在迭代的过程 中,记录集有被修改,会抛出异常;其二:next方 法体内有try...catch 方法体,这也会影响性能,JVM不 能对 try...catch 块内的代码进行优化。而for因 为不管数据被中途修改,也不进行异常处理,所以更快一些

    3.JDK、JRE和JVM是什么

    JDK是整个JAVA的 核心,包括了Java运 行环境JRE,一堆 Java工 具(javac/java/jdb 等)和Java基 础的类库(即Java API 包括rt.jar) 。在JDK的安装目 录下有一个名为JRE的 目录,里面有两个文件夹bin和 lib, 在这里可以认为bin里 的 就是jvm,lib中 则是jvm工作所 需要的类库,而jvm和 lib和 起来就称为jre
    JRE是 运行基于Java语 言编写的程序所不可缺少的运行环境,并不是一个开发环境,所以没有包含任何开发工具 (如编译器和调试器),只是针对于使用Java程 序的用户。
    JVM就是我们常说的java虚 拟机,是一种用于计算设备的规范,它是整个java实 现跨平台的最核心的部分,所有的 java程 序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并 不直接与机器的操作系 统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行

    4.什么是值传递和引用传递

    对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
    对象被引用 传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有 的对象上。

    5.异常处理的时候,finally代码块的重要性是什么

    无论是否抛出异常,finally代 码块总是会被执行。就算是没有catch语 句同时又抛出异常的情况下,finally 代码块仍 然会被执行。最后要说的是,finally 代码块主要用来释放资源,比如:I/O缓冲区,数据库连接 。

    6.代码中如何实现多态

    实现多态主要有以下三种方式:

    1. 接口实现
    2. 继承父类重写方法
    3. 同一类中进行方法重载

    7.switch中能否使用string做参数

    在jdk 1.7之 前,switch只 能支持byte, short, char, int或者其对应的封装类以及Enum类 型。从jdk 1.7之 后 switch开 始支持String。

    8.基本数据类型有哪些

    byte:Java中 最小的数据类型,在内存中占8位(bit), 即1个字节,取值范围‐128~127 ,默认值0
    short :短整型,在内存中占16位,即2个 字节,取值范围‐32768~32717 ,默认值0
    int: 整型,用于存储整数,在内在中占32位,即4个 字节,取值范围‐2147483648~2147483647, 默认值0
    long: 长整型,在内存中占64位,即8个 字节‐263~263 ‐1,默认值0L
    float :浮点型,在内存中占32位,即4个 字节,用于存储带小数点的数字(与double的 区别在于float类 型有效小数点 只有6~7位 ),默认值0
    double :双精度浮点型,用于存储带有小数点的数字,在内存中占64位 ,即8个字节,默认值0
    char: 字符型,用于存储单个字符,占16位,即 2个字节,取值范围0~65535 ,默认值为空
    boolean :布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、 false) ,默认值false

    9.说说你对于static关键字的理解

    Static可以修饰内部类、方法、变量、代码块
    Static修 饰的类是静态内部类
    Static修 饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直 接使 用类名来调用。在static方 法中不能使用this或 者super关 键字。
    Static修 饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份 拷贝,在JVM加 载类的时候,只为静态分配一次内存。
    Static 修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一 次。 静态代码块可以有多个,如果有多个,按照先后顺序依次执行。

    10.JAVA多态的实现原理

    A.抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是 函数调 用)
    b.实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到 合适的办法

    11.内部类与外部类的调用

    a) 内部类可以直接调用外部类包括private 的成员变量,使用外部类引用的this.关 键字调用即可
    b) 而外部类调用内部类需要建立内部类对象

    12.什么是拆装箱

    拆箱:把包装类型转成基本数据类型
    装箱:把基本数据类型转成包装类型

    流程图

    jmyp.png

    相关文章

      网友评论

        本文标题:2019-01-02今日内容

        本文链接:https://www.haomeiwen.com/subject/jxazlqtx.html