Linux下开发工具
编辑器-Vim
都知道vim是Linux下的编辑器之神,当然还有emacs也是特别NB的,个人在Linux下比较常用的也就是Vim了,接下来说说vim的一些配置技巧:
配置常见的代码模板
func Setfilehead()
call append(0, '/***********************************************')
call append(1, '# Filename: '.expand("%"))
call append(2, '# Author: Tim 15291418231@163.com')
call append(3, '# Description: ---')
call append(4, '# Create: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(6, '***********************************************/')
call append(7, '')
call append(8, '#include <stdio.h>')
call append(9, '#include <stdlib.h>')
call append(10, '#include <unistd.h>')
call append(11, '#include <sys/types.h>')
call append(12, '')
call append(13, 'int main(int argc, char *argv[]){')
call append(14, '')
call append(15, ' return 0;')
call append(16, '}')
endfunc
"映射F1快捷键,生成后跳转至第14行,然后进入vim的插入模式
map <F1> :call Setfilehead()<CR>:14<CR>o
这样的话只要新建源文件的时候按一下F1,代码就会自动添加到源文件中了!
重新认识HashMap
HashMap是Java程序员使用频率最高的用于键值对处理的数据结构。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。
必须避免的C语言大坑
变量的定义位置
先上一段看来比较正常的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Tim\n");
int a = 10;
printf("a = %d\n",a);
system("pause");
return 0;
}
由于我的环境是VisualStudio2013,所以上述程序可以完美执行,并且是编译0警告通过,但是在VisualStudio2008的环境下这样写是完全错误的,C89规定,在任何执行语句之前,在块的开头声明所有局部变量。但是在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。例如下面的写法对于C89标准才是正确的:
深入理解进程
现代计算机体系结构
冯·诺依曼结构
要了解进程的概念得先从计算机的体系结构说起,首先了解一些世界上用得最多的计算机体系结构:冯·诺依曼结构(还有其他的计算机体系结构:如哈佛结构)
冯·诺曼结构处理器具有以下几个特点:必须有一个存储器;必须有一个控制器;必须有一个运算器,用于完成算术运算和逻辑运算;必须有输入和输出设备,用于进行人机通信
存储设备对比
上图从容量、传输速度、价格上来作比较,可以看出来为什么我们平时见到的计算机为什么硬盘几百G甚至几个T,而内存却只有8G或者16G,内存的IO速度是非常快的,跟硬盘的IO速度是 数量级 的差距,和内存相比寄存器就更快了,也是数量级的差距,于是出现了缓存,现在(2018/09/27)都是三级缓存,也就几M的大小,每次CPU在执行一些指令的时候会将需要的数据放在缓存中,其实就相当于是一个过渡元件!