1.注册中心挂了,服务之间还能通信吗?
(1)dubbo通信框架时:调用者或从注册中心把可用提供者的ip,信息在调用时,缓存到本地。所以,当注册中心挂了,调用者从本地缓存读物调用者的信息,所以服务还是可以调用。
2.hashCode相等的类,一定相等吗?equals呢
(1)hashCode相同,类不一定相同。其实不在散列数据结构中用该类,hashcode和equals二者方法没有关系。当创建类对应的散列表:我们会在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中,他们才有关系。
当hashCode相同的时候,说明他们的hash值相同,并不一定能得出键值对相等。这也是hash冲突
1)、如果两个对象相等,那么它们的hashCode()值一定相同。
这里的相等是指,通过equals()比较两个对象时返回true。
hashCode方法,不进行覆盖时,方法返回的是:该对象int类型的hash码,利hash函数计算得来。
equals方法,在不进行overRide时,方法比较的时两个对象的引用首地址是不是一样。相当于==。不是基本类型,返回false,表示两个对象不是同一个对象,但是实际内容可能相同。
所以,非基本类型的equals方法一般都覆盖重写,不比较地址,比较对象的内容。
3.hashMap和treeMap
大区别:
hashMap插入的元素,不会按照key的大小进行排序。
treeMap会按照,key的hash值从小到大进行排序。可根据构造方法定义Comparator比较方法
(1)底层数据结构
hashMap是一个16长度的entry数组链表。
(2)treeMap
底层实现是红黑树,根据key的hash值进行插入,旋转树结构。也是entry数组
4.threadLocal
https://www.cnblogs.com/dolphin0520/p/3920407.html
(1)作用:用在多线程的场景,保存每个线程的独立副本。实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals。
感悟:一个线程中创建两个threadlocal去保存两个变量。首先会根据当前线程获取TreadLocalMap(保存了两个threadlocal的值),key是当前对象,value是保存的两个变量,entry数组的形式保存的value
(2)场景:当多线程中,遇到某一元素各个线程的使用是独立的,互不干扰,一个线程创建使用该元素,销毁该元素,不会对另一线程的使用造成影响。如果使用加锁的方式进行控制线程元素的使用,这样虽然能实现,但是性能很低,而使用threadLocal去为每个线程使用的该元素保存一个副本,运行对应线程的时候,去获取对应线程的元素。这样一来就不存在线程安全问题,也不会严重影响程序执行性能
但是:使用threadlocal会加大内存的使用,比不使用threadlocal
(3)方法
get: 利用当前线程t获取存取元素的map,map是Thread类的一个成员变量,map的元素结构key是this当前对象,value是元素。value元素存在一个Entry数组中,value存在数组的位置有key的hashcode(有算法) & entry数组长度-1 决定。
如果当前线程没有map,会初始化map
set: 入参是value元素。先根据当前线程获取threadlocalMap,map.put(this,value).如果map不存在会进行创建map
5 .线程池的参数?以及参数的使用,何时生效。运行原理?
https://blog.youkuaiyun.com/z285692001/article/details/81916470