0%

编辑器-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,代码就会自动添加到源文件中了!

插入排序

基本思想

每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止

进程创建

fork&vfork

fork与vfork同样都是创建子进程,但是注意两者的区别:

  • fork():子进程拷贝父进程的数据段,代码段
  • vfork ():子进程与父进程共享数据段
  • fork():父子进程的执行次序不确定
  • vfork(): 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行
  • vfork():保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁

HashMap是Java程序员使用频率最高的用于键值对处理的数据结构。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。

变量的定义位置

先上一段看来比较正常的代码:

#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在执行一些指令的时候会将需要的数据放在缓存中,其实就相当于是一个过渡元件!

哈希切割、Top K问题

问题一:给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 问题二:与上题目条件相同,如何找出Top K的IP? 问题三:直接用Linux命令如何实现?

关于卷积

卷积是分析数学中一种重要的运算。卷积是一种线性运算,图像处理中常见的mask运算都是卷积,广泛应用于图像滤波。高斯变换就是用高斯函数对图像进行卷积,卷积操作是图像变换的基础。