2021年奇虎360程序开发面试题

小编:管理员 493阅读 2021.06.24

第1题:


一、单选题

1、上高中的小明暗恋女神三年,高考结束后,小明决定向女神表白。这天,小明来到女神楼下等待女神的出现,时间一分一秒的流逝,两个多小时过去了,女神还没有出现,小明看了下表,时针和分针的位置正好跟开始等的时候互换,请问小明一共等了女神多少分钟()      

A、172

B、166

C、165

D、150



1、B

设一圈为1 

设时针和分针距离x(时针顺时针走x圈到分针位置),则

分针走了3-x圈,时针走了x圈

因为分针移动60格时针移动5格,两针的速度比是分针:时针=12:1

所以3-x=12x,x=3/13

所以分针走了36/13圈,每圈60min,总时为166.1538


第2题:


 2、有A,B,C三个学生,一个出生在北京,一个出生在上海,一个出生在广州。他们中一个学物理专业,一个学数学专业,一个学计算机。其中(1)A不是学物理的,B不是学计算机的;(2)学物理的不出生在上海;(3)学计算机的出生在北京;(4)B不出生在广州。请根据上述条件,判断A的专业()。

A、物理

B、数学

C、计算机

D、3种专业都可能



 2、C

计算机在北京,物理在广州,数学在上海

B不出生在广州也不是学计算机的,所以是学数学的在上海

A不是学物理的,所以A是学计算机的


第3题:


 3、一个不透明的箱子里共有红,黄,蓝,绿,白五种颜色的小球,每种颜色的小球大小相同,质量相等,数量充足。每个人从篮子里抽出两个小球,请问至少需要多少个人抽球,才能保证有两个人抽到的小球颜色相同?        

A、6个

B、11个

C、13个

D、16个



 3、D

每个人要从敏感词中抽2个球,5种颜色的组合球的情况有:

两个球不同的情况:C5   2=5*4/2=10种情况

两球相同:5种情况

所以最坏的情况时,前15个人,抽的球都不同

则第16个肯定会抽的与前面的人有相同的


第4题:


 4、平面内有11个点,由它们连成48条不同的直线,由这些点可连成多少个三角形?        

A、158

B、160

C、162

D、165



 4、B

11个点可以连接成55条线,这里只有48条,所以有一组三个点共线有一组四个点共线,所以三角形个数为C3 11  -C3 3   -C3 4 =160个三角形。缺的线55-48=7条 三个点共线缺两条,四个点共线缺五条。


第5题:


5、8,8,12,24,60()      

A、90

B、120

C、180

D、240



5、C

从左到右,后一个数是前一个数的1倍、1.5倍、2倍、2.5倍、3倍

即第n个数是第(n-1)(n>1)这个数的n*0.5倍

所以:第六个数为 6*0.5*60=180


第6题:


 6、假定x-65530,下面函数的返回值是多少?()

int func(x)

{

    int countx = 0;

    while (x)

    {

        countx++;

        x = x & (x - 1);

    }

    return countx;

}

A、100

B、14

C、20

D、16



 6、B
函数的作用是统计x二进制数中1的个数。
这个作用是对整型中1的个数进行统计,x=x&(x-1);的作用是每次循环把x的二进制中从右往左数的最后一位1变成0,直道变成全0为止,循环结束。
65530的二进制是0000 0000 0000 0000 1111 1111 1111 1010,所以结果是14
还有类似的题目,迭代式为x=x|(x+1),作用是统计x二进制中0的个数


第7题:


 7、用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序,序列的变化情况采样如下:
20,15,21,25,47,27,68,35,84
15,20,21,25,35,27,47,68,84
15,20,21,25,27,35,47,68,84
请问采用的是以下哪种排序算法()

A、选择排序

B、希尔排序

C、归并排序

D、快速排序



 7、D

首先第一步以25为基础,小于25的放在25的左边,大于25的放在25的右边

得到20,15,21,25,47,27,68,35,84

第二步在25的两边分别进行快速排序,左边以20为基数,右边以47为基数

得到15,20,21,25,35,27,47,68,84

