Jiefang's Blog

过去心不可得,现在心不可得, 未来心不可得

RocketMQ-13丨延迟消息

延迟消息 定时消息是指消息发送到Broker 后,并不立即被消费者消费而是要等到特定的时间后才能被消费, RocketMQ 并不支持任意的时间精度, 如果要支持任意时间精度的定时调度,不可避免地需要在Broker 层做消息排序(可以参考JDK 并发包调度线程池ScheduledExecutorService 的实现原理),再加上持久化方面的考量,将不可避免地带来具大的性能消耗,所以Rock...

RocketMQ-12丨消息消费机制

消息并发消费 ConsumeMessageConcurrentlyService#submitConsumeRequest() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47...

Java集合-06丨LinkedHashMap

LinkedHashMap 简介 LinkedHashMap内部维护了一个双向链表,可以按元素插入顺序访问,可以用来实现LRU缓存策略。 LinkedHashMap可以看成是 LinkedList + HashMap。 类图 结构图 HashMap 底层的数据结构是:数组 + 链表 + 红黑树。LinkedHashMap继承自HashMap所以它的内部也是这种数据结...

Java基础-05丨Object.hashCode()和Object.equals()

05丨Object.hashCode()和Object.equals() hashCode() 简介 Java注释: Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by {@link jav...

Java集合-05丨HashMap(JDK1.8)

HashMap 简介 HashMap采用key/value存储结构,每个key对应唯一的value,查询和修改的速度都很快,能达到O(1)的平均时间复杂度。它是非线程安全的,且不保证元素存储的顺序,可以存储null key和null value; HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。 其中当链表的长度大于等于 8 时,链表会转化成红黑树,...

Java集合-04丨CopyOnWriteArrayList

CopyOnWriteArrayList 简介 Java注释: A thread-safe variant of {@link java.util.ArrayList} in which all mutative operations ({@code add}, {@code set}, and so on) are implemented by making a fresh copy...

JVM-12丨Java对象访问方式

Java对象访问方式 对象访问方式取决于JVM的实现,主流的对象访问方式有以下两种: 使用句柄 使用直接指针 使用句柄方式 Java堆划分一块内存作为句柄池,reference中存储就是对象的句柄地址; 对象句柄包含两个地址: 在堆中分配的对象实例数据的地址; 这个对象类型数据地址; 优点:对象移动时(垃圾回收时常见的动作),reference不需要修改,只改...

JVM-11丨Java对象创建过程

Java对象创建过程 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过,如果没有,那必须先执行相应的类加载过程; 在类加载检查通过后,虚拟机将为新生对象分配内存,对象所需内存的大小在类加载完成后便可以确定; 内存分配完成后,虚拟机需要对象实例变量都初始化为零值(不包括对象头)...

Java集合-03丨LinkedList

LinkedList 简介 LinkedList是一个以双向链表实现的List 基本概念: 链表每个节点叫做 Node,Node 有 prev 属性,代表前一个节点的位置,next 属性,代表后一个节点的位置; first 是双向链表的头节点,它的前一个节点是 null。 last 是双向链表的尾节点,它的后一个节点是 null; 当链表中没有数据时,first...

Java基础-04丨System.gc()

System.gc() 介绍 System.gc(),是JDK提供的触发Full GC的一种方式,会触发Full GC,其间会stop the world,对业务影响较大,一般情况下不会直接使用。 system.gc其实是做一次full gc; system.gc会暂停整个进程; system.gc一般情况下我们要禁掉,使用-XX:+DisableExplicitGC; ...

Java基础-03丨Object.finalize()

Object.finalize() 简介 官方注释 Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the {@code finaliz...

Java集合-02丨ArrayList

ArrayList 简介 ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,称之为动态数组。 类图 ArrayList实现了List, RandomAccess, Cloneable, Serializable等接口。 ArrayList实现了List,提供了基础的添加、删除、遍历等操作。 ArrayList实现了RandomAcc...

Java集合-01丨集合框架

集合框架 集合整体框架 Collection接口 Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。 Li...

Java多线程-25丨JUC-FutureTask(异步任务)

FutureTask 简介 FutureTask实现了Future,如获取任务执行结果(get)和取消任务(cancel)等。如果任务尚未完成,获取任务执行结果时将会阻塞。一旦执行结束,任务就不能被重启或取消(除非使用runAndReset执行计算)。FutureTask 常用来封装 Callable和Runnable,也可以作为一个任务提交到线程池中执行。 类图 原理 状态 ...

MySQL-28丨MySQL日期函数

MySQL日期函数 DATE() 函数:返回日期或日期时间表达式的日期部分; str_to_date()函数:按照指定日期或时间显示格式 将字符串转换为日期或日期时间类型; date_format()函数:按照指定日期或时间显示格式 输出日期或日期时间; Date(datestring) datestring是合法的日期表达式如: 1 SELECT date('2017-...

MySQL-28丨授权操作

授权操作 1 grant select,insert,create,drop,index,alter on muke.* to 'test_user3'@'127.0.0.1' identified by 'userBcdQ19Ic'; 参数 解释 grant 这里包含了创建用户及赋权操作 ...

Redis-06丨Redis过期策略和内存淘汰机制

Redis过期策略和淘汰机制 三种过期策略 定时删除 含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。 优点:保证内存被尽快释放。 缺点: 若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所...

Redis-05丨数据分布算法

数据分布理论 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的 问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。常见的分区规则有哈希分区和顺序分区两种。 节点取余分区 使用特定的数据,如Redis的键或用户ID,再根据节点数量N使用公式:hash(key)%N计算出哈希值,用来决定数据映射到哪一个节点上。这种方案存在一个问题:当节点数量变化时,如扩容或收缩...

Java多线程-24丨JUC-Semaphore(信号量)

Semaphore 简介 JDK注释: A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each {@link #acquire} blocks if necessary until a permit is available, and then takes it. Each ...

Java多线程-23丨JUC-CyclicBarrier(循环屏障)

CyclicBarrier 简介 官方定义: A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fixed s...