JAVA面试

一、JAVA底层知识:JVM

1.谈谈你对JAVA的理解

平台无关性,GC(垃圾回收机制),语言特性(泛型,反射,lambda表达式),面向对象(封装继承多态),类库(IO库等),异常处理

2.平台无关性如何实现

JAVA源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,JAVA虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令。javap指令查看字节码。

3.为什么JVM不直接将源码解析成机器码去执行

准备工作:每次执行都需要各种检查   兼容性:可以将别的语言解析成字节码

4.JVM如何加载.class文件

JVM是一个内存中的虚拟机,即JVM的存储就是内存,JVM架构主要分为四个部分:

Class Loader:依据特定格式,加载class文件到内存

Execution Engine:对命令进行解析

Native Interface:融合不同开发语言的原生库JAVA所用

Runtime Data Area:JVM内存空间结构模型

5.谈谈JAVA反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为JAVA语言的反射机制。深入学习:https://blog.csdn.net/sinat_38259539/article/details/71799078

6.类从编译到执行的过程

编译器将Robot.java源文件编译为Robot.class字节码文件

Class Loader将字节码转换为JVM中的Class<Robot>对象

JVM利用Class<Robot>对象实例化为Robot对象

7.谈谈Class Loader

Class Loader 在JAVA中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。它是JAVA的核心组件,所有的Class都是由Class Loader 进行加载的,Class Loader 负责通过将Class文件里的二进制数据流装载进系统,然后交给JAVA虚拟机进行连接、初始化等操作。

深入学习:还需补充

 8.谈谈Class Loader的双亲委派机制

Custom ClassLoader,App ClassLoader,Extension ClassLoader,Bootstrap ClassLoader(C++编写)

自左向右检查类是否已经加载,自右向左尝试加载类。

why:避免多份同样字节码文件的加载

9.加载方式

隐式加载:new

显示加载:loadClass,forName等

10.loadClass 和 forName 的区别

相同点:对于任意一个类,都能知道类的所有属性和方法,对于任意一个对象,都能调用它的任意方法和属性。

类的装载过程:

加载:通过ClassLoader加载class文件字节码,生成Class对象

链接:校验:检查加载class的正确性和安全性。  准备:为类变量分配存储空间并设置类变量初始值。 解析:JVM将常量池内的符号引用转换为直接引用。

初始化:执行类变量赋值和静态代码块。

不同点:loadClass 执行到加载过程。 forName执行到初始化过程。

11.

原文地址:https://www.cnblogs.com/yawenw/p/12829140.html