第三步将,35,27这个子序列排序,得到

15,20,21,25,27,35,47,68,84


第8题:


 8、设某颗二叉树中有360个结点,则该二叉树的最小高度是?      

A、10

B、9

C、8

D、7



 8、B

深度为h的二叉树最多有2^h-1个节点,因此h最小取9


第9题:


 9、下列哪个算法是对一个list排序的最快方法()       

A、快速排序

B、冒泡排序

C、二分插入排序

D、线性排序



 9、A

list采用链式结构存储,在C++    STL中的list采用双向链表存储,比较适合用快速排序进行排序,这是由快速排序不需要随机访问元素的特点决定的。

冒泡排序适合list,但是算法复杂度为O(n^2),没有快速排序快。

二分插入排序算法适合顺序存储情况,不适合链式存储


第10题:


10、应用程序PING发出的是什么报文()        

A、TCP请求报文

B、TCP应答报文

C、ICMP请求报文

D、ICMP应答报文



10、C

Ping程序一般用来测试一台主机是否可达,该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显 应答。


第11题:


 11、

digit ->0|1|...|9
digits ->digit digit*
optionalFraction ->.digits|∈
optionalExponent ->(E+|-|∈)digits)|∈
number -> digits optionalPraction option|Exponent
上面给出的正则规约的描述中,下面的无符号数哪个不符合规约的要求:       

A、5280

B、1

C、2.0

D、336E4



 11、D

336E4改成336E+4或者336E-4就正确了。


第12题:


 12、语法分析器可以用于()    

A、识别语义错误

B、识别语法和语义错误

C、识别语法错误

D、识别并修正语法,语义错误



 12、C

