阿里题目总结——阿里巴巴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就是修饰指针本身,即指针本身是常量。
操作系统的知识
有一个虚拟存储系统,若进程在内存中占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就是修饰指针本身,即指针本身是常量。
相关文章推荐
- [leetcode]Remove Element C语言
- 静态链接和动态链接
- 小议C和C++中的const类型限定符
- poj1595 Prime Cuts (素数筛选)
- C++中substr函数的用法
- c++Map容器 详解
- C语言数组指针指针数组
- [leetcode]Rotate Array C语言
- C语言的System使用
- C++中的随机数
- POJ C++程序设计 编程题#1 编程作业—运算符重载
- Effective C++ 条款12 复制对象时勿忘其每一个部分
- POJ C++程序设计 编程题#1 编程作业—运算符重载
- C/C++面试笔试题目汇总
- C++ STL Quick Review
- C++builder的文件读写操作总结(1)
- C++自增自减重载
- C++builder的文件读写操作总结(2)
- USACO Ski Course Design解析和C语言实现
- c++友元实现操作符重载