历年百度校园招聘笔试题

历年百度校园招聘笔试题
历年百度校园招聘笔试题

一:简答题(30)

1:数据库以及线程发生死锁的原理及必要条件,如何避免死锁(操作系统书上有)

2:面向对象的三个基本元素,五个基本原则(继承,封装,多态,基本原则没答上)

3:windows内存管理的机制以及优缺点(分页,分段,虚拟内存管理....)

二:程序设计题(40)

1:公司里面有1001个员工,现在要在公司里面找到最好的羽毛球选手,也就是第一名,每个人都必须参赛,问至少要比赛多少次才能够找到最好的羽毛球员工。(含伪代码)--------(个人觉得,两两比赛,分成500组剩下一人,类似于归并排序的方式,比出冠军后,让冠军之间再比,主要是要想想多余的那一个选手如何处理,必然要在第一次决出冠军后加入比赛组)

2:现在有100个灯泡,每个灯泡都是关着的,第一趟把所有的灯泡灯泡打开,第二趟把偶数位的灯泡制反(也就是开了的关掉,关了的打开),第三趟让第3,6,9....的灯泡制反.......第100趟让第100个灯泡制反,问经过一百趟以后有多少灯泡亮着-----(觉得这个应该是最好做的编程题了,首先定义一个数组vist[100],初始化为0,我们假设已经达到第i个灯泡了,要判断第i个灯泡最后是开着还是灭了的,要要知道它被开关了多少次用temp存放,也就是说是偶数还是奇数,偶数显然最后是关着的,奇数则开着,让i除以比它小的数字,如果余数为0就躺temp++,最后再根据temp的值确定vist[i是0还是1,最后扫描整个vist数组)

3:有20个数组,每个数组有500个元素,并且是有序排列好的,现在在这20*500个数中找出排名前500的数(可以用归并排序,最后找到500个元素的值,也可以这样首先找到每个数组的最大值和最小值,然后存放在一个结构体里面,如果一个数组里面的最小值大于某一个数组的最大值,那么某一个数组就被kill掉,然后提取剩余数组的最大值----当然每个数组的元素放生变化了,因为每次提取走了最大值,然后改变结构体里面的最大值和最小值,重复以上操作,直到找到前五百个数)

三:系统设计题(30)

现在有一个手机,手机上的键盘上有这样的对应关系,2对应"abc",3对应"def".....手机里面有一个userlist用户列表,当我们输入942的时候出来拼音的对应可能是“xia”,“zha”,“xi”,“yi”等,当我们输入9264的时候出来是yang,可能是“样”,“杨”,“往”等,现在我们输入一个字符串数字,比如926等,要在电话簿userlist中查找出对应的用户名和电话号码并返回结果。---------(个人觉得用哈希表来查找,并用链表来处理冲突,如a[2]依次对应abc,可以在匹配字符的时候定义一个char(*P)[4]的指针,每个指针指向最多四个char类型的字符串,并且用遍历的方式依次匹配)

一简答

1 linux/unix远程登陆都用到了ssh服务,当网络出现错误时服务会中断,linux/unix端的程序会停止。为什么会这样?说下ssh的原理,解释中断的原理。

2一个最小堆,也是完全二叉树,用按层遍历数组表示。

1. 求节点a[n]的子节点的访问方式

2. 插入一节点的程序void add_element(int *a,int size,int val);

3. 删除最小节点的程序。

3 关于hash,有表A,用100%表示,它的粒子度是0.1%,同样的表B,两张表组成一层。要将A均匀映射到B,B的每10%里面有1%对应该于A的10%。另一问,如果有超过十层以上,要实现它们之间的这种映射,hash函数应该怎么实现。

二算法

1有一个数,比如N=123,一共有三位,所有位的值加起来是6。我们找出另外一个数141,也是三位,所有位加起来也是6,这样和123有同样关系的数还有很多,我们将求一个有这种关系并且是所有数中只比基123刚刚好大的数定义为F(N)。如果不存在,则F(N)=-1.现在有一个数n,它的位数小于1000.它的值小于10^500.求F(F(N))=-1。不记得问什么了?是问迭代过程怎么实现还是问什么时候停止的。反正是一个迭代

2 求一个全排列函数:

如p([1,2,3])输出:

[123],[132],[213],[231],[321],[323].

求一个组合函数

如p([1,2,3])输出:

[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]

这两问可以用伪代码。

三设计

有两个十亿数据的表,表是xxID,xx,xx,xx之类的几个项,存的是url之类的,只说是存到硬盘的,中间没说内存限制什么的。

其中有一问是实现数据查找中的and ,or ,sub(与集,交集,差集) 。其中要实现and(sub())之类的功能。

还有并行实现…不记得了。

另外一问是当查找(比如and运算)出前100位时,怎么让它停下来,不要再查找了。怎么实现这种高效查找前100位的运算。

一、简答

1、系统又很多任务,任务之间有依赖,比如B依赖于A,则A执行完后B才能执行

(1)不考虑系统并行性,设计一个函数(Task *Ptask,int Task_num)不考虑并行度,最快的方法完成所有任务。

(2)考虑并行度,怎么设计

typedef struct{

int ID;

int * child;

int child_num;

}Task;

提供的函数:

bool doTask(int taskID);无阻塞的运行一个任务;

int waitTask(int timeout);返回运行完成的任务id,如果没有则返回-1;

bool killTask(int taskID);杀死进程

2、堆和栈的生命周期,内存分配性能,不同处,如果一般情况下要求1KB,偶尔需要100MB的缓存空间怎么设计?

二、必答题(各种const)

1、解释下面ptr含义和不同(好像是。。。。题干了大概意思是这样。下面应该没错)double* prt = &value

const double* ptr = &value

double* const ptr=&value

const double* const ptr=&value

2、去掉const属性,例:

const double value = 0.0f;

double* ptr = NULL;

怎么才能让ptr指向value?

三、算法设计

1、一个一维数轴上有不同的线段,求重复最长的两个线段。

例:a:1~3

b: 2~7

c:2~8

最长重复是b和c

2、有向带权图最短路径

四、系统设计

大概意思是:百度内部有一个类似cs系统的计算系统,由于大并发计算很耗资源,所有要设计一个缓存系统。c做缓存,配置2.66MHZ,3G内存,大概有1000w个查询,唯一的查询大概有500w。要缓存24小时。设计这个缓存系统的运行机制,算法等等东西。。。。。记不太清了。。。

2007年百度校园招聘会笔试题

1选错的

基类public成员在派生类中仍是public

基类protected成员在派生类中仍是protected

基类private成员在派生类中是隐藏

回去想的,我忘了错的怎么说的来着

2边长为n的正方形可以分成多个边长为1的正方形,如边长为2的正方形有2×2个边长为1的正方形和1个边长为2的正方形;问边长为5的正方形有几个正方形;

3

public class Person {

public void printValue(int i,int j){

System.out.println("1111111111111");

}

public void printValue(int i){

System.out.println("22222222222");

}

}

public class Teacher extends Person {

public void printValue(){

System.out.println("333333333");

}

public void printValue(int i){

System.out.println("4444444444");

}

public static void main(String[] args) {

Person t=new Teacher();

t.printValue(10);

}

}

输出结果是:4444444444

4.找错误

int tolower(const char *str)

{

if(NULL==str) return 0;

int i=0,iCount=0;

for(;i

{

if(str[i]<='Z'||str[i]>='A')

{

str[i]+='z'-'Z';

iCount++;

}

}

一、选择题:15分共10题

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

素。

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

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

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

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

3.应用层DNS协议主要用于实现网络服务功能.

A. IP地址到网络设备名字的映射

B. IP地址到网络硬件地址的映射

C. 网络设备名字到IP地址的映射

D. 网络硬件地址到IP地址的映射

4.linux默认情况下,一个进程最多能打开多少文件?

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;

};

的大小是_____:

A. 12字节

B.16字节

C.20字节

D. 24字节

6.任何一个基于"比较"的内部排序的算法,若对6个元素进行排序,则在最坏情况下所需的比较次数至少为____。

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

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

A 共享内存

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

8.下面程序,求count的值

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系统调用分配的内存是在____ 上分配的?

A 栈;

B bss;

C 物理内存;

D 堆

10.最坏情况下,合并两个大小为n的已排序数组所需要的比较次数_____

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;

}

2.(5分)对给定的上亿条无序的url,请按照domain、site以及path分别排序,并请指出排序过程中可能会遇到的哪些问题?如何提高效率?

例如:https://www.360docs.net/doc/7814176734.html,/path/about.html,domain、site以及path的定义分别如下:Domain:https://www.360docs.net/doc/7814176734.html,

Site:https://www.360docs.net/doc/7814176734.html,

Path: https://www.360docs.net/doc/7814176734.html,/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[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] + strlen(str);

}

}

三、编程题:30分共1题

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

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

四、设计题:35分共1题

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

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

以忽略),并且签名分布足够均匀。

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

相关主题
相关文档
最新文档