Java的特点
    可从面向对象、平台无关性、安全性、多线程、网络编程方面解答

    jvm
    可引申出字节码文件,Java文件的编译与解释过程,阐述jvm的作用,一次编译到处运行

    jdk和jre
    包含关系、是否包含开发工具等入手
    运行jsp为什么需要jdk

    Oracle JDK和Open JDK对比
    商业化角度、安全性、性能、稳定性等方面

    java为什么编译与解释并存
    可从java文件编译成字节码文件入手,以及jvm是操作字节码文件的,可延伸拓展jit编译器

    字符常量和字符串常量
    表示形式、字符串的底层、ASCII表、是否可以参与运算等入手

    标识符和关键字
    两者关系,包含?特殊标识?

    java泛型的理解
    编译时的安全监测、延伸出类型擦除,怎么绕过泛型往集合添加文件(反射)

    ==和equals
    基本数据类型比较的是什么
    引用数据类型比较的是什么,特殊如String又比较的是什么
    equals底层调用了==
    延伸:重写为什么重写equals要重写hashCode方法

    基本数据类型的占用字节数,类型默认值是什么,对应的包装类又是什么

    装箱与拆箱是什么

    包装类的常量池的范围[-128,127],特殊如Character范围[0,127],注意float和double并没有常量池

    做题时注意java基本类型的值传递机制
    总结:一个方法不能修改基本数据类型的参数、可以改变对象的内部属性、不能让对象参数引用一个新的对象

    重载和重写的区别
    从方法修饰符、返回类型、方法名、参数的个数、顺序、类型、返回异常的范围等方面解答

    深拷贝和浅拷贝
    引用的是否是同一个对象,如何实现深拷贝,序列化、迭代拷贝等方面入手

    面向对象和面向过程
    性能、可维护性、复用性、耦合性等方面解答

    构造器不能被重写,但是可以被重载

    子类构造器为什么要添加super()
    父类只定义有参构造器时,子类不加super()的话调用子类构造器时会发生编译错误

    成员变量和局部变量的区别
    生命周期、是否可以被static修饰、是否需要显式地赋值才能使用

    对象实体与对象引用的区别

    创建对象的几种方式
    new、反射、序列化反序列化、克隆

    构造方法的特性
    名称、返回值、默认构造方法等解答

    面向对象的三大特征解释

    1. 封装:隐藏属性,提供外部访问方法
    2. 继承:子类拥有父类的全部属性,但私有属性无法使用,重写父类的方法
    3. 多态:方法具有多态性、属性没有,运行时确定方法的调用版本,子类没有重写方法调用的则是父类的方法

    为什么静态方法不能调用非静态成员

    静态方法内部为什么不能使用this关键字
    栈帧的形成入手,局部变量表中index=0位置存放的是什么

    接口和抽象类的区别

    1. 接口方法默认public,抽象方法可以有public、protected和default修饰
    2. 所有方法在接口中不能有实现(JDK8开始接口方法可以有默认实现),抽象类可以有非抽象的方法
    3. 接口除了static、final变量,不能有其他变量,抽象类可以
    4. 一个类可以实现多个接口,但只能继承一个抽象类,接口本身可通过extends拓展多个接口
    5. 接口是对行为的扩展,而抽象则是对一类事务的规范,例如child可以实现eat、sleep接口,但是不能又继承Man类又继承Woman类

    字符串操作类
    String、StringBuffer、StringBuilder
    引用修改,对象本身修改,线程安全,性能效率等方面,字符串常量拼接操作的底层实现入手

    Object类的方法总结
    getClass
    hashCode
    equals
    clone
    toString
    notify
    notifyAll
    wait
    finalize

    transient关键字的作用:组织变量序列化

    异常类
    分类
    Error:StackOverFlowError、OutOfMemoryError
    Exceptions:
    CheckExceptions:IOException、SQLException、ClassNotFoundException
    UnCheckException:ArithmeticException、NullPointerException、IndexOutOfBoundsException
    常用方法
    getMessage:简要信息
    toString:详细信息
    getLocalizedMessage:本地化信息
    printStackTrace:Throwable对象封装的异常信息

    finally不会执行的几种情况
    程序发生异常前退出(System.exit(int)),线程死亡,关闭CPU

    线程状态
    新生、运行、阻塞、等待、超时等待、死亡

    join会使原线程进入阻塞状态;yield则是让源县城进入就绪状态,重新竞争CPU

    有了字节流为什么还有字符流
    字节流转换为字符流非常耗时间,而且不知道编码类型的话很容易出现乱码,所以干脆提供字符流直接操作字符

    BIO、NIO、AIO
    BIO:Blocking I/O,同步阻塞IO模式,数据的读写必须阻塞在一个线程内等待其完成
    NIO:Non-blocking IO,或者New IO,同步非阻塞的IO模型
    AIO:Asynchronous IO,NIO2,异步非阻塞的IO模型,并不常用
    总结:低负载、低并发的应用程序使用BIO就可以了,高负载、高并发的应用需要使用NIO提升性能