0%

插入排序

基本思想

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

进程创建

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的结构实现和功能原理。

变量的定义位置

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

 1#include <stdio.h>
 2#include <stdlib.h>
 3
 4int main(void){
 5	printf("Tim\n");
 6	int a = 10;
 7	printf("a = %d\n",a);
 8	system("pause");
 9	return 0;
10}

由于我的环境是VisualStudio2013,所以上述程序可以完美执行,并且是编译0警告通过,但是在VisualStudio2008的环境下这样写是完全错误的,C89规定,在任何执行语句之前,在块的开头声明所有局部变量。但是在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。例如下面的写法对于C89标准才是正确的:

现代计算机体系结构

冯·诺依曼结构

要了解进程的概念得先从计算机的体系结构说起,首先了解一些世界上用得最多的计算机体系结构:冯·诺依曼结构(还有其他的计算机体系结构:如哈佛结构)

mark

冯·诺曼结构处理器具有以下几个特点:必须有一个存储器;必须有一个控制器;必须有一个运算器,用于完成算术运算和逻辑运算;必须有输入和输出设备,用于进行人机通信

存储设备对比

mark

上图从容量、传输速度、价格上来作比较,可以看出来为什么我们平时见到的计算机为什么硬盘几百G甚至几个T,而内存却只有8G或者16G,内存的IO速度是非常快的,跟硬盘的IO速度是 数量级 的差距,和内存相比寄存器就更快了,也是数量级的差距,于是出现了缓存,现在(2018/09/27)都是三级缓存,也就几M的大小,每次CPU在执行一些指令的时候会将需要的数据放在缓存中,其实就相当于是一个过渡元件!

哈希切割、Top K问题

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

关于卷积

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

Mat对象与IplImage对象

  • Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分
  • IplImage是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存,对大的程序使用它容易导致内存泄漏问题,下面是IplImage结构体的定义: