zhenlanghuo's Blog

zhenlanghuo's Blog

Redis设计与实现(第二部分 单机数据库的实现)
《Redis设计与实现》一书的重要内容摘抄,方便回看复习 1.数据库要点 Redis 服务器的所有数据库都保存在 redisServer.db 数组中, 而数据库的数量则由 redisServer.dbnum 属性保存。 客户端通过修改目标数据库指针, 让它指向 redisServer.db 数组中的不同元素来切换不同的数据库。 数据库主要由 dict 和 expires 两个字典构成, 其中 dict 字典负责保存键值对, 而 expires 字典则负责保存键的过期时间。 因为数据库由字典构成, 所以对数据库的操作都是建立在字典操作之上的。 数据库的键总是一个字符串对象, 而值则...
Redis设计与实现(第一部分 数据结构与对象)
《Redis设计与实现》一书的重要内容摘抄,方便回看复习 1.简单动态字符串要点 Rredis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示。 比起C字符串,SDS具有以下优点: 1) 常数复杂度获取字符串长度(len属性保存长度) 2) 杜绝缓冲区溢出(修改时对空间进行检查) 3) 减少修改字符串长度时所需的内存重分配次数(空间预分配、惰性空间释放) 4) 二进制安全(可以保存任意格式的二进制数据) 5) 兼容部分C字符串函数 数据结构 12345678910111213struc...
Storm总结
核心概念 组件 概念 Topology 一个实时计算应用程序逻辑上被封装在Topology对象中,类似Hadoop中的作业。与作业不同的是,Topology会一直运行直到显式地杀死它 Nimbus 负责资源分配和任务调度,类似Hadoop的JobTracker Supervisor 负责接收Nimbus分配的任务,启动和停止属于自己管理的Worker进程,类似Hadoop的TaskTracker Worker 运行具体处理组件逻辑的进程 Executor Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的...
类的访问权限(C++和JAVA)
C++访问权限 继承方式 C++中继承的方式还有多种,也分别都用public、protected、private表示。这与Java不一样,Java只有继承的概念,默认是public继承的。 三种继承方式不影响子类对父类的访问权限,子类对父类只看父类的访问控制权 继承方式是为了控制子类(也称派生类)的调用方(也叫用户)对父类(也称基类)的访问权限 public、protected、private三种继承方式,相当于把父类的public访问权限在子类中变成了对应的权限。 如protected继承,把父类中的public成员在本类中变成了protected的访问控制权限;private继承...
深入理解java虚拟机(第三章 垃圾收集器与内存分配策略)
《深入理解java虚拟机》的重点记录,方便复习 对象生命周期引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 实现简单,判断效率也很高,但是很难解决对象之间相互循环引用的问题。 可达性分析算法通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象不可用的。 4种GC Roots对象: 虚拟机栈(栈帧中的本地变量表)中引用的对象...
深入理解java虚拟机(第二章 Java内存区域)
《深入理解java虚拟机》的重点记录,方便复习 Java内存区域 程序计数器(Program Counter Register) 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器 线程私有,每一个JVM线程都有独立的程序计数器,各线程间的计数器互不影响,独立存储,确保线程切换后能够恢复到正确的执行位置 Java虚拟机栈(Java Virtual Machine Stack) 线程私有,与线程的生命周期相同 描述java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法...
JAVA集合框架总结
这里的内容只是从下边来源的系列文章摘抄的一些关键内容,方便复习来源:《深入理解Java集合框架》系列文章 ArrayList 顺序容器,底层通过数组实现 每个ArrayList都有一个容量(capacity,底层数组的实际大小),添加元素时容量不足,容器会自动增加底层数组的大小(原来的1.5倍) size(), isEmpty(), get(), set()方法均能在常数时间内完成(O(1)复杂度) add()方法的时间开销跟插入位置有关,addAll()方法的时间开销跟添加元素的个数成正比,其余方法大都是线性时间 没有实现同步(synchronized),如果需要多个线程并发访问...
avatar
zhenlanghuo
work hard, play hard