0%

现代计算机体系结构

冯·诺依曼结构

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

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

存储设备对比

上图从容量、传输速度、价格上来作比较,可以看出来为什么我们平时见到的计算机为什么硬盘几百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结构体的定义:

读写像素

读一个GRAY像素点的像素值(CV_8UC1)

//方式一
Scalar intensity = img.at<uchar>(y, x); 
//方式二
Scalar intensity = img.at<uchar>(Point(x, y));

读一个BGR像素点的像素值

//读取整形
Vec3b intensity = src.at<Vec3b>(x, y);
int b = intensity [0];
int g = intensity [1];
int r = intensity [2];
//读取浮点型
Vec3f intensity = img.at<Vec3f>(y, x); 
float blue = intensity.val[0]; 
float green = intensity.val[1]; 
float red = intensity.val[2];

Vec3b与Vec3F

  • Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。
  • Vec3f对应三通道的float类型数据
  • 把CV_8UC1转换到CV32F1实现如下:src.convertTo(dst, CV_32F);

用户在注册的时候,会有个表单页面,然后有些选项是必填的,有些要填的内容是有规范的,这些都要在用户提交之前进行验证才行,如果不符合要求,需要在右边显示一个友好的提示,让用户修改。此时Validate做表单校验的特效药就发挥作用了!如果我们自己来写js代码的话,那么可就显得有些冲复造轮子了,所以现在Validate这个库可以很好的帮我们省略自己去写js校验代码,Validate这个库属于jQuery的插件库!

Validate下载

Validate的官网里面有示例代码,看这个就可以**: https://jqueryvalidation.org ** 官网的介绍是:这个jQuery插件简化了客户端表单验证,同时还提供了大量的自定义选项。如果您正在从头开始构建校验代码,而且当您尝试将某些内容集成到具有大量现有代码的现有应用程序中时,它将是一个不错的选择。该插件捆绑了一组有用的验证方法,包括URL和电子邮件验证,同时提供API来编写自己的方法。所有捆绑方法都带有英语的默认错误消息,并翻译成其他37种语言。由此可见它的强大之处了!

题目一

题目一:假设有如下的复杂链表,每个节点都有next指针和random指针,random指针是随机指向,请完成这条复杂链表的复制!

定义复杂链表节点

typedef struct ComplexNode
{
	DataType _data;
	struct ComplexNode* _next;
	struct ComplexNode* _random;
} ComplexNode;

需要的功能

//产生新节点
ComplexNode* BuyComplexNode(DataType x);

//打印此复杂链表
void PrintComplexList(ComplexNode* plist);

//复制复杂链表
ComplexNode* CopyList(ComplexNode* list);