Java开发工程师面试题(Java基础)

1. Java中一个类可以继承多个类吗?

    Java中只能继承一个类,但是接口可以实现多个,用逗号分隔。其中Java 8中有default方法,可以让接口当作一般类来使用。

 2. this和super的区别?

     this代表本类的当前实例引用,super代表父类实例引用。

3. 创建线程有哪几种方式?

    1. 继承Thread类

    2. 实现Runnable接口

    3. 实现Callable接口

    4. 线程池创建

    注:深入分析源码其实只有一种,均是通过实现Runnable接口。

4. StringBuffer和StringBuilder的区别?

    1. 线程安全性:前者是线程安全的,其对内部方法加了Synchronize同步锁,后者线程不安全。

    2. 性能:后者比前者高,因为后者没有加同步锁。

    3. 可变性:两者与String对比,String通过final修饰是不可变的,这两者是可变的。

5. Java类的加载过程?

    1)加载(Loading):这是类加载的第一个阶段,负责将字节码文件加载到内存中,并将其转换为JVM内部表示的结构体,即运行时数据区的方法区。在这个阶段,JVM为类的静态字段分配内存并设置默认值,如整型默认为0,布尔型默认为false,引用类型默认为null。1

    2)验证(Verification):这个阶段用于确保字节码的正确性和安全性。它检查字节码是否符合Java虚拟机规范,包括语法验证、字节码验证、符号引用验证等,以防止恶意的字节码对JVM的安全造成威胁。

    3)准备(Preparation):在这个阶段,JVM为类的静态变量分配内存空间,并根据数据类型给它们设置默认值。这些变量所使用的内存都将在方法区中进行分配。

    4)解析(Resolution):这个阶段是将符号引用解析为直接引用的过程。在Java中,符号引用是一种在编译时使用的符号名称,而直接引用是在运行时直接指向内存中的对象、方法、字段等的指针或句柄。

    5)初始化(Initialization):这是类加载的最后一个阶段,主要负责执行类的初始化代码。在这个阶段,JVM将按照程序员定义的顺序执行类构造器`()`的代码,对静态变量进行初始化,执行静态代码块等。

需要注意的是,类加载过程中的每个阶段都是有序、依次进行的,且是按需加载的。也就是说,只有在需要使用某个类时,才会触发该类的加载过程。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值