百度校园招聘笔试题.docx

上传人:b****5 文档编号:15205556 上传时间:2023-07-02 格式:DOCX 页数:22 大小:27.91KB
下载 相关 举报
百度校园招聘笔试题.docx_第1页
第1页 / 共22页
百度校园招聘笔试题.docx_第2页
第2页 / 共22页
百度校园招聘笔试题.docx_第3页
第3页 / 共22页
百度校园招聘笔试题.docx_第4页
第4页 / 共22页
百度校园招聘笔试题.docx_第5页
第5页 / 共22页
百度校园招聘笔试题.docx_第6页
第6页 / 共22页
百度校园招聘笔试题.docx_第7页
第7页 / 共22页
百度校园招聘笔试题.docx_第8页
第8页 / 共22页
百度校园招聘笔试题.docx_第9页
第9页 / 共22页
百度校园招聘笔试题.docx_第10页
第10页 / 共22页
百度校园招聘笔试题.docx_第11页
第11页 / 共22页
百度校园招聘笔试题.docx_第12页
第12页 / 共22页
百度校园招聘笔试题.docx_第13页
第13页 / 共22页
百度校园招聘笔试题.docx_第14页
第14页 / 共22页
百度校园招聘笔试题.docx_第15页
第15页 / 共22页
百度校园招聘笔试题.docx_第16页
第16页 / 共22页
百度校园招聘笔试题.docx_第17页
第17页 / 共22页
百度校园招聘笔试题.docx_第18页
第18页 / 共22页
百度校园招聘笔试题.docx_第19页
第19页 / 共22页
百度校园招聘笔试题.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

百度校园招聘笔试题.docx

《百度校园招聘笔试题.docx》由会员分享,可在线阅读,更多相关《百度校园招聘笔试题.docx(22页珍藏版)》请在冰点文库上搜索。

百度校园招聘笔试题.docx

XX校园招聘笔试题

2009XX实习笔试题

 一、编程题(30分)

输入:

N(整数)

输入:

数据文件A.txt,不超过6条记录,字符串长度不超过15个字节

文件格式如下:

字符串\\t数字\\n

说明:

每行为1条记录;字符串中不含有\\t。

数字描述的是该字符串的出现概率,小于等于100的整数。

多条记录的出现概率之和为100,如果A.txt不满足该条件,程序则退出;

如果文件格式错误,程序也退出。

要求:

编写一个程序,输入为N(正整数),读入文件A.txt,按照字符串出现概率随机地输出字符串,输出N条记录

例如:

输入文件A.txt

abc\\t20

a\\t30

de\\t50

输入为:

10

即 abc有20%的概率输出,a有30%的概率输出,de有50%的概率输出,输出10条记录

以下为一次输出的结果,多次输出的结果可能不相同。

abc

a

de

de

abc

de

a

de

a

de

二、算法题(35分)

题目描述:

设有n个正整数,将它们联接成一排,组成一个最小的多位整数。

程序输入:

n个数

程序输出:

联接成的多位数

例如:

n=2时,2个整数32,321连接成的最小整数为:

32132,

n=4时,4个整数55,31,312, 33 联接成的最小整数为:

312313355

[题目要求]

1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算

法。

2. 给出算法的时间空间复杂度。

3. 证明你的算法。

(非常重要)

三、系统设计题(35分)

在一个有1000万用户的系统中,设计一个推送(feed)系统。

以下是一些预定义概念

1、用户:

在这个系统中,每个用户用一个递增的unsigned int来表示user id(简

写为uid);则uid的范围是从1到1000万的正整数。

2、好友:

用户之间可以形成好友关系,好友是双向的;比如说uid为3和uid为4的两个用户可以互为好友。

每个用户好友的上限是500个;用户之间的好友关系可以被解除

3、活动:

每个用户只能发文章;文章可以被作者删除,其他人不能删除非自己发表的文章;每篇文章通过一个blogid表示。

4、feed:

我们希望,每个用户可以看到他所有好友的活动列表,在这个简化的系统中就是所有好友的文章更新列表。

5、访问量要求:

所有feed访问量每天在1亿量级;所有的blogid增加量每天在百万量级。

题目:

请在以上限制条件下,设计一个高效的feed访问系统。

要求:

1、能够尽快的返回每个用户的好友feed列表,每个用户可以最多保留1000条feed;feed的展现按照时间倒排序,最新的在最前面

2、用户删除某篇文章后,被推出去的feed需要及时消失。

即每个用户看到的好友feed都是未被删除的

3、尽可能高效

2010XX校园招聘笔试题

一、简答题

1.简述树的深度优先遍历及广度优先遍历及其非递归实现的特点;

