奇虎360 2014 技术岗
技术研发 技术支持
本套题共36题,并含有参考答案
题目详情
第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

 C

邮箱前缀必须以字母开头,字母或数字结尾    这句话 排除A

邮箱中肯定有“.”     ,D中没有 排除D

邮箱前缀可以包括字母、数字、下划线    ,B中 没有数字,排除B


所以答案是C


第22题

 词法分析器用于识别( )

  

A  句子

B  句型

C  单词

D  生产式

 C

思路:参见维基百科:http://zh.wikipedia.org/zh/%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90

词法分析器是将源文件识别为单词,对单词进行分类


第23题

 在下列说法中,哪个是错误的( )

 

A  若进程A和进程B在临界段上互斥,那么当进程A处于该临界段时,它不能被进程B中断

B  虚拟存储管理中采用对换(swapping)策略后,用户进程可使用的存储空间似乎增加了

C  虚拟存储管理中的抖动(thrashing)现象是指页面置换(page replacement)时用于换页的时间远多于执行程序的时间

D  进程可以由程序、数据和进程控制块(PCB)描述

 C

c选项中:是请求分页虚拟存储管理。
当需要执行否条的指令或使用某个数据而发现他们不再内存中时候,会产生缺页异常。
系统从磁盘中把此指令或数据所在的页面装入。缺页异常是由硬件所产生的一种特殊终端信号,其中当中断率较高时,整个系统的页面调度非常频繁造成大部分时间都花费在来回调度上,而不是执行任务,这种现象叫做“抖动”。——《操作系统》


第24题

 操作系统采用分页式存储管理(PAGING)方法,要求( )

  

A  每个进程拥有一张页表,且进程的页表驻留在内存中

B  每个进程拥有一张页表,但只要执行进程的页表驻留在内存中,其他进程的页表不必驻留在内存中

C  所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中

D  所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中,以最大限度地节约有限的内存空间

 B 

在内核中 所有进程都是用一个页目录表,每个进程都有自己的页表 


第25题

 计算机操作系统出现死锁的原因是什么?

       

A  资源数大大少于进程数,或进程同时申请的资源数大大超过资源总数

B  有多个封锁的进程同时存在

C  一个进程进入死循环

D  若干进程因竞争资源而无休止的等待着其他进程释放已占有的资源

 D

死锁的原因在于进程在等待其它进程占有的某些资源,而自身的资源又被其它进程等待着,造成了死循环。


第26题

 进程间通讯的方式中哪种的访问速度最快?

    

A  管道

B  消息队列

C  共享内存

D  套接字

 C

常见进程间通信方式的比较:

管道:速度慢,容量有限
消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
信号量:不能传递复杂消息,只能用来同步
共享内存区:能够很容易控制容量,速度快 ,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了一块内存的。


第27题

 TCP的关闭过程,说法正确的是( )

A  处于TIME_WAIT状态的连接等待2MSL后真正关闭连接

B  对一个established状态的TCP连接,在调用shutdown函数之前调用close接口,可以让主动调用的一方进入半关闭状态

C  主动发送FIN消息的连接端,收到对方回应ack之前不能发只能收,在收到对方回复ack之后不能发也不能收,进入CLOSING状态

D  在已经成功建立连接的TCP连接上,任何情况下都不允许丢失数据。

 A
 TIME_WAIT状态下发送的ACK丢失,服务器端的LAST_ACK时刻设定的重传定时器超时,发送重传的FIN,很不幸,这个FIN也丢失,主动关闭方在   TIME_WAIT状态等待2MSL没收到任何报文段,进入CLOSED状态,当此时被动关闭方并没有收到最后的ACK。所以即使要主动关闭方在 TIME_WAIT状态下停留2MSL,也不一定表示四次握手关闭就一定正常完成


第28题

 linux中调用write发送网络数据返回n(n>0)表示(  )

   

A  对端已收到n个字节

B  本地已发送n个字节

C  系统网络buff收到 n个字节

D  系统调用失败

 B

已发送,但不保证对方收到

write函数的返回值的含义本来就是这样  


第29题

 HTTP 应答中的 500 错误是:

     

A  服务器内部出错

B  文件未找到

C  客户端网络不通

D  没有访问权限

 A

403:禁止访问;

404:找不到该页面;

503:服务器繁忙;

500:内部服务器访问出错。


第30题

 下列关于 Android 数字签名描述错误的是:

     

A  所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序

B  Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

C  如果要正式发布一个Android程序,可以使用集成开发工具生成的调试证书来发布。

D  数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

 C

必须要使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。


第31题

 二、填空题

小支欲用积分兑换安仔娃娃。兑换的规则是10积分可以兑一个安仔并返还5积分。小支有200积分,最多可以兑到         ________个安仔?(假设可以借积分)

 40

借我200积分换成40个按仔,返回的200积分还给你


第32题

 五对夫妇甲,乙,丙,丁,戊举行家庭聚会 每一个人都可能和其他人握手, 但夫妇之间绝对不握手. 聚会结束时, 甲先生问其他人: 各握了几次手? 得到的答案是: 0,1,2,3,4,5,6,7,8. 试问: 甲太太握了__________ 次手?

 4

甲太太握了4次手。 首先,可以断言握了8次手的人和握了0次手的人是一家人。因为一个人握了0次手,说明他(她)没有和其他任何人握手,而握了8次手的人握了别家的所有人的手,如果握了8次手的这个人和握了0次手的这个人不是一家人,握了8次手的这个人就必然握过握了0次手的人,那么,握了0次手的人就被握了8次手的人握了1次,这就矛盾了。 其次,可以断言握了1次手的人和握了7次手的人是一家人。因为现在大家都至少握过一次手了(和握过8次手的那个人握的),所以握过7次手的人必须和除了第一家和自己家的所有人握手,而握过1次手的人已经不能再和任何人握手了,因此,他们只能是一家人。 同理,握了2次手的人和握了6次手的人是一家人,握了3次手的人和握了5次手的人是一家人,握了4次手的是最后一家人。 现在来看,如果甲太太握了0次手,那么甲先生必然要握8次手,而且没有其他人可以握8次手,但是,甲先生是提问的人,因此,他没有握8次手,因此,甲太太也就不可能握0次手。 同理,甲太太也不可能握了1,2,3,5,6,7,8次手。 甲太太只可能握了4次手。


第33题

 赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比_____________次,才能获得最快的前3匹马?

 7

25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名? 每匹马都至少要有一次参赛的机会,所以25匹马分成5组,一开始的这5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了 (第6场)。最后就是要找第2和第3名。我们按照第6场比赛中得到的名次依次把它们在前5场比赛中所在的组命名为A、B、C、D、E。即:A组的冠军是第 6场的第1名,B组的冠军是第6场的第2名……每一组的5匹马按照他们已经赛出的成绩从快到慢编号: A组:1,2,3,4,5 B组:1,2,3,4,5 C组:1,2,3,4,5 D组:1,2,3,4,5 E组:1,2,3,4,5 从现在所得到的信息,我们可以知道哪些马已经被排除在3名以外。只要已经能确定有3匹或3匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到, 只有上表中粗体的那5匹马是有可能为2、3名的。即:A组的2、3名;B组的1、2名,C组的第1名。取这5匹马进行第7场比赛,第7场比赛的前两名就是 25匹马中的2、3名。故一共最少要赛7场。


第34题

 店主销售电话卡,他以60元的价格各销售了两张。其中一张是赚了20%,另一张是亏了20%。 请问他总共赚了_____________钱(亏了的话请用负数表示)?

 -5

有两个电话卡,a(赚钱)和b(亏钱),a的成本为x,x(1+0.2)=60,所以x=50,a赚10元

b的成本为y,y(1-0.2)=60,y=75,b亏15元

所以综合起来 亏5元


第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)();

}

 ptr 定义在 buf 的前面。在栈上开变量的话,后开的内存地址较小,也就是 ptr 是恰好接在 buf 数组的后面。所以如果数组越界就可以修改 ptr 指向的内存地址。


第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;

}


共有 36 道题目