美文网首页
JAVA基础面试题一

JAVA基础面试题一

作者: 长孙俊明 | 来源:发表于2019-10-23 09:46 被阅读0次

    基础知识

    重载和重写的区别

    重写是子类重写父类的方法。而重载是类之间的方法名可相同,参数不一样。

    String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?

    String是不可变的字符串,StringBuffer和StringBuilder是可变的字符串,StringBuffer是线程安全,StringBuilder是线程不安全。
    String不可变的原因有几点
    1、是因为属性value被修饰成final。
    2、没有提供修改value的方法。
    3、提供了replace方法也是new出新的String对象。

    自动装箱与拆箱

    自动装箱是指基本数据类型转换成包装器类型
    自动拆箱是指包装器类型转换成基本数据类型

    ==与equals

    ==的作用
    基本类型比较的是值
    引用类型比较的是内存地址
    需要注意一下的是基本类型的包装类型,如:Integer,0-127值已经被JVM初始化到堆中,所以比较时,jvm不会new一个对象,而是先找内存地址是否存在,存在则不new,所以他们是true,如果大于127,那么内堆中地址会不一样,这个也是jvm一种优化策略,其他包装类型也一样。
    equals的作用
    如果没有重写的情况下,引用类型是继承了object类的方法equals,而这个equals是用==进行判断。不过很多类都已经重写了equals方法,变成值比较。

    关于final关键字的一些总结

    如果在类上进行了修饰,则该类不可继承。
    如果在属性上进行了修饰,则属性不可变。
    如果在方法上进行了修饰,则方法不可重写。

    Object类的常见方法总结

    equals,toString,notify,wait,getClass

    接口和抽象类的区别是什么

    接口可以被类实现,而抽象类可以被类继承。
    接口不可以用方法实现,而抽象类可以有方法实现。

    Java集合框架

    ArrayList与LinkedList异同

    ArrayList是由数组实现的。特点是查和添加快,删除慢。
    LinkedList是双向链表结构实现,特点是添加和删除快,查慢。
    他们都是线程不安全。

    ArrayList与Vector区别

    ArrayList线程不安全,Vector线程安全
    ArrayList初始化为空数组,而Vector是数组大小为10
    ArrayList扩容是右移一位方式,而Vector扩容是N倍方式。

    HashMap的底层实现

    底层是通过红黑树来实现。红黑树是一种自平衡的二叉搜索树。

    HashMap和Hashtable的区别

    不同点:
    HashMap是线程不安全,他继承了AbstractMap。
    Hashtable是线程安全,他继承了Dictionary。
    相同点:
    都实现了Map接口。
    都是通过哈希表实现,使用单链表解决冲突问题,只不过HashMap用黑红树对单链表进行了优化。

    HashMap的长度为什么是2的幂次方

    如果要讲清楚,比较复杂。总体来说,就是为了解决hash算法均匀分布。

    HashMap多线程操作导致死循环问题

    这个是1.7版本在扩容的时候出现的问题,1.8版本已经得到解决。

    HashSet和HashMap区别

    不同点:
    HashSet实现了Set,而HashMap实现了Map。

    ConcurrentHashMap和Hashtable的区别

    不同点:
    ConcurrentHashMap是使用的块同步。
    Hashtable使用的方法同步。

    ConcurrentHashMap线程安全的具体实现方式/底层具体实现

    不会啊

    集合框架底层数据结构总结

    使用到数组、链表、红黑树

    相关文章

      网友评论

          本文标题:JAVA基础面试题一

          本文链接:https://www.haomeiwen.com/subject/xpyhvctx.html