2.找出以下程序中的bug:

#include

#include

structRecord{

 inta;

 intb;   

};

intcreate(structRecord*p,intnum)

{

 p=newstructRecord[num];

    

 if(!

p)

 return-1;

 else

 return0;

}

intTest()

{

 structRecord*p=NULL;

 inti;

 intnum;

 printf("0x%08x\n",p);

 scanf("Inputrecordnum:

%d",&num);

 if(create(p,num)<0)

 return-1;

 printf("0x%08x\n",p);

 for(i=0;i

 p[i].a=0;

 p[i].b=0;   

 }

 return0;   

}

intmain(void)

{

 Test();

 getchar();

 return0;   

}

#include

#include

structRecord

{

inta;

intb;

};

intcreate(structRecord*&p,intnum)

{

p=NULL;

p=newstructRecord[num];

if(!

p)

return-1;

else

return0;

}

intTest()

{

structRecord*p=NULL;

inti;

intnum;

printf("0x%08x\n",p);

printf("Inputrecordnum:

");scanf("%d",&num);

if(create(p,num)<0)

return-1;

printf("0x%08x\n",p);

for(i=0;i

p[i].a=0;

p[i].b=0;

}

delete[]p;

return0;

}

intmain(void)

{

Test();

getchar();

return0;

}

3.有一台Mini计算机,内存大小为1K,CPU主频为1M(CPU状态每秒改变10的6次方次),问在这台计算机上可运行并且确定可以终止的程序的最长运行时间是多少?

给出思路及推理过程(可以做任何假设)。

二、算法设计

1.某大型项目由n个组件N1,N2……Nn构成,每个组件都可以独立编译,但是某些组件的编译依赖于其它组件(即某些组件只能在其它组件编译完成后才能编译),设计算法给出统计过程。

#include

#defineMAXN505

#defineMAXMMAXN*MAXN

structedge

{

intv;

edge*mNext;

};

intin[MAXN];

intn,m;

edgeE[MAXM];

inten;

edge*first[MAXN];

intcnt[MAXN][MAXN];

voidinsert(intu,intv)

{

E[en].v=v;

E[en].mNext=first[u];

first[u]=&E[en++];

}

voidtopo()

{

for(inti=1;i<=n;i++)

for(intu=1;u<=n;u++)

{

if(in[u]==0)

{

in[u]=-1;

printf("%d",u);

for(edge*e=first[u];e;e=e->mNext)

in[e->v]--;

break;

}

}

}

intmain()

{

freopen("c:

/a.txt","r",stdin);

while(scanf("%d%d",&n,&m)!

=EOF)

{

memset(first,NULL,sizeof(first));

memset(cnt,0,sizeof(cnt));

memset(in,0,sizeof(in));

intu,v;

en=0;

for(inti=0;i

{

scanf("%d%d",&u,&v);

if(cnt[u][v]==0)

{

cnt[u][v]=1;

insert(u,v);

in[v]++;

}

}

topo();

printf("\n");

}

return0;

}

2.完成函数:

intmaxnumstr(char*inputstr,char*outputstr)

 函数功能:

找出inputstr中的最长连续数字串存储到outputstr里并返回长度,如调用maxnumstr("123abc1234a",outputstr)后返回4且outputstr中为"1234"。

#include

#defineMAXN1000

intmaxnumstr(char*inputstr,char*outputstr)

{

if(inputstr==NULL||outputstr==NULL)

throw"ErrorNULLparams";

if(*inputstr=='\0')

{

*outputstr='\0';

return0;

}

char*begin=inputstr;

intres=1;

intcur=1;

charpre=*inputstr++;

while(*inputstr)

{

if('0'<=*inputstr&&*inputstr<='9'&&pre==*inputstr-1)

cur++;

else

cur=1;

if(res

{

res=cur;

begin=inputstr-(cur-1);

}

pre=*inputstr++;

}

for(inti=0;i

outputstr[i]=begin[i];

outputstr[res]='\0';

returnres;

}

intmain()

{

freopen("c:

/a.txt","r",stdin);

charsrc[MAXN],tar[MAXN];

while(scanf("%s",src)!

=EOF)

{

printf("%d",maxnumstr(src,NULL));

printf("%s\n",tar);

}

return0;

}

三、系统设计

 URL(统一资源定位符)由site、path组成,并且有其它属性信息如访问时间等。

 如:

 1.设计系统存储100亿条URL信息;

 2.说明如何完成URL信息的添加、删除及修改;

 3.如何添加URL的属性信息;

2011年XX

一、简答

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

 

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

 

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

 typedefstruct{

 intID;

 int*child;

 intchild_num;

 }Task;

 提供的函数:

 booldoTask(inttaskID);无阻塞的运行一个任务;

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

 boolkillTask(inttaskID);杀死进程

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

二、必答题(各种const)

1、解释下面ptr含义和不同(好像是。

题干了大概意思是这样。

下面应该没错)

double*prt=&value

constdouble*ptr=&value

double*constptr=&value

constdouble*constptr=&value

2、去掉const属性,例:

 constdoublevalue=0.0f;

 double*ptr=NULL;

怎么才能让ptr指向value?

三、算法设计

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

例:

a:

1~3

 b:

2~7

 c:

2~8

最长重复是b和c 

2、有向带权图最短路

四、系统设计

大概意思是:

XX内部有一个类似cs系统的计算系统,由于大并发计算很耗资源,所有要设计一个缓存系统。

c做缓存,配置2.66MHZ,3G内存,大概有1000w个查询,唯一的查询大概有500w。

要缓存24小时。

设计这个缓存系统的运行机制,算法等等东西。

记不太清了。

XX2011校园招聘笔试题

一、简答

1.给定两个数A、B(0

请简要描述你的思路。

(这题我用方法比较笨,应该是做错了,唉XX2011校园招聘笔试题)

答:

定义A,B为unsignedint,共4个字节,(A&1)^(B&1)剩下两位分别与2和4

2.阅读一段代码,然后有四个小问题,代码和题都很简单基础。

a)C程序中的存储区分哪几个部分?

b)指出程序中几个变量所在的存储区。

c)使用new分配的内存如果分配失败会如何?

d)关于new/delete和malloc/free的区别。

3.判断一个括号字符串是否匹配正确,如果括号有多种,怎么做?

如(([]))正确,[[(()错误。

二、算法

1.XXSpider如何在不超过抓取限额的情况下使得抓取的网页价值之和最大,要求一个最佳抓取方案。

请详细描述你的算法思路(可以用伪代码),并分析时间复杂度和空间复杂度。

2.仅用O

(1)的空间,将整数数组按奇偶数分成2部分,数组左边是奇数、右边是偶数。

(要求:

给出完整代码,尽量高效,简洁)

三、系统设计题

微博上,每个用户可以发送一条消息,可以follow另一个用户,当用户发送消息时,所有follow他的用户都能看见这条消息。

如AfollowB,则B的消息,A都能看见。

实现一个微博客消息存储系统,可以使用多台机器来满足性能要求,可以再海量的用户和消息下,快速的实现以下两种查询:

a)给定一个用户,查询他发送的消息,按消息发送时间排序,新的消息在前。

b)给定一个用户,查询他follow的所有人的消息,按消息发送时间排序,新的消息在前。

2011年XX校园招聘技术类笔试真题 

第一大题

1.定义栈的数据结构,添加一个min函数,找到栈的最小元素。

要求函数min、push、pop的时间复杂度为O

(1),请简要描述思路。

2.是一个读程序写结果,并判断函数功能。

同时要指出程序的隐患  程序太长了,记不住了。

3.分析线性表、二叉平衡树和哈希表存储数据时各自的优劣。

第二大题

1.一串首尾相连的珠子,共m颗。

每个珠子有自己的颜色,全部颜色共有n种 (n小于等于10),从中截取一段,要求包含所有不同的颜色,长度越短越好,如何截取。

详述算法思路,并分析时间和空间复杂度。

2.设计strnumcmp函数,比较字符串的大小。

功能为 a.当字符串中有数字时,以数字大小为准 b.对于只有其中一个字符串有数字的情况,仍然沿用strcmp方式。

第三大题

处理一个词搭配的词典,条件为

1) 字典中存在的项是两个词的搭配,例如:

字典中有“今天”和“晚上”两个词,那它们组成的搭配为“今天 晚上”和“晚上 今天”

2)词的集合很大,约为10万量级

3)一个词并不会和其它所有词搭配,通常只会和不超过1万个词搭配

4)对字典的使用读操作很多,通常为上千次请求,几乎没有写入操作。

请设计一个字典服务系统,当请求为两个词的搭配时,能快速返回搭配的相关信息,使用尽可能少的资源,并计算出需要使用的机器资源。

2012实习生校园招聘笔试题

1、给一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么b是a的兄弟单词,比如的单词army和mary互为兄弟单词。

现在要给出一种解决方案,对于用户输入的单词,根据给定的字典找出输入单词有哪些兄弟单词。

请具体说明数据结构和查询流程,要求时间和空间效率尽可能地高。

字典树的典型应用

2、系统中维护了若干数据项,我们对数据项的分类可以分为三级,首先我们按照一级分类方法将数据项分为A、B、C......若干类别,每个一级分类方法产生的类别又可以按照二级分类方法分为a、b、c......若干子类别,同样,二级分类方法产生的类别又可以按照是三级分类方法分为i、ii、iii......若干子类别,每个三级分类方法产生的子类别中的数据项从1开始编号。

我们需要对每个数据项输出日志,日志的形式是key_value对,写入日志的时候,用户提供三级类别名称、数据项编号和日志的key,共五个key值,例如,write_log(A,a,i,1,key1),获取日志的时候,用户提供三级类别名称、数据项编号,共四个key值,返回对应的所有的key_value对,例如get_log(A,a,i,1,key1),

请描述一种数据结构来存储这些日志,并计算出写入日志和读出日志的时间复杂度。

3、C和C++中如何动态分配和释放内存?

他们的区别是什么?

malloc/free和new/delete的区别

4、数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序。

要求空间复杂度为O

(1)。

注:

al[i]元素是支持'<'运算符的。

5、线程和进程的区别及联系?

如何理解“线程安全”问题?

答案:

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

1、简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2、线程的划分尺度小于进程,使得多线程程序的并发性高。

3、另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4、线程在执行过程中与进程还是有区别的。

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

5、从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

这就是进程和线程的重要区别。

算法与程序设计一、

网页爬虫在抓取网页时,从指定的URL站点入口开始爬取这个站点上的所有URL

link,抓取到下一级link对应的页面后,同样对页面上的link进行抓取从而完成深度遍历。

为简化问题,我们假设每个页面上至多只有一个link,如从

问:

对于爬虫分别从

请先描述相应的算法,再给出相应的代码实现。

(只需给出判断方法代码,无需爬虫代码)

两个单向链表的相交问题。

算法与程序设计二、

4、有一种结构如下图所示,它由层的嵌套组成,一个父层中只能包含垂直方向上或者是水平方向上并列的层,例如,层1可以包含2、3、4三个垂直方向上的层,层2可以包含5和6两个水平方向的层,在空层中可以包含数据节点,所谓的空层是指不包含子层的层,每个空层可以包含若干个数据节点,也可以一个都不包含。

在这种结构上面,我们从垂直方向上划一条线,我们约定每一个子层中我们只能经过一个数据节点,在这种情况下,每条线可以经过多个数据节点,也可以不经过任何数据节点,例如,线1经过了3、5、8三个数据节点,线2只经过了14个数据节点。

(1)给出函数,实现判断两个数据节点,是否可能同时被线划中,给出具体的代码。

(2)给出函数,输出所有一条线可以划中的数据节点序列,

可以给出伪代码实现。

思路:

(1)判断两个数所属的同一层次的相同矩形框的下一层次矩形框是水平排列的还是垂直排列的,垂直排列在能在一条线上,水平排列则不能。

(2)用回溯算法求出所有在一条直线上的字符串,用两字符串是否在同一直线上进行剪枝操作。

系统设计题

1、相信大家都使用过XX搜索框的suggestion功能,XX搜索框中的suggestion提示功能如何实现?

请给出实现思路和主要的数据结构、算法。

有什么优化思路可以使得时间和空间效率最高?

应用字典树来求前缀和TOP

K对热词进行统计排序

2、两个200G大小的文件A和B,AB文件里内容均为无序的一行一个正整数字(不超过2^63),请设计方案,输出两个文件中均出现过的数字,使用一台内存不超过16G、磁盘充足的机器。

方案中指明使用java编程时使用到的关键工具类,以及为什么?

2012XX招聘笔试题目

1,设计一个消息队列,要求实现以下的功能:

消息队列的初始化

消息队列的插入消息

消息队列的取消息(阻塞的方式)

消息队列消息的访问(非阻塞的方式)

使用信号量和mutex来实现

2,二叉树的深度优先遍历的非递归实现

3,cmwap和cmnet的区别,总技术的角度阐述。

4,设计一个内存管理系统,要求实现线程安全和内存泄露溢出管理,尽量与malloc/free的效率差不多

2013年校招笔试

一:

简答题(30)

1:

数据库以及线程发生死锁的原理及必要条件,如何避免死锁

答:

产生死锁的原因主要是:

(1)因为系统资源不足。

(2)进程运行推进的顺序不合适。

(3)资源分配不当等。

产生死锁的四个必要条件:

(1)互斥条件:

一个资源每次只能被一个进程使用。

(2)请求与保持条件:

一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3)不剥夺条件:

进程已获得的资源,在末使用完之前,不能强行剥夺。

(4)循环等待条件:

若干进程之间形成一种头尾相接的循环等待资源关系。

避免死锁:

死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。

死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。

避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。

该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2