昨天的笔试。
今晚才抽出空来一下写。
下面内容基本是回忆的,正确性不敢保证。
一、简答题(30分)
1.简述数据库及线程死锁产生的必要条件,并简述如何避免死锁。
2.简述c++面向对象思想的3大要素和5大设计原则。
3.简述windows内存管理的几种方式,及其优缺点。
二、程序设计和算法题(40分)
1.某公司有1001个员工,公司组织羽毛球比赛,采用淘汰赛机制,最后选出一个冠军,问至少需要多少场比赛?并请(伪)代码模拟比赛。
2.有100盏灯和100个开关,刚开始的时候等全是灭的,someone第一轮按下所有开关(开的按一下变灭,灭的按一下变开),第二轮隔一个按一下(偶数个按),第三轮隔2个(3的倍数个按),求第100轮之后有多少盏灯是亮的。
3.有100个有序(降序)数组,每个数组有100个元素,请将这100*100=10000个数进行排序(降序)。
三、系统设计题(30分)
模拟一个电话簿的查找功能。
在手机上,1-9每个数字都对应了若干个字母,如2对应abc。
电话簿中存储了如下结构:
<姓名,电话号码>
用户按下一系列数字numStr。
有如下匹配规则:
1.数字匹配,若某电话号码的某连续子串是该numStr,则输出干电话号码对应的条目,如输入234,有<张三,15202341245>,则匹配成功。
2.字母匹配,若该numStr可以对应某字母序列,该字母序列是某人名字拼音的一个连续子串,则匹配。
给定UserList<name,phone>和数字字母对应规则dict,以及输入的numStr,求最后匹配的条目,result<name,phone>。
下面简要给出我的答案。
一、简答题
1.数据库的不懂。线程死锁的必要条件:互斥条件,占有并请求,不剥夺,环路等待。避免:银行家算法。
2.3大要素:封装、继承、多态。5大设计原则:单一职责,开闭原则,里氏替换,依赖倒置,高内聚低耦合。
3.写的固定分区分配,段页式什么的,应该错了。
二、程序设计及算法
1.一次比赛最多只能淘汰一名选手,最后只剩下冠军,故至少1001-1=1000场比赛。
2.某盏灯亮当且仅当它是平方数。用因数分解可证。
3.用优先队列,容量100。效率10000*log100.
三、系统设计题
类似于strstr的实现即可。
规则二略改strstr的实现。