Java基础

2020/02/17

java基础学习

1.Object类有哪些方法? equals、hashcode,如果两个元素相等,则两个元素必须有同样的hashcode

2.java hashmap? hashmap不线程安全,为什么不线程安全? 1.数据丢失 如果有两条线程同时执行到这条语句table[i]=null,时两个线程都会区创建Entry,这样存入会出现数据丢失。

2.数据重复 如果有两个线程同时发现自己都key不存在,而这两个线程的key实际是相同的,在向链表中写入的时候第一线程将e设置为了自己的Entry,而第二个线程执行到了e.next,此时拿到的是最后一个节点,依然会将自己持有是数据插入到链表中,这样就出现了数据重复。

3.死循环 通过商品put源码可以发现,是先将数据写入到map中,再根据元素到个数再决定是否做resize,在resize过程中还会出现一个更为诡异都问题死循环。这个原因主要是因为hashMap在resize过程中对链表进行了一次倒序处理。假设两个线程同时进行resize, A->B 第一线程在处理过程中比较慢,第二个线程已经完成了倒序编程了B-A 那么就出现了循环,B->A->B.这样就出现了就会出现CPU使用率飙升。

java8已经不是用倒排索引,而采用新位置的下标是原老所处的位置+原数组的长度或依旧是老位置的hash特性方式来重构数组

3.红黑树?

  1. 节点是红色或黑色。
  2. 根节点是黑色。
  3. 每个叶子节点都是黑色的空节点(NIL节点)。
  4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

4.限流

5.全局唯一

jvm基础学习

java类的加载机制

类的加载示意图

单例 观察者模式

LRU实现

线程池

消息中间件

kafka如何保证不丢消息又不会重复消费?

Search

    Table of Contents