摘要: 原文作者Alucard,来源于白云黄鹤BBS,白云黄鹤BBS->校园公益->Job_Discuss版->《2012武汉IT求职指南》最后一个忠告很给力,放到前面供大家参考一个优秀的程序员,一定要去做产品的公司,不要去做项目的公司。前者能够让你充分的展现才华,公司希望你能设计出更好的软件,这样一个软件能卖得更多;后者会压抑和劳累,公司规定你必须按照客户的要求去做,因为一个软件只在一处使用。本人计算机小硕,2011年华科计算机毕业,通过各种实习校招关系等等,拿了很多offer,了解到了武汉大部分比较好的IT公司信息,在这里给大家分享下。以下待遇都是说的“软件研发”岗位,因为我主要 阅读全文
posted @ 2013-01-06 19:34 zaleilynn 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先 阅读全文
posted @ 2013-01-06 14:08 zaleilynn 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://zhoulifa.bokee.com/3700951.html作为一个Linux系统下的C程序员,你可能发现调试程序是个比较麻烦的工作,虽然已经有gdb,kgdb等专业的调试软件,但如果对这些软件运用不熟练是根本达不到调试程序找出bug的目的的。又或者你对gdb已经很熟了,但运行gdb开始调试后在哪里设置断点成了你头痛的问题?当然,你可以从程序开始就以单步运行step by step来调试程序,但这会耗去你很多时间。如果你能很好地跟踪并记录程序的运行情况,那么一切将变得简单。下面我以一个实例说明我是如何操作的:首先我有一个程序主体main,其代码如下:////////// 阅读全文
posted @ 2013-01-06 13:55 zaleilynn 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 转载自http://www.searchtb.com/2012/09/tls.html现在使用多线程开发越来越普遍, 为了提高性能,性能局部变量使用也非常普遍.如线程私有的成员变量,buffer等.本文首先介绍线程局部变量的2 种使用方法:1). 常规的使用方式: 相对复杂2). __thread 修饰符: 使用简单,但容易不正确使用最后介绍封装的线程局变量操作接口,来解决上述两种使用方法的不足.该方法主要参考了 ACL 库关于这块的实现.1 常规的使用方式123456789#include <pthread.h>int pthread_once(pthread_once_t *o 阅读全文
posted @ 2013-01-06 13:41 zaleilynn 阅读(1221) 评论(1) 推荐(0) 编辑
摘要: EAGAIN 表明在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,可以重新尝试此操作EINTR 指操作由于终端而未能成功,可以重新尝试 阅读全文
posted @ 2013-01-06 13:29 zaleilynn 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 一、简介:伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列,因此他们的性能在实际应用中更优秀。伸展树支持所有的二叉树操作。伸展树不保证最坏情况下的时间复杂度为O(logN)。伸展树的时间复杂度边界是均摊的。尽管一个单独的操作可能很耗时,但对于一个任意的操作序列,时间复杂度可以保证为O(logN)。二、自调整和均摊分析: 平衡查找树的一些限制:1、平衡查找树每个节点都需要保存额外的信息。2、难于实现,因此插入和删除操 阅读全文
posted @ 2013-01-06 12:23 zaleilynn 阅读(238) 评论(0) 推荐(0) 编辑
摘要: man: #include <stdarg.h> void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_list src);1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#includevoid fun(int a, ...){ 阅读全文
posted @ 2013-01-06 10:48 zaleilynn 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。1. semget函数原型semget(得到一个信号量集标识符或创建一个信号量集对象)所需头文件#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>函数说明得到一个信号量集标识符或创建一个信号量集对象并返回信号量集标识符函数原型int semget(key_t key, int nsems, int semflg)函数传入值key0(IPC_PRIVATE):会建立新信号量集对 阅读全文
posted @ 2013-01-06 10:07 zaleilynn 阅读(689) 评论(0) 推荐(0) 编辑
摘要: 先看看 shmctl()原型:intshmctl ( int shmqid, int cmd, struct shmid_ds *buf );返回:成功为0,失败 为-1这个特殊的调用和semctl()调用几乎相同,因此,这里不进行详细的讨论。有效命令的值是:IPC_STAT:检索一个共享段的shmid_ds结构,把它存到buf参数的地址中。IPC_SET:对一个共享段来说,从buf参数中取值设置shmid_ds结构的ipc_perm域的值。IPC_RMID:把一个段标记为删除IPC_RMID命令实际上不从内核删除一个段,而是仅仅把这个段标记为删除,实际的删除发生在最后一个进程离开这个共享段时 阅读全文
posted @ 2013-01-06 09:55 zaleilynn 阅读(200) 评论(0) 推荐(0) 编辑