摘要:
2013年注定是多事的一年,既然它马上就要结束了,就再做个回忆和总结吧。 2013年是告别校园生活的一年,角色扮演由“学生” 变成了 “社会人”。以前的我也许还会给自己太多的借口,因为自己还是个学生,还可以再耍点无赖,再“倚老卖老”一点。可从6月份以后,这种感觉也就散去了。从2013年过完春节后,面临着毕业的压力,似乎直到毕业答辩的前一天也没轻松过一个小时。3月份到5月份那近乎两个月的时间几乎每天睡眠时间都不正常,平均下来也只有5个小时或者更少吧。不过虽然精神疲惫,但总还是有收获的,跟实验室的兄弟有过这样的共同的 “夜生活” 经历也是一件值得回忆的事情,当然之间的友谊也增进了不少,因为这... 阅读全文
摘要:
离开校园已有5个月了,在学校的时候想工作,工作的时候羡慕校园生活。这似乎是永远不会变的节奏。最近卢哥说他博客要关了,忽然间想起原来我曾经也有一个窝。于是昨天晚上三分钟热度地对自己说“不管自己的水平高与低,我一定要继续写下去”。是啊,能有一个记录自己成长的地方,不挺好的吗?(最近关注的自媒体人都说写文章能锻炼人的逻辑和思维能力,有待考证。)发现身体越来越不如以前了,每天下班的时候会感觉很累,左脑位置会疼,在网上查了下大概是神经性血管疼痛,是由于精神紧张、疲劳过度引起的。这多半是上半年在写毕业论文时熬夜熬的吧。想想3月~5月的那一个多月的日子,几乎每天5个小时(甚至不到)的睡觉时间,也不知道是怎么 阅读全文
摘要:
还有几日,所谓的玛雅世界末日之年2012年就要结束了,而世界末日却依旧迟迟未来。2012年对我们这些面临毕业的学子来说是重要的一年,因为大多数人认为读书上学的最重要的任务就是找一份工作,而找工作这件事情就要在这年的10月-11月之间完成。我也暂且就这么认为着吧。接下来我要对这一年的生活,学习,所得,所失进行一下回顾和总结。难免会有一些记流水帐的痕迹。 刚过完年,背着书包怀揣着对2012年美好的期盼坐上了来重庆的火车。来到学校,场景依旧,唯一变化的就是自己的内心节奏。入实验室的第一天我就买了程序员圈子里公认的内功修炼读物《深入理解计算机系统》 英文名叫《Computer Systems: ... 阅读全文
摘要:
在常见的IO函数中有这样的一些系列,open, read, write, lseek及close。这些IO函数经常被称为不带缓冲的I/O(unbuffered I/O),不带缓冲的是什么意思呢?术语不带缓冲指的是每个read和write都调用了内核的一个系统调用。这些函数在调用的时候系统调用直接进行了磁盘文件的写入操作。那么你会发现如果我的程序出现这样的需求,有很多个连续的对同一个文件进行I/O的操作,你的程序将会不断地进行磁盘操作,这将会是一件很可怕的事情,程序运行的会异常的慢,怎么解决呢?很简单,缓冲呗,我想缓冲这个名词在计算机的世界里你不陌生吧? 所谓的缓冲是指在你对文件进行读取或... 阅读全文
摘要:
无名管道管道是Linux支持的最早的Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统;管道对于管道两端的进程而言,就是一个文件,但不是一个普通的文件,它不属于某种文件系统,而死自立门户,单独构成一种文件系统,存在于内存之中; 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。#include <unistd.h>#include < 阅读全文
摘要:
问题描述:程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内的m个随机整数,要求:每个数选择出现的概率相等,且按序输出。该题目是从《编程珠玑》的第12章看到的。 学习过概率统计的同学应该都知道每一个数字被抽取的概率都应该为m/n. 那么我们怎么构造出这样的概率呢?在《编程珠玑》上面是这样解析的: 依次考虑整数0,1,2,.....,n-1,并通过一个适当的随机测试对每个整数进行选择。通过按序访问整数,我们可以保证输出结果是有序的。 假如我们考虑m = 2,n = 5的情况,那么选择的每一个数字的概率都应该是2/5,我们怎么样才能做到呢?不慌张,慢慢来。 下面给出我的分析过程 阅读全文
摘要:
跟定一个集合,让你求出它的所有可能的排列组合。这个问题是常见的组合问题,排列的总数目很简单:N!个。但是你能够利用算法将所有可能的排列全部求解出来吗?或者变一下,你能够求解出第x个排列吗?(注:你所有的排列是有序的,暗指是数字序列)。在组合数学教科书上有很多求这样问题的方法,我简单介绍一下其中的两种。第一种:假如给定的集合是ABC,那么我们可以先想一下最终的结果形式可以认为是所有以A开头,以B开头和以C开头的三种。那么继续下去以A开头的,后面还有BC,接下来的第二个字符是什么呢?同样道理,分为两种,以B开头的和以C开头的。那么结果就是ABC,ACB以B开头的,后面还有AC,接下来分为两种,分别 阅读全文
摘要:
写一个程序求某一给定范围的素数(质数),我想这个问题对于大部分人来说都是很easy的事情。似乎在刚开始学程序设计的时候,谭浩强老师的那本C语言课本里就有相应的解法。以前的我只知道怎么去求解这个问题,但对于这个方法的来源不是很清楚。今天忽然间从一个题目(接下来要讲的亲和数问题)里得到了这个方法的名称,原来这是有名的埃拉托斯特尼筛法。 先对着维基百科讲解一下这个方法求解素数的基本原理:给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。步 阅读全文
摘要:
函数调用另一个词语表示叫作 过程。一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在推出时释放这些空间。而数据传递,局部变量的分配和释放通过操纵程序栈来实现。在了解本文章之前,您需要先对程序的进程空间有所了解,即对进程如何使用内存?如果你知道这些,下面的内容将是很easy的事情了。为了您的回顾还是将简单的分布图贴出来,便于您的回顾。我们先来了解一个概念,栈帧(stack frame),机器用栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及本地存储。为单个过程(函数调用)分配的那部分栈称为栈帧。栈帧其实是两个指针寄存器,寄存 阅读全文
摘要:
第一次见到bitmap这个数据结构是在《编程珠玑》这本书中,当时第一感觉这个数据结构真的好强大,能够这么巧妙的处理海量数据的处理。接下来我们来简单学习一下这个强大的工具。bitmap是查找算法中常用到的一种算法,通过该数据结构,我们能够很快的判断某一个元素是否在某一个集合中。(当然我们需要提前把该集合利用bitmap算法把集合存储起来)。bitmap的思路其实和hash,索引排序的思路是相似的。我们无非都是在寻找一种如何快速得到存储元素的下标(存储地址)的方法而已。而hash的做法是将每一个元素通过一个函数映射到一个下标索引(建立元素和地址的映射关系),而bitmap的做法是花费最小的存储单元 阅读全文