0%

hash实现

redis的hash数据结构和java的HashMap虽然不同,但是有异曲同工之妙,value是键值对,相当于HashMap,对于hash碰撞也是采用的类似于HashMap的处理方式,数组+链表,更适合存储对象,将一个对象存储在hash类型中会占用更少的内存,且可以更方便的存取整个对象

编码格式

编码 对象
OBJ_ENCODING_ZIPLIST 使用ziplist
OBJ_ENCODING_HT 使用的hash table

set有两种编码格式

  • ziplist 一开始存储使用的ziplist,但是当满足一定条件时会转换为hash table
  • hash table
1
2
3
4
5
#根据该配置项来进行编码转换的
# ziplist的节点数量限制
hash-max-ziplist-entries 512
# 键或者值的长度限制
hash-max-ziplist-value 64
阅读全文 »

网络攻击

网络攻击分为被动攻击和主动攻击

被动攻击

被动攻击主要是破坏保密性的,用来监听请求、响应,如消息内容的获取,业务流分析等

主动攻击

主动攻击主要是破坏可用性(中断程序)、完整性(篡改消息内容)、真实性(伪造消息内容)的

scala泛型

scala与java类似,同样存在泛型,使用方括号来定义类型参数

定义类时使用泛型

1
class Array[T]

创建实例时使用泛型

1
val array:Array[String] = Array("aa","bb")
阅读全文 »

J2EE包括了两套规范用来支持分布式事务:一种是Java Transcation API(JTA),一种是Java Transcation Service(JTS)

JTA是一种高层的、与实现无关的、与协议无关的标准API。

阅读全文 »

共享变量之广播变量

spark中有两种共享变量,累加器和广播变量

闭包数据是以Task为单位发送的,每个任务中都会包含有闭包数据,这样就会导致一个Executor中会含有大量重复的数据,并且占用大量的内存,可以使用spark的广播变量将闭包的数据保存到Executor的内存中,从而使得一个Executor中的Task可以共享这些数据,广播变量每个节点只会发送一次,Spark中的广播变量不能够更改,是分布式只读变量,如果在某个节点上修改了广播变量的数据,则该数据只对本节点有效,其他节点不可见

广播变量用来高效分发较大的对象

使用sc.broadcast来声明广播变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
val rdd = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4)))

val list = List(("a", 4), ("b", 3), ("c", 2), ("d", 1))

// 声明广播变量
val bc = sc.broadcast(list)

val mapRdd = rdd.map(t => {
val bcv = bc.value
var num = 0
t match {
case (key, value) => {
for ((k, v) <- bcv) {
if (k == key) {
num = v
}
}
}
}
(t._1, t._2 + num)


})
mapRdd.collect().foreach(println)