1、在函数F中,本地变量a和b的构造函数(constructor)和析构函数(destructor)的调用顺序是:
Class A; Class B; void F() { A a; B b; }
A、b构造 a构造 a析构 b析构
B、a构造 a析构 b构造 b析构
C、b构造 a构造 b析构 a析构
D、a构造 b构造 b析构 a析构
2、假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( )
A、delete p;
B、delete *p;
C、delete &p;
D、delete []p;
3、选择填空:
#include void test(void *data) { unsigned int value = (此处应填入) printf("%u", value); } using namespace std; int main() { unsigned int value = 10; test(&value); return 0; }
A、*data
B、(unsigned int)(*data)
C、(unsigned*)data
D、*((unsigned int *)data)
4、在C++, 下列哪一个可以做为对象继承之间的转换
A、static_cast
B、dynamic_cast
C、const_cast
D、reinterpret_cast
5、如果进栈序列为e1,e2,e3,e4,则不可能的出栈序列是( )
A、e2,e4,e3,e1
B、e4,e3,e2,e1
C、e1,e2,e3,e4
D、e3,e1,e4,e2
6、若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是( )
A、gdbehfca
B、hcdeabf
C、fdcehgba
D、gdbehcfa
7、用二分法查找长度为10的、排好序的线性表,查找不成功时,最多需要比较多少次?
A、3
B、4
C、5
D、6
8、以下程序是用辗转相除法来计算两个非负数之间的最大公约数:
long long gcd(long long x, long long y) { if (y == 0) return x; else return gcd(y, x % y); }
我们假设x,y中最大的那个数的长度为n,x>y,基本运算时间复杂度为O(1),那么该程序的时间复杂度为( )
A、O(1)
B、O(logy)
C、O(n)
D、O(x)
9、一棵有124个叶节点的完全二叉树,最多有( )个节点。
A、247
B、248
C、249
D、250
10、链表不具备的特点是( )
A、可随机访问任何一个元素
B、插入、删除操作不需要移动元素
C、无需事先估计存储空间大小
D、所需存储空间与线性表长度成正比
11、下列排序算法中,在待排序数据有序的情况下,花费时间最多的是( )
A、快速排序
B、希尔排序
C、冒泡排序
D、堆排序
12、有 1000 个无序的整数,希望使用最快的方式找出前 50 个最大的,最佳的选择是( )
A、冒泡排序
B、基数排序
C、堆排序
D、快速排序
13、下面哪个不是用来解决哈希表冲突的开放地址法?
A、线性探测法
B、线性补偿探测法
C、拉链探测法
D、随机探测法
14、下列数最大的是( )。括号内为数字,括号外为进制。
A、(10010101)2
B、(227)8
C、(96)16
D、(143)10
15、在CPU和内存之间增加cache的作用是( )
A、提高内存稳定性
B、解决内存速度低于CPU的性能问题
C、增加内存容量
D、增加内存容量且加快存取速度
16、假设整数0x12345678 存放在内存地址0x0开始的连续四个字节中 (即地址0x0到 0x3). 那么在以Little Endian字节序存储的memory中,地址0x3的地方存放的字节是:
A、0x12
B、0x34
C、0x56
D、0x78
17、将逻辑代码:
if (x % 2) { return x - 1; } else { return x; }
用表达式:return x & -2; 替代,以下说法中不正确的是( )
A、计算机的补码表示使得两段代码等价
B、用第二段代码执行起来会更快一些
C、这段代码只适用于x为正数的情况
D、第一段代码更适合阅读
18、代码生成阶段的主要任务是( )
A、把高级语言翻译成汇编语言
B、把高级语言翻译成机器语言
C、把中间代码变换成依赖具体机器的目标代码
D、把汇编语言翻译成机器语言
19、后缀式 ab+cd+/可用表达式( )来表示
A、a+b/c+d
B、(a+b)/c+d
C、a+b/(c+d)
D、(a+b)/(c+d)
20、以下关于函数调用的说法哪个是正确的?
A、传值后对形参的修改会改变实参的值
B、传地址后实参和形参指向不同的对象
C、传引用后形参和实参是不同的对象
D、以上都不对
21、一个合法的 360 账户名称要求如下:是一个合法的邮箱地址,如 kefu@360.cn;邮箱前缀的长度为 [ 4, 16 ] 个字符;邮箱前缀必须以字母开头,字母或数字结尾;邮箱前缀可以包括字母、数字、下划线。请问如下正则表达式中,哪一个能正确校验用户名的合法性:
A、\w[0-9a-zA-Z_]{3,15}\@\w+.([-.]\w+)*
B、[a-zA-Z]\w{3,15}@\w+.\w*
C、[a-zA-Z]\w{2,14}[0-9a-zA-Z]\@\w+([-.]\w+)*
D、[a-zA-Z]\w{2,14}[0-9a-zA-Z]@\w
22、词法分析器用于识别( )
A、句子
B、句型
C、单词
D、生产式
23、操作系统采用分页式存储管理(PAGING)方法,要求( )
A、每个进程拥有一张页表,且进程的页表驻留在内存中
B、每个进程拥有一张页表,但只要执行进程的页表驻留在内存中,其他进程的页表不必驻留在内存中
C、所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中
D、所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中,以最大限度地节约有限的内存空间
24、计算机操作系统出现死锁的原因是什么?
A、资源数大大少于进程数,或进程同时申请的资源数大大超过资源总数
B、有多个封锁的进程同时存在
C、一个进程进入死循环
D、若干进程因竞争资源而无休止的等待着其他进程释放已占有的资源
25、进程间通讯的方式中哪种的访问速度最快?
A、管道
B、消息队列
C、共享内存
D、套接字
26、TCP的关闭过程,说法正确的是( )
A、处于TIME_WAIT状态的连接等待2MSL后真正关闭连接
B、对一个established状态的TCP连接,在调用shutdown函数之前调用close接口,可以让主动调用的一方进入半关闭状态
C、主动发送FIN消息的连接端,收到对方回应ack之前不能发只能收,在收到对方回复ack之后不能发也不能收,进入CLOSING状态
D、在已经成功建立连接的TCP连接上,任何情况下都不允许丢失数据。
27、linux中调用write发送网络数据返回n(n>0)表示( )
A、对端已收到n个字节
B、本地已发送n个字节
C、系统网络buff收到 n个字节
D、系统调用失败
28、HTTP 应答中的 500 错误是:
A、服务器内部出错
B、文件未找到
C、客户端网络不通
D、没有访问权限
29、下列关于 Android 数字签名描述错误的是:
A、所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
B、Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
C、如果要正式发布一个Android程序,可以使用集成开发工具生成的调试证书来发布。
D、数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
30、在下列说法中,哪个是错误的( )
A、若进程A和进程B在临界段上互斥,那么当进程A处于该临界段时,它不能被进程B中断
B、虚拟存储管理中采用对换(swapping)策略后,用户进程可使用的存储空间似乎增加了
C、虚拟存储管理中的抖动(thrashing)现象是指页面置换(page replacement)时用于换页的时间远多于执行程序的时间
D、进程可以由程序、数据和进程控制块(PCB)描述
31、小支欲用积分兑换安仔娃娃。兑换的规则是10积分可以兑一个安仔并返还5积分。小支有200积分,最多可以兑到______个安仔?(假设可以借积分)
32、五对夫妇甲,乙,丙,丁,戊举行家庭聚会 每一个人都可能和其他人握手, 但夫妇之间绝对不握手. 聚会结束时, 甲先生问其他人: 各握了几次手? 得到的答案是: 0,1,2,3,4,5,6,7,8. 试问: 甲太太握了______次手?
33、赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比 ______次,才能获得最快的前3匹马?
34、店主销售电话卡,他以60元的价格各销售了两张。其中一张是赚了20%,另一张是亏了20%。 请问他总共赚了_____ 钱(亏了的话请用负数表示)?
35、在审计某一开源项目的代码时,假设有下面一个foo()子函数的实现。 从安全的角度看,会存在安全漏洞吗?有的话,请
(1)描述漏洞细节,
(2)说明可以利用的方法,
(3) 还有该怎么修补漏洞。没有的话,也请说明为什么。
int foo((void*funcp)()) { char *ptr = pointer_to_an_array; char buf[128]; gets(buf); strncpy(ptr,buf,8) (*funcp)(); }
36、写一个函数找出一个整数数组中,第二大的数。
1、D 2、A 3、D 4、B 5、D 6、A 7、B 8、B 9、B 10、A 11、A 12、C 13、C 14、B 15、B
16、A 17、C 18、C 19、D 20、D 21、C 22、C 23、B 24、D 25、C 26、A 27、B 28、A 29、C
30、AC
31、40 32、4 33、7 34、-5
35、如下:
1)、*funcp()指针没有进行为空判断。
36、参考代码:
int Find_Second_Max(int data[],int n) { if(n<2) return -1; int max_num = max(data[0],data[1]); int sec_num = min(data[0],data[1]); for(int i=2;i<n;i++) { if(data[i]>=max_num); { sec_num = max_num; max_num = data[i]; } else if(data[i] > sec_num)//排除等于情况 sec_num = data[i]; } return sec_num; }