转自:http://blog.csdn.net/hackbuteer1/article/details/7722667 在 各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先从字节序说起。 一、什么是字节序字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开 发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。 在所有的介绍字节序的文章中都会提到字 节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Littl 继续阅读 >>


张瑞 13/12/01 16:15:55
        最近看起了《linux C编程实战》文件操作的部分,看到fcntl函数才发现,之前看过的很多东西不是忘了就是没有理解,所以结合着Stevens大叔的《UNIX环境高级编程》有了更多的了解。 fcntl函数原型: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 函数功能:         fcntl函数可以用来对已打开的文件爱你描述符进行各种控制操作来改变打开文件的各种属性。fcntl 不仅可以施加建议性锁,还可以施加强制锁。同时,还能对文件的某一记录进行上锁,也就是记录锁。 fcntl的功能根据cmd值的不同而不同。 以下是函数的5种功能:  1. 复制一个现有的描述符(cmd=F_DUPFD).  继续阅读 >>


张瑞 13/11/30 09:51:19
  一直闹不清楚关于I/O模型中同步与异步,阻塞与非阻塞的问题,通过实验室的大牛们讲解多次还是处于混淆状态,今天在知乎上看到了这个问题比较形象的解释,于是把最近的理解和看到的微微总结一下,当然也可能有些不对的地方。      首先通过中文语义来看待这个问题,很多时候确实会混淆,并且在不同的语境中也有不同的意义。因此从I/O模型的角度来讨论,阻塞非阻塞跟同步异步是不同的概念。阻塞非阻塞:   可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。 同步异步:   你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步;异步呢则反之,你可以同时做几件事,并非一定需要一件事做完再做另一件事。同步简单理解成一问一答同步进行,异步可以简单理解为不必等一个问题有答了再去问另一个问题,尽管问,有答了再通知你。      也就是说,同步和异步仅仅是关于所关注的消息如何通知的机制。同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下 继续阅读 >>


