java八股文复习-----2024/03/05----基础---反射,动态代理。序列化

来源一 大彬八股文

来源二 2023 20W字八股文

2024秋招八股文

1.Java创建对象有几种方式?

Java创建对象有以下几种方式:

用new语句创建对象。

使用反射,使用Class.newInstance()创建对象。

调用对象的clone()方法。

运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法

2.说说类实例化的顺序

Java中类实例化顺序:

  静态属性,    静态代码块。
  
  普通属性,   普通代码块。
  
  构造方法。
public class LifeCycle {
   
    // 静态属性
    private static String staticField = getStaticField();

    // 静态代码块
    static {
   
        System.out.println(staticField);
        System.out.println("静态代码块初始化");
    }

    // 普通属性
    private String field = getField();

    // 普通代码块
    {
   
        System.out.println(field);
        System.out.println("普通代码块初始化");
    }

    // 构造方法
    public LifeCycle() {
   
        System.out.println("构造方法初始化");
    }

    // 静态方法
    public static String getStaticField() {
   
        String statiFiled = "静态属性初始化";
        return statiFiled;
    }

    // 普通方法
    public String getField() {
   
        String filed = "普通属性初始化";
        return filed;
    }

    public static void main(String[] argc) {
   
        new LifeCycle();
    }

    /**
     *      静态属性初始化
     *      静态代码块初始化
     *      普通属性初始化
     *      普通代码块初始化
     *      构造方法初始化
     */
}

3.final, finally, finalize 的区别

final 用于修饰属性、方法和类,
分别表示属性不能被重新赋值,方法不可被覆盖,类不可被继承。

finally 是异常处理语句结构的一部分,一般以try-catch-finally出现,finally代码块表示总是被执行。

finalize 是Object类的一个方法,该方法一般由垃圾回收器来调用,
当我们调用System.gc()方法的时候,由垃圾回收器调用finalize()方法,回收垃圾,JVM并不保证此方法总被调用。

4.什么是反射?

反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。
应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;
获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()

反射有哪些应用场景呢?
JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序

Eclispe、IDEA等开发工具利用反射动态解析对象的类型与结构,
				动态提示对象的属性和方法

Web服务器中利用反射调用了Sevlet的service方法

JDK动态代理底层依赖反射实现

5.BIO/NIO/AIO区别的区别?

同步阻塞IO : 用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行。

同步非阻塞IO: 客户端与服务器通过Channel连接,采用多路复用器轮询注册的Channel。提高吞吐量和可靠性。用户进程发起一个IO操作以后,可做其它事情,但用户进程需要轮询IO操作是否完成,这样造成不必要的CPU资源浪费。

异步非阻塞IO: 非阻塞异步通信模式,NIO的升级版,采用异步通道实现异步通信,其read和write方法均是异步方法。用户进程发起一个IO操作,然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知。类似Future模式。


通过故事讲清楚NIO
下面通过一个例子来讲解下。

假设某银行只有10个职员。该银行的业务流程分为以下4个步骤:

1) 顾客填申请表(5分钟);

2) 职员审核(1分钟);

3) 职员叫保安去金库取钱(3分钟);

4) 职员打印票据,并将钱和票据返回给顾客(1分钟)。

下面我们看看银行不同的工作方式对其工作效率到底有何影响。

首先是BIO方式。

每来一个顾客,马上由一位职员来接待处理,并且这个职员需要负责以上4个完整流程。当超过10个顾客时,剩余的顾客需要排队等候。

一个职员处理一个顾客需要10分钟(5+1+3+1)时间。一个小时(60分钟)能处理6个顾客,一共10个

你可能感兴趣的:(面试,java,python,开发语言)