现在的位置: 首页 > 综合 > 正文

百度笔试题

2018年02月19日 ⁄ 综合 ⁄ 共 2609字 ⁄ 字号 评论关闭

一、选择题:15分共10题

1.一个含有n个顶点和e条边的简单无向图,在其邻接矩阵存储结构中共有__D__个零元素。

A.e    B.2e    C.n2-e   D.n2-2e

 

2.__B__是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关,而对方法的调用则可以关联于具体的对象。

A.继承(Inhertance) B.模板(Template)

C.对象的自身引用(Self-Reference) D.动态绑定(DynamicBinding)

 

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___。

A.10 B.11 C.21 D.36

 

7.以下不是进程间通讯的是__C_

A 共享内存 B 信号量 C线程局部存储 D 消息队列

 

8.下面程序,求count的值 A

int func(x)

{

int count= 0;

x=9999;

while(x)

{

Count ++;

x = x&(x-1);

}

return count;

}

 

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

分析:最后所生成的数组元素个数为2n个.最坏情况为: 每比较一次,只确定一个元素的位置(最后一次比较确定两个元素的位置,即倒数第一个和倒数第2个),所以总的最坏比较次数为2n-1.

 

二、简答题: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;

}

解答:

for (char *piterator = szWord; *piterator!= 0; piterator++)

{

if ( (*piterator& 0x80) != 0)

{

piterator++;

}

else if (*piterator >= 'A' &&*piterator <= 'Z')

piterator += 32;

}

注意:不是所有的汉字编码方案都是用2个字节表示一个汉字。

 

 

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

 

分析:

1.题目给定的是 "上亿条无序的url",第一个感觉就是这么多的数据不可能同时装入到内存中, "External   Sorting"是必然的了。第二个感觉就是URL的长度差别很大的,有的很长,有的却很段,选择什么样的数据结构来存放这些数据就需要考虑。定长的数据应该是不合适的,变长的数决是个选择。

2.在domain,site,path中,我们可以先对domain排序,处于同一个domain的URL可以存放在一起,这样他们有类似的数据,例如:XX.baidu.com/XXX。然后我们可以对site进行排序,最后对path进行排序。

 

3.(10分)某型CPU的一级数据缓存大小为16K字节,cache块大小为64字节;二级缓存大小为256K字节,cache块大小为4K字节,采用二路组相联。经测试,下面两段代码运行时效率差别很大,请分析哪段代码更好,以及可能的原因。

为了进一步提高效率,你还可以采取什么办法?

A段代码

int matrix[1023][15];

const char *str = "this is astr";

int i, j, tmp, sum = 0;

tmp = strlen(str);

for(i = 0; i < 1023; i++) {

for(j = 0; j < 15; j++) {

sum += matrix[j] + tmp;

}

}

 

 

B段代码

int matrix[1025][17];

const char *str = "this is astr";

int i, j, sum = 0;

for(i = 0; i < 17; i++) {

for(j = 0; j < 1025; j++) {

sum += matrix[j] + strlen(str);

}

}

 

 

三、编程题:30分共1题

 

注意:要求尽可能提供完整代码,如果可以编译运行酌情加分。

 

1.内存中有一个长数组,条目数为10万,数组单元为结构体structarray,sizeof(struct array)为512字节。结构有一int型成员变量weight。现需要取得按weight值从大到小排序的前500个数组单元,请实现算法,要求效率尽可能高。

 

 

四、设计题:35分共1题

 

注意:请尽可能详细描述你的数据结构、系统架构、设计思路等,建议多写一些伪代码或者流程说明。

 

1.请设计一个字典。以字符串为索引,存储用户定义的定长结构。要求有增、删、查、改的功能。已经给定一个函数,可以由字符串映射到一个签名,每个签名由两个unsigned int类型组成。假设每一个字符串能够对应唯一的一个签名,完全没有重复(或者重复的概率可以忽略),并且签名分布足够均匀。

 

请描述你的数据结构?内存如何申请?增、删、查、改的功能如何实现?如果操作很频繁,该如何优化?

抱歉!评论已关闭.