• 面试题


    一、抽象类和接口的区别?

    1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

    2.抽象类要被子类继承,接口要被类实现。

    3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    4.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那

    么该类也只能为抽象类

    5.抽象类里可以没有抽象方法

    6.接口可继承接口,并可多继承接口,但类只能单根继承

    二、java中常见的异常类有哪些

    NullPointerException、ClassNotFoundException、SocketException、IOException、SQLException、ArrayIndexOutOfBoundsException

    ClassCastException、FileNotFoundException

    三、线程的实现方式有哪些?如何启动一个线程?

      1.继承Thread

      2.实现Runnable接口

    Thread类中含有start方法可以开启线程,当我们选择第一种实现方法继承Thread类,自动会继承其中的start方法,如果我们选择第二种,那么我们会声明一个Thread类,

    将我们实现Runnable接口类写入,再调用Thread类中的start方法开启线程

    四、线程有哪几种状态?

    1.创建 —— 线程对象已经创建,还没有在其上调用start()方法

    2.就绪 —— 当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态

    3.运行 —— 线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式

    4.等待/阻塞/睡眠 —— 这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态

    5.死亡 —— 当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程

    五、如何确保同一被访问数据的安全性?

    synchronized —— 一个时间内只能有一个线程得到执行。另一个线 程必须等待当前线程执行完这个代码块以后才能执行该代码块

    六、Servlet的生命周期?

    1,初始化阶段  调用init()方法

    2,响应客户请求阶段  调用service()方法

    3,终止阶段  调用destroy()方法

    七、ArrayListVector区别?

    1.Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的

    2.数据增长:ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,每次增加的存储单元的个数在内存空间利用与程序效率之间要

    取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)

    八、HashMapHashtable区别?

    1.Hashtable的方法是线程同步的,而HashMap的方法之间是线程不同步的

    2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)

    3.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

  • 相关阅读:
    抓取国家地区基础数据
    h264
    h.264
    vlc 推送rtsp视频流不能播放
    花生壳tcp内网端口映射
    make 安装时指定目录
    ubuntu安装vsftpd
    vsftpd命令
    vim删除某一列
    linux打开防火墙
  • 原文地址:https://www.cnblogs.com/kongkongFabian/p/6442884.html
Copyright © 2020-2023  润新知