zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    addEventListener 事件监听器 冒泡事件)
    内置对象 Date
    js-定时器
    BOM:浏览器对象
    DOM元素
    js控制style样式
    【应急响应】Windows 安全加固
    【渗透测试】社会工程学,没有射不下来的人
    【代码学习】PYTHON 线程
    【代码学习】PYTHON 进程
  • 原文地址:https://www.cnblogs.com/yawenw/p/12829140.html
Copyright © 2011-2022 走看看