在计算机科学和语言学中,语法分析(英:Syntacticanalysis,也叫Parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。
语法分析器(Parser)通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单词组成的数据结构(一般是语法分析树、抽象语法树等层次化的数据结构)。语法分析器通常使用一个独立的词法分析器从输入字符流中分离出一个个的“单词”,并将单词流作为其输入。实际开发中,语法分析器可以手工编写,也可以使用工具(半)自动生成。


第13题:


 13、IPV6地址包含多少位()

A、16

B、32

C、64

D、128



 13、D

IPV6地址有128位二进制数组成。每四个二进制数组成一个十六进制数,有128/4=32个十六进制数

每四个十六进制数为一组,中间用冒号隔开。如XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

如果XXXX四位是全零,可以省略写成::形式


第14题:


 14、如果在一个建立了TCP连接的socket上调用recv函数,返回值为0,则表示()            

A、对端发送了一段长度为0的数据

B、对端关闭了连接

C、还没有收到对端数据

D、连接发生错误



 14、B

如果recv函数在等待协议接收数据时网络中断了,那么它返回0。默认 socket 是阻塞的。阻塞与非阻塞recv返回值没有区分,都是 <0 出错 =0 连接关闭 >0 接收到数据大小


第15题:


 15、以下哪些不是内核对象()

A、进程

B、线程

C、互斥器

D、临界区



 15、D

临界区是资源对象,只能被一个进程访问


第16题:


16、同一进程下的多个线程可以共享哪一种资源()  

A、stack

B、data section

C、register set

D、thread ID



16、B

线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。


第17题:


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

A、7

B、8

C、9

D、10



 17、 C

缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。

内存块数是3时:

FIFO 1, 3, 4, 2, 1, 3, 5, 1, 2, 5 ,4, 2

         1  1  1  2  2  2  5      5      5

             3  3  3  1  1  1      2      2

                 4  4  4  3  3      3      4

缺页   x  x  x  x  x  x  x      x      x

所以缺页数为9.选C


第18题:


 18、下述哪种情况会提出中断请求()     

A、在键盘输入过程中,每按一次键

B、两数相加结果为零

C、计算结果溢出

D、一条系统汇编指令执行完成



 18、A

“紧急事件”须向处理器提出申请(发一个电脉冲信号),要求“中断”,即要求处理器先停下“自己手头的工作”先去处理“我的急件”,这一“申请”过程,称——中断请求。


第19题:


 19、单任务系统中两个程序A和B,其中
A程序:CPU:10s -> 设备1:5s -> CPU:5Ss ->设备2:10s ->CPU:10s;
B程序:设备1:10s-> CPU:10s -> 设备2:5s ->CPU:5s ->设备2:10s;
执行顺序为A->B,那么CPU的利用率是()

A、30%

B、40%

C、50%

D、60%



 19、C
A程序,CPU时间为10+5+10=25s,总时间为10+5+5+10+10=40s;
B程序,CPU时间为10+5=15s,总时间为10+10+5+5+10=40s;
CPU总时间为40s,两个进程的总时间为80s,
CPU的利用为40/80=0.5


第20题:


 20、

for (int i = 0; i < 2; i++)

{

    fork();

    printf("-\n");

}

会打印出多少个"-"?

A、4

B、5

C、6

D、8



 20、C
fork()函数是通过系统调用实现进程的拷贝。
第一次for循环,执行完fork函数之后,系统中有两个一模一样的进程,并且都执行到printf函数处,这一次循环会打印出两个“ - ”符号
第二次进入for循环,经过fork函数,第一次循环中产生的两个进程分别再次分裂,这时会有4个进程打印 “-”符号,
所以最终结果是6个。


第21题:


 21、以下说法不正确的是()   

A、进程调度中"可抢占"和"非抢占"两种方式,后者引起系统的开销更大

B、每个进程都有自己的文件描述符表,所有进程共享同一打开文件表和v-node表

C、基本的存储技术包括RAM,ROM,磁盘以及SSD,其中访问速度最慢的是磁盘,CPU的高速缓存一般是由RAM组成的

D、多个进程竞争源出现了循环等待可能造成系统死锁



 21、A

抢占式会引起系统的开销更大。

可抢占式调度是严格保证任何时刻,让具有最高优先数(权)的进程占有处理机运行,因此增加了处理机调度的时机,引起为退出处理机的进程保留现场,为占有处理机的进程恢复现场等时间(和空间)开销增大。


第22题:


 22、对于Linux说法,下列说法正确的是() 

A、线性访问内存非法时,当前线程会进入信号处理函数

B、用mv命令移动文件时,文件的修改时间会发生变化

C、ulimit -c设置的是函数调用栈的大小

D、malloc函数是应用程序向操作系统申请内存的接口



 22、A

B:不会变化

C:ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks

D:malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。


第23题:


 23、X86体系结构在;つJ较轮杏腥值刂,请问一下那种说法是正确的?      

A、虚拟地址先经过分段机制映射到线性地址,然后线性地址通过分页机制映射到物理地址

B、线性地址先经过分段机制映射到虚拟地址,然后虚拟地址通过分页机制映射到物理地址

C、虚拟地址先经过分页机制映射到线性地址,然后线性地址通过分段机制映射到物理地址

D、线性地址先经过分页机制映射到虚拟地址,然后虚拟地址通过分段机制映射到物理地址



 23、A        

分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元

分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称之为页。通过在线性地址空间的页与物理地址空间的页之间建立的映射,分页机制实现线性地址到物理地址的转换


第24题:


24、当需要对文件进行随机存取时,下列哪一种文件物理结构不适用于上述应用场景?        

A、顺序文件

B、索引文件

C、链接文件

D、Hash文件



24、C    

链式存储只能顺序访问,不能随机访问。如果要随机访问的话只能顺序查找,效率低下


第25题:


 25、

#include<iostream>

using namespace std;

class MyClass

{

public:

    MyClass(int i = 0)

    {

        cout << i;

    }

    MyClass(const MyClass &x)

    {

        cout << 2;

    }

    MyClass &operator=(const MyClass &x)

    {

        cout << 3;

        return *this;

    }

    ~MyClass()

    {

        cout << 4;

    }

};

int main()

{

    MyClass obj1(1), obj2(2);

    MyClass obj3 = obj1;

    return 0;

}

运行时的输出结果是()  

A、11214444

B、11314444

C、122444

D、123444



 25、C 
解释:
首先程序中存在三个MyClass对象。
前两个对象构造时分别输出1,2
第三个对象是这样构造的MyClass obj3 = obj1;这里会调用拷贝构造函数,输出2
然后三个对象依次析构,输出444
所以最终输出122444


第26题:


 26、在一个64位的操作系统中定义如下结构体:

struct st_task

{

    uint16_t id;

    uint32_t value;

    uint64_t timestamp;

};

同时定义fool函数如下:

void fool()

{

    st_task task = {};

    uint64_t a = 0x00010001;

    memcpy(&task, &a, sizeof(uint64_t));

    printf("%11u,%11u,%11u", task.id, task.value, task.timestamp);

}

上述fool()程序的执行结果为()

A、1,0,0

B、1,1,0

C、0,1,1

D、0,0,1



 26、A

根据4字节对齐原则,id占用4字节,value占用4字节,timestamp占用8字节

a高位补0则为 0x 0000 0000 0001 0001

复制给结构体时:

低位4个字节复制到id --> id为1

高为4个字节复制到value --> value为0

timestamp不改变

如果8字节对齐,那么就更容易了,直接a覆盖到id上,答案还是A


第27题:


 27、下面代码会输出什么()

int main(int argc, char **argv)

{

    int a[4] = {1, 2, 3, 4};

    int *ptr = (int *)(&a + 1);

    printf("%d", *(ptr - 1));

}

A、1

B、2

C、3

D、4



 27、D

&a是数组指针,其类型为int(*)[4];  
而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同,a是长度为4的int数组指针,所以要加5*sizeof(int),所以ptr实际是a[4],但是ptr与(&a+1)类型是不一样的,这点非常重要,所以ptr-1只会减去sizeof(int*),a,&a的地址是一样的,但意思就不一样了,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[4]


第28题:


 28、

int fun(int a)

{

    a = (1 << 5) - 1;

    return a;

}

Fun(21)结果是()   

A、10

B、8

C、5

D、31



 28、D

1<<5,这里1左移5位相当于1乘以2的5次方,也就是32


第29题:


 29、下面哪一个是sort的template的正确写法     

A、void sort(class A first,class A last,class B pred)

B、void template(class A,class B)sort(A first,A last,B pred)

C、template<class A><class B> void sort(A first,A last,B pred)

D、template<class A,class B> void sort(A first,A last,B pred)



 29、D
模板函数格式是先声明模板类型,然后才能使用
格式是 template<class T1, class T2, ...> 返回值 函数名(参数列表)


第30题:


 30、在c++中,

const int i = 0; 

int *j = (int *) &i; 

*j = 1; 

printf("%d,%d", i, *j)

输出是多少?

A、0,1

B、1,1

C、1,0

D、0,0



 30、A

const修饰的常量值具有不可变性,c++编译器通;岫愿帽淞孔鲇呕,在编译时变量i的值为已知的,编译器直接将printf输出的变量i替换为0。尽管如此,编译器仍然会为变量i分配存储空间,通过修改内存的hack方式将变量i在内存中的值修改后并不影响printf的输出。
如果将i更改为volatile const int类型的,编译器就不会对变量i做优化,printf输出的结果就为1。


第31题:


 31、如下代码输出结果是什么?

#include<stdio.h>

char *myString()

{

    char buffer[6] = {0};

    char *s = "Hello World!";

    for (int i = 0; i < sizeof(buffer) - 1; i++)

    {

        buffer[i] = *(s + i);

    }

    return buffer;

}

int main(int argc, char **argv)

{

    printf("%s\n", myString());

    return 0;

}

A、Hello

B、Hello World!

C、Well

D、以上全部不正确



 31、D

函数char *myString()中没有使用new或者malloc分配内存,所有buffer数组的内存区域在栈区

随着char *myString()的结束,栈区内存释放,字符数组也就不存在了,所以会产生野指针,输出结果未知  


第32题:


 32、不能把字符串"HELLO!"赋给数组b的语句是()

A、char b[10]={'H','E','L','L','O','!','\0'};

B、char b[10];b="HELLO!";

C、char b[10]:strcpy(b,"HELLO!");

D、char b[10]="HELLO!";



 32、B
选项B并没有将数组b赋值为 hello! 因子b是数组的首地址,b="HELLO!";是改变了这个指针的指向,是错误的。


第33题:


33、

struct Date

{

    char a;

    int b;

    int64_t c;

    char d;

};

Date data[2][10];

在32位系统上,如果Data的地址是x,那么data[1][5].c的地址是()   

A、X+195

B、X+365

C、X+368

D、X+215



33、C

结构体成员地址对齐

a               b  c  d

1+(3)+4+8+1+(7)= 24,()内表示为了满足对齐填充的大小。

&data[1][5].c = x+10*24+5*25+1+(3)+4=368。 


第34题:


 34、如何定义一个int类型的指针数组,数组元素个数为10个:      

A、int a[10];

B、int (*a)[10];

C、int *a[10];

D、int (*a[10])(int);



 34、C
“[]”的优先级比“*”要高。
B中,“()”的优先级比“[]”高,“*”号和a构成一个指针的定义,指针变量名为a,int   修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚a 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针
C中,a先与“[]”结合,构成一个数组的定义,数组名为a,int  *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组。


第35题:


 35、将一颗有100个结点的完全二叉树从根这一层开始,进行广度遍历编号,那么编号最小的叶节点的编号是()

A、49

B、50

C、51

D、52



 35、C
100个结点的完全二叉树,度为0的结点比度为2的结点多一个。所以度为2的结点有49个,度为1的结点有1个,度为0的结点有50个
二叉树前k层最多有2^k-1个结点。所以100个结点二叉树高度为7,如果按照题目中深度遍历,编号最小的叶子结点为7,所以题目说错了
按照广度遍历编号,有50个非叶子结点,所以最小的叶子结点编号为51


第36题:


 36、解析XML时,需要校验节点是否闭合,如必须有与之对应,用()数据结构实现比较好   

A、链表

B、树

C、队列

D、栈



 36、D

栈是解决封闭对应问题的有效方法。

比如在解析XML中,遇到一个<demo>标签(左标签)就入栈,遇到其子标签的左标签(如<subdemo>)同样入栈。遇到右标签(如</subdemo>或</demo>)就校验栈顶标签是否与该右标签对应,能对应就出栈,不能对应则说明标签不对称,是无效的XML文件


第37题:


 37、快速排序算法在序列已经有序的情况下的复杂度为()           

A、O(nlogn)

B、O(n^2)

C、O(n)

D、O(n^2  logn)



 37、B
快排在完全无序的情况下效果最好,时间复杂度为O(nlogn),在有序情况下效果最差,时间复杂度为O(n^2)


第38题:


 38、无向图G=(V E),其中V={a,b,c,d,e,f},E={<a,b>,<a,e>,<a,c>,<b,e>,<c,f>,<f,d>},<e,d>,对该图进行深度优先排序,得到的顶点序列正确的是()

A、a,b,e,c,d,f

B、a,c,f,e,b,d

C、a,e,b,c,f,d

D、a,e,d,f,c,b



 38、D

如果有<e,d>这条边就选择d,否则选c


第39题:


 二、解答题

39、在写一个函数,根据两文件的绝对路径算出相对路径。如 a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c',那么b相对于a的相对路径是"../../../../1/2/test.c"



 39、

public class PathCal {

 

 public static void main(String[] args) throws Exception {   

   

     String pathA = "/qihoo/app/a/b/c/d/new.c";  

     String pathB = "/qihoo/app/1/2/test.c";  

     System.out.println(pathRelative(pathB,pathA,""));  

 }   

   

 /** 

  * pathA相对于pathB的相对路径 递归算法: 

  */  

 public static String pathRelative(String pathA,String pathB, String tempPath) {  

     if (pathA.startsWith(pathB))  

         return pathA.replaceFirst(pathB+"/",tempPath.substring(0,tempPath.length()-3));  

     else  

         return pathRelative(pathA, pathB.substring(0, pathB.lastIndexOf("/")), "../" + tempPath);  

 }  

 

}


关联标签:
奇米影视网_奇米555_奇米影视777四色米奇影院