qing's 随笔


  • 首页

  • 标签

  • 分类

  • 公益404

  • 搜索

redis-list双向链表【学习笔记】

Guyuqing 发表于 2019-03-28 | 分类于 redis

list定义

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
48
49
50
51
52
53
/*
* 双端链表节点
*/
typedef struct listNode {

// 前置节点
struct listNode *prev;

// 后置节点
struct listNode *next;

// 节点的值
void *value;

} listNode;

/*
* 双端链表迭代器
*/
typedef struct listIter {

// 当前迭代到的节点
listNode *next;

// 迭代的方向
int direction;

} listIter;

/*
* 双端链表结构
*/
typedef struct list {

// 表头节点
listNode *head;

// 表尾节点
listNode *tail;

// 节点值复制函数
void *(*dup)(void *ptr);

// 节点值释放函数
void (*free)(void *ptr);

// 节点值对比函数
int (*match)(void *ptr, void *key);

// 链表所包含的节点数量
unsigned long len;

} list;
阅读全文 »

redis-sds动态字符串【学习笔记】

Guyuqing 发表于 2019-03-27 | 分类于 redis

SDS定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
* 类型别名,用于指向 sdshdr 的 buf 属性
*/
typedef char *sds;

/*
* 保存字符串对象的结构
*/
struct sdshdr {

// buf 中已占用空间的长度
int len;

// buf 中剩余可用空间的长度
int free;

// 数据空间
char buf[];
};

阅读全文 »

《自己动手写JAVA虚拟机》学习笔记三【解析class文件】

Guyuqing 发表于 2019-02-14 | 分类于 JVM

java虚拟机规范中使用一种类似C语言结构体来描述Class文件的基本结构,具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ClassFile {
u4 magic;//魔数
u2 minor_version;//主版本号
u2 major_version;//次版本号
u2 constant_pool_count;//常量池长度
cp_info constant_pool[constant_pool_count-1];//常量池信息
u2 access_flags;//该类的访问修饰符
u2 this_class;//类索引
u2 super_class;//父类索引
u2 interfaces_count;//接口个数
u2 interfaces[interfaces_count];//接口详细信息
u2 fields_count;//属性个数
field_info fields[fields_count];//属性详细信息
u2 methods_count;//方法个数
method_info methods[methods_count];//方法详情
u2 attributes_count;//类文件属性个数
attribute_info attributes[attributes_count];//类文件属性详细信息
}
阅读全文 »

《自己动手写JAVA虚拟机》学习笔记二【搜索class文件】

Guyuqing 发表于 2019-02-12 | 分类于 JVM
1
2
3
4
5
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello, world!");
}
}

运行上面的java程序时,我们知道首先要启动java虚拟机,然后加载主类,最后调用主类的main方法。但是在加载HelloWorld类之前,首先要加载它的超类java.lang.Object,在调用main()函数之前,虚拟机要准备好参数数组,所以需要加载java.lang.String和java.lang.String[]类。把字符串打印到控制台还需要加载java.lang.System类,等等。。那么java虚拟机如何寻找这些类的呢?

类路径

类路径可以分为以下三种:

  • 启动类路径(bootstrap classpath):启动类路径默认对应jre/lib目录,Java标准库位于该路径。
  • 扩展类路径(extention classpath):扩展类路径默认对应jre/lib/ext目录,使用Java扩展机制的类位于该路径。
  • 用户类路径(user classpath):我们自己实现的类,以及第三方类库则位于用户类路径。用户类路径的默认值是当前路径,也就是”.”,可以给java命令传递-classpath选项来指定。
阅读全文 »

《自己动手写JAVA虚拟机》学习笔记一【命令行工具】

Guyuqing 发表于 2019-02-11 | 分类于 JVM

最近正在看张秀宏著的《自己动手写Java虚拟机》,这本书适合初学者更深入的理解java虚拟机的含义,也可以简单学习go语言的基本使用。

准备工作

安装JDK

从Oracle官网下载最新的JDK,双击运行即可。我使用的是1.8.0_161

安装GO

从GO语言官网下载最新版本的GO安装文件,双击运行即可,我使用的是1.11.2。
测试Go环境是否安装成功

1
2
~$ go version
go version go1.11.2 darwin/amd64
阅读全文 »
<i class="fa fa-angle-left"></i>1…91011<i class="fa fa-angle-right"></i>

51 日志
19 分类
38 标签
GitHub 微博
© 2019 — 2021 guyuqing
全站共202.7k字
访问人数 人 总访问量 次
0%