Skip to main content
 首页 » 编程设计

Java面试题带答案系列二

2022年07月19日26zfyouxi

11.根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

死锁的四个必要条件:

  1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。

  2)请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。

  3)非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。

  4)循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

12.能够对对象进行传输的只有ObjectOutputStreamObjectInputStream这些以Object开头的流对象。

13transient这个单词本身的意思就是瞬时的意思 transient是变量修饰符 变量定义为transient的,序列化时会忽略此字段。

14ClassLoader使用的是 双亲委托模型 来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。当一个ClassLoader实例需要加载某个类时,它会试图亲自搜索某个类之前,先把这个任务委托给它的父类加载器,这个过程是由上至下依次检查的,首先由最顶层的类加载器Bootstrap ClassLoader试图加载,如果没加载到,则把任务转交给Extension ClassLoader试图加载,如果也没加载到,则转交给App ClassLoader 进行加载,如果它也没有加载得到的话,则返回给委托的发起者,由它到指定的文件系统或网络等URL中加载该类。如果它们都没有加载到这个类时,则抛出ClassNotFoundException异常。否则将这个找到的类生成一个类的定义,并将它加载到内存当中,最后返回这个类在内存中的Class实例对象。

15JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。

16init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求

  service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用, 根据HTTP请求方法(GETPOST等),将请求分发到doGetdoPost等方法

destory方法:是在servlet实例被销毁时由web容器调用。Servlet规范确保在destroy方法调用之 前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init方法中 打开的与servlet相关的资源存储servlet的状态。

17Servlet是线程不安全的,在Servlet类中可能会定义共享的类变量,这样在并发的多线程访问的情况下,不同的线程对成员变量的修改会引发错误。

18public Method[] getDeclaredMethods()返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也包括它所实现接口的方法。

public Method[] getMethods()返回某个类的所有public方法,包括其继承类的公用方法,当然也包括它所实现接口的方法。

19.Java异常类

都是Throwable的子类: 
      1.Exception(异常) :是程序本身可以处理的异常。 

  2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。

  3.检查异常(编译器要求必须处置的异常)   除了ErrorRuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

  4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。

20.线程结束的三个原因:

  (1)run方法执行完成,线程正常结束

  (2)、线程抛出一个未捕获的Exception或者Error

  (3)、直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)


本文参考链接:https://www.cnblogs.com/wgl1995/p/5841459.html