腾讯面试题(1)--自测试

1、java中的几种基本数据类型是什么?各自占用多少个字节?
1布尔1字符,4整形2浮点。12124848.
在这里插入图片描述

2、String类可以被继承吗?为什么?
String类是不能被继承的,因为有final关键字修饰。
在这里插入图片描述

3、String、StringBuffer、StringBuilder的区别
(有buffer的线程安全,但是速度慢,没有buffer的线程不安全,但是速度快)
String:String的值是不可变的
StringBuffer:StringBuffer的值可变,线程安全,但是效率比StringBuilder低
StringBuilder:StringBuilder的值可变,线程不安全,但是效率比StringBuffer高

4、ArrayList和LinkedList有什么区别?
1、ArrayList的底层是数组,LinkedList的底层是链表。
2、对于随机访问的get和set方法,ArrayList要优于linkedList,因为LinkedList要移动指针
3、对于新增和删除操作add和remove,linkedList比较占优势,因为ArrayList要移动数据。

5、讲讲类的实例化顺序
(静态最先处理,其他的先父而后子)
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法

6、用过哪些map类,都有什么区别,hashmap是线程安全的吗?并发下使用的map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

  • HashMap
    1、HashMap是一个用于存储键值对的集合,每一个键值对底层是保存在数组当中的。
    2、HashMap在使用put的时候,是通过计算key的hash值,来决定键值对保存在数组的哪个位置。get的时候同样也是通过hash的方式来获取到数组的下标。
    3、HashMap的长度由于是有限的,所以如果put的时候出现index冲突的情况,是会使用链表的方式来进行存储。
    4、HashMap默认的初始长度是16,之所以要定位16,是因为hashMap底层的算法。即key映射到index的hash算法使用16是效率最高的。
    5、HahsMap自动扩容的前提:HashMap的大小,大于或等于总容量*0.75
    6、HashMap是线程不安全的,因为当两个线程同时对hashmap进行扩容的时候,链表可能出现环形。
    在这里插入图片描述

  • ConcurrentHashMap
    1、ConcurrentHashMap采用了锁分段技术,该map中包含了多个segment对象,而每个segment对象就相当于一个hashMap对象。多线程对不同segment对象更新时,自然就可以是并发执行的,而对同一个segment执行时,会阻塞,所以能保证线程安全性

  • HashTable
    1、不允许记录的键或值为空
    2、支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

7、java8的concurrentHashMap为什么放弃了分段锁?有什么问题吗?如果你来设计,你如何设计?
https://my.oschina.net/pingpangkuangmo/blog/817973

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章