付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、百度笔试题及答案-百度笔试题及答【各位读友,本文仅供参考,望各位读 者知悉,如若喜欢或者需要本文,可点 击下载下载本文,谢谢!】祝人家工作顺利】百度java笔试题(含答案)更多面试题, 百度面试笔试题解答答案 专家回答: 第一题 简评 百度的主要业务是搜索,搜索的基本原理如下1编写爬虫程序到互联网上抓取网页海量的网页。2将抓取来的网页通过抽取,定的格式保存在能快速检索的文件系统3把用户输入的字符串进行拆分成关键字去文件系统中查询并返回结果。由以3 点可见,字符串的分析,抽取在搜索引擎中的地位是何等重要。因此,百度的笔试面试题中,出现这样的题就变得理所当然了。以下是该题的 java 实现,代码如
2、下: 程序代码 程序代码import *;import *;import *;/* * author tzy * 在下测试通过 */public class FileNameStat private String srcPath;/ 要统计的文件路径private Map statMap;/ 用于统计的 mappublic FileNameStat(StringsrcPath)=srcPath; 软件开发网statMap=new TreeMap();/* 获得要统计的 URL 的文件名 */publicStringgetFileName(String urlString)URL url=nul
3、l;String filePath=null;String fileName=null;try url=new URL(urlString);filePath=();int index=0;if (index=( “/ ”)!=-1)fileName=(index+1);elsefileName=catch(MalformedURLExceptione)return fileName;/* 统计指定文件名的个数 */public void stat(String filename)Integer count=null;if(filename)!=null) count=(Integer)(fi
4、lename);count=new Integer()+1);else count=new Integer(1);(filename,count);/* 统计的主方法 */Iterator it=().iterator();FileNotFoundException,IOExceptionBufferedReader bfin=newBufferedReader(new FileReader();String temp=null;while(temp=()!=null) stat(getFileName(temp);/* 输出统计结果 */ public void result()while(
5、)entry=()();().equals()?”空文件名” :() +的个数是” + ();public static voidmain(Stringargs) throws ExceptionFileNameStatfns=newFileNameStat( “);/ 指定成待统计文件();();第二题 简评: 这道题也与百度的业务有关,百度现在除了搜索外,还有贴吧,知道,博 社区化,包括前不久宣布进军电子商务 领域,搜索之外的这些产品,其主要功 能的实现主要是对数据库的操作。客等重要产品。同时也在积极的探索此,想进入百度,也需要对数据库有 定的认识。 实现思路及数据库设计:1 ,该论坛主要
6、有两个实体对象, 用户和 帖子 ;对于帖子对象,有一个问题:的帖子是否应该跟主题帖子存放在同 个表里?考虑到每天更新 10 万帖子,说明帖子数比较多,为了方便主题的呈现,我般都把主题贴和回帖分别放在不同的 表中,把主题贴和回帖分开可以提高查 询效率 (300 万的访问量每天 )。2,按照 1 中的思路, 该论坛由两个对象 (用户和帖子 )变成三个实体对象,别是用户,主题帖子,复帖子 ;3,述三个对象存在三个关系,别是:用户 - 主题帖,一个用户可以发个或多个帖子,一个帖子对应一个用户(一对多关系 ),题帖 -复帖:一个主题有 0 个或多个回复帖子,一个回复帖子对应个主题 (一对多关系 );用户
7、-复贴:个用户可以个或多个帖,一个帖子对应一个用户 (对多关系 )。还存在对回复贴的回复,这个考虑用 fatherId 来表示。4,由于三个关系 “用户 - 主题帖,题帖 -复贴” 都是对多关系,根据表设计一般原则,可 以将这两个关系独立建立表,也可以不 另外建表而将一对多的关系体现在实体表中;然而,表间的连接查询是非常耗资 源的,所以应尽量减少表间连接,那么 对三个关系不应该分别建表,而是把用 户的 id 作为主题表和回帖表的外键,把题贴 id 作为回帖表的外键。5,鉴于以上考虑, 该论坛的三个表如下所示表名: t_user_info ( 用户信息表 )字段名 类型 缺省值中文含义 约束 备
8、注id Int用户编号PRIAuto_incrementName Varchar(30)用户名Email Varchar(50)Phone Varchar(30)Addr Varchar(200)其他字段略, 根据需要添加 表名:main_content_info ( 主题帖信息表 )字段名 类型 缺省值 中文含义 约束 备注id Int贴 编 号 PRIAuto_incrementTitle Varchar(200)发帖标题Content Text 发帖内容UserID Int用户编号外键其他字段略,根据需要添加表名:sub_content_info (复贴信息表)字段名 类型缺省值 中文含
9、义约束 备注idInt贴 编 号 PRIAuto_incrementTitle Varchar(200)发帖标题ContentText发帖内容UserIDInt用户编号FatherIDInt父编号MainIDInt题帖编号外键其他字段略,根据需要添加6,符合范式分析:述表中每个字段不可再分,首先满足 1NF;然后数据库表中的每个实例或行都是可以被惟一地区分 (id) ,不存在部分依 赖,因此满足 2NF;t_user_info ( 用 户 信 息 表 ) 和main_content_info(主题帖信息表 )不存在任何传递依赖,至少属于 BCNF;但是 sub_content_info (回复
10、贴信息表)不满足3NF,因为存在如下传递依id->FatherID,FatherID->MainID。范式并不是越高越好,sub_content_info 表只满足 2NF 却更有效率,也是当今论坛较主流的设计。第三题 简评: 如何对海量数据进行快速检索,这是搜索引擎的必需考虑的问题。这又涉及到数据结构和算法。因此,要想进入百度,就必须熟悉一些基本的算法和数据结构。思路及解决方案如下:1: 设计用 TRIE 树实现关键词到其对应 id 的快速词典查找TRIE 树的每一个节点为一个包含256 个元素的数组,同时指针指向其下级节点点定义如下:struct trienodeint id;
11、struct trienode *child;TRIENODE;如果 TRIE 树的某个节点的指针为NULL ,说明从跟节点到当前节点的路径 构成文件 B 中的一个关键词,在其节点的 id 保存该关键词的 id;如果指针不为 NULL ,则 id 对应为 0 或 者一个无穷大的整数,标志从根节点到当前节点的路径不是一个完整的关键词。将关键词转化为二进制无符号 char型数组,即对于汉字等双字节字符视为 两个无符号 char 型整数,每个元素的取值范围在 0 到 255 之2:生成文件 b 的 TRIE 树 步骤 1 :依次读取文件 b 的每一行,对每一行执行步骤 2 到步骤 5步骤 2:读取关
12、键词 id 和关键词,令为 key步骤 3:依次读取 key 的每一个字 符,对每一个字符,执行步骤 4;步骤 4:如果该字符对应的指针为NULL ,则创建其儿子节点 ;步骤 5:为当前节点的对应字符 id置为关键词 id3:根据 A 文件生成 C 文件 步骤 1:依次读取文件 A 的每一行,对每一行执行步骤 2 到步骤 5步骤 2:分别获取当前行关键词、 ip地址和时间步骤 3 :令关键词 key=c1c2.cm对 c1 到 cm 每个字符,执行步骤 4步骤 4:获取根节点的第 c1 个元素指针,转移到节点 node1 ,根据 node1 的第 c2 个元素指针,转移到 node2.根据 n
13、odem 的第 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
14、 树空间外基本不需要太多额 外的空间,空间复杂度为 O(1) ,由于系 统有 1G 的可用内存, TRIE 占用的空间 在几十兆到 200M 之间 (与关键词集合有关),因此本方法完全可行。更多面试题,百度网上笔试题及答编程: 1 编程: 用 C 语言实现一个revert 函数,它的功能是将输入的字符串在原串上倒序 后返。 编程: 2 编*src,size_t n) 。 memmove函数的功能是拷贝 src 所指的内存内容前 n 个字到 dest 所指的 地址。 英文拼写纠错: 3 英文拼写纠错:在用户输入英文单词时,经常发生错误,我们需要 对其进行纠错。 假设已 经有一个包含了 正确英文单
15、词的词典,请你设计一个拼 写纠错的程序。 请描述你解决这个问题 的思路; 请给出主要的处理流程, 算法, 以及算法的复杂度; 请描述可能的改 进。搜索引擎会通过日志文件把用户每次检 索使用的所有检索串都记录下来, 每个查询串的长度为 1-255 字节。假设目前有一千万个记录, 这些查询串的重复度比较高, 虽然总数是 1万,但如果除去重复后,不超过 3 百万个。一个 查 询串的重复度越高,说明查询它的用户 越多,也就是越热门。请你统计最热 的 10 个查询串,要求使用的内存不能 超过 1G。 请描述你解决这个问题的思路; 请给出主要的处理流程,算法,以 合并 给定一个字符串的集合,格式如:及算法
16、的复杂度。 集合合并:5 集合aaa bbb ccc , bbb ddd ,eee fff , ggg , ddd hhh 要求将其中交集不 为空的集合合并, 要求合并完成后 的集 合之间无交集,例如上例应输出 aaa bbb ccc ddd hhh , eee fff , ggg请描述你解决这个问题的思路; 请给出要的处理流程,算法,以及算法的复 杂度 请描述可能的改进。/ char *revert(char * str) int n=strlen(str); int i=0; char c; for(i=0;i c=str; str=str; str=c; return str; / 2v
17、oid * memmove(void *dest,constvoid*src,size_tn) assert(dest!=0)&&(src!=0); char * temp=(char * )dest; char * ss=(char * )src; int i=0; for(;i *temp =*ss ; /3 题 (1) 思路 : 字典以字母键树组织,在用户输入同时匹配 (2) 流程 :!1!每输入一个字母: 沿字典树向下一层,a)若可以顺利下行,则继续至结束,给出结果;b)若该处不能匹配,纠错处理, 给出拼写建议 ,继续至 a);算法 : 1.在字典中查找单词 1.在字典
18、中查找单词 字典采用 27 叉树组织 ,每个点对应一个字母 ,查找就是一个字母个字母匹配 .算法时间就是单词的长度NIR!1!k. 2.纠错算法 2.纠错算法 情况 :当输入的最后一个字母不能匹配时就提示出错!1!简化出错处理,动态提示 可能 处理方 法:(a)当前字母前缺少了一个字母:搜索 树上两层到当前的匹配作为建议; (b)当前字母拼写错误:当前字母的键盘相 邻作为提示; 根据分析字典特征和用户 单词已输入部分选择 (a),(b) 处理 复杂性 分析:影响算法的效率主要是字典的实 现与纠错处理(a)字典的实现已有成熟 的算法,改进不大,也不会成为瓶颈; (b)纠错策略要简单有效 ,如前述
19、情况,是线性复杂度; (3) 改进 (3) 改进 策略选择 最是重要,可以采用统计学习的方法改/ 4 题 (1)思路 (1)思路:用哈希做思路 (2) 首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度 简单不过了。哈希的设计是关键选出前十的频度,取出对应的日 志串,心、/ / 5 题 思路:先将集合按照大 小排列后 ,优先考虑小的集合是否与大的集合有交 思路 集。有就合并,如果小 集合与所有其他集合都没有交集,则独 立。独立的集合 在下一轮的比较中不用 考虑。这样就可以尽量减少字符串的比 较次数。当所有 集合都独立的时候,就 终止处理流程: 处理流程:1.将集合按照大小排序,组成集
20、合合并待处理列表 2.选择最小的集合,找出与之有交集的集 合,如果有,合并之;如果无,则与 其 它集合是独立集合, 从待处理列表 中删 除。 3.重复直到待处理列表为空 算法: 算法: 1。将集合按照大小从小到大排序,组成待处理的集合列表。 2。取出待处理集合列表中最小的集合,对于集合 的每个元素,依次在其他集合中搜索是 否有此元素存在: 1> 若存在,则将此 小集合与大集合合并,并根据大小插入 对应的位置 。转 3。 2> 若不存在,则在该集合中取下一个元素。如果无下 个元素,即所有元素都 不存在于其他集 合。则表明此集合独立,从待处理集合加入结 果集合列表。转3。 3。如果待处
21、理集合列表不为空, 转2。 如果待处理集合列表为空,成功退 出,则结果集合列表就是最终的输出。算法复杂度分析: 算法复杂度分析: 假 设集合的个数为 n ,最大的集合元素为m 排 序 的 时 间 复 杂 度 可 以 达 到n*log(n) 然后对于元素在其他集合中 查找,最坏情况下为 *m 查找一个 集合 是否与其他集合有交集的最坏情况是m*m*(n-1) 合并的时间复杂度不会超过查找集合有交集的最坏情况。所以最 终最坏时间复杂度为 O(m*m*n*n) 需 要说明 的是:此算法的平均时间复杂度会很低, 因为无论是查找还是合 需要说明的是 并,都是处于最坏情况的概率很小,而 且排序后优先用最小
22、集合作为判断是否 独立的对象,优先与最大的集合进行比较,这些都最大的回避了最坏情况。 (3)可能的改进: (3) 可能的改进:可能的改进 首先可以实现将每个集合里面的 字符串按照字典序进行排列,这样就可 以 将查找以及合并的效率增高。另外, 可能采取恰当的数据结构也可以将查找 以 及合并等操作的效率得到提高。百度 11 月 4 日网上笔试题及答案 (仅供百度 11 月 4 日网上笔试题及答案编程:1 用 C 语言实现一个 revert 函数,它的 功能是将输入的字符串在原串上倒序后2 编程: 用 C 语 言 实 现 函 数 void *memmove(void *dest,const void
23、 *src,size_tn)。 memmove函数的功能是拷贝 src所指的内存内容前 n 个字节 到 dest 所指的地址3 英文拼写纠错:在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有个包含了正确英文单词的词典,请你设计 个拼写纠错 的程序。请描述你解决这个问题的思路; 请给出主要的处理流程,算法,以及算 法的复杂度; 请描述可能的改进。4 寻找热门查询: 搜索引擎会通过日志文件把用户每次检 索使用的所有检索串都记录下来,每个 查询串 的长度为 1-255 字节。假设目前有万个记录,这些查询串的重复度比较高,虽然总数是1万,但如果除去重复后,不超过3 百万个 。一个查
24、询串的重复度越高,说明查询 它的用户越多, 也就是越热门。 请你统计最热门的 10 个 查询串,要求使用的内存不能超过 1G 。请描述你解决这个问题的思路; 请给出主要的处理流程,算法,以及算 法的复杂度。5 集合合并:给定一个字符串的集合,格式如:aaa bbb ccc , bbb ddd ,eee fff ,ggg , ddd hhh要求将其中交集不为空的集合合并,要 求合并完成后的集合之间无交集,例如例应输出aaa bbb ccc ddd hhh , eee fff ,ggg请描述你解决这个问题的思路; 请给出主要的处理流程,算法,以及算 法的复杂度请描述可能的改进。/1 char *r
25、evert(char * str) int n=strlen(str);int i=0;char c;for(i=0;i c=str;str=str;str=c;return str;/ void * memmove(void *dest,const void *src,size_t n) assert(dest!=0)&&(src!=0);char * temp=(char * )dest;char * ss=(char * )src;int i=0;for(;i *temp+=*ss+;return temp;/ /字典以字母键树组织,在用户输入同时 匹配流程:每输入一个字
26、母: 沿字典树向下一层,a)若可以顺利下行,则继续至结束,给出结果;b) 若该处不能匹配,纠错处理,给出拼NIR!1!写建议 ,继续至 a);算法:1. 在字典中查找单词字典采用 27 叉树组织 ,每个节点对应个字母 ,查找就是一个字母个字母匹配 .算法时间就是单词的长度NIR!1!k.2. 纠错算法情况 :当输入的最后一个字母不能匹配时NIR!1!就提示出错 ,简化出错处理,动态提示可能 处理方法 :(a)当前字母前缺少了一个字母:搜索树 (b) 当前字母拼写错误:当前字母的键盘两层到当前的匹配作为建议;NIR!1!相邻作为提示; 根据分析字典特征和用户单词已输入部 分选择 (a),(b) 处理复杂性分析:影响算法的效率主要是字 典的实现与纠错处理字典的实现已有成熟的算法, 改进不大, 也不会成为瓶颈;(b) 纠错策略要简单有效 ,如前述情况,是线性复杂度;(3)改进策略选择最是重要,可以采用 统计学习的方法改进。/ /用哈希做(2)首先逐次读入查询串,算哈希值,保存 在内存数组中,同时统计频度 选出前十的频度,取出对应的日志串, 简单不过了。哈希的设计是关键。/ /思路:先将集合按照大小排列后 ,优先考虑小的集合是否与大的集合有交集。有就合并,如果小集合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 紧急采购预案制度
- 采购部采购制度
- 采购配额管理制度
- 采购集中谈判制度
- 采购预审批制度
- 金海粮油采购流程制度
- 钢筋采购制度
- 十八项制度考试题及答案
- 新零售对蒙古国消费者购买意愿的影响因素研究
- AI时代的垂直软件护城河
- 多个项目合同范本
- 2026年江苏信息职业技术学院单招职业倾向性测试必刷测试卷附答案
- 2026年皖北卫生职业学院单招职业适应性测试题库附答案
- 海事局国考面试题及答案
- 2026年江西电力职业技术学院单招职业技能考试题库及参考答案详解1套
- 妇科肿瘤及早期症状
- 谈话室装修合同范本
- 化肥产品生产许可证实施细则(一)(复肥产品部分)2025
- 骨关节疾病的pt康复教案
- 备战2026年中考语文5年中考2年模拟真题作文探究-【浙江省】(解析版)
- 2025年10月自考00908网络营销与策划试题及答案含评分参考
评论
0/150
提交评论