摘要: 前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的。比如:《Windows网络与通信程序设计(第二版)》 王艳平著《WinSock网络编程经络》 张会勇著在看第一本书的时候,因为后几章涉及到驱动编写的问题,所以我就先去找了本驱动的书看了看,顺手翻到一本潘爱民先生编写的《Windows内核原理与实现》。看了觉得还是很不错的。我学Windows的时间应该有一年了吧,在这其间,我总是觉得自己在Windows上,能进行一些程序的编写,但是总是觉得,有点难以触及核心。像单片机那种非常简单的平台,程序基本可以说是想怎么写就怎么写,无拘无束。而在Windows平台上,总是觉得自己的 阅读全文
posted @ 2013-12-07 21:44 Matrix_R 阅读(5641) 评论(0) 推荐(2) 编辑
摘要: 我之前写的文章都没写上面那句,但是这篇写了,主要是因为zStack文章抄袭太严重……故此声明因为涉及到数据的双向交互问题,所以在这里我考虑使用协议栈来实现数据的收发。首先说下如何在Zstack中添加自己的任务。首先要利用已有的SampleApp工程,在其中添加自己的任务。添加任务流程如下:1 首先定义任务函数,函数声明如下: UINT16 FunctionName(byte task_id, UINT16 events);2 定义好了函数后再定义一个用于指定任务ID的函数,很简单: void Function_Init( byte task_id );然后在OSAL_GenericApp.c文 阅读全文
posted @ 2013-11-03 21:39 Matrix_R 阅读(8675) 评论(0) 推荐(0) 编辑
摘要: 注册表是window系统中非常重要的一部分,今天在网上查了一些文章学习了下,觉得其中有一句话总结的很经典:注册表是用来存储信息的。这句话虽然有点废,但是说的没错。当然,注册表中包含的内容非常多,远没有单纯存储信息那么简单。注册表的基础信息:数据存储结构为树。树的每一个节点就是一个键值。每个节点都能包含N多子键。一个键可以有很多键值。每个键值都有一个名字,以及一种指定类型的数据。我今天也是刚开始看注册表,知道的也很有限,就不接着献丑了,直接跳到注册表API。常用的注册表函数:RegOpenKeyEX函数原型为:LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSub 阅读全文
posted @ 2013-10-07 19:10 Matrix_R 阅读(1481) 评论(3) 推荐(0) 编辑
摘要: 这个是代码是昨天写完的,一开始的时候还出了点小bug,这个bug在晚上去吃饭的路上想明白的,回来更改之后运行立刻完成最后一步,大获成功。简单说下huffman编码和文件压缩主要的技术。Huffman编码,解码:I 创建Huffman树II 根据Huffman树实现编码,并将编码结果和要编码的数据建立映射关系。III Huffman解码,也就是根据获取的Huffman码来逆向获取解码信息,而且你从解压文件中一次性获取的数据是一个很长的字符串,没有预处理好的成段字符串式Huffman码。1I 首先,如何创建Huffman树?在这个我在前天的那篇文章中简单的提了一下,现在好好说一下。如果你不知道什么 阅读全文
posted @ 2013-10-07 00:57 Matrix_R 阅读(12331) 评论(4) 推荐(1) 编辑
摘要: 今天主要做的就是,将完成huffman编码的数据以二进制的形式写入文件中。这是个挺苦逼的活。不过好在我以前玩过一段时间的单片机,所有能够较好的实现位运算,一位一位的将数据存放到缓冲区中,然后统一写入内存。今天这个代码,怎么说呢,应该算是比较细致的活吧,毕竟这已经是接触到了计算机存储中存储单位最小的位了,在代码的控制上要比较小心,写代码前必须把问题想清楚,想不清楚,就很容易悲剧。代码实现出来之后,原本大小为7.09kb的文件压缩后大小变成了4.86kb,这还是其中的信息头占了不少的内容,不然效率能更高一些。当然了,我现在还不清楚我写进去的文件是否是正确的,毕竟现在还没解压出来,不过头部数据是没问 阅读全文
posted @ 2013-10-04 22:19 Matrix_R 阅读(3236) 评论(0) 推荐(0) 编辑
摘要: 今天下午想把文件压缩写一下,因为我觉得这个还是比较锻炼技术的,对数据结构的要求应该比较高,权当练习了吧。我采用的压缩方式是Huffman编码,不过比较囧的是,我拼写拼错了,我拼的是haffman,在后面的代码也是出尽洋相。huffman是非常经典的一种编码形式,不过现在好像用的不多了,但是这种压缩编码的好处在于数据是无损压缩的,而且非常经典。在构造huffman树,要做的步骤如下:1 对文件的元素进行统计,其实就是个计数,我这里的元素是以字节为单位的,毕竟任何文件都可以转化为字节流的形式,处理起来方便的很。2 然后对统计结果进行一次由小到大的排序,排序的key值就是元素出现的次数。3接着取出来 阅读全文
posted @ 2013-10-03 21:59 Matrix_R 阅读(7774) 评论(2) 推荐(0) 编辑
摘要: 题目意思大概是这样的:给定两个大数组(1w以上1亿以下),用最有效的方法找出来两个数组的交集。对于这道题,我有一个思路就是,先对数组进行排序,然后用两个指针在已排序的数组上轮流指向头结点,进行比较。比较亮的地方,就是在于这个比较的方式了。首先,比较的时候,要先确定两个指针指向的内用是否一致。如果一致,那么这个点,就是交集的一个元素,没问题吧?这里有一个问题就是,接下来如何比较?步骤是这样的:先比较两个指针指向内容的大小,指向结果小的指针,开始递增,直到较小的指针指向的值大于或等于另一个指针。而接下来另一个指针也采用同样的方法,此时这个较大的指针已经变成了较小的指针,递增,直到比大于或等于另一个 阅读全文
posted @ 2013-09-22 09:10 Matrix_R 阅读(10966) 评论(19) 推荐(0) 编辑
摘要: 题目是这样的:50个灯,有50个按钮,编号为1,2,3……50.刚开始灯全部是熄的,现在依次按按钮,每次按到按钮i,i的倍数编号的灯就变一下状态,问到最后开了几盏灯。这里考的问题其实就是一个数字的正约数的个数是奇数还是偶数的问题。这个题我在某数学网站中找到的,感谢百度~然后,我还发现了,这个题是小学六年级的数学题……尼玛啊!!!其实对于我这样的准程序员来说,遇到这种问题,上来的第一个想法就是,写个小程序,跑一下就知道了~但是在你笔试的时候,是没有台笔记本放在你面前的。回来谈这个问题,如何判断一个数字的正约数个数呢?说破了很简单。一个普通的数字,做一个可以整除的除法,通常是这样的一个式子:a = 阅读全文
posted @ 2013-09-13 21:08 Matrix_R 阅读(916) 评论(2) 推荐(1) 编辑
摘要: 刚才在百度文库上找到了个关于图的拓扑排序很好的方法。这个只有两句话。我在学数据结构的时候是学过图论的,但是,貌似里面只是说了关于深度优先遍历和广度优先遍历。这个拓扑排序貌似真的是没讲。简单两句话,说明如何进行拓扑排序:1 在有向图中,找到一个没有前驱的顶点。2 取出这个顶点,并删除图中该点以及所有以他为尾的弧。重复上面的步骤,直到图空,就完成了拓扑排序。今天记下来,以后会用到~~~ 阅读全文
posted @ 2013-09-13 14:21 Matrix_R 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 因为最近要开始笔试和面试了,我觉得,很有必要做好准备~这个问题是我在网上看到的,13年一家公司的笔试题,求子数组的最大和。这个题我之前在微软的编程之美看到过,不过当时记得并不是很深刻。现在既然看到了,我就好好的想了想。考试题如下:上面只给了两行代码的空间,也就是说,只需要两行的代码即可。对于这个问题,有种很简单,但是效率最低的方法,就是枚举出全部的子数组,并且求和,比较出最大值。我当初写的代码就是这个版本的,现在应该在实验室的电脑里。但是,在《编程之美》中,对于这个问题提供了三种解法,而且其中的第三种是效率最高的。时间复杂度O(n),空间复杂度为O(1)。其实可以考虑一种比较极端的情况,就是, 阅读全文
posted @ 2013-09-13 13:59 Matrix_R 阅读(2355) 评论(1) 推荐(0) 编辑