360奇虎校招笔试卷-2014年

一、单项选择题

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()指针没有进行为空判断。

        2)、buf数组没有做是否越界的判断。
        3)、ptr定义在buf之前,在栈上开辟变量,后定义的地址在低位,所以ptr紧跟在buf之后,如果buf越界会覆盖ptr指向的内容。
        4)、strncpy()只能拷贝字符串,后面还没有分号。

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;
}
个人资料
Bingo
等级:9
文章:694篇
访问:38.9w
排名: 1
推荐圈子
上一篇: 京东算法工程师笔试题-2016年
下一篇:奇虎360研发工程师笔试题(一)-2016年
猜你感兴趣的圈子:
IT校招圈
标签: 页表、进程、析构、za、buf、面试题
隐藏