2010年是自己参加工作的第一年,经历了半年的实习,半年的正式工作,7月份从学校毕业,正式踏入社会。思考这一年,有收获,有不足。但感觉不足大于收获,这可能也是我内在的性格上的缺陷造成的,这一年我干的并不是特别开心。我要慢慢的克服自己这些内心性格上的缺陷,但并不一定是改变自己的性格。
2010年大学毕业,与自己相处了4年的同学分分离,从此天南海北,不知道以后还是否有缘再见一面。
2010年就这么过去了,我还清晰的记得2010年1月1日我坐在13线地铁上,望着“2010年1月1日已消毒”字样,感慨自己为什么会在这里,在这里干什么。那时,还住在霍营,上下班都需要乘坐一个多小时的地铁,人多如麻,就常常想人干嘛要这样折磨自己。现在回想起那段时间,每天要在地铁上吃早饭,感觉很累。一年的时间不经意间就过去了,真的这一年真是过的太快了。
2011年希望自己能够完成的事情:
1、多读书,每周读一本书,写总结;自己不太可能著作等身,但希望自己能读等身的书。
2、最为一个程序员,希望在这一年自己能够做一款能让自己有点小小自豪的软件产品。
3、我本性内向,希望自己在新的一年认识一些新朋友。多和老朋友新朋友沟通。多输入多输出。
4、父母希望我回家工作,自己能考察一下,能做点什么。
5、存钱:自费进行一次年度旅行,一次年度培训。
2011年新的一年,新的开始!
2010年12月31日星期五
2010年12月19日星期日
平凡的世界
昨天将这本1251页的巨著读完了,感慨颇多。所有人对于这个世界来说都是很平凡的,最后的最后都是死亡。但是对于每个人来说,在自己内心的深处都可以有自己的一个不平凡的生活的方法。用自己的天枰衡量自己,衡量这个世界。不卑不亢。
2010年12月17日星期五
删掉不再使用的USB网卡设备
曾经使用USB网卡,后来直接使用了一块PCI网卡,给网卡设IP的时候,IP老被旧的USB网卡占用,就想着删除它。
步骤如下:
进入cmd命令行
set devmgr_show_nonpresent_devices=1
start devmgmt.msc(设备管理器)
点击设备管理器的查看->显示隐藏的设备,这样我们USB网卡内容会显示出来,有时我们直接删除是删不掉的,这是我们要把相关的浅色的设备删掉,再来删除这些设备就可以了。
步骤如下:
进入cmd命令行
set devmgr_show_nonpresent_devices=1
start devmgmt.msc(设备管理器)
点击设备管理器的查看->显示隐藏的设备,这样我们USB网卡内容会显示出来,有时我们直接删除是删不掉的,这是我们要把相关的浅色的设备删掉,再来删除这些设备就可以了。
2010年12月7日星期二
log4c库使用和配置文件的写法
1、log4c_category_get函数
get特征,可从xml中获得多个category,如:
(1)搜six13log.log.app.application1会包含xml中有的six13log.log.app.application1、six13log.log.app、six13log.log等category,以.为分隔符号,向上包含。
(2)搜six13log.log.app,并不会包含six13log.log.app.application1,也就是不向下包含。
2、log4c有自己的文件输出方式,可指定目录、文件个数、文件大小、文件名前缀、输出方式等。如果大小完了,log4c会删除全部,然后重新开始写。
3、用户可以写自己的append和format。官网的程序包中有两个例子,这样我们可以将日志输出到syslog和socket中。
4、const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); 来定义日志中的函数名、行数信息。
log4c配置文件:
get特征,可从xml中获得多个category,如:
(1)搜six13log.log.app.application1会包含xml中有的six13log.log.app.application1、six13log.log.app、six13log.log等category,以.为分隔符号,向上包含。
(2)搜six13log.log.app,并不会包含six13log.log.app.application1,也就是不向下包含。
2、log4c有自己的文件输出方式,可指定目录、文件个数、文件大小、文件名前缀、输出方式等。如果大小完了,log4c会删除全部,然后重新开始写。
3、用户可以写自己的append和format。官网的程序包中有两个例子,这样我们可以将日志输出到syslog和socket中。
4、const log4c_location_info_t locinfo = LOG4C_LOCATION_INFO_INITIALIZER(NULL); 来定义日志中的函数名、行数信息。
log4c配置文件:
2010年12月6日星期一
linux动态链接库使用方法
linux环境下动态库的默认搜索路径是/lib和/usr/lib。动态库创建后一般被放到这两个目录中,当然也可以放到我们自己建立的目录中,这时我们就需要做一些其它操作,有三种方法可实现:
1、修改/etc/ld.so.conf文件,将你自己放动态库的路径加入这个文件,运行命令ldconfig然系统从新读取配置。
2、修改LD_LIBRARY_PATH环境变量,将你自己放动态库的路径加入这个环境变量。
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/root/test/env/lib
3、编译程序时指定程序动态库搜索路径,gcc -Wl,-rpath,./
linux系统动态库搜索顺序:编译指定路径-->LD_LIBRARY_PATH路径-->/etc/ld.so.conf路径-->/lib目录-->/usr/lib目录
1、修改/etc/ld.so.conf文件,将你自己放动态库的路径加入这个文件,运行命令ldconfig然系统从新读取配置。
2、修改LD_LIBRARY_PATH环境变量,将你自己放动态库的路径加入这个环境变量。
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/root/test/env/lib
3、编译程序时指定程序动态库搜索路径,gcc -Wl,-rpath,./
linux系统动态库搜索顺序:编译指定路径-->LD_LIBRARY_PATH路径-->/etc/ld.so.conf路径-->/lib目录-->/usr/lib目录
2010年11月26日星期五
工作-离职
今天又有一个同事离职了,今天离职的是在联想网御呆了十年的一位老员工,我一直以为她会一直在这家公司干下去,毕竟已经十年了。在这个年轻的公司,工作三年的员工已经算是老员工了。最近我们网络安全部已经接连有三位同事离职了,有高级研发、有产品主管、有经理。
或许人走人留是一个很正常的事情。
OVER!
2010年11月25日星期四
平凡的世界
这几天开始读《平凡的世界》,中午、下午吃晚饭后都会读一小会,又往MP3中拷了一部有声的读物,第一次觉得小说这么有吸引力,起码对我本人来说。这样双管齐下,读的很快,平均一天能够读四个章节。书中孙少平、孙少安的未来一直让我牵挂着,少安和润叶的感情的结局我也很期待。中午去买饭的时候,听一个上学时代读过很多书的人说,最终少安自卑没有娶润叶,少平最后做了一个煤矿工人,去挖煤,还破了相。我很惊讶,怎么会这样,少平不是去读高中了吗,不是读书也不错啊。当时还安慰自己说,毕竟是小说,悲情的结局才会更吸引人。后来想了想,觉得这是一个很合理的结局,放到今天也一样,也是一样。今天那些那么多的XX二代什么的,不用费多大力气就可以过上优越的生活,而那些老百姓的子女们,需要多大的努力,奋斗多久才能出头呢。《平凡的世界》告诉我们,无论什么时候,为官,仕途总是一个好的选择。
但是不论怎样,就像晚饭的时候同事调侃的那样,你丫的已经在这了,你还能怎么办呢!
上学的时候,看同学在读小说的时候,总觉得很浪费时间。现在我不这么认为了,甚至有点后悔自己在读书的时候,在有大量时间的时候,没有好好的读几本书,读几本小说。现在自己有好多的书想读,恨不得一下子全部都给读了。当前我要把《平凡的世界》读完了,我想知道事情的结局,我想知道路遥想通过本书传递给我们什么。
但是不论怎样,就像晚饭的时候同事调侃的那样,你丫的已经在这了,你还能怎么办呢!
上学的时候,看同学在读小说的时候,总觉得很浪费时间。现在我不这么认为了,甚至有点后悔自己在读书的时候,在有大量时间的时候,没有好好的读几本书,读几本小说。现在自己有好多的书想读,恨不得一下子全部都给读了。当前我要把《平凡的世界》读完了,我想知道事情的结局,我想知道路遥想通过本书传递给我们什么。
2010年11月15日星期一
Quoted-printable邮件编码及编码实现
Quoted-printable是众多邮件编码协议中的一种,与BASE64作用相同。为了表示传统的NVT ASCII不能表示的字符(128-254)。对于大多可读的ASCII不进行编码,所以QP编码有很多的部分是可读的。
编码规则如下:
编码规则如下:
- ASCII中,[33,126]之间除了'=',在QP中都可以直接显示无需编码。0-32 + '=' + 127-254这些字符是需要进行QP编码的。
- 编码方法:如空格在ASCII中用0x20十六进制表示,QP编码将其十六进制用字符表示,在其前加'='号,为=20。QP编码中,'='符号后必须为大写。
- 普通文本中有'\r\n'换行符号,在QP中,编码为=0D=0A,但不换行。
- QP编码每行的长度限制为最多76个字符,到达后需要添加QP中的软换行(=\r\n),直接将软换行加入QP编码中,其中'='算在76字符内,而'\r\n'不算。
- QP编码的所有行不能以空格或TAB结尾,必须为软换行(=\r\n)或可打印的字符。
- 代码中最好加入异常处理:QP编码不为大写,结尾为空格等。
2010年11月14日星期日
2010年11月14日
自己的域名(www.chinazst.cn)因为没有进行备案(提交身份证复印件)被国家停止解析了,加上之前的虚拟主机的速度也不是特别的理想,所以我也不太想在原来的博客上写了,打算选择一个免费的博客提供商来写博客,比较多个之后,选择了google提供的博客服务。把原来博客中自己觉得价值比较大的几篇文章留了下来,其它的全部都给删除了。一个新的开始。
最近一些时间感觉时间过的特别的快,一不留意一周就过去了,感觉自己没有干多少的活。可能是自己没有做太多让自己印象深刻的事情的缘故的吧,每天重复同样的事情,没有学习新的东西和知识,就会觉得时间过得很快。
这个月CPI涨了了4.4%,生活中也明显体验到了物价的上涨。整个国家都在讨论货币通胀、人民币升值、热钱涌入等问题。学一些经济知识还是很有必要的。可以帮助自己达到财务自由。
最近一直在看书,给自己规定每天读30页书,不同的三本书,总是不能读完。或许对自己的要求还是太高了,三本书都是那种需要花很大力气读的精度的书,或许应该混合搭配一下。
前天是自己的23岁生日,没有请同学吃饭,没有吃蛋糕,简简单单的吃了一碗面。接下来就是自己23岁的人生路了,真快。等到我32岁时,我又会是什么样的境遇呢!真期待。
就是这样,生活、经济、心情都需要自己来调节,不要把换心情带给身边的人。
2010年11月12日星期五
中秋三天
这次的中秋过的挺充实的。第一天逛街、看电影、买了十一回家的票。早上在西直门嘉茂购物中心和西单商城逛了会,平时没有怎么注意,一出去逛街、购物就会感觉到现在的物价水平,太高了。在西直门北京北站买了回家的火车票。下午在在UME华星店看了《盗梦空间》。情节很紧凑,构思很好玩,人的多重梦境。
第二天和女友公司的几个驴友去爬京区最高的山,北京灵山,在北京和河北张家口交接的地方,海拔2303米。我们全部人是从后山的小路上山,道路很险,不过成正比的是风景很美。我们越过2座山头最后才到达灵山主峰。我们还在越过的第一座山峰山野餐,煮面,很不错。第二座山的山顶上有一片很美的白桦林。山上的空气特别的好,成功的换气洗肺。爬山加上午休吃饭总共花了6个小时。爬山来回的车程需要4个小时,在车上几个人聊了很多,大家都算是底层的小白领,都感觉生活很艰难。在北京生活,买不起房子,生不起孩子,最后死的时候墓地都买不起,呵呵。不过生活还得继续,国家解决不了的事情,只能独善其身,自己搞定。
POP3中文翻译译文-RFC1939
网上找不到完整的中文版,于是就自己把RFC文档翻译了一遍,有错误欢迎指正,转载请注明出处!下面正文。
Post Office Protocol - Version 3
1、 简介
对于互联网上较小的节点,维护一个信息传送系统(MTS)是不大现实的。例如,一个工作站没有足够的资源(时间,磁盘空间)使一个SMTP服务器[RFC821]和关联的本地邮件投递系统驻留和连续运行。类似地,把一台个人电脑长时间连接在IP网络上是昂贵的说着不现实的(资源受限的节点称为”连通性”)。
尽管如此,在小节点上收发邮件是非常有用的,所以经常架设一个用户代理(UA)来帮助处理邮件任务。为了解决这个问题,我们在MTS实体上为资源受限的节点提供了邮筒功能。邮局协议-版本3(POP3)允许工作站以一种比较实用的方式来访问服务器邮筒。通常,这意味着POP3协议支持工作站去服务器检索服务器上为本工作站存储的邮件。
POP3未打算提供大量服务器上的邮件操作;一般,邮件被下载后即被删除。一个更为先进和复杂的协议,IMAP4,正在设计中[RFC1730]。
在下文中,客户主机指使用POP3服务的主机,服务器主机指提供POP3服务的主机。
Linux启动过程之inittab脚本流程分析
系统从我们按下计算机的电源键到机器可以使用,执行流程如下:
power on–>BIOS–>Grub–>Kernerl boot–>init(rc.sysinit, rc)–>mingetty(login)–>Shell—->
Init进程进程号为1,是linux内核引导完之后运行的第一个进程,init进程运行初会去读取配置文件/etc/inittab。Inittab是一个不可执行的文本文件,由若干指令组成。这里总结一下init进程开始的系统脚本执行顺序,以及各个脚本的含义。
脚本/etc/inittab中所有的记录都以以下的格式呈现:
id:runlevel:action:process
id:runlevel:action:process
id是入口标示符号,为一个字符串,对于getty或mingetty等login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
runlevel是级别标志,init进程启动时会有一个运行级别,/etc/inittab脚本中和init运行级别匹配的记录会被执行。
Action表述后面的process的运行方式。action的取值包括initdefault、sysinit、boot 、bootwait。
Initdefalut是一个特殊的action值,用于标示缺省的启动级别。当init进程启动后会去读取initdefault的值,如果没有此值,则会在控制台请求用户输入runlevel值。
Process为具体的执行程序,程序可以带参数。
runlevel是级别标志,init进程启动时会有一个运行级别,/etc/inittab脚本中和init运行级别匹配的记录会被执行。
Action表述后面的process的运行方式。action的取值包括initdefault、sysinit、boot 、bootwait。
Initdefalut是一个特殊的action值,用于标示缺省的启动级别。当init进程启动后会去读取initdefault的值,如果没有此值,则会在控制台请求用户输入runlevel值。
Process为具体的执行程序,程序可以带参数。
脚本中记录的含义:
id:5:initdefault:
用于指定当前的runlevel,5标示运行于界面模式。
id:5:initdefault:
用于指定当前的runlevel,5标示运行于界面模式。
si::sysinit:/etc/rc.d/rc.sysinit
此脚本主要用于完成系统初始化工作,它是每一个级别都要首先运行的重要脚本。rc.sysinit程序执行完后,将返回init继续执行。
此脚本主要用于完成系统初始化工作,它是每一个级别都要首先运行的重要脚本。rc.sysinit程序执行完后,将返回init继续执行。
l2:2:wait:/etc/rc.d/rc2
各守护进程的启动,rc2为一个shell脚本,在rc2中回去循环执行/etc/rc.d/rc2.d目录下的所有脚本,这些脚本一般都是符号链接,链接到别的位置文件,这些脚本一般都会接受start、stop、restart、status等参数。
各守护进程的启动,rc2为一个shell脚本,在rc2中回去循环执行/etc/rc.d/rc2.d目录下的所有脚本,这些脚本一般都是符号链接,链接到别的位置文件,这些脚本一般都会接受start、stop、restart、status等参数。
1:2345:respawn:/sbin/getty 38400 tty1
用于启动终端
用于启动终端
linux系统下栈大小的计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <stdio.h> static int i = 0; static int c = 0; int r1 = 0, r2 = 0; static void func_stack() { int ret; /* 输出函数的%ebp的地址 */ if (c < 2) { asm("movl %%ebp, %%eax; movl %%eax, %0;" :"=r" (ret) : :"%eax"); if (c == 0) { r1 = ret; } else if (c == 1) { r2 = ret; } c++; } while (1) { printf("i=%d stack:%d all:%ld\n", i, r1 - r2, (long )(r1-r2)*i); i++; func_stack(); } } int main(void) { func_stack(); return 0; } |
代码计算出的数字和ulimit -a得出的结果相同。8M
素数的求解
大一刚开始学习程序设计的时候,自己就遇到过素数求解的问题,今天又遇到在这里总结一下。
素数又称质数,为大于1的自然数中,除了1和整数自身外,没法被其他自然数整除的数。
因为素数没有特定的规律,最简单的方法就是使用穷举法了,我们判断一个数字是否为素数,就一个个的判断他是否能被其他的数整除,如下:
素数又称质数,为大于1的自然数中,除了1和整数自身外,没法被其他自然数整除的数。
因为素数没有特定的规律,最简单的方法就是使用穷举法了,我们判断一个数字是否为素数,就一个个的判断他是否能被其他的数整除,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> /* 判断一个正整数是否素数 */ static int prime_number(const int n) { int i; if (n == 2) return 0; for (i = 2; i < n; i++) { if (n % i == 0) { return -1; } } return 0; } int main(void) { int i; for (i =2; i < 100; i++) { if (prime_number(i) == 0) { printf("%3d ", i); } } return 0; } |
这里我们稍微深入思考一下,我就就很容易想到如下的信息:
1 偶数是不可能是素数的
2 判断奇数是否为素数是不需要那偶数去除它的
3 素数循环不必循环到n,到根号n就可(理论上为什么不清楚)
按以上的方法修改下程序,效率会提高很多,程序如下。
1 偶数是不可能是素数的
2 判断奇数是否为素数是不需要那偶数去除它的
3 素数循环不必循环到n,到根号n就可(理论上为什么不清楚)
按以上的方法修改下程序,效率会提高很多,程序如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> /* 判断一个正整数是否素数 */ static int prime_number(const int n) { int i; if (n == 2) return 0; for (i = 3; i*i < n; i += 2) { if (n % i == 0) { return -1; } } return 0; } int main(void) { int i; printf("%3d ", 2); for (i = 3; i < 100; i += 2) { if (prime_number(i) == 0) { printf("%3d ", i); } } return 0; } |
两个练习题
冒泡排序和二分查找的练习。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <stdio.h> #include <assert.h> #include <stdlib.h> /* srand rand */ #include <time.h> #include <unistd.h> static int binary(int arr[], const int size, const int n) { int high, low, mid; assert(arr != NULL); assert(size > 0); high = size - 1; low = 0; while (low <= high) { mid = (high + low) / 2; if (arr[mid] == n) { return mid; } else if (arr[mid] > n) { high = mid - 1; } else if (arr[mid] < n) { low = mid + 1; } } return -1; } static void maopao(int arr[], const int n) { int i, j, temp; assert(arr != NULL); assert(n > 0); for (i = 0; i < n; i++) { for (j = n - 1; j > i; j--) { if (arr[j] < arr[j-1]) { temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } } static void print(const int arr[], const int n) { int i; for (i = 0; i < n; i++) { printf("%d,", arr[i]); } printf("\n"); } int main(void) { int arr[20]; int i; int b_ret, len; srand(time(NULL)); for (i = 0; i < 20; i++) { arr[i] = rand() % 100; } len = sizeof(arr)/sizeof(int); print(arr, len); maopao(arr, len); print(arr, len); b_ret = binary(arr, len, 47); if (b_ret != -1) { printf("47 is in %d\n", b_ret); } else { printf("don not exist!\n"); } return 0; } |
订阅:
博文 (Atom)