2023年百度笔试题及答案百度笔试题及答案_第1页
2023年百度笔试题及答案百度笔试题及答案_第2页
2023年百度笔试题及答案百度笔试题及答案_第3页
2023年百度笔试题及答案百度笔试题及答案_第4页
2023年百度笔试题及答案百度笔试题及答案_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

百度笔试题及答案-百度笔试题及答

【各位读友,本文仅供参考,望各位读

者知悉,如若喜欢或者需要本文,可点

击下载下载本文,谢谢!】祝大家工作顺利】

百度java笔试题(含答案)

更多面试题,

百度面试笔试题解答答案

专家回答:

第一题

简评

百度的重要业务是搜索,搜索的基

本原理如下

1.编写爬虫程序到互联网上抓取

网页海量的网页。

2.将抓取来的网页通过抽取,以

一定的格式保存在能快速检索的文献系

统中。

3.把用户输入的字符串进行拆提

成关键字去文献系统中查询并返回结

果。

由以上3点可见,字符串的分析,

抽取在搜索引擎中的地位是何等重要。

因此,百度的笔试面试题中,出现

这样的题就变得理所当然了。

以下是该题的java实现,代码如

下:

程序代码程序代码

import*;

import*;

import*;

/***@authortzy*在下测试通过

*/

publicclassFileNameStat{

privateStringsrcPath;〃要记录的文

献途径

privateMapstatMap;//用于记录的

map

publicFileNameStat(StringsrcPath)

=srcPath;软件开发网

statMap=newTreeMapO;

)

/*获得要记录的URL的文献名*/

publicStringgetFileName(String

urlString)

