百度公司 软件研发工程师 笔试题

一 问答题

1 简述数据库及线程死锁原理以及必要条件,如何避免死锁。

2 面向对象设计的三个基本要素以及五个主要设计原则。

3 Windows内存管理的几种方式及缺点。

二 算法和程序设计题

1 某公司组织羽毛球比赛,实现淘汰制,公司有员工1001人,要评出“羽毛球第一高手”,至少进行多少场比赛,并用代码进行模拟(也可以用伪代码表示)

2 现有100盏灯泡,每一轮打开所有的灯泡,第二轮关闭所有的偶数位置的灯泡,第三轮每隔两盏,如果灯泡是打开的,则关闭,否则打开,依此类推,一百轮之后,还有多少盏灯泡是打开的

2 100盏灯,第一轮操作:全部亮灯;第二轮,隔一个灭一个灯,即第偶数盏等灭掉;第三轮:隔两盏灯,如果是亮着的,灭掉,如果没亮,则打开;以此类推,进行到第100轮操作的时候,有多少盏灯是亮着的?

http://hi.baidu.com/l7l1l0l/item/dc9844f31a20bd7a3c148518

3 有20个有序数组,每个数组有500个元素,都是32位uint的数据,都有降序排列,取出这10000个数据中最大的500个数据。

4 4 系统设计:太长了记不太清楚了,大意就是手机输入法,数字2和字母abc在一个键上,3和def…9和wxyz。针对输入法做了一下改进,联系人保存在UserList中,现在输入数字字符串NumStr“926”,则一下两种情况可以返回:
1 手机号码为13792611111等连续包含“926”的联系人会返回;
2 万年历,王小二。。。等会返回;因为“926”对应的一种拼音组合是“WAN”,这样wannianli,wangxiaoer等中包含wan,符合结果。
依据以上,写出程序。
输入:UserList,NumStr,和汉字拼音映射表Dir;
输出:ResultList

 

1.产生死锁的原因主要是

 因为系统资源不足。 

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

资源分配不当等。 
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 

产生死锁的四个必要条件 
互斥条件:一个资源每次只能被一个进程使用。 
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

2

答:面向对象设计的三个基本要素:封装、继承和多态

五个主要设计原则:单一职责原则、开放封闭原则、Liskov替换原则、依赖倒置原则、接口隔离原则


面向对象三要素:封装继承多态;五个原则不会。
内存管理答非所问,我写的是堆啊栈啊常量区啊什么的,问的实际不是这个!!!!应该是虚拟内存啊什么的。要不为啥强调Windows下呢?

算法问题:

1.
羽毛球大赛赛程安排,采用递归。首先我先把每个人的模拟成一个结构体,其羽毛球水平是其一个int类型的属性,越大越好,随机分配。
然后分情况,每次淘汰一半人,如果剩余人数是偶数,则比较第一个和最后一个,把能力值(int)大的人放到前面的位置,把要淘汰的人放到后面的位置,整个数组的前一半所表示的员工有意义,后一半不考虑;如果剩余人数是奇数,既要先把最后一个人轮空,前偶数个人按照上一情况比赛,知识最后保留所有人数的一半+1,当然不能然最后一个人一直轮空,所以将其移到第一个位置,其他整体后移一位然后继续。。。现在想起来,前面选择一个位置随机和最后一个位置替换就成了。。。而且这道题我写的很乱。。。

2.100盏灯,刚开始毫无思路,后来忽然想到把每一盏灯变化的次数求出来不久行了吗?这样一看,题目 很明了,实际上就是告诉你有一百次操作,第 i 次操作就是把第 i*1,i*2…i*n(要小于等于100)个灯的状态改变,这样再看,那么第1盏灯值变一次,第2,3,5…只变了2次,第4盏灯只变了3 次…瞬间明白,分解因数。。。但是乐极生悲,我当时想当然的认为只要分解成1,本身,和其他素因子的个数就行了,在出考场的那一瞬间,我想到,其实不是素因子也可以。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。天哪!!!!!!!!!!!!!!!!!!!

3.20个数组问题:我感觉这道题应该不太难,可能是想让我进行一些优化什么的吧,提出一些高级的算法,不过我只想到最简单的情况,就是比较20个数组的第一个数,找最大的‘。假设第i组第一个最大,则这个数在10000个数中最大,保留,然后用剩余19个数字和第i组第二个数比较,找最大,找到剩余9999中最大的数字。。。依次,但是我一直不明白为啥要告诉32位。。。。。。应该是我有什么没想到的地方。。。

系统涉及题目,开始感觉不是特别难吧,但是把算法全部实现,我觉得我是难以完成,什么字符串匹配了,都忘了,之好用JAVA中的String来投机取巧,但是这样一来,还是有问题,怎样把你输入的StrNum转化成所有拼音组合并且排除其中一些不可能的组合。我估计在短时间内写不出来,而且实在恶心的不想继续再大体,所以瞎写几行,草草交了,抬头一看,偌大的中心考场,本来一人爱着一人,全部坐满,现在考场只剩下十几个了。。。感觉思路还是不清晰,基础不扎实,不能很快的进入状态,而且我写的答卷涂涂改改。。。大概要倒老师胃口了吧。。。。。。。。。。。。。。。。。。。。。。。。。。上天保佑。

 

转载于:https://www.cnblogs.com/loveRui2012/archive/2012/10/12/2721401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值