文档章节

java 面试知识点笔记(一)底层知识 jvm相关

断风格男丶
 断风格男丶
发布于 05/14 13:56
字数 920
阅读 36
收藏 7

问:谈谈你对java的理解?

  • 平台无关性(一处编译多处运行)
  • GC(垃圾回收机制)
  • 语言特性(泛型、反射、lambda表达式)
  • 面向对象(封装继承多态)
  • 类库(集合、网络库、并发库、nio)
  • 异常处理

javac 将.java文件进行编译,编译出.class文件(二进制字节码,包含java类中的属性、方法、常量信息,还会有个共有的静态常量属性.class,这class记录了类的相关信息及类型信息,是class的一个实例)

javap 可反编译class文件 可以查看java编译器生成的字节码

如何跨平台的:

 

问:jvm如何加载.class文件?

 

问:谈谈反射?写例子?

理论:Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。

实例:

ps:getDeclaredMethod 公共的私有的包私有的方法(private、protected、public和default),即所有的都可以,但是不能获取到继承的,实现接口的方法

 私有方法必须设置 .setAccessible(true)

getMethod 可以获取public方法和继承的方法、实现接口的方法

类从编译到执行的过程:

  1. 编译器将Robot.java源文件编译为Robot.class字节码文件
  2. ClassLoader将字节码转换为JVM中的Class<Robot>对象
  3. JVM利用Class<Robot>对象实例化为Robot对象

 

问:谈谈ClassLoader?

理论:ClassLoader在Java中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入系统,然后交给Java虚拟机进行连接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的连接和初始化行为。

 最核心的就是 ClassLoader.java中的loadClass方法

ClassLoader的种类:

  1. BootStrapClassLoader:C++编写,加载核心库java.*
  2. ExtClassloader:java编写,加载扩展库javax.*(System.getProperty("java.ext.dirs")可以看到扩展库路径)
  3. AppClassLoader:java编写,加载程序所在目录(System.getProperty("java.class.path")可以看到加载路径,最重要的是javabasic路径)
  4. 自定义ClassLoader:java编写,定制化加载(关键函数,findClass、defineClass)

类的加载方式:

  • 隐式加载:new 
  • 显示加载:loadClass、forName等,获取到class对象之后调用newInstance()方法来生成对象实例(newInstance不支持传入参数,需要反射getConstructor然后调用构造器的newInstance方法传入参数)

loadClass和forName的区别:

类的装载过程(加载和生成实例的过程)

  • Class.forName得到的class是已经完成初始化的
  • Classloder.loadClass得到的class是还没有链接的
public class Robot {
    static {
        System.out.println("Hello Robot");
    }
}
public static void main(String[] args) throws ClassNotFoundException {
    //不会初始化 所以没有打印(加快加载速度,延迟加载)
    ClassLoader cl = Robot.class.getClassLoader();
    //会初始化 所以打印了(mysql驱动就是用的这个)
    Class r = Class.forName("myclassloader.Robot");
}

 

 

 

© 著作权归作者所有

断风格男丶

断风格男丶

粉丝 20
博文 37
码字总数 40279
作品 0
成都
程序员
私信 提问
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0
你必须掌握的 21 个 Java 核心技术!(干货)

点击上方“java进阶架构师”,选择右上角“置顶公众号” 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘。而写这篇文章的目的是想...

Java进阶架构师
05/03
0
0
想跳槽?还是先看看这些Github上的面试项目吧

对于很多人来说,找到一份工作不是问题,但找到一个合适而满意的工作,却不那么简单。 本文我们将盘点几个面试的开源项目,希望对你们有所帮助。 1coding-interview-university https://git...

程序员之家_
2018/09/01
0
0
阿里P8架构师总结的互联网Java架构系统化学习路线

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83181980 网络应用,最常见的研发语言是Java的和PHP。 后端服务,最常见的...

JAVA高级架构v
2018/10/19
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android 图片加载带进度条的ImageView

https://blog.csdn.net/shu_quan/article/details/79975578

shzwork
18分钟前
7
0
关于XAMPP默认端口80 和443被占用的问题

本文转载于:专业的前端网站➩关于XAMPP默认端口80 和443被占用的问题 关于安装xampp-win32-1.8.1-VC9-installer.zip后启动时候报端口80和443被占用的问题解决 xampp-win32-1.8.1-VC9-instal...

前端老手
20分钟前
6
0
错误Setting the parent of a transform which resides in a Prefab Asset is...

错误日志 Setting the parent of a transform which resides in a Prefab Asset is disabled to prevent data corruption 原因1 用Resouce.Load加载一个prefab,没有实例化直接设置parent ......

XBlock
21分钟前
9
0
Spring boot 配置mybatis

当然任何模式都需要首先引入mybatis-spring-boot-starter的pom文件,现在最新版本是1.1.1(刚好快到双11了 :)) <dependency>    <groupId>org.mybatis.spring.boot</groupId>    <......

雷开你的门
22分钟前
9
0
云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

开源中国小二
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部