百度笔试题集合.docx
- 文档编号:30038299
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:27
- 大小:32.41KB
百度笔试题集合.docx
《百度笔试题集合.docx》由会员分享,可在线阅读,更多相关《百度笔试题集合.docx(27页珍藏版)》请在冰豆网上搜索。
XX笔试题集合
一面1.
网络编程经验:
如何判断一个http请求,一个客户端请求已经结束;如何处理服务器多线程
获得一个http请求后,是如何处理的?
返回什么?
有没有试过返回图片?
服务器给客户端请求时,是用什么函数写?
服务器如何获取客户端请求,用什么函数
(需要函数级别的连接有一个认识)
2.cv操作是什么函数cv_init,cv_wait,cv_signal
3.有一些关键词点击次数的文件,如何输出最多点击的一百个(当时应该回答,组织一个100个元素的最大堆)
4.相交链表,如何找相交点(不能要标记)
第一个头遍历到尾,知道他的长度;第二个头遍历到尾,知道他的长度。
这样知道两截链表在交点前的长度,长的先走几步,然后一样长了,再轮流下走,就会相聚,相遇节点就是相交节点)
5.有些文件,频繁访问在磁盘里头的,现在要放到内存中了。
采用什么策略来决定哪些放到内存中?
如果是一些url文件,放在内存后,如何快速的找到某个url的位置(采用字典序或者b树之类树状结构来组织)如何快速找到哪些文件太久没人访问了,把他替换出去?
(再那一棵树,记录树里每个位置url的访问时间;同时,那个url树的节点,也有这个时间树的对应的位置信息。
时间树采用最大堆组织。
要替换出去时,就从树顶取走节点,并且从中获得这个节点在url树对应位置,把他从url树中取走。
当url被访问时,由于url树节点有时间树的位置信息,所以也很快找到对应节点在时间树的位置,然后把他的访问时间更新,然后做堆调整,每次堆调整为logN)
6.c语言相关:
内联函数的好处?
非内联函数被调用的过程是怎么样的?
int,short,char的struct,这几个数应该怎么放,内存小?
怎么防止头文件被include多次?
7.有没有什么问题想问的
8linux网络查看的命令
二面
1.介绍一个项目
2.2.5亿个int数,可能有相同的。
统计出这里头不同的数有多少个?
只有2g内存。
(2.5*1000000000*4=1G)
统计数-用hash,key是数,value是1或0,标记是否出现。
如果key就是那个数,那么找一个数的时候,要遍历hash才知道有没有,慢(就是如果hash紧凑,慢)。
解决方案:
把key作为连续的(就是hash是稀疏的,有个key值没有存在这2.5亿个数中),像数组下标一样,那么要访问第n个数,直接到第n个去看,复杂度是O
(1)
但是,如果连续,2.5亿个数,范围很广,而每个key用int存,会很大量,内存不一定够。
解决方案:
每个key用一位bit来标志。
即数字1放在第一个bit上,数字2放在第二个bit上。
看第n位在不在,就找一下第n个bit是1,还是0
具体方法:
chara[]数组。
假设找3,那么3在3/8--0...3,所以在a[0]中,找第3个bit,如果是0,就设置为1。
最后看看a[]的二进制表示有多少个1就有多少个数
3.海量数据,在mysql中,cpu占用率很高。
如何解决?
1.showprocesslist,看哪个sql查询的多,建索引(问:
建立联合索引时,要考虑什么,怎么建(哪个在前,哪个列在后?
)
2.如果老是在拷贝到临时表,就改配置,把临时表内存改大些
3.还有什么方法:
1)分布式数据库(问:
如果你来设计分布式数据库,你会怎么设计?
)
2)使用缓存(问:
如果缓存中的数据,被删除或跟新了,数据库怎么判断这个缓存的数据不能用了,是脏数据?
)(不懂)
问:
什么情况下cpu会高?
(内存不足)为什么内存不足cpu会高(频繁io读写)
4.n个无序int,(有正有负),给一个数v,如何找出其中的a+b=v的两个数
(我的答案是:
排序O(nlogn),记录序列中,0,大于v,小于v的3位。
尝试最小的和最大的,最大不行,次大。
。
。
,找到某个,加起来小于v了,停止
尝试次小的,从上次大头停止的位置开始尝试
---尝试范围两头不断缩小,复杂度为n)
5.网络相册,一个人可以有多个相册,一个相册有多个图片,如何快速实现增删查移动等操作。
web页面上,图片是翻页显示。
(我回答:
数据库记录:
usr_id,book_id,item_id,position。
相片放在磁盘上,目录为position/usr_id/book_id/item_id
一次查两个操作:
1)数据库查找2)根据位置取图片
如果用户提取某个相册的所有图片,先给他第一个相片和所有item_id列表。
然后用户翻页了,在客户端通过javascript能够知道翻的是哪个item,把item_id,book_id,usr_id发给服务器,服务器根据这个到目录下去找)
(你这种设计会有什么问题?
(答不上来。
。
。
)(如果用户频繁翻页,那么服务器上会不断地在传输图片)(如何解决?
)
第五题我想不出好办法,我觉得一般他们都showthumbnail
就是预览小图片不把原始图片show在页面上,点击后才能看单个图片
6.Unix系统里,一个简单的printhelloworld的c程序,从./a.out执行到屏幕打印出来这句话,是什么过程
(1.读elf,会从相对地址,计算出各个symbol的在进程中的绝对地址。
然后找到入口main函数
1.用到std的库,所有有runtimeload。
2.然后是print调用的进栈
3.然后是系统调用,当前进程被挂起。
系统调用会调用驱动。
。
。
(内核切换,用户态到内核态)
4.内核处理完再唤醒当前进程。
(切换)
5.print调用完毕,退栈
6.main函数退栈
)
问:
哪个进程来调用的main?
(不知道)
应该是当前运行a.out的这个和用户交互的shell作为父进程,然后父进程fork子进程,子进程和父进程一样,然后调用execv会load执行文件,和把参数传到main的堆栈中
7.socket编程,要注意什么问题
(服务器的serversocket的基本模型。
但是大量请求,会不能及时响应。
所以要多线程。
一个监听线程,多个服务线程。
服务线程一开始起来都阻塞在存放请求socket的tasklist上。
wait
监听线程接受到client的socket,放入tasklist中,signal唤醒一个服务线程。
服务线程处理它,并把它从list中移走
注意问题:
tasklist的存放的请求socket是会被放和移走的,消费者生产者问题。
所以要synchronized来互斥?
)
三面
2.fread的过程(文件系统-内核。
。
。
)
3.主DB在接到数据更新后同步到后台DB,如何避免网络丢失之类的问题
(参考答案1:
传的是sql语句,接到后回ack,如果主DB发现一段时间没有回,重发;其实TCP传输,就保证了不会漏数据,所以不会考虑这个问题的)
(参考答案2:
每次传sql语句和当前版本号,然后后台DB会对比版本号是不是正确,发现落后就发数据请求。
主DB保留每次版本号更新关联的sql语句)
4.N个bit,如和判断其中有多少个1.(时间复杂度小于N)
预存一个2的8次方大小的数组,每个数组值是,这个下标的数的二进制的1的个数,例如:
a[0]=0,a[1]=1,a[2]=1,a[3]=2....a[2^8-1]=7(以空间换时间)
然后一个byte一个byte的读,看看他的值,直接以这个值为下标去数组看他的1的个数
另一个方法:
while(v){
v&=(v-1);
num++;
}
1000&0111=0,所以每&一次,不为0,说明有1个1,&到为0为止,num就是1的个数。
复杂度为1的个数。
一个是charstr="hello";sizeof(str)和strlen(str)为多少,还有一个是floata;将其和0做比较的if语句如何编写。
一个数据结构算法实现题:
给定二叉树,写出计算该二叉树的高度的函数
给定二叉树,写出拷贝该二叉树的函数,返回拷贝后根节点值
给定字符串,内容为a-z的字符,其中有一个字符出现为奇数次,其他均为偶数次,找出出现奇数次的字符
tcp\ip协议三次握手
两道算法题:
1)、从一个字符串中找出不出现重复字符的长度最长的子字符串
2)判断两个链表是否有相交
a[n],b[n]是排序好的数据,如何查找a[n]和b[n]合并后的中位数,即将a[n],b[n]放在一起重新排序后的中间那个数
堆和栈的区别,new和malloc之间的区别(运算符函数),什么时候用堆,什么时候用栈
第二个问题:
两个排序的数组,怎么求交集。
这个会,我说两个数组同时遍历,相等的时候输出,小的下标++,他说恩,那你说说这个时间复杂度多少,这个我知道O(M+N),他接着问,现在这两个数组大小相差很大,应该怎么去改进算法,我想了一下,说用二分。
他说恩这个可以,他又问,这样的时间复杂度是多少,我答:
O(Mlog2N),他接着问,在什么情况下,这种优化才有明显效果,现在假如我第一个数组的大小为10万个int,那第二个多大才会有效果。
晕,他给我一支笔,说你想想,我晕,那就算吧,第一种O(M+N),第二种是O(Mlog2N)算了一下,当N>16M的时候才有效果,Mlog2(100K)=M*(10+log2(100))=17M,17M
我又晕,我说是不是因为第一种方法有可能在很早就结束了,他说我们做很多测试,这个是平均时间复杂度,我无语了,接着想,我说是不是因为二分查找出现太多找不到情况,说出口我就知道错了,二分查找最坏的情况就是log2N+1,他说不是,沉默了一会,我估计我一时半会想不出来,我就说:
这个问题我估计短时间想不出来,那哥们给提示了,问我二维数组的二种遍历方式,按行和按列怎么实现,我说这个数据结构书上有讲,二维数组有两种存储方式,一种是按行,一种是按列,他说有按列存储的吗?
怎么个存储方法,当时我没敢说,我说数据结构书上是这样说的。
他没接着问这个,就问我按行遍历快,还是按列遍历快,我说按行,他说为什么,我说数组是顺序存储的,按列要计算地址,CPU寻址是需要时间的,这时我想到我上面题目的原因了。
原来二分查找寻址的时候有开销。
他又接着问,第一个数组和第二数组倍娄相差不是很大的时候怎么优化,假如说N=10M,我晕,真绝,我说应该给大的分块,他又问怎么个分块法,我先给我知道的东西说了一下,在数据结构中,分块查找一般是按照数组大小的开平方来决定的,不过对于我们这个问题,应该考虑到实际情况,想了一会,我说应该按它们之间倍数来分块,他说恩,那我们这个问题就到这。
我晕,
第三个问题:
智力题:
100个球,我和你来拿,每人只能拿1-5之间的数目的球,你先拿,谁最后先拿完,谁就赢。
歇菜了,当时头一大,没有思路,我还是说我想想,想了30秒,我说出自己的方案,我说最后让他给我剩5个以内的球,我就能赢,所以在95球让他最后拿完,于是说,我先拿5个,剩下的,他拿1个我就拿他的对5的补,结果应该有可能会赢,面试GG分析了一下不行,叫我再想,受不了,想了2-3分钟,期间也说了一二个想法,都给他否决了,然后我说,能不能给点提示,他说,你想赢,最后一个回合,你要给他留几个球,我想,说6个,我顿时感觉自己智障,只想自己一下给最后拿完,没想到给人下套,于是我告诉他我的答案,第一次我拿4个,然后你拿多少,我就拿你的个数对6的补,(每次都给你下套,赵大叔应该来拐他几回)。
他说:
恩OK,这个问题就到这。
第四个问题:
一个int数组,问怎么找到这个数组中重复超过一半的数?
这个暑假在崇新通信做过,我说可以用STL吗,他说可以,我说那很简单,给出一个map
他说你这个复杂度多少,我晕又是这个,我说O(2N),他说你这样的话,要用2M的空间开销,你能不能降低开销,我晕了,我想我能不能对数组排序,他说可以,我说那也很好做,我先排序,然后来统计一下里面重复的个数,这样就能做到,他说这是可行的,你要知道当N很大的时候,你的排序要多少时间复杂度,我说最少也是O(Nlog2N),他说,所以这方法不可行,还有没有其它方法,我晕,左思右想,找不到合适的,又用期待眼光看着他,说能不能给点提示(实在脸皮厚),不过可惜的是,他没看我一眼,对着电脑说你想这样的数在数组里面是个什么数,我说是众数,他说这是肯定的,他说应该也是中位数,我说当N很大M也不小,你这样假设不太对,那哥们没说什么,我猛然想到,一次不行,多几次应该差不多,我说了我的想法,我用几次二分,多找几回,如果,出现的数多,就拿这个数来做,哥们笑笑说,这个问题就到这。
输入一个字符串,要求找出字符串中最大子串的长度(如字符串abcd13agbf,当重复出现某个字符时,算一个子串,比如abcd13a或bcd13agb都是子串)。
【XX质量部笔试题】
第一部分:
1.简述链表和数组的优缺点。
2.给了一长串代码,说明函数实现的功能?
执行函数打印的结果?
优化的算法设计?
another_func()…
some_func()…
其实就是比较给定的字符串集合{“cafe”,“baidu”,“duiba”,”face”,“thisone”,”iseasy”}中是否存在有这样的字符串,它们包含的字符以及字符个数相同,出现顺序不必相同,找到并打印出来。
3.纸牌的问题,具体题目太长了,我没有记下来,就是魔术师分别告诉观众一张牌的花色和点数,然后两位观众说几句话来判断这张牌到底是什么?
第二部分:
1.二叉树的前序遍历算法,分别用递归和非递归的方式实现,要求写出可执行的代码。
2.给定一个M*M的字符矩阵,给出了找到连续对角线字符串的方法,从左上到右下,从右上到左下,共有四种对角线字符串,
(1)让你写出怎么在这个字符矩阵的对角线字符串中找到给定的子串,写出算法设计。
(2)如果M*M矩阵超大,无法载入内存,怎么办呢?
3.系统设计题:
设计一个服务调度管理器,服务器接收数据包,数据包大小为32个字节,第一个字节是请求的优先级,后面31个字节是请求的命令,服务器根据客户端发来的命令,分配资源,完成相应的服务,然后将操作的结果返回给客户端,但是由于服务器资源有限,故服务器可以存储操作的结果,如果下次有同样的命令到来的时候,直接获取操作结果返回给客户端即可。
要求设计一个服务器调度管理器,满足以下调度条件:
(1)同样条件下,请求次数多的请求首先获得服务,请求次数最大255
(2)同样条件下,请求优先级高的请求首先获得服务,优先级等级最高16.
要做的是:
(1)设计服务器的核心调度算法:
(2)数据结构设计
(3)如果服务器的记录容量是20万条,分析需要占用多大内存空间?
?
1.字母序列O,T,T,F,有什么规律?
请依据这个规律指出剩下的五个数,并说明其原因。
2.1-16十六个数字分别填入十六格方框内,要求从左至右的数字是从小到大排列,从上至下的数字也是从小到大排列,问:
有多少种排列方式。
3.医院,某人说:
医护人员共16人,医生人数少于护士人数,男医生少于男护士,女护士少于男护士,至少一名女医生,问题:
某人的性别及身份
4.电子商务的问题,是个老题,坛子里有过,就是问为什么宠物商品及化妆品的网上购物率为什么是增长最快的问题
5。
同样是道老题,问易拉罐做成圆柱形的十个原因
6.一道类似运筹的题,就是看你如何做时间安排,说一个人5点30分刚运动完,口很渴,家里没水,女朋友6点左右要来家里吃饭,家里什么食材都没有;邻居拜托去接幼儿园小朋友,并在6点30左右来接孩子回家,孩子很小,必须有人照顾;距居住处最近的菜市场走路5分钟,路上没有杂货店等;幼儿园在相反方向,路途中有商店,步行10分钟;有自行车,但是车要是不确定放在哪里;约好在朋友下班后给朋友打电话。
7.一张比例为3600:
1和一张比例为2000:
1的标准地图,摆放好后,大的地图完全覆盖在小的地图上,问,是否存在一点,使用图钉在地图上按下去,可以使两张地图上的同意真实地点相重合?
原因。
8.有好几个题让选择的,我选择的是策略题,如何设计一款盲人手机,功能,最好有图示;还有根据“红豆生南国,春来发几枝”、“锄禾日当午”“春晓”这几句诗设计主题网站“红豆网”“锄禾网”“春晓网”,网站的功能网,以及网站名称可以给网站带来的竞争优势(选择其一论述即可)
9.是否满意自己本次答卷,如不满意,论述原因
第一部分·简答
1·简述树的深度优先算法、广度优先算法,及非递归实现的特点。
2·在文件系统中,元数据(比如ext2中的inode)的基本作用是什么?
ext2跟ext3的根本区别是什么?
3·在web服务中,负载均衡的基本作用是什么?
请举例你熟悉的一款负载均衡软件或者实现方案,简述它们的实现原理。
(这题后半部分为开放性,我也没记多深,大概就这样)
4·数据库事务的四大特性是什么?
请你简单举例对一个完全不懂数据库的人解释这四个特性。
投数据库管理员(DBA)必答。
5·一个微型处理器,1KB内存和1MHz(每MHz运算次数为10^6),在这样的计算机上面运行程序(程序到该终止时会自动终止,不会出现死循环)最长能运行多长时间?
你可以进行任何需要的假定。
第二部分·算法和程序设计
1·intmaxContinuNum(constchar*inputstr,char*outputstr)
编写一段程序实现该函数,实现返回一个以“\0”结束的字符串中最长的数字串的长度,并把该数字子串的首地址赋给outputstr。
不能使用任何库函数或已经存在的函数,如strlen。
例如:
在字符串“abc123abcdef12345abcdefgh123456789”中,把该字符串的首地址赋给inputstr,返回9,outputstr指向字符串“123456789”的首地址。
第三部分·备份系统设计
(这题太长了,记住的不多,下面是大概的)
设计一个备份系统,要求符合三个备份场景,写出你的设计思路,框架模块设计,实现原理。
要求:
1·该系统要能实现对多服务器备份工作(大概这样,还是。
。
)
2·该系统要具备很好容错性,不能因为多服务器中的一台出现故障儿导致整个备份工作不能进行。
3·。
。
。
4·。
。
。
(这两点记不清了,不好意思)
5·具有较强的扩展性,例如当服务器内存不够时,能灵活的添加内存。
扩展性是附加,在实现前面的要求后再考虑扩展性
备份场景服务器备份网络速度备份开始时间
场景1a1~a1010M/S每天上午10点10分
场景2a1,b1,c1,d130M/S(忘了--!
)
四台服务器
场景3a1~a1005M/S(也不大记得了。
。
)
第一题是
给出5个字母OTTFF请推理并写出后5个字母,并说明原因。
第二题:
将一个正方形平分为16份,将1到16个数字填入其中要求左比右大
上比下大问有多少中方法
第三题一家医院包括我在内有16名医护成员,以下的情况,包括我和不包括我对情况没有任何改变
具体的我给忘了...我有罪...
貌似是
护士多于医生
男医生多于男护士
男护士多于女护士
女医生至少有一个
问说话者的性别和职位
第四题
易拉罐设计为圆柱形的10个理由。
第五题:
1.5点半你回到家大汗淋漓
2.你很渴,但是家里一滴水没有,需要重新烧水
3.刚交往2个周的恋人要拜访你家(6点左右),并且很希望尝尝你的手艺(冰箱里什么也没有)
4.1分钟前你的邻居(关系很好)打电话给你,拜托你去帮她去幼儿园接小孩(4岁),你答应了
幼儿园5点放学(幼儿园在你家东边,有800米远,步行需要10分钟,路上只有五金店和杂货店,买菜需要去菜市场,在
西边,从你家走要5分钟)
5.邻居6点半左右接孩子
6.你有一辆自行车,但不知道钥匙放在哪里
请问你怎么处理以上情况
想起来了还有一题是
第六题:
美国今年的网络销售额涨幅达到20%达到了9亿美元
其中宠物用品和化妆品的涨速最引人注目。
请分析
第七题:
还有一个选答题
1.你平时经常运用搜索引擎吗?
你认为这些搜索引擎都有什么特点和不足?
你认为网络引擎怎么做才能吸引网民的关注?
2.“红豆生南国,春来发几枝”“锄禾日当午,汗滴禾下土”等诗句
许多网站名来源于诗句,你认为“红豆”网,“锄禾”网分别可以设计成什么样的网站?
。
。
。
。
。
(我记得不是很清楚了,对不住大家)
第八题:
有两张标准世界地图,比例尺分别为1:
200000和1:
300000
将两张地图完全重合,然后拿一个图钉按下,你认为有可能按下的点为同一个真实地球上的点吗?
无论行还是不行,请简述理由
第一道题是设计个数据结构,树形结构,共有1000个节点,所有的叶子节点都在同一层,深度不超过10。
满足
a)从节点A出发,方便找到深度为m的所有节点
b)从节点B出发,深度为k,方便找到从root到B的路径
请设计这种数据结构,并给出a,b两种情况的查询操作,及增加和删除操作
后边两小题忘了
第二题是简答题
1.简答DOM和SAX的异同,简答什么是SOAP。
2。
简述你知道的设计模式和他们的应用场景。
第三题是算法题:
1.在一个x,y平面上有超过10000000个点,互不重合,应设计一个算法求出距离最短的3对点,并分析算法的效率.
2有一个无序的实数序列x1,x2.....xn,请设计个算法在线性时间内找到相邻(不是序列相邻,而是在实数轴上相邻)两点间最大距离。
3类似于灯泡开合问题,有1—60个灯泡全关,第一次所有1的倍数状态切换,第二次所有2的倍数状态切换。
。
。
。
。
。
。
一直到60.求最后亮着的事哪几盏灯。
(原题不是这样,但思路是一样的)
(1)简述链表和数组各自的优缺点。
(2)程序题,程序大概如下,a为一个字符串数组,字符串中每个字符都是介于'a'到'z'的小写字母,且字符串长度不超过20。
(a)描述bbb函数的功能(可用一句话)。
(b)假设N=7,且a={"cafe","baidu","recuit","thisone","iseasy","*******","*****"}(有两个字符不记得了....),写出输出结果。
(c)写出bbb函数的时间复杂度(用N表示)。
(d)好像是bbb函数优化提高算法效率之类的。
intaaa(char*b1,char*b2)
{
charg[26];
inti;
for(i=0;i<26;++i)
g=0;
for(i=0;i<26;++i)
g[b1-'a']++;
for(i=0;i<26;++i)
g[b2-'a']--;
for(i=0;i<26;++i)
{
if(g)
return0;
}
return1;
}
intbbb(chara[N][20])
{
intf[N];
inti,j;
for(i=0;i f=0; for(i=0;i { if(! f) f=1; printf("%s",a); for(j=i+1;j { if(aaa(a,a[j])) { f[j]=1; p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 百度 笔试 集合