历年百度校园招聘笔试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:简答题(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);杀死进程