Java基础-Pass by value

Java的方法参数是按值传递的,这篇主要是把Java的传值机制和C语言的指针和二重指针进行比较,并基于汇编代码更深入的理解传值和传引用。

阅读全文

数据结构-Treap

今天的算法课上,老师讲了一个比较有意思的数据结构:Treap。它的名字就比较有意思,为什么叫Treap呢?是Tree + Heap两个单词的结合,所以这个数据结构也就是二叉树和二叉堆的结合了。

简介

Treap也是平衡二叉搜索树的一种。

Balanced Binary Search Tree 也可以简称为 Balanced Search Tree,为了方便区分我下面会简称为BBST

阅读全文

Java基础-HashMap源码简析

基于HashMapJDK1.8中的源码

参考前辈们的成果,简单的分析HashMap的源码,了解一下HashMap的存储结构,主要方法工作原理和线程安全这几个方面。

阅读全文

Java基础-目录

接下来应该会写一系列Java基础的笔记吧,之前虽觉得自己已经熟悉Java,但都没有系统的做笔记和整理,而且Java也是自学的,很多知识都没有

阅读全文

2018年

2018 年 1月的时候还是大二上学期,紧张的考试周。也是1月,还记得当时QQ飞车的手游刚出来;也在1月,我恋爱了,紧张感动还是憧憬?因为是异地恋之后

阅读全文

乞丐版Vi编辑器的实现2-原始输入输出

参考 Raw input and output,讲解的顺序和原教程不同,而且省略了很多关于转义序列的说明,键位也是模仿 Vi 来实现的。

这一步里,主要完成的功能有读取键盘的输入,键位映射和移动光标。

重构输入函数

为了处理更多更复杂的按键,我们需要写一个函数来专门读取键盘输入。将 step1 的代码作如下修改:

阅读全文

乞丐版Vi编辑器的实现1-Raw mode

参考 Entering raw mode

这一节的内容可能比较枯燥,是一些底层的 Terminal 的属性:canonical mode,回显(echoing),键盘按键对应的 ASCII 码(可以发现一些按键不止对应一个编码,还有些按键对应的是同一个编码)和一些杂项设置…通过改变这些设置,让 Terminal 进入所谓的 “raw mode”。

Makefile

我使用 make 来构建 VIP,因为只有两个源文件,所以 Makefile 很简单:

CC = gcc
CFLAGS = -Wall -Wextra -pedantic -std=c99 -O3

all: vip

debug:
	$(CC) $(CFLAGS) vip.c -g -o vipd

re:
	make clean;make

clean:
	rm -f vip vipd

CFLAGS 里使用 c99 标准;使用 -O3进行编译优化,主要是对内联函数进行优化;-Wall -Wextra -pedantic 会打印一些额外的警告,对 debug 有帮助。

阅读全文