您的位置:首页 > 编程语言 > C语言/C++

阿里题目总结——阿里巴巴2010搜索研发C++工程师笔试卷

2015-08-22 17:25 597 查看
1.

操作系统的知识

有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,当执行如下访问页号序列后1,2,3,4,5, 1,2,5,1,2,3,4,5,会发生多少缺页?

答案:10

2.

堆排序

【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()

答案:【1、2、5、4、3、9、7、8、6】

解析:

删除零号元素后,最后一个元素替换零号元素,然后调用下滑调整算法

3.

计算机操作协调:存储管理

某页式存储管理系统中,地址寄存器长度为24位,其中页号占14位,则主存的分块大小是()字节。

答案:2^10

解析:

地址寄存器长度为24位,其中页号占14位,则页内地址占10位,分页大小与主存块大小相同,因此, 主存的分块大小是210字节

4.

函数指针

定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?

答案:int (*(*F)(int, int))(int)

解析:

针对A. 先看优先级最高的,即内部括号(*F),看出F是一个指针,然后再看右边(int , int),说明它是一个函数指针,(int,int)为此函数的形参列表.(* (*F)(int, int) ) .再往外看, (*F)(int, int) 括号外面* 表示这又是一个指针,而且去掉这一部分剩下

int (*)(int)

这是一个典型的函数指针, 参数int ,返回值int. 那就是说 函数指针F 指向的函数(函数1) 有两个int,然后这个函数(函数1) 返回值 又是一个函数指针,这个函数指针的原型函数(函数2)是int fun(int).
其实本质就是函数指针 指向 一个 返回函数指针的函数

5.
函数指针与数组
声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()
答案:int (*(*p)[10])(int *)
解析:
先看未定义标识符p,p的左边是*,*p表示一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,消释数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int*,返回值是int

6.
C++知识
下列代码编译时会产生错误的是()



答案:语句4

解析:

语句3应该为Foo b,但语句3没出错语句4出错了,出错提示request for member 'fun' in 'b', which is of non-class type 'Foo()'。感觉似乎语句3被解释成函数声明了,b成了函数指针,没有成员fun()

7.

C++的知识

在32位机器上,下列代码中



sizeof(a)的值是()

答案:22

解析:

首先,#pragma pack(2) 强制设定为2字节对齐

i 4字节
u 一个为13,一个为4,默认为4字节对齐;
union占对齐后数据的最大字节大小,默认为13+3=4*4=16;
但是,该处强制为2字节对齐,实际为13+1=2*7=14字节
color 枚举类型的实例 4字节

4+14+4=22字节

8.
STL容器

C++ STL 的实现:

1.vector 底层数据结构为数组 ,支持快速随机访问

2.list 底层数据结构为双向链表,支持快速增删

3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

6.45是适配器,而不叫容器,因为是对容器的再封装

7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

8.set 底层数据结构为红黑树,有序,不重复

9.multiset 底层数据结构为红黑树,有序,可重复

10.map 底层数据结构为红黑树,有序,不重复

11.multimap 底层数据结构为红黑树,有序,可重复

12.hash_set 底层数据结构为hash表,无序,不重复

13.hash_multiset 底层数据结构为hash表,无序,可重复

14.hash_map 底层数据结构为hash表,无序,不重复

15.hash_multimap 底层数据结构为hash表,无序,可重复

9.

C++运算符的重载问题

除了 . , .* , :: , ? : , sizeof , typeid 这几个运算符不能被重载,其他运算符都能被重载。delete不能够重载,operator delete可以重载。

.表示成员选择
.*表示指向成员操作的指针

?:表示条件操作
::作用域符

10.

const常量

1.如果const位于*号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。
2.如果const位于*号的右侧,const就是修饰指针本身,即指针本身是常量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: