baidu——郁闷的笔试续

来源:互联网 发布:成都java兼职开发 编辑:程序博客网 时间:2024/06/05 00:27
  
一、选择题:15分 共10题
 
1. 一个含有n个顶点和e条边的简单无向图,在其邻接矩阵存储结构中共有____个零元素。 d
A.e    B.2e    C.n2-e   D.n2-2e
 
2. ____是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关,而对方法的调用则可以关联于具体的对象。 d
A.继承(Inhertance) B.模板(Template)
C.对象的自身引用(Self-Reference) D.动态绑定(Dynamic Binding)
 
3. 应用层DNS协议主要用于实现 网络服务功能. c
A. IP地址到网络设备名字的映射 B. IP地址到网络硬件地址的映射
C. 网络设备名字到IP地址的映射 D. 网络硬件地址到IP地址的映射
 
4. linux默认情况下,一个进程最多能打开多少文件? d
A.64 B. 128 C. 512 D. 1024
 
5. 下面结构体
struct s1 {
char ch, *ptr;
union {
short a, b;
unsigned int c:2, d:1;
};
struct s1 *next;
};
的大小是_____: b
A. 12字节 B.16字节 C.20字节 D. 24字节
 
6. 任何一个基于“比较”的内部排序的算法,若对6个元素进行排序,则在最坏情况下所需的比较次数至少为____。 A           log2n
A.10 B.11 C.21 D.36
 
7. 以下不是进程间通讯的是___ c
A 共享内存 B 信号量 C线程局部存储 D 消息队列
 
8. 下面程序,求count的值
int func(x)
{
int count= 0;
x=9999;
while(x)
{
Count ++;
x = x&(x-1);
}
return count;
}
a
A 8; B 10; C 5; D 11
 
9. 使用malloc系统调用分配的内存是在____ 上分配的? d
A 栈; B bss; C 物理内存; D 堆
 
10. 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数_____ b
A.2n B.2n-1 C.2n+1 D.2n-2
 
 
二、简答题:20分,共3题
 
1. (5分)下面这段代码是把中英文混合字符串(汉字用两个字节表示,特点是第一个字节的最高位为1)中的大写字母转化为小写字母,请找出其中的bug,注意各种异常情况。
for (char *piterator = szWord; *piterator != 0; piterator++)
{
if (*piterator & 0x80 != 0)
{
piterator++;
}
else if (*piterator >= 'A' && *piterator <= 'Z')
*piterator += 32;
}
Assert(piterator!=NULL)
for (char *piterator = szWord; *piterator != 0; piterator++)
{
    if ((*piterator & 0x80) != 0)
    {
       piterator++;
      
    }
    else if (*piterator >= 'A' && *piterator <= 'Z')
       *piterator += 32;
}
2. (5分)对给定的上亿条无序的url,请按照domain、site以及path分别排序,并请指出排序过程中可能会遇到的哪些问题?如何提高效率?
例如:http://www.baidu.com/path/about.html,domain、site以及path的定义分别如下:
Domain:baidu.com
Site:www.baidu.com
Path: www.baidu.com/path
存储和排序
3. (10分)某型CPU的一级数据缓存大小为16K字节,cache块大小为64字节;二级缓存大小为256K字节,cache块大小为4K字节,采用二路组相联。经测试,下面两段代码运行时效率差别很大,请分析哪段代码更好,以及可能的原因。
为了进一步提高效率,你还可以采取什么办法?
A段代码
int matrix[1023][15];
const char *str = "this is a str";
int i, j, tmp, sum = 0;
 
tmp = strlen(str);
for(i = 0; i < 1023; i++) {
for(j = 0; j < 15; j++) {
sum += matrix[i][j] + tmp;
}
}
 
B段代码
int matrix[1025][17];
const char *str = "this is a str";
int i, j, sum = 0;
 
for(i = 0; i < 17; i++) {
for(j = 0; j < 1025; j++) {
sum += matrix[j][i] + strlen(str);
}
}
 
A好,减少strlen的调用次数
tmp提出来
三、编程题:30分 共1题
注意:要求尽可能提供完整代码,如果可以编译运行酌情加分。
 
1. 内存中有一个长数组,条目数为10万,数组单元为结构体struct array,sizeof(struct array)为512字节。结构有一int型成员变量weight。现需要取得按weight值从大到小排序的前500个数组单元,请实现算法,要求效率尽可能高。
 建立一个大小为500的最小堆,然后遍历长数组,如果大于堆顶,就删除堆顶,加入此元素,最后将这个堆内的元素排序
 
四、设计题:35分 共1题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等,建议多写一些伪代码或者流程说明。
 
1. 请设计一个字典。以字符串为索引,存储用户定义的定长结构。要求有增、删、查、改的功能。已经给定一个函数,可以由字符串映射到一个签名,每个签名由两个unsigned int类型组成。假设每一个字符串能够对应唯一的一个签名,完全没有重复(或者重复的概率可以忽略),并且签名分布足够均匀。
请描述你的数据结构?内存如何申请?增、删、查、改的功能如何实现?如果操作很频繁,该如何优化? 
Hash表,根据两个u int 为键,
然后
 
 
一、选择题:15分 共10题
1.    任何一个基于“比较”的内部排序的算法,若对6个元素进行排序,则在最坏情况下所需的比较次数至少为____。 A
A.10       B.11        C.21         D.36
 
2.    关系模型有三类完整性约束,定义外键实现的是  b  完整性.
A. 实体完整性              B. 参照完整性       
C. 用户定义的完整性          D. 实体完整性、参照完整性和用户定义的完整性
 
3.    64位linux系统和机器,int类型、long类型分别占用多大的空间(字节数) d
A. 4,4      B. 4,8         C. 8,4         D. 8,8 
 
4.    下面说法正确的是: b
A. 根据gprof统计的程序运行时函数调用次数及执行时间,进行程序代码优化,这是amdahl定律的应用
B. 计算机网络设备的缓冲区是时间和空间局部性原理的应用 
C. 局域网内的计算机发送数据包的数学模型遵循泊松分布
D. 分支预测使用先前运行时得到的配置文件,这是依据正态分布
 
5.    下列叙述正确的是: c
A . #define fun(x,y) (x/y)
Int I = fun(2+4, 3);
I 的值为2
B.var++ 与 ++var 没有区别
C.C++程序,抛出异常时,一定会发生异常对象的拷贝过程
D.quick sort 是一种稳定排序。
 
6.    上下文无关文法是一种____。 c
A 左线性文法   B 右线性文法    C 正则文法    D 以上都不上
 
7.    关系表达式 !(A&&(B||C)) 和下面哪个表达式表达的意思一致: a
     A (!(A&&B))||(!(A&&C)) B (!(A&&B))&&((!A)||(!B)) 
C (!(A||B))&&(!(A&&B)) D (!A)||((!B)||(!C))
 
8.    设int x=4; 则执行以下语句: x+=x-=x-x--;后,x的值为 c
A. -1;         B. 5       C. 7       D. 11
先全部计算,然后再
若是x+=x-=x- --x;则先--x,然后再计算
某一个计算式中X的值都是一样的
9.    以下IO函数中,哪个是流式IO函数() a
A、read;      B、fread;   C、mmap; D、recv;
 
10.    已知:
struct st
    int n
    struct st *next
};
static struct st a[3]={1,&a[1],2,&a[2],3,&a[0]},*p;
如果下述语句的显示是2,则对p的赋值是____。 c
printf("%d",++(p->next->n));
A. p=&a[0];    B. p=&a[1]   C. p=&a[2]   D. p=*a
 
二、简答题:20分,共2题
 
1.    (10分)已知某种线上服务存在3种异常D1, D2, D3,根据每天在固定时间段长期人工监控的统计结果,3种异常的发生率是:D1 0.28%, D2 0.12%, D3 0.32%。现开发一种监控程序,分别对这三种异常做监控,如果发现某种异常就发出相应报警。记无异常为D4,无报警为A4。在各种异常情况下发出报警的溉率如下表:
     D1    D2    D3   D4
A1 0.90 0.06 0.02 0.02
A2 0.05 0.80 0.06 0.01
A3 0.03 0.05 0.82  0.02
A4 0.02 0.09 0.10 0.95
 
请评价该监控程序的敏感性和正确性。
 
2.    (10分)以下是一个常驻内存的C程序,请问程序中有什么问题?
         int f(int number)
         {
                   FILE * fp;
                   char file_name[20];
                   int sum=0;
                   for(int i=0; i<number; i++)
                   {
                            if(0==i%30)
                            {
                                     sprintf(file_name, ”file_%d.txt”, i/20);
                                     fp=fopen(file_name,”r”);
                                     if(fp==NULL) return -1;
                            }
                            sum += i;
                   }
                   
                   fclose(fp);
                   return sum;
         }
 
三、编程题:30分 共1题
注意:要求提供完整代码,如果可以编译运行酌情加分。
 
1.    一条1百万节点的单向链表,链表所有节点是按value字段从小到大的顺序链接;下面是一个节点的结构
   typedef struct node_t{
       int value;   /* 节点排序字段 */
       int group;   /* 组号: 0,1,2,3,4,5,6,7,8,9 */
       struct node_t *pnext; /* 下个节点的指针 */
   }node_t;
   node_t head;    /*该单向链表的头节点,全局变量 */
   
试设计程序:针对各个group(0-->9),根据value字段排序,输出各组top 10的节点。(top10是从小到大,取后面的大值top10.)
要求:尽量减少计算复杂度、遍历次数,不允许大量的辅助内存
 
四、设计题:35分 共1题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。
 
1.    设想网络上的一个发送者和64个接收者,发送者每秒有不超过128条的命令产生,每条命令包含一个512字节的头部command_head_t和至多4K字节的变长内容。command_head_t的结构如下:
    typedef struct {
        int cmd_no; //该命令的命令号,唯一识别一个命令
         int version; //产生该命令的程序的版本
        int detail_len; //变产内容的实际长度
        char *content;    //指向变长内容的指针
        …
    } command_head_t;
发送者根据命令号将这些命令分别发送给接收者去处理,例如:发送者产生c1,c2,c3,c4命令,并设定将c1,c2命令发送到接收者r1和r2,将c2、c3,c4命令发送到r3。
    接收者执行接收到的命令,并相应修改自己的状态。
    现在的问题是:在尽可能多的考虑各种可能的意外情况下(包括但不限于网络故障、传输错误、程序崩溃、停电…),如何设计命令的存储、发送、接收的流程,以保证命令的:
1)    传输中的有序、无漏、无重复性
2)    整个过程中命令和数据的正确性
3)    多个同一类型的接收者(例如r1与r2)的状态可以在有限时间内趋于一致
最后,请针对你考虑到的意外情况,说明所采用的避免、解决或恢复方案。 
 
第1题:用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。
第2题:已知一个字串由GBK汉字和ansi编码的数字字母混合组成,编写C语言函数实现从中去掉所有ansi编码的的数字和字母(包括大小写),要求在原字串上返回结果。函数接口为:int filter_ansi(char* gbk_string)。注:汉字的GBK编码范围是0x8140 - 0xFEFE。
第3题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,希望在这些数据的基础上,能够开发这样一种功能:针对一个用户的检索串,能够向用户提示和该检索串关联度最大的10个其他检索串。(1)请描述你解决这个问题的思路;(2)请给出主要的处理流程、算法,以及算法的复杂度。 
 
一、    编程
二分查找,找到返回1,未找到返回0,出错返回-1,函数定义如下。
要求程序尽可能健壮和高效
 
int binary_search(int *arr,size_t len,int key)
{
        if(NULL == arr || len == 0) return -1;
        int low = 0;
        int high = len-1;
        size_t mid;
        while(low <= high){
                mid = (low + high)/2;
                if( key == arr[mid]) return 1;
                else if(key < arr[mid]) high = mid - 1;
                else low = mid + 1;
        }
        return 0;
}
 
二、    数据库&Shell题:(任选一题回答)
选择你所熟悉的一种数据库,说明该数据库对应的备份,恢复的操作是如何进行的.
 
 
查找当前目录下,文件时间在2005-2-1日0点到2006年-2-1日12点之间的文件列表
 
 
三、    测试方面
功能:支持五种图片格式:JPG, GIF, PNG, BMP, TIF,其他类型暂不支持,并且缩略图最长边为200像素,同时在压缩过程中保持长宽的等比例压缩。除gif外所有都缩略图都保存为jpg格式,gif缩略图仍然保持gif格式
对实现上述功能的程序设计测试用例
 
四、    职业方面
a)    请描述距今为止,让你最骄傲的事情是什么
b)    你的职业规划、未来发展方向
c)    你为什么选择百度 
1)此题10分  
  对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。  
  (不用考虑数值超出计算机整数界限的问题)  
   
  2)此题10分  
  编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url  
  如下形式叫做首页:  
  militia.info/  
  www.apcnc.com.cn/  
  http://www.cyjzs.comwww.greena888.com/  
  www.800cool.net/  
  http://hgh-products.my-age.net/  
  如下形式叫做目录页:  
  thursdaythree.net/greenhouses--gas-global-green-house-warming/  
  http://www.mw.net.tw/user/tgk5ar1r/profile/  
  http://www.szeasy.com/food/yszt/chunjie/  
  www.fuckingjapanese.com/Reality/  
   
  请注意:  
  a) url有可能带http头也有可能不带  
  b)动态url(即含有"?"的url)的一律不算目录页,如:  
  www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/  
  www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/  
   
  另:如果你会linux,请用linux下的grep命令实现第2题的功能(附加5分)。  
   
  3)此题40分  
  如果必须从网页中区分出一部分"重要网页"(例如在10亿中选8亿),比其他网页更值得展现给用户,请提出一种方案。  
   
  4)此题40分  
  假设有10亿网页已经被我们存下来,并提供如下信息:网页全文(即网页的源码)、全文长度、网页正文(即网页中提取的主体文字)、  
  正文长度,以及其他网页提取物等,现在希望去掉其中的重复网页,请提出可行的方案,计算出每个网页对应的重复度,你可以自己  
  对网页重复下定义,也可以提出需要哪些更多的网页提取物来实现更好的去重复方案