2017 搜狗校招c++工程师笔试试卷
2017-08-15 19:25
686 查看
注:参考大部分取自牛客网试卷下方讨论区
1.
以上代码使用VC编译成32位可执行程序,请问:nLenA、nLenAObject、nLenB、nLenAObject、nLenC、nLenCObject的值分别为( )
A. 1,1,4,4,8,8
B. 0,0,4,4,4,4
C. 0,0,4,4,8,8
D. 1,1,4,4,4,4
参考:
C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1,所以nLenA和nLenAObject的值为1;
如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针,它是实现面向对象中多态的关键。因此,LenB和nLenBObject的值为4;
对于普通继承,派生类和基类共享虚函数指针,派生类对象的存储空间=基类存储空间+派生类特有的非static数据成员的空间,由于t_classA为空类,t_classB和t_classC共享虚函数指针,因此LenC和nLenCObject的值为4;
2.
表达式3*2^(4+2*2-6*3)-5,求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂
A. 3,2,8;*^-
B. 3,2,4,2,2;^+-
C. 3,2,4,2,2,;^(+-
D.3,2,8;*^(-
参考:
运算符的优先级有关,
1、操作数栈置空,将表达式起始符”#”作为运算符栈的栈底元素
2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。
i)若优先级s1>s2,s1入栈
ii)若s1< s2,当前栈顶运算符s2退栈,操作数栈顶的两个操作数退栈与操作符一起运算,并将运算结果入操作数栈;
过程如下:(1)操作数3,入栈s1;
(2)运算符*,入栈s2;
(3)操作数2,入栈s1;
(4)运算符^ ,入栈s2;(^的优先级比 *高)
(5)运算符(,入栈s2;
(6)操作数4,入栈s1;
(7)运算符+,入栈s2;
(8)操作数2,入栈s1;
(9)运算符,入栈s2;(理由是:的优先级比+高)
(10)操作数2,入栈s1;
(11)运算符 -,( -的优先级低于)栈顶字符 出栈,完成2*2=4的运算,将结果4存入s1中;—s1:3,2,4,4;
( -的优先级低于+)栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;—s1:3,2,8;
此时,- 成为了(后的运算符,则直接入栈s2;—s2:*^(-;
(12)操作数6 扫描
3.
现有N条词以及对应的拼音串,对其排序,排序规则:首先按拼音串的字母序排序,如果拼音串相同,则按当前词所在的顺序排序,下列哪些排序算法符合条件?( )
插入排序
快速排序
堆排序
冒泡排序
参考:
按当前词所在顺序排序即排序算法要稳定。
选择排序,快速排序,希尔排序,堆排序 都不稳定
冒泡排序,插入排序,归并排序,基数排序 都稳定
4.
若二叉树有32个结点且度为1的节点个数有7个,问叶结点有()?
13
14
12
15
参考:
度指节点分叉的个数,二叉树的一个节点可能有一个叉,两个叉,和没有叉(叶子结点);
总结点数为N,度为2的结点数为N2,度为1的结点数为N1,叶结点数为N0,总有:
①N=N0+N1+N2;
②N1=N2+1;
已知N=32,N0=7,解得N1=13,N2=12。
5.
下列说法错误的是()
正确答案: A B D
A.已知一颗二叉树的前序遍历顺序和后序遍历顺序,可以唯一确定这棵二叉树
B.将一个递归算法改为非递归算法时,通常使用队列作为辅助结构
C.快速排序和堆排序都是不稳定排序
D.二分查找法,平均时间复杂度为O(n)
参考:
前序 中序 后序 这三个两辆组合 必须要有 中序 才能唯一确定一棵二叉树 前与后 不能唯一确定
递归算法改为非递归算法时,通常使用栈作为辅助结构,先进后出
二分时间复杂度为:log2(n)
6.
下列哪些容器可以使用数组,但不能使用链表来实现?
正确答案: D
队列
栈
优先级队列
Map或者Dict
参考:
Map或者Dict是可以按key索引值,这个只有数组能实现,链表不能
7.
请问这是什么数据结构?
<
b0e9
br>
正确答案: C
A. B-树
B. B树
C. B*树
D. B+树
参考:
http://www.cnblogs.com/hellowooorld/p/7344866.html
8.
在存储对称矩阵时,为了节省空间,通常可以用一个数组以行优先方式只存储上三角阵来实现。请问如果一个100*100的矩阵用上述方法来实现存储,在原矩阵中位置为选项中哪一项的元素可以通过访问数组下标为2017的位置来获得?( )数组和矩阵下标均从0开始。
正确答案: A
A. (70,22)
B.(47,22)
C. (20,17)
D. (22,71)
9.
以下哪种操作更适合使用排序处理( )
正确答案: C
A. 找最大,最小值
B. 找出现次数最多的值
C. 找中间值
D. 求算术平均值
10.
集合中任何两个元素都可以比较大小,但比较不满足传递性,则以下说法正确的有( )
正确答案: D
A. 可以通过建立二叉搜索树索引使得在集合中查找元素的时间复杂度降到O(logN)
B. 可以进行快排,排序后使用二分查找可以使得在集合中查找元素的时间复杂度降到O(logN)
C.可以通过B树索引使得在集合中查找元素的时间复杂度降到O(logN)
D. 可以通过hash索引使得在集合中查找元素的时间复杂度降到O(1)
11.
func函数如下,则func(10)的返回值为()
正确答案: B
A. 30
B. 29
C. 55
D. 54
12.
以上程序中,下列哪个函数调用会有问题()
正确答案: B
A. b->FunctionD();
B. b->FunctionB();
C. b->FunctionA();
D. b->FunctionC();
参考:
调用从基类集成而来的虚函数,派生类需要被初始化才可以,否则无法使自己指向虚函数表从而导致糟糕的后果。
测试小程序:
13.
下列代码的输出是什么?()
正确答案: D
A. WORLD,LO,SAYHI,EW
B. WORLD,LO,HI,NEW
C. NEW,LO,SAYHI,EW
D. WORLD,LO,HI,EW
14.
下面的代码输出是()
正确答案: D
A. 1 4
B. 4 4
C. 1 2
D. 4 8
参考:
union成员共享
15.
以下哪个选项是使用select函数检查读超时的正确用法()
正确答案: A
A. if (select(sockfd + 1,&fs,NULL,NULL,&timeout) == 0)
B. if (select(sockfd,NULL,&fs,NULL,&timeout) == 0)
C. if (select(sockfd + 1,NULL,&fs,NULL,&timeout) == 0)
iD. f (select(sockfd ,&fs,NULL,NULL,&timeout) == 0)
16.
在高性能、高并发的网络应用的主路径上,进行下面哪项操作是合理的?()
正确答案: C
A. 主动sleep 1秒
B. 访问同一内网中的memcached,超时时间设为5秒
C. 调用getaddrinfo进行域名解析
D. 访问同一内网中的外存数据库,超时时间设为1秒
17.
以上(1)(2)中变量b,c类型为()
正确答案: B
A. const int ,int
B. int,int&
C. const int,int*
D. int,int*
参考:
auto忽略顶层const, decltype得到解引用操作。
18.
(待续)
1.
以上代码使用VC编译成32位可执行程序,请问:nLenA、nLenAObject、nLenB、nLenAObject、nLenC、nLenCObject的值分别为( )
A. 1,1,4,4,8,8
B. 0,0,4,4,4,4
C. 0,0,4,4,8,8
D. 1,1,4,4,4,4
参考:
C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1,所以nLenA和nLenAObject的值为1;
如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针,它是实现面向对象中多态的关键。因此,LenB和nLenBObject的值为4;
对于普通继承,派生类和基类共享虚函数指针,派生类对象的存储空间=基类存储空间+派生类特有的非static数据成员的空间,由于t_classA为空类,t_classB和t_classC共享虚函数指针,因此LenC和nLenCObject的值为4;
2.
表达式3*2^(4+2*2-6*3)-5,求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂
A. 3,2,8;*^-
B. 3,2,4,2,2;^+-
C. 3,2,4,2,2,;^(+-
D.3,2,8;*^(-
参考:
运算符的优先级有关,
1、操作数栈置空,将表达式起始符”#”作为运算符栈的栈底元素
2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。
i)若优先级s1>s2,s1入栈
ii)若s1< s2,当前栈顶运算符s2退栈,操作数栈顶的两个操作数退栈与操作符一起运算,并将运算结果入操作数栈;
过程如下:(1)操作数3,入栈s1;
(2)运算符*,入栈s2;
(3)操作数2,入栈s1;
(4)运算符^ ,入栈s2;(^的优先级比 *高)
(5)运算符(,入栈s2;
(6)操作数4,入栈s1;
(7)运算符+,入栈s2;
(8)操作数2,入栈s1;
(9)运算符,入栈s2;(理由是:的优先级比+高)
(10)操作数2,入栈s1;
(11)运算符 -,( -的优先级低于)栈顶字符 出栈,完成2*2=4的运算,将结果4存入s1中;—s1:3,2,4,4;
( -的优先级低于+)栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;—s1:3,2,8;
此时,- 成为了(后的运算符,则直接入栈s2;—s2:*^(-;
(12)操作数6 扫描
3.
现有N条词以及对应的拼音串,对其排序,排序规则:首先按拼音串的字母序排序,如果拼音串相同,则按当前词所在的顺序排序,下列哪些排序算法符合条件?( )
插入排序
快速排序
堆排序
冒泡排序
参考:
按当前词所在顺序排序即排序算法要稳定。
选择排序,快速排序,希尔排序,堆排序 都不稳定
冒泡排序,插入排序,归并排序,基数排序 都稳定
4.
若二叉树有32个结点且度为1的节点个数有7个,问叶结点有()?
13
14
12
15
参考:
度指节点分叉的个数,二叉树的一个节点可能有一个叉,两个叉,和没有叉(叶子结点);
总结点数为N,度为2的结点数为N2,度为1的结点数为N1,叶结点数为N0,总有:
①N=N0+N1+N2;
②N1=N2+1;
已知N=32,N0=7,解得N1=13,N2=12。
5.
下列说法错误的是()
正确答案: A B D
A.已知一颗二叉树的前序遍历顺序和后序遍历顺序,可以唯一确定这棵二叉树
B.将一个递归算法改为非递归算法时,通常使用队列作为辅助结构
C.快速排序和堆排序都是不稳定排序
D.二分查找法,平均时间复杂度为O(n)
参考:
前序 中序 后序 这三个两辆组合 必须要有 中序 才能唯一确定一棵二叉树 前与后 不能唯一确定
递归算法改为非递归算法时,通常使用栈作为辅助结构,先进后出
二分时间复杂度为:log2(n)
6.
下列哪些容器可以使用数组,但不能使用链表来实现?
正确答案: D
队列
栈
优先级队列
Map或者Dict
参考:
Map或者Dict是可以按key索引值,这个只有数组能实现,链表不能
7.
请问这是什么数据结构?
<
b0e9
br>
正确答案: C
A. B-树
B. B树
C. B*树
D. B+树
参考:
http://www.cnblogs.com/hellowooorld/p/7344866.html
8.
在存储对称矩阵时,为了节省空间,通常可以用一个数组以行优先方式只存储上三角阵来实现。请问如果一个100*100的矩阵用上述方法来实现存储,在原矩阵中位置为选项中哪一项的元素可以通过访问数组下标为2017的位置来获得?( )数组和矩阵下标均从0开始。
正确答案: A
A. (70,22)
B.(47,22)
C. (20,17)
D. (22,71)
9.
以下哪种操作更适合使用排序处理( )
正确答案: C
A. 找最大,最小值
B. 找出现次数最多的值
C. 找中间值
D. 求算术平均值
10.
集合中任何两个元素都可以比较大小,但比较不满足传递性,则以下说法正确的有( )
正确答案: D
A. 可以通过建立二叉搜索树索引使得在集合中查找元素的时间复杂度降到O(logN)
B. 可以进行快排,排序后使用二分查找可以使得在集合中查找元素的时间复杂度降到O(logN)
C.可以通过B树索引使得在集合中查找元素的时间复杂度降到O(logN)
D. 可以通过hash索引使得在集合中查找元素的时间复杂度降到O(1)
11.
func函数如下,则func(10)的返回值为()
正确答案: B
A. 30
B. 29
C. 55
D. 54
12.
以上程序中,下列哪个函数调用会有问题()
正确答案: B
A. b->FunctionD();
B. b->FunctionB();
C. b->FunctionA();
D. b->FunctionC();
参考:
调用从基类集成而来的虚函数,派生类需要被初始化才可以,否则无法使自己指向虚函数表从而导致糟糕的后果。
测试小程序:
#include "stdafx.h" #include <iostream> #include <string> using namespace std; class A{ public: int fa(){ return 1; } virtual int fb(){ return 2; } static int fc(){ return 3; } }; class B:public A{ public: int fb(){ return 4; } int fb(int a){ return 5; } int fd(){ return 6; } static int fe(){ return 7; } virtual int fbb(){ return 8; } }; int main(){ B *b = NULL; b->fa(); //b->fb();wrong! b->fb(1); b->fc(); b->fd(); b->fe(); //b->fbb();wrong! system("pause"); return 0; }
13.
下列代码的输出是什么?()
正确答案: D
A. WORLD,LO,SAYHI,EW
B. WORLD,LO,HI,NEW
C. NEW,LO,SAYHI,EW
D. WORLD,LO,HI,EW
14.
下面的代码输出是()
正确答案: D
A. 1 4
B. 4 4
C. 1 2
D. 4 8
参考:
union成员共享
15.
以下哪个选项是使用select函数检查读超时的正确用法()
正确答案: A
A. if (select(sockfd + 1,&fs,NULL,NULL,&timeout) == 0)
B. if (select(sockfd,NULL,&fs,NULL,&timeout) == 0)
C. if (select(sockfd + 1,NULL,&fs,NULL,&timeout) == 0)
iD. f (select(sockfd ,&fs,NULL,NULL,&timeout) == 0)
16.
在高性能、高并发的网络应用的主路径上,进行下面哪项操作是合理的?()
正确答案: C
A. 主动sleep 1秒
B. 访问同一内网中的memcached,超时时间设为5秒
C. 调用getaddrinfo进行域名解析
D. 访问同一内网中的外存数据库,超时时间设为1秒
17.
int i=0; const int ci=i; auto b=ci; //(1) int *p=&i; decltype(*p) c=i;//(2)
以上(1)(2)中变量b,c类型为()
正确答案: B
A. const int ,int
B. int,int&
C. const int,int*
D. int,int*
参考:
auto忽略顶层const, decltype得到解引用操作。
18.
(待续)
相关文章推荐
- 网易2017校招C++开发工程师(北京)笔试
- 2017阿里C++研发工程师-校招-笔试模拟
- 盛大游戏2017校招前端工程师笔试试卷
- 同程2017校招前端工程师笔试试卷
- [置顶] 美丽联合2018校招前端开发工程师笔试试卷及解析
- 爱奇艺2017秋招c++开发工程师笔试卷
- 2017阿里C++研发工程师-校招-单词匹配
- 网易2017实习生招聘笔试题 C++开发工程师
- 京东2017校招笔试编程题iOS开发工程师
- 2017盛大游戏2017前端工程师校招笔试题总结
- geohash编码 (腾讯2017校招开发工程师试卷一)
- 搜狗2015 C++工程师笔试题
- 华为2017秋招测试工程师笔试试卷
- 去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码
- 挖财2017校招前端工程师笔试试卷
- 美团点评2017校招笔试真题-算法工程师A
- 牛客网(搜狗2015 C++工程师笔试题)
- 牛客网(搜狗2015 C++工程师笔试题)
- 2017网易内推c++工程师笔试——编程题
- 华为2017校招C++岗笔试题