张瑞 13/11/26 15:29:20
(来自:http://blog.csdn.net/lsldd/article/details/16104747 ) 最近和朋友讨论一个逻辑问题,据说也是个以前出现过的面试题了。拿出来和大家分享。 问题如下: 你来到两道门口,一道是天堂之门, 一道是地狱之门 。 门口都有一个守卫,只知道守卫一个只说假话,一个只说真话。 现在你只有一次提问机会,只向一个守卫问一个问题,这个守卫对你的问题,只给出“是”或者”不是“的答案。(对于无法给出是非的问题,守卫会直接把你砍死。。。) 请问怎么问才能准确进入天堂之门? 我们将守卫守门的所有情况列成如下的一个矩阵: 守卫分两种情况,第一行代表天堂守卫是诚实的情况,第二行分为天堂守卫为说谎话的情况。 而每种情况你都有2个可能,要么问到真话守卫,要么问到假话守卫。因此问题的解空间是一个2*2的矩阵。 这个问题难在,不管你问“你是说真话的吗?”还是问“你守卫的门是天堂的吗?”,都无法得到满意信息。 如下图,如果你问“你守卫的门是天堂的吗?”,所有的 继续阅读 >>


张瑞 13/11/24 20:33:42
(写于November 18th, 2013)    因为比赛要求使用16位汇编写一个游戏,开始设想如果可以显示图片的话会更加好。    寻找了各种办法终于实现了显示256色的位图,但是防止数据段超过64k最终还是没有使用。还是写下来留作纪念吧。        首先我们需要了解清楚bmp文件的结构,下面是关于bmp(位图)结构体的介绍: 1. BMP文件组成 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 2. BMP文件头(14字节) BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORD bfType; // 位图文件的类型,必须为BM(1-2字节) DWORD bfSize; // 位图文件的大小,以字节为单位(3-6字节) WORD bfReserved1; // 位图文件保留字,必须为0(7-8字节) 继续阅读 >>


张瑞 13/11/24 20:31:10
(写于November 14th, 2013)    今天根据老师的介绍试着使用mmap函数来实现拷贝文件,确实速度比read和write实现的要快很多。 首先介绍一下mmap函数:    mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。 该函数主要用途有三个:    1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;    2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;    3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。   (注:以下函数详细解释主要来自百度百科) 函数: #include <sys/mman.h> void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t 继续阅读 >>


张瑞 13/11/24 20:27:14
第一章:Java基础篇 1、谈谈你对java的认识     这个问题很大,很抽象,要回答好确实不容易。宏观上面来说,从C语言面向过程到C++面向对象到java语言纯面向对象这一发展过程都是为了提高公用性、重用性、可读性,降低耦合性。java程序是对象的集合,是一系列带有方法的对象组合,这些方法以其他对象为参数,并发送消息给其他对象。这样由于java中的对象是由状态、行为和标识组成。状态可以认为是对象存在的具体值;行为可认为是对象所能做的操作;而标识是对象在内存中的唯一地址。通常在程序中只能看到对象的前两个属性。在java中所有的代码都必须写在class里,而每个对象都是某个类(class)的一个实例(instance),也就是说java中的所有操作都是由对象完成的。   java有许多优良的特性,使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使 继续阅读 >>


张瑞 13/11/24 20:22:48
(写于August 4th, 2013) ubuntu最让我烦扰的就是关机后并不保存当前屏幕亮度配置数据,每次开机都要重新设置亮度,很不方便。并且过亮的屏幕不但刺眼而且缩短LCD屏幕寿命。        通过在网上查找,试了很多中种方法后,终于成功了,如果大家遇到同样的问题仍未解决,可以试一下~        1.首先安装laptop-mode-tools:            sudo apt-get install laptop-mode-tools          2.更改/etc/laptop-mode/laptop-mode.conf 文件:            sudo gedit /etc/laptop-mode/laptop-mode.conf             令ENABLE_LAPTOP_MODE_ON_AC=1         3.更改/etc/laptop-mode/conf.d/lcd-brightness.conf 文件:           继续阅读 >>


张瑞 13/11/24 20:15:39
(写于August 2nd, 2013)        很久没有看c++了,突然想起之前写的(上)简单的介绍了c++中最常用的顺序容器:vector类型,一直没有写(下),现在我决定对(上)的内容进行扩充与完善。        之前介绍过标准库vector类型,是一种顺序容器。它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这写元素。顺序容器的元素排列次序与元素值无关,而是有元素添加到容器里的次序决定。   容器元素的初始化 1.分配制定数目的元素,并对这写元素进行值初始化: vector<int> ivec(10); //ivec包含10个0值元素 接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这初始化。 2.分配制定数目的元素,并将这些元素初始化为定值: vector<int> ivec(10,1);//ivec包含10个值为1个元素 3.将vector对象初始化为一段元素的副本: int ia[10]={0,1,2,3,4 继续阅读 >>


张瑞 13/11/24 20:11:54
(写于July 31st, 2013)    上次转了萍姐的快排,这次自己又研究了一番,有了更多的理解。    快速排序(quicksort)是由C.A.R Hoarse提出的一种排序算法,其实它是冒泡排序的一种改进算法。由于快速排序算法元素之间的比较次数较少,速度较快,因此得名快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。    快排基本思想:在当前的排序序列中任意选择一个元素,把该元素作为基准元素,把小于此基准元素的所有元素都移到基准元素之前,把大于基准元素的所有元素都移到基准元素之后。这样使得基准元素所处的元素恰好就是排序的最终位置,并且把当前参加排序的序列划分为前后两个子序列。接下来分别对这两个子序列重复上述操作(如果子序列大于1),直到使得所有元素都被移动到排序后他们应处的最终的位置上。 例如:    假设原序列为:{5, 7, 4, 2, 11, 10, 6}    令基准元素为5,设i=1(指向首位元素) 继续阅读 >>


张瑞 13/11/24 20:07:49