CountDownLatch功能很简单,它主要有两个方法,await()
与countDown()
,初始创建的时候需要给它提供一个数值,调用countDown()
方法会将数值减1,调用await()
方法的时候会判断值是不是等于0,如果等于0就继续执行,否则就阻塞等待
1 | // 初始化创建,值为1 |
利用这两个方法,我们能用来做什么呢?
CountDownLatch功能很简单,它主要有两个方法,await()
与countDown()
,初始创建的时候需要给它提供一个数值,调用countDown()
方法会将数值减1,调用await()
方法的时候会判断值是不是等于0,如果等于0就继续执行,否则就阻塞等待
1 | // 初始化创建,值为1 |
利用这两个方法,我们能用来做什么呢?
AbstractQueuedSynchronizer 是一个用于在竞争资源(如多线程)时使用的同步器,它内部使用了一个int
类型的字段status
表示需要同步的资源状态, 并基于一个先进先出(FIFO)的等待队列,队列中的每个节点表示要获取资源的线程
同步器主要是用于控制资源的获取以及释放,它可以用于独占模式和共享模式,这里我们以独占模式为例
在获取和释放资源时,我们需要实现自己的尝试获取和尝试释放的方法,利用
status
字段来控制成功与否
Redis支持的主要有5种数据类型,string
, list
, set
, zset
, hash
,但是对于每种数据类型,Redis都不是简单的使用一种数据结构来实现,而是根据数据量等因素使用多种数据结构(SDS、双向链表、hashtable等),来达到提高效率、节省空间的目的,可以使用object encoding <key>
来查看数据的内部结构
聚合的目的是为了快速构建项目,当我们有几个maven模块,想要一次性构建,而不是到每个模块下面去执行maven命令,这时候就需要使用maven聚合(或者称为多模块)。
使用聚合的时候,我们需要新建一个maven项目,由它来控制构建其他的项目,其pom.xml配置与其他普通maven项目的区别主要在以下两个地方:
这样当我们在此项目下执行构建的时候,就会同时构建其中配置的项目。
将元素添加到数组尾部
1 | var values = [1,2,3,4,5] |
将数组尾部元素弹出
1 | var values = [1,2,3,4,5] |
弹出数组头元素
1 | var values = [1,2,3] |
ECMAScript中有五种基本数据类型:Undefined
, Null
, Boolean
, Number
, String
,一种复杂数据类型:Object
typeof
函数,例:
1 | var s = xx; |
返回结果=typeof(res) | 意义 |
---|---|
typeof(res) === “undefined” | 值未定义 |
typeof(res) === “boolean” | 值为布尔类型 |
typeof(res) === “string” | 值是字符串 |
typeof(res) === “number” | 值为数值 |
typeof(res) === “object” | 值是对象或null |
typeof(res) === “function” | 值是函数 |
Redis中没有使用C语言原生的字符串,而是在其基础上包装了一个新的数据结构-SDS,其结构如下
1 | // 指向下面结构中的buf指针 |
Python 中参数的传递非常灵活,不太容易记住理解,特整理如下备忘:
即按照函数所需的参数,对应位置传递对应的值,可以对应 Java 中的普通参数
1 | def max(a, b): |