(

URLurl=null;

StringfilePath=null;

StringfileName=null;

try

(

url=newURL(urlString);

filePath=();

intindex=O;

if((index=C7,,))!=-l)

(

fileName=(index+1);

else

(

fHeName='"';

catch(MalformedURLExceptione)

returnfileName;

}

/*记录指定文献名的个数*/

publicvoidstat(Stringfilename)

(

Integercount=null;

if((filename)!=null)

(

count=(Integer)(filename);

count=newInteger(()+1);

)

else

(

count=newInteger(l);

)

(filename,count);

)

/*记录的主方法*/

publicvoidstart()throws

FileNotFoundExceptionJOException

(

BufferedReaderbfin=new

BufferedReader(newFileReader());

Stringtemp=null;

while((temp=())!=null)

(

stat(getFileName(temp));

)

)

/*输出记录结果*/

publicvoidresult()

(

Iteratorit=().iterator();

while(())

(

entry=()(());

((().equals("")?”空文献名”:())+

“的个数是"+());}

)

publicstaticvoidmain(Stringargs)

throwsException

FileNameStatfns=new

FileNameStat("");〃指定成待记录文献

0;

0;

)

)

第二题

简评:

这道题也与百度的业务有关,百度

现在除了搜索外,尚有贴吧,知道,博

客等重要产品。同时也在积极的探索

社区化,涉及前不久宣布进军电子商务

领域,搜索之外的这些产品,其重要功

能的实现重要是对数据库的操作。因

此,想进入百度,也需要对数据库有一

定的结识。实现思绪及数据库设计:

b该论坛重要有两个实体对象,用户和

帖子;对于帖子对象,有一个问题:回复

的帖子是否应当跟主题帖子存放在同一

个表里?

考虑到天天更新10万帖子,说明

帖子数比较多,为了方便主题的呈现,

我一般都把主题贴和回帖分别放在不同

的表中,把主题贴和回帖分开可以提高

查询效率(300万的访问量天天)。

2,按照1中的思绪,该论坛由两

个对象(用户和帖子)变成三个实体对象,

分别是用户,主题帖子,回复帖子;

3,上述三个对象存在三个关系,

分别是:

用户-主题帖,一个用户可以发0

个或多个帖子,一个帖子相应一个用户

(一对多关系),

主题帖-回复帖:一个主题有。个

或多个回复帖子,一个回复帖子相应一

个主题(一对多关系);

用户-回复贴:一个用户可以回0

个或多个帖,一个帖子相应一个用户(一

对多关系)。

还存在对回复贴的回复,这个考虑

用fatherld来表达。

4,由于三个关系“用户-主题帖,

主题帖-回复帖,用户-回复贴”都是一

对多关系,根据表设计一般原则,可以

将这两个关系独立建立表,也可以不此

外建表而将一对多的关系体现在实体表

中;然而,表间的连接查询是非常耗资源

的,所以应尽量减少表间连接,那么对

三个关系不应当分别建表,而是把用户

的id作为主题表和回帖表的外键,把主

题贴id作为回帖表的外键。

5,鉴于以上考虑,该论坛的三个

表如下所示

表名:t_user_info(用户信息表)

字段名类型缺省值中文含

义约束备注

idInt用户编号PRI

Auto_increment

NameVarchar(30)用户名

EmailVarchar(50)

PhoneVarchar(30)

AddrVarchar(200)

其他字段略,根据需要添加表

名:main_content_info(主题帖信息表)

字屣名类型缺省值中文含

义约束备注

idInt贴编号PRI

Auto_increment

TitleVarchar(200)发帖标题

ContentText发帖内容

UserIDInt用户编号

外键

其他字段略,根据需要添加

表名:sub_content_info(回复贴信

息表)

字段名类型缺省值中文含

义约束备注

idInt贴编号PRI

Auto_increment

TitleVarchar(200)发帖标题

ContentText发帖内容

UserIDInt用户编号外

FatherlDInt父编号

MainlDInt主题帖编号

外键

其他字段略,根据需要添加

6,符合范式分析:

上述表中每个字段不可再分,一方

面满足1NF;

然后数据库表中的每个实例或行

都是可以被惟一地区分(id),不存在部分

依赖,因此满足2NF;

t_user_info(用户信息表)和

main_content_info(主题帖信息表)不存

在任何传递依赖,至少属于BCNF;

但是sub_content_info(回复贴信

息表)不满足3NF,由于定在如下传递依

赖:id—>FatherID,FatherID—>MainID。

范式并不是越高越好,

sub_content_info表只满足2NF却更有效

率,也是当今论坛较主流的设计。

第三题

简评:

如何对海量数据进行快速检索,这

是搜索引擎的必需考虑的问题。这又涉

及到数据结构和算法。因此,要想进

入百度,就必须熟悉一些基本的算法和

数据结构。思绪及解决方案如下:

1:设计用TRIE树实现关键词到

其相应id的快速词典查找

TRIE树的每一个节点为一个包含

256个元素的数组,同时指针指向其下一

级节点

节点定义如下:

structtrienode

(

intid;

structtrienode*child;

}TRIENODE;

假如TRIE树的某个节点的指针为

NULL,说明从跟节点到当前节点的途径

构成文献B中的一个关键词,

在其节点的id保存该关键词的id;

假如指针不为NULL,则id相应为0或

者一个无穷大的整数,标志从根节点

到当前节点的途径不是一个完整

的关键词。

将关键词转化为二进制无符号

char型数组,即对于汉字等双字节字符

视为两个无符号char型整数,

每个元素的取值范围在0到255

之间。

2:生成文献b的TRIE树

环节1:依次读取文献b的每一行,

对每一行执行环节2到环节5

环节2:读取关键词id和关键词,

令为key

环节3:依次读取key的每一个字

符,对每一个字符,执行环节4;

环节4:假如该字符相应的指针为

NULL,则创建其儿子节点;

环节5:为当前节点的相应字符id

置为关键词id

3:根据A文献生成C文献

环节1:依次读取文献A的每一

行,对每一行执行环节2到环节5

环节2:分别获取当前行关键词、

ip地址和时间

环节3:令关键词key=clc2...cm,

对cl至Ucm每个字符,执行环节4

环节4:获取根节点的第cl个元

素指针,转移到节点nodel,

根据nodel的第c2个元素指针,

转移到node2...

根据nodem的第cm个元素,获取

关键词的id

环节5:往文献c+写入一行数据,

格式为关键词的id、ip地址和时间

生成文献B的TRIE树过程时间复

杂度为O(n*m),其中n为文献b行数,

m为文献b关键词的最大长度。TRIE的

空间复杂度为O(n*m),n和m含义同上,

但由于实际应用中关键词之间也许会有

很多前缀相同现象,所以实际花费空间

并不会很高。

生成C文献的时间复杂度同样为

O(n*m),n为文献a行数,m为文献a

关键词的最大长度,由于有了TRIE树之

后,给定一个关键词获得其id的时间复

杂度为关键词长度。生成C文献的过程

除了TRIE树空间外基本不需要太多额

外的空间,空间复杂度为0(1),由于系

统有1G的可用内存,TRIE占用的空间

在几十兆到200M之间(与关键词集合有

关),因此本方法完全可行。

更多面试题,百度网上笔试题及答

编程:1编程:用C语言实现一个

revert函数,它的功能是将输入的字符

串在原串上倒序后返回。编程:2编

程:用C语言实现函数void*

memmove(void*dest,constvoid

*src,size_tn)omemmove函数的功能是

拷贝src所指的内存内容前n个字节

到dest所指的地址上。英文拼写纠

错:3英文拼写纠错:在用户输入英

文单词时,经常发生错误,我们需要对

其进行纠错。假设已经有一个包含了对

的英文单词的词典,请你设计一个拼写

纠错的程序。请描述你解决这个问题的

思绪;请给出重要的解决流程,算法,

以及算法的复杂度;请描述也许的改

善。寻找热门查询:4寻找热门查询

搜索引擎会通过日记文献把用户每次检

索使用的所有检索串都记录下来,每个

查询串的长度为1-255字节。假设目前

有一千万个记录,这些查询串的重复度

比较高,虽然总数是1千万,但假如除

去反复后,不超过3百万个。一个查

询串的反复度越高,说明查询它的用户

越多,也就是越热门。请你记录最热门

的10个查询串,规定使用的内存不能

超过1G。请描述你解决这个问题的思

绪;请给出重要的解决流程,算法,以

及算法的复杂度。集合合并:5集合

合并给定一个字符串的集合,格式如:

{aaabbbccc},{bbbddd},{eeefff}>

{ggg},{dddhhh}规定将其中交集不为

空的集合合并,规定合并完毕后的集合

之间无交集,例如上例应输出{aaabbb

cccdddhhh},{eeefff},{ggg)请描述

你解决这个问题的思绪;请给出重要的

解决流程,算法,以及算法的复杂度请

描述也许的改善。

///〃/////////〃//〃//〃/〃//〃/1题char

*revert(char*str){intn=strlen(str);int

i=0;charc;for(i=0;i{c=str;str=str;

str=c;}returnstr;}

////////////////////////////////〃/2题void*

memmove(void*dest,constvoid

*src,size_tn)

{assert((dest!=0)&&(src!=0));char*

temp=(char*)dest;char*ss=(char*)src;

inti=0;for(;i{*temp=*ss;}return

temp;}〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃〃〃/〃/

3题(1)思绪:字典以字母键树组织,在

用户输入同时匹配(2)流程:每输入一

个字母:沿字典树向下一层,a)若可

以顺利下行,则继续至结束,给出结果;

b)若该处不能匹配,纠错解决,给出拼

写建议,继续至a);

算法:1.在字典中查找单词1.在字典

中查找单词字典采用27叉树组织,每

个节点相应一个字母,查找就是一个字母

一个字母匹配.算法时间就是单词的长度

k.2.纠错算法2.纠错算法情况:当输

入的最后一个字母不能匹配时就提醒犯

错,简化犯错解决,动态提醒也许解决

方法:⑶当前字母前缺少了一个字母:搜

索树上两层到当前的匹配作为建议;(b)

当前字母拼写错误:当前字母的键盘相

邻作为提醒;根据分析字典特性和用户

单词已输入部分选择(a),(b)解决复杂性

分析:影响算法的效率重要是字典的实

现与纠错解决(a)字典的实现已有成熟

的算法,改善不大,也不会成为瓶颈;(b)

纠错策略要简朴有效,如前述情况,是线

性复杂度;(3)改善(3)改善策略选择

最是重要,可以采用记录学习的方法改

善。/〃///〃////////〃/////////////////////〃〃〃/4题

(1)思绪(1)思绪:用哈希做思绪(2)一

方面逐次读入查询串,算哈希值,保存

在内存数组中,同时记录频度选出前

十的频度,取出相应的日志串,简朴但

是了。哈希的设计是关键。

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII5题

思绪:先将集合按照大小排列后,优先考

虑小的集合是否与大的集合有交思绪

集。有就合并,假如小集合与所有其他

集合都没有交集,则独立。独立的集合

在下一轮的比较中不用考虑。这样就可

以尽量减少字符串的比较次数。当所有

集合都独立的时候,就终止。

解决流程:解决流程:1.将集合按照

大小排序,组成集合合并待解决列表2.

选择最小的集合,找出与之有交集的集

合,假如有,合并之;假如无,则与其

它集合是独立集合,从待解决列表中删

除。3.反复直到待解决列表为空算法:

算法:1。将集合按照大小从小到大排

序,组成待解决的集合列表。20取出待

解决集合列表中最小的集合,对于集合

的每个元素,依次在其他集合中搜索是

否有此元素存在:1>若存在,则将此小

集合与大集合合并,并根据大小插入相

应的位置。转3o2>若不存在,则在

该集合中取下一个元素。假如无下一个

元素,即所有元素都不存在于其他集

合。则表白此集合独立,从待解决集合

列表中删除。并加入结果集合列表。转

3o3O假如待解决集合列表不为空,转

2O假如待解决集合列表为空,成功退

出,则结果集合列表就是最终的输出。

算法复杂度分析:算法复杂度分析:假

设集合的个数为n,最大的集合元素为

m排序的时间复杂度可以达成n*log(n)

然后对于元素在其他集合中查找,最坏

情况下为*m查找一个集合是否与其他

集合有交集的最坏情况是m*m*(n-1)

合并的时间复杂度不会超过查找集合

有交集的最坏情况。所以最终最坏时间

复杂度为O(m*m*n*n)需要说明

的是:此算法的平均时间复杂度会很

低,由于无论是查找还是合需要说明的

是并,都是处在最坏情况的概率很小,

并且排序后优先用最小集合作为判断是

否独立的对象,优先与最大的集合进行

比较,这些都最大的回避了最坏情况。

(3)也许的改善:(3)也许的改善:也许

的改善一方面可以实现将每个集合里

面的字符串按照字典序进行排列,这样

就可以将查找以及合并的效率增高。此

外,也许采用恰当的数据结构也可以将

查找以及合并等操作的效率得到提高。

百度n月4日网上笔试题及答案(仅供

参考)

百度11月4日网上笔试题及答案

编程:

1用C语言实现一个revert函数,它的

功能是将输入的字符串在原串上倒序后

返回。

2编程:

用C语言实现函数void*

memmove(void*dest,constvoid

*src,size_t

n)omemmove

函数的功能是拷贝src所指的内存内容

前n个字节

到dest所指的地址上。

3英文拼写纠错:

在用户输入英文单词时,经常发生错

误,我们需要对其进行纠错。假设已有

一个包

含了对的英文单词的词典,请你设计一

个拼写纠错

的程序。

请描述你解决这个问题的思绪;

请给出重要的解决流程,算法,以及算

法的复杂度;

请描述也许的改善。

4寻找热门查询:

搜索引擎会通过日记文献把用户每次

检索使用的所有检索串都记录下来,每

个查询串

的长度为1-255字节。假设目前有一千

万个记录,

这些查询串的反复度比较高,虽然总数

是1千万,但假如除去反复后,不超过3

百万个

O一个查询串的反复度越高,说明查询

它的用户越多,

也就是越热门。请你记录最热门的10

个查询串,规定使用的内存不能超过

IGo

请描述你解决这个问题的思绪;

请给出重要的解决流程,算法,以及算

法的复杂度。

5集合合并:

给定一个字符串的集合,格式如:

{aaabbbccc},{bbbddd},{eeefff},

{ggg},{dddhhh)

规定将其中交集不为空的集合合并,规

定合并完毕后的集合之间无交集,例如

上例应

输出

{aaabbbcccdddhhh},{eeefff},{ggg}

请描述你解决这个问题的思绪;

请给出重要的解决流程,算法,以及算

法的复杂度

请描述也许的改善。

〃〃〃〃〃〃〃/〃〃〃〃〃〃〃〃/1

1题

char*revert(char*str)

(

intn=strlen(str);

inti=0;

charc;

for(i=0;i{

c=str;

str=str;

str=c;

)

returnstr;

)

〃〃〃//〃〃〃〃〃〃〃〃〃〃〃/〃〃

2题

void*memmove(void*dest,constvoid

*src,size_tn)

(

assert((dest!=O)&&(src!=O));

chartemp=(char*)dest;

char*ss=(char*)src;

inti=0;

for(;i{

*temp++=*ss++;

)

returntemp;

〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃/〃〃〃〃〃〃〃

3题

(D思绪:

字典以字母键树组织,在用户输入同时

匹配

流程:

每输入一个字母:

沿字典树向下一层,

a)若可以顺利下行,则继续至结束,

给出结果;

b)若该处不能匹配,纠错解决,给出拼

写建议,继续至a);

算法:

1.在字典中查找单词

字典采用27叉树组织,每个节点相应一

个字母,查找就是一个字母

一个字母匹配.算法时间就是单词的长

度k.

2.纠错算法

情况:当输入的最后一个字母不能匹配

时就提醒犯错,简化犯错解决,动态提醒

也许解决方法:

(a)当前字母前缺少了一个字母:搜索

树上两层到当前的匹配作为建议;

(b)当前字母拼写错误:当前字母的键

盘相邻作为提醒;

根据分析字典特性和用户单词已输入

部分选择⑶,(b)解决

复杂性分析:影响算法的效率重要是字

典的实现与纠错解决

字典的实现已有成熟的算法,改善不

大,也不会成为瓶颈;

(b)纠错策略要简朴有效,如前述情况,

是线性复杂度;

⑶改善

策略立择最是重要,可以采用

记录学习的方法改善。

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

4题

⑴思绪:

用哈希做

(2)

一方面逐次读入查询串,算哈希值,保

存在内存数组中,同时记录频度

选出前十的频度,取出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论