java面试题

1. collection集合

1.1 List

1.2 Set

hashmap和hashset的区别:

在这里插入图片描述

1. map

hashmap 在jdk8中的底层实现原理:
数据结构是:数组 + 链表(或者红黑树)

通过put()和get()方法存储和获取对象。

put()

将键值对传递给put()方法,调用键对象的hashCode()方法,计算hashcode值,找到bucket位置存储值对象。
数组+链表存储值对象。

  • 默认数组长度是16,后边会按照2的倍数进行扩容
  • 链表长度是8,超过之后会转换成红黑树(平衡二叉树)
    计算出hashcode值,用拉链发处理冲突,放到链表或者红黑树中。

get()

通过键对象的equals()方法找到正确的键值对,返回

红黑树

定义

为啥叫红黑树呢?
查找树,是为了解决二叉查找树线性查找问题(也就是单分支树的情况),提高查找效率。

操作

(插入结点的一定是红色,所以要变色调整红黑结点)

  1. 变色
  2. 左旋
  3. 右旋
性质
  1. 平衡二叉排序树
  2. 根节点是黑色
  3. 叶子结点是黑色,是空节点不存储数据
  4. 不能重复出现两个红色结点
  5. 某个结点出发到叶子结点的简单路径上的黑色结点个数相同
    在这里插入图片描述

常见的面试问题

“你知道HashMap的工作原理吗?”

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”这里关键点在于指出,HashMap是在bucket中储存键对象和值对象,作为Map.Entry。

“当两个对象的hashcode相同会发生什么?(冲突)”

HashMap中的碰撞探测(collision detection)以及碰撞的解决方法。
采用拉链法处理hashcode冲突问题。因为hashcode相同,所以它们的bucket位置相同‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中。

“如果两个键的hashcode相同,你如何获取值对象?”

找到bucket(数组中的某个元素,桶)位置之后,会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象。

如果两个对象存在同一个bucket中,怎么找对应的值对象呢?

get(key)方法中使用hashCode()方法得到hashcode,然后找到bucket,里边存的是键值对《键,值》,使用keys.equals()方法找对应的值对象。

2 多线程

3 JVM

4 Spring AOP IOC

5 springcloud

6 redis分布式锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值