07 2020 档案

摘要:前言 学习掘金小册深入理解 TCP 协议:从原理到实战的笔记汇总第二部分 TCP&UDP对比总览 TCP和UDP都是传输层的协议,但二者具有不同的特性,也适用于不同的场景。如下表所示: TCP UDP 可靠性 可靠 不可靠 连接性 面向连接 无连接 数据经过传输之后可能是无序的,TCP协议会将这些无 阅读全文
posted @ 2020-07-29 13:02 Reecelin
摘要:前言 之前学习掘金小册深入理解 TCP 协议:从原理到实战,以及其他网络相关知识的笔记,一直忘了整理,今天整理一下,梳理一下脉络。 分层模型 OSI七层模型和TCP/IP四层模型? OSI 七层模型 物理层:传输原始的数据比特流、如“0”、“1”信号的电平表示,传输的单位为bit; 数据链路层:对物 阅读全文
posted @ 2020-07-28 00:10 Reecelin
摘要:前言 在之前的JDK8 ArrayList源码解析P1中提到过,在对ArrayList进行遍历过程中,如果对集合进行结构性修改(增,删),会导致快速失败(fast-fial) 。那什么是fast-fail,什么又是safe-fail呢? fast-fail(快速失败) 在使用for循环遍历一个集合时 阅读全文
posted @ 2020-07-26 16:03 Reecelin
摘要:概述 CountDownLatch是J.U.C包中提供的一个并发工具类,其主要作用是协调多个线程之间的同步,其可以让一个线程在等待其他线程执行完任务之后再继续执行。 demo1 假设现在有一场考试,考场中有五个人,考试时间是1s,那么监考老师只能等考试时间到了才能收卷。使用CountDownLatc 阅读全文
posted @ 2020-07-26 15:41 Reecelin
摘要:前言 zset是Redis提供的一个非常特别的数据结构,常用作排行榜等功能。zset在Redis中两种不同的实现,分别是zipList和skipList。zipList前面我们已经介绍过了,这里就不再介绍了。具体使用哪种结构进行存储,规则如下: zipList:需要满足以下两个条件 [score,v 阅读全文
posted @ 2020-07-23 19:59 Reecelin
摘要:前言 与Java中的HashSet一样,Redis中的set也是无序且存储的元素不重复。set类型其底层有两种实现方式: 当value是整数值时,且数据量不大时使用inset来存储 其他情况都是用字典dict来存储 inset Redis中inset的结构定义如下所示: typedf struct 阅读全文
posted @ 2020-07-23 01:25 Reecelin
摘要:前言 hash在Redis中的底层实现有两种,一种是zipList,这种是当hash结构的V值较小的时候使用的编码方式。这个已经在Redis底层数据结构之list这篇文章中介绍过了。这篇文章主要讲解一下另外一种实现方式,字典dict,这是当hash结构的V值较大时采用的编码方式。 dict 这里又要 阅读全文
posted @ 2020-07-22 17:31 Reecelin
摘要:前言 Redis中另一个常用的数据结构就是list,其底层有linkedList、zipList和quickList三种存储方式。 linkedList 与Java中的LinkedList类似,Redis中的linkedList也是一个双向链表,由一个个节点组成的。Redis中借助C语言实现的链表节 阅读全文
posted @ 2020-07-22 02:36 Reecelin
摘要:前言 Redis是由Salvatore Sanfilippo大神使用C语言编写的。在C语言中,字符串标准形式是以空字符\0作为结束符的,但是Redis里的字符串并没有直接沿用C语言的字符串。主要是因为C语言中获取字符串长度可以调用strlen这个标准函数,这个函数的时间复杂度是O(N),由于Redi 阅读全文
posted @ 2020-07-21 00:50 Reecelin
摘要:概述 ThreadLocal提供了一种线程安全的数据访问方式,每个线程中都存在一个共享变量副本,从而实现多线程状态下的线程安全。 demo public static void main(String[] args) { final ThreadLocal<Integer> MAIN = Threa 阅读全文
posted @ 2020-07-19 21:29 Reecelin 阅读(242) 评论(0) 推荐(0)
摘要:但凡了解过并发编程的程序猿,应该都知道volatile解决了并发编程的可见性和有序性问题,但底层具体是如何实现的呢? 有序性 volatile可以禁止指令重排序,从而保证并发编程的有序性。那volatile如何实现禁止指令重排序的呢?答案就是内存屏障。 内存屏障是一类同步屏障指令,是CPU或者编译器 阅读全文
posted @ 2020-07-15 16:05 Reecelin
摘要:前言 Redis中共有五种常用的数据类型,分别是string、list、set、hash以及zset。但是其底层数据结构是啥样的以及是如何实现的呢?今天我们就深入了解一下Redis中的底层数据结构。 redisObject 当我们使用Redis中各种类型来存储数据时,无论是哪种类型,Redis中都不 阅读全文
posted @ 2020-07-13 19:08 Reecelin
摘要:ThreadPoolExecutor源码分析 上一篇(https://www.cnblogs.com/reecelin/p/12334107.html)中,我们对ThreadPoolExecutor的使用有了初步了解,今天我们来详细解剖一下ThreadPoolExecutor的源码,分析其机制和原理 阅读全文
posted @ 2020-07-10 17:51 Reecelin
摘要:说FutureTask之前,我们先来说一下Future这个接口。 Future 接口上有许多注释,总结下来如下: 定义了异步计算的接口,提供了计算是否完成的 check、等待完成和取回等多种方法; 如果想得到结果可以使用 get 方法,此方法(无参方法)会一直阻塞到异步任务计算完成; 取消可以使用 阅读全文
posted @ 2020-07-09 16:14 Reecelin