2012 年阿里巴巴校园招聘阿里云 C++笔试试题
1、(2 分)1)请列出两个线程(或进程)死锁的三个必要条件
2)当异常(Exception)发生的时候,智能指针(SmartPointer)的析构函数是被谁调用的?
3)一般的台式机硬盘一次随机读写大约需要多少毫秒(0.1ms、1ms、10ms、100ms)?
4)除了应用程序的系统调用之外,LinuxKernel 中的代码在什么情况下还有机会运行?
2、(1 分)求下面函数的返回值。输入 x 的值为 2012。
int func(int x)
{
int countx=0;
while(x)
{
++countx;
x=x&(x-1);
}
return countx;
}
3、(1 分)一进程在执行时,如果按下列页号访问:1、2、3、4、2、1、5、6、2、1、2、3、
7、6、3。进程占用 4 页物理内存,采用 FIFO 淘汰算法和 LRU 淘汰算法时,各产生多
少次缺页中断?分别写出使用两种方法时,依次被淘汰的页面号以及最后内存空间中剩
余的页面。
4、(1 分)写出下列程序的输出结果:
#include
using name space std;
int main()
{
char *a=”Aliyun”;
char **b=&a;
*b=”programming test”;
char *c=++a;
a=”talents.”;
return printf(“%c\n,*++c);
}
5、(1 分)连接 A、B 两地的公路长 240km,现各有一列汽车分别从两地出发相向而行,各
自保持匀速 50km/h 和 30km/h。有一鸟儿也和 A 地的汽车一起从 A 地出发,以 65km/h 的速
度沿公路朝 B 地飞行;当它遇到 B 地的汽车的时候,折返往 A 飞;再遇到 A 地汽车的时候,
折返往 B 飞;如此往返。请问当 A、B 两地出发的汽车相遇的时候,鸟儿飞行了多少 km?
6、(1 分)一个骰子有 6 个面,分别是 1 个 1、2 个 2、3 个 3。请问平均需要抛多少次骰子
才能使 1、2、3 这三面都至少出现一次。
7、(1 分)请实现一个递归函数将一个字符串反转(字符串最大长度为 100)。例如:如果
char *str=”abcdef”,反转后的字符串 str 为“fedcba”。
8(2 分)请编写测试用例,来判断某一个文件系统中的一个函数实现是否符合规范定义。
该函数名为:bool VailidataPath(char* path),其作用是检测用户输入路径是否合法。
系统合法的路径名称规范要求必须同时满足以下四个规则:
a) 字符串长度最短为 1,最长为 2048。
b) 只允许出现大小写字母、数字、下划线(_)和斜杠(/)中的一种或多种字符;
c) 斜杠(/)禁止连续出现;
d) 路径中禁止包含字符串“/delete/”。
注意:本题不要求实现 ValidataPath()函数,只要求写出测试用例。
9、(2 分)下面的代码定义一个 value 为 int 的节点组成的二叉树的数据结构:
struct Node
{
Node * left, right;
int value;
};
已知二叉树最大深度为 10,请实现一函数宽度优先遍历该二叉树并打印所有节点的值。
以下深度为 4 的二叉树遍历宽度优先历结果为:8、5、12、3、6、10、15、1、4、9、
11、13、20。
8
5
12
3
1
4
6
9
10
15
11
13
20
10、(3 分)给出 26 个小写字母(a~z)在一份文档里面的绝对位置信息列表(位置按从小
到大顺序,以整数 vector 形式存在)。例如:字母 a 出现在 4、29、40 个字符位置,字母 b
出现在第 10、38、74 个字符位置。文档本身可能包含非英语字母字符。请编写一个程序判
断给定小写英文单词是否在文档中出现。
bool find(vector pos[26], char* word);