随笔分类 -  程序设计

摘要:使用gdb调试时,有的函数只在某些路径上会执行到,而触发这些路径执行的条件构造起来比较麻烦,比如某个server在接收到READ请求时,会调用do_read进行响应,这时如果我们想调试do_read函数,就必须在客户端构造一个READ请求来触发。 int do_read(const ReadRequest& req); 假设我们知道do_read调用时参数ReadRequest的具体内容,能否直... 阅读全文
posted @ 2013-04-19 14:14 ydzhang 阅读(2422) 评论(0) 推荐(0)
摘要:google开源的gflags是一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags还支持从环境变量、配置文件读取参数(可用gflags代替配置文件)。本文简单介绍gflags的使用,内容主要译自 http://gflags.googlecode.com/svn/trunk/doc/gflags.html 。 定义参数 使用flags需要包含头文件 #i... 阅读全文
posted @ 2013-04-19 14:14 ydzhang 阅读(689) 评论(0) 推荐(0)
摘要:英文原文:http://www.theserverside.com/tip/A-return-to-Good-Code 中文译文:http://www.aqee.net/a-return-to-good-code/ 文章作者认为,函数应该是单出口的,即只在结束时return;读书期间,我写代码的风格是多return的,使代码尽量简短。在百度和淘宝工作期间,我们的代码规范都是要求函数单出口,刚开始写... 阅读全文
posted @ 2013-04-19 14:13 ydzhang 阅读(1144) 评论(0) 推荐(0)
摘要:马上要做毕业论文的测试,需要自己写测试程序、生成数据、作图,最简单的方式莫过于使用excel根据数据生成图标,这就需要在linux下通过C/C++写excel文件,使其能被ms excel打开,本文总结了三种方式。 普通文本,以\t分隔列 建立文本文件如下,在同一行的数据以tab(\t)进行分隔,使用excel打开。 a b c d e f a b c d e f ... 阅读全文
posted @ 2013-04-19 14:13 ydzhang 阅读(2362) 评论(0) 推荐(0)
摘要:B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1)每个非根节点至少包含t-1个关键字,t个指向子节点的指针;至多包含2t-1个关键字,2t个指向子女的指针(叶子节点的子女为空)。 (2)节点的所有key按非降序存放,假设节点的关键字分别为K[1], K[2] … K[n], 指向子女的指针分别为P[1], P[2]…P[n+1],其中n为节点关键字的个数。... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(637) 评论(0) 推荐(0)
摘要:B树实现的非回溯算法参考:http://blog.chinaunix.net/space.php?uid=20196318&do=blog&id=3030529 回溯的方式实现B树与非回溯算法相比,理解起来更为直观,而且插入时/删除时,需要分裂/合并的次数比非回溯算法要少,因为只有到必须分裂或合并的时候回溯算法才执行分裂或合并。当回溯算法从根向叶子下降后,还要向上回溯至根节点。如使用B树(B... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(247) 评论(0) 推荐(0)
摘要:K维检索树类似于二叉检索树,不同的是,它能同时提供多维度属性的检索。K维(从0开始计维数)检索树的定义: K维检索树是一个n层的二叉树(根节点为第0层,依次往下为第1,2..n-1层),对于树中第n层的每个节点,其左子树所有节点的第n%k维属性小于或等于该节点的第n%k维属性;其右子树所有节点的第n%k维属性都大于或等于该节点的第n%k维属性。通俗的讲,就是将整个树的层数循环标记为0到k-1,在第... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(739) 评论(0) 推荐(0)
摘要:问题描述:在编译程序时,提示一个错误和一个警告。 error:storage size of tz isn’t know; 其中tz是struct timezone类型的变量。 warning:implicit declaration of function lstat; 使用man手册查了一下,发现tz需要加上sys/time.h头文件,lstat需要加上sys/lstat.h头文件,但这两... 阅读全文
posted @ 2013-04-19 14:11 ydzhang 阅读(450) 评论(0) 推荐(0)
摘要:今天早上到实验室,发现昨天的博客没有发表成功,有点莫名其妙,昨天还看过发表的文章呢,重发一次。 早上提前一刻钟赶到集合地点西十二东门,发现已经很多人在那里等了,我还以为我去的很早呢,有很多同学还是从江夏、汉口赶过来的,据说早上五点多就起床了。 集结完毕就一起奔向西体做一些素质拓展活动,到西体大概等了20分钟,CVT的招聘人员才赶到,活动之前还声明说大家今天来到这里还是来面试的。 最开始就是... 阅读全文
posted @ 2013-04-19 14:11 ydzhang 阅读(216) 评论(0) 推荐(0)
摘要:今天经历了迄今为止最长的一次面试,历时两个半小时,百度工程师GG不厌其烦的问着各种问题,很有耐心,并不断的给予指引。系统设计、算法设计、智力题等各种题目扑面而来,整个面试下来,受益匪浅,发现了很多不足,也学到了很多知识。 昨晚接到百度的面试通知,今天上午十点半到珞珈山国际大酒店面试,不到十点就赶到面试地点了,等到十点半左右,面试官出来说上一个面试的还没完,让我再等一会,对面试官GG的第一印象很好... 阅读全文
posted @ 2013-04-19 14:11 ydzhang 阅读(546) 评论(0) 推荐(0)
摘要:今天下午参加CVT二面,24个应聘者被8个面试官群P,历时三小时十七分钟。 某天在群邮件里发现了CVT招暑期实习生的消息,大致看了下邮件,也没有发现很有吸引力的地方,直到看到了一些关于CVT的一些比较BT的一些消息(网上有个文档),我才开始关注CVT,发现CVT的招聘流程还真的是别具一格,首先要进行一个职业测评和一个专业测评,通过了测评才能下载CVT的简历,然后参加一面、再笔试、再二面、外加一个... 阅读全文
posted @ 2013-04-19 14:11 ydzhang 阅读(257) 评论(0) 推荐(0)
摘要:位图主要用于快速检索关键字状态,通常要求关键字是一个连续的序列(或者关键字是一个连续序列中的大部分), 最基本的情况,使用1bit标示一个关键字的状态(可标示两种状态),但根据需要也可以使用2bit(标示4种状态),3bit(标示8种状态),当一个状态标示需要的位数达到32bit时,就演变成来一个整型数组了。 位图的主要应用场合:标示连续(或接近连续,即大部分会出现)的关键字序列的状态(状态数/... 阅读全文
posted @ 2013-04-19 14:11 ydzhang 阅读(853) 评论(0) 推荐(0)
摘要:问题:给定一个有序序列1~n,要你将其完全打乱,要求每个元素在任何一个位置出现的概率均为1/n。 解决方案:依次遍历数组,对第n个元素,以1/n的概率与前n个元素中的某个元素互换位置,最后生成的序列即满足要求,1/n的概率可通过rand() % n实现。见如下程序: void swap(int* p, int* q) { int tmp = *p; *p = *q; *q = tmp; } ... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(228) 评论(0) 推荐(0)
摘要:这两天先后参加百度腾讯的实习生招聘笔试,不幸的是,昨天肚子不舒服,后来引发高烧,百度的笔试是在高烧39度的情况下完成的,题目一做完我就立马撤回宿舍睡觉了。由于今天要参加腾讯的笔试,怕高烧不退,昨晚去校医院检查了下,吃了点药,今早除了胃口不大好,其他都还不错,运气还不算很差。 参加完两大巨头的笔试,发现两者笔试风格迥异,百度全部是主观题,而腾讯则全是客观题(除最后的附加题外)。笔试题目出得还是相... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(407) 评论(0) 推荐(0)
摘要:昨天参加阿里巴巴的笔试,有一道题目要求从N个面试的人中挑选出M个成绩最好的人(M<=N, 并假定M个人的成绩都不一样),求挑选程序的最优时间复杂度()。 选项包括:O(NlogN), O(N*min(M, logN)), O(N*logM), O(N)。 O(NlogN)的算法是完全有可能的,使用堆排序,快速排序等将N个元素排序,选取前M个元素即可。 O(N*logM)的算法也是有可能的,将前... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(250) 评论(0) 推荐(0)
摘要:1. 打印错误信息 如果程序的执行必须要求某个宏被定义,在检查到宏没有被定义是可以使用#error,#warning打印错误(警告)信息,如: #ifndef __unix__#error "This section will only work on UNIX systems"#endif 只有__unix__宏被定义,程序才能被正常编译。 2. 方便调试 __FILE, __LINE, __... 阅读全文
posted @ 2013-04-19 14:10 ydzhang 阅读(223) 评论(0) 推荐(0)
摘要:有限状态机是文本处理的利器,关于有限状态机的理论比较复杂,但在实际文本处理应用中, 只需要对有限状态机的模型有所了解,搞清楚状态转移关系即可快速的写出程序。 如对网络配置文件进行解析(与/etc/sysconfig/network-scripts/ifcfg-eth0文件类似的格式) 格式如下:(其中以#开头的行为注释行,有效的配置字符为数字,字母和点号) #this is a net wor... 阅读全文
posted @ 2013-04-19 14:09 ydzhang 阅读(300) 评论(0) 推荐(0)
摘要:递归是指函数在执行的过程中调用到自身已完成需要的功能,用递归能解决的问题通常能将问题不断缩小为性质相同但规模更小的问题(递归情况),直到问题足够小能够直接解决(基本情况),如下面简单的例子: #include<stdio.h> void f(int n) { printf("Level %d:n location %p\n",n,&n); /* 语句1 */ if(n < 3) f(n+1)... 阅读全文
posted @ 2013-04-19 14:08 ydzhang 阅读(312) 评论(0) 推荐(0)
摘要:C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实... 阅读全文
posted @ 2013-04-19 14:07 ydzhang 阅读(150) 评论(0) 推荐(0)
摘要:#include <iostream>#include <cstdlib>using namespace std;/* 重载new应返回void*类型,如果内存分配请求成功,就返回指向内存的指针;* 如果失败,则遵循规定抛出一个std::bad_alloc类型的异常* 重载operator new需要注意的一些问题,参见:* http://blog.csdn.net/xushiweizh... 阅读全文
posted @ 2013-04-19 14:07 ydzhang 阅读(246) 评论(0) 推荐(0)