1.java基础面试题:基本概念,基本语法,基本数据类型

一.Java基础面试题:基本概念,基本语法,基本数据类型


1.JAVA语言的特点

2.JVM,JDK和JRE是什么

3.字节码是什么,字节码的好处

4.JIT和AOT的模式

5.JAVA编译与解释并存

6.JAVA和C++的区别


1.标识符和关键字的区别是什么

2.continue,break和return的区别

3.变量

4.方法


1.JAVA几种基本数据类型

2.基本类型和包装类型的区别

3.包装类型的缓存机制

4.自动装箱机制和拆箱机制

5.超过long的最大数值应该如何表达

6.浮点数运算为什么会有精度丢失

7.如何解决浮点数精度丢失问题


一.Java基础面试题:基本概念,基本语法,基本数据类型

1.JAVA语言的特点

  • ①面向对象:封装多态继承
  • ②java语言支持多线程,支持网络编程
  • ③java语言编译与解释并存,jvm虚拟机有平台无关性。

2.JVM,JDK和JRE是什么

  • ①JVM:能够运行字节码的虚拟机。
  • ②JDK:java开发环境包,包含了JRE+编译器。
  • ③JRE:java运行环境包,包含了jvm+基础类库。

3.字节码是什么,字节码的好处

  • 字节码是什么?
    能够让jvm运行的代码就叫字节码。
  • 字节码的好处是?
  • ①字节码不针对特定的机器,只针对jvm虚拟机,一次编译处处运行。
  • ②字节码解决了传统的解释型语言效率低的问题,同时保留了解释型语言的可解释性。

4.JIT和AOT的模式

  • JIT模式(运行时)
    JIT运行时与jvm交互,将合适的字节码直接编译为机器码并缓存,下次直接使用。
  • AOT模式(运行前)
    不支持动态代理反射等特性。

5.JAVA编译与解释并存

  • ①编译:编译一次性成为机器码(c,c++)
  • ②解释:一句一句解释为机器码(python)
  • java先编译生成字节码,再将字节码解释执行。

6.JAVA和C++的区别

  • ①C++提供指针直接访问内存,java不提供。
  • ②C++的类为多继承结构,而java为单继承。
  • ③c++不仅有方法的重载,还有运算符的重载。而java只有方法的重载
  • ④java有垃圾回收机制,不用手动释放。

1.标识符和关键字的区别是什么

  • ①标识符:我们为类或接口,变量方法起的名字
  • ②关键字:JAVA语言赋予了特殊含义的字符串

2.continue,break和return的区别

  • ①continue:跳出当前循环。
  • ②break:跳出整个循环体。
  • ③return
    结束方法。
    返回具体的一个特定值。

3.变量

  • ①成员变量和局部变量
    语法:成员变量用封装,static,final。局部变量只能用final修饰。
    存储方式:成员变量存储在方法区(static)或堆(非static)。局部变量存在栈内存。
    生存时间:成员变量随类(static)或对象(非static)消亡而消亡。局部变量随方法调用结束而消亡。
  • ②静态变量
    被所有类共享,且所有类对象共享一份静态变量。
  • ③字符型常量和字符串常量。
    字符型常量:用单引号修饰,一个字符,(相当于一个整型ASCII码)
    字符串常量:用双引号修饰,若干个字符,(相当于一个地址值在内存中存放位置)

4.方法

  • ①方法种类
    有参有返回,有参无返回,无参有返回,无参无返回。
  • ②静态方法和实例方法
    修饰符:静态方法用static修饰,实例方法不用static
    调用:静态方法可以用类.或者对象.,而实例方法只能对象.调用。
    访问权限:静态方法只能访问静态成员,实例方法可以访问静态成员和非静态成员。
  • ③重载和重写(方法名都相同)
    范围:重载同一个类,重写子类。
    参数:重载参数不相同,重写参数相同。
    返回值:重载返回值可以不相同,重写返回值可以相同或者为其子类。
    异常:重载异常可以不相同,重写异常可以相同或者为其子类。
    访问修饰符:重载可以不相同,重写访问权限可以相同或者比原权限大。
  • ④可变长参数
    等同于数组。
    只能放在参数列表的最后一个。
    优先匹配固定参数。

1.JAVA几种基本数据类型

  • 整型:byte(1),short(2),int(4),long(8)
  • 浮点型:float(4),double(8)
  • 字符型:char(2)
  • 布尔型:boolean(1位)

2.基本类型和包装类型的区别

  • 默认值:成员变量不赋值即包装类型为null,基本类型不为null但是有默认值
  • 泛型:包装类型可用泛型,基本类型不可用泛型
  • 存储:成员变量未被static修饰则无论包装类型还是基本类型都存在堆中,局部变量的包装类型存在堆中而基本类型存在栈中。

3.包装类型的缓存机制

  • ①Byte,Short,Integer,Long默认创建数值在-128,127之间的缓存数据。Character创建0,,127之间的缓存数据。
  • ②直接赋值才会缓存到方法区的常量池中,创建对象只会放到堆中。(同字符串)

4.自动装箱机制和拆箱机制

  • 自动装箱:Integer i = 10(Integer.valueOf(10))
  • 自动拆箱:int n = i(i.intValue())

5.超过long的最大数值应该如何表达

  • 使用BigInteger来表示,内部使用int[]类型的数组来存储整型数据(分割为32位一组的形式存在数组中)

6.浮点数运算为什么会有进度丢失

  • 计算机底层用二进制存储小数(宽度有限,超出宽度后只能截断)

7.如何解决浮点数精度丢失问题

  • 用BigDecimal来解决浮点数精度丢失问题。
  • BigDecimal可以用double来初始化(无法精确构造一个BigDecimal),也可以用String来初始化(截断后面的小数位)
    BigDecimal用double初始化时,把double转换为了BigDecimal,存在精度损失风险,而用string初始化,会按double实际表达的精度对尾数进行截断。
  • BigDecimal等值比较要用compareTo而不是equals。
    equals不仅会比较数值,还会比较精度,如1和1.0不相等用equals

你可能感兴趣的:(面试题,java,jvm,面试)