面试过程中经常被考的技术点

1、JAVA基础

问:“==”和 equals两者的区别?

答:“==” 是比较两个变量直接的值是否相等,比较的时候分为基本数据类型和引用类型;如果比较的是基本数据类型,则比较的是两者的值。如果比较的是引用类型,则比较的是对象的地址值是否一致。

equals()方法不能用于比较基本数据类型的对象,如果对象和自身进行比较,则equals()方法与==是一样的。对于String类 Date类 File类等 可重写equals() 方法用于比较对象的属性内容是否一致。

 

问:String、StringBuild和StringBuffer的区别?

答:String修饰的字符串是不可变的,是final类型的,创建和操作字符串。  StringBuild是线程不安全的,操作的是字符串变量,效率高。多线程操作字符串缓冲区下操作大量数据  StringBuffer是线程安全的。

 

问:常用的集合有哪些?

list、map、set集合

list、set集合的父接口的是collection,map是独立的接口。

list接口的子类实现有arraylist、linkedlist、vector

arraylist的数据结构是数组,在查询快,增删慢,线程不安全,效率高,最常用。

linkedlist的数据结构是链表,线程不安全,查询慢,增删快,效率高。

vector底层数据结构是数组,查询快,增删慢,线程安全,不常用。

 

map接口的实现类

HashMap:序存放,新的操作类,key不允许重复

Hahtable:无序存放,旧的操作类,key不允许重复

TreeMap:可以排序的Map集合,按集合的key排序,key不允许重复

 

JDK1.7和1.8 HashMap的优化有哪些?

1,7版本  hashmap的数据结构是数据+链表,实现类是entry类;

1.8版本 hashmap的数据结构是数据+链表+红黑树,当链表的长度大于8时,后面的数据结构会转为红黑树,实现类是node类。

优化:JDK 1.8 以前碰撞节点会在链表头部插入,而 JDK 1.8 开始碰撞节点会在链表尾部插入,对于扩容操作后的节点转移 JDK 1.8 以前转移前后链表顺序会倒置,而 JDK 1.8 中依然保持原序。
在插入是1.7是先判断是否扩容再插入;1.8版本是先完成插入后再判断是否扩容

hashmap默认的初始化长度是16,构造方法中 initialCapacity(初始容量)、loadFactor(默认负载因子0.75)

 

问:HashMap与HashTable的区别?

答:HashMap是线程不安全的,是map的一个接口,允许空值和空键,不允许键、值重复,效率比HashTable高,HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。(把Hashtable的contains方法去掉了,改成containsValue和containsKey)

HashTabele是线程安全的,不允许null值作为key或value值,是sychronize的,多线程访问时不需要为它的方法实现同步。( Hashtable则保留了contains,containsValue和containsKey三个方法)

 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。

 Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。

 HashTable在不指定容量的情况下的默认容量为11,而HashMap为16。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值