2016年360校招笔试题

奇虎360 2017校园招聘 技术综合E

一、单选题

1、下列哪个命令可以用来定时任务的?

A. crontab

B. setsid

C. date

D. setup

 

2、把已存在用户加入到指定组的命令是()

A. gpasswd

B. groupadd

C. useradd

D. groupmod

 

3、下列说法正确的是()

A. 两个对象的hashCode不同,则这两个对象肯定是不同的对象

B. 两个对象如果equals判断为true,则这两个对象的hashCode肯定也相同

C. 两个对象如果==判断为true,则这两个对象肯定是同一个对象

D. 两个对象的hashCode相同,则这两个对象肯定是同一个对象

 

4、在xx处能够书写的代码是()

public class Test{
int w,x,y,z;
public Test(int a, int b)
{
x=a;
y=b;
}
public Test(int a, int b, int c, int d)
{
XX
w=d;
z=c;
}
}

A. x=a,y=b

B. Base(a,b)

C. this(a), this(b)

D.this(a,b);

 

5、以下关于递归调用的说法正确的是()

A. 递归调用可以用队列实现

B. 函数直接调用自己是递归

C. 递归调用可以用栈实现

D. 函数间接调用自己不是递归

 

6、设有一组初始关键字序列为{30,20,10,25,15,28},则第4趟直接插入排序结束后的结果的是()

A. 10,15,20,25,28,30

B. 10,15,20,25,30,28

C. 10,20,30,25,15,28

D. 10,20,25,30,15,28

 

7、在含有50个结点的二叉排序树上,查找关键字为20的结点,则依次比较的关键字有可能是()

A. 15,35,18,14,20

B. 35,25,28,15,20

C. 35,25,18,15,20

D. 15,35,25,20

 

8、下列算法段中,语句(6)的语句频度为()

(1)for( i=1; i<=n ;i++)
 {
(2)for(j=1; j<=n;j++)
 {
(3) x=0;
(4) for( k=1; k<=n; k++)
(5) x+=a[i][k]*b[k][j];
(6) c[i][j]=x;
 }
 }

A. n3

B. n2*(n+1)

C. n2

D. n*(n+1)

 

9、执行下列脚本,输出变量a的值为()

A. 45

B. 0

C. 55

D. 1045

 

10、下面程序的输出是什么?

d = lambda p: p*2
t = lambda p: p*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print x

A. 36

B. 24

C. 17

D. 12

 

11、下面程序的输出是什么?

def f(a,b,c);
x = y = 0
for i in range(c):
x = x+a+y
y = y+b
return x
print f(-5,2,10)

A. 0

B. 30

C. 40

D. 20

 

12run.sh脚本已经运行了很长时间,但是发现其仍然需要很长的执行时间,为了使run.sh脚本能够后台继续运行,且退出终端后程序不会被kill,下列哪些命令可以达到目的?()

A. setsid

B. nohup

C. disown

D. screen

 

13、下列有关Socket的说法正确的是()

A. Socket用于描述IP地址和端口,是一个通信链的句柄

B. Socket客户端的端口是不固定的

C. Socket服务端的端口是固定的

D. Socket通信必须建立连结

 

14、下面哪些是spark的缓存方法?()

A. memory

B. persist

C. Cache

D. union

 

15、决策树中包含如下哪些结点?

A. 外部结点(external node

B. 叶结点(leaf node

C. 内部结点(internal node

D. 根结点(root node

 

16、矩阵Wn-by-n的对称方阵,其所有元素均非负,矩阵Dn-by-n对角阵,D的第j个对角元素等于Wj行所有元素之和(对于所有j=1,...,n)。设矩阵G=D-W。问:以下哪个必然是矩阵G的特征值?

A. 0

B. e(约等于2.718

C. π(约等于3.142

D. 1

 

17、人群中每一千人中有4个患肝癌,某项血液测试可以较为准确检测肝癌(阳性:检测结果显示患病;阴性:检测结果显示健康)。如果患肝癌,检测结果有80%概率呈阳性,20%概率呈阴性;如果未患肝癌,有90%概率呈阴性,10%概率呈阳性,如果检测结果呈阳性,那么此人患肝癌的概率大约是多少?(提示:使用贝叶斯公式)

A. 0.003

B. 0.8

C. 0.08

D. 0.03

 

18、以下关于SVM模型说法正确的是()

A. Kernel SVM将特征映射到高维空间

B. SVM是有监督学习算法

C. Kernel SVM将特征映射到低维空间

D. SVM是无监督学习算法

 

19、当使用趋近于无限多的训练数据,训练出的模型将有()

A. 一样的方差

B. 其他几项均不正确

C. 更高的方差

D. 更低的方差

 

20、下列程序的运行结果是x=2,请为横线处选择合适的程序()

#include
int main()
{
int i,j,x=0;
for(i=0; i<=2; i++)
{
for(j=1;j<=3;j++)
{
if(j%2) ____;
++x;
}
}
printf("x=%d\n",x);
return 0;
}

A. x++

B. x--

C. break

D. continue

 

21、执行下列代码后,main函数的输出结果是()

int func(unsigned int i);
void main()
{
printf("%d\n", func(0x1f4504a8));
return;
}
 
int func(unsigned int i)
{
unsigned int temp = i;
 
temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);
temp = (temp & 0x33333333) + ((temp & 0xcccccccc) >> 2);
temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4);
temp = (temp & 0xff00ff) + ((temp & 0xff00ff00) >> 8);
temp = (temp & 0xffff) + ((temp & 0xffff0000) >> 16);
 
return (temp);
}

A. 13

B. 12

C. 14

D. 15

 

22、下列程序的运行结果是1 4 3 4 5,请为横线处选择合适的程序()

void point(int *p)
{
*p=p[2];
}
 
main()
{
int c[] = {1,2,3,4,5},*p=c;
point(p+1);
for(;p

A. ++ (*p)

B. ++p

C. *p++

D. p++

 

23、下列函数的功能是在s所存放的字符串中查找形参c中存放的字符,若找到返回该字符下标,若找不到返回-1;请为横线处选择合适的程序()

#include
int f(char s[], char c)
{
int i=0;
char *q=s;
if(*q!='\0')
while(*(q+i)!=c && q[i] != '\0')
i++;
if(____)
return(i);
return(-1);
}

A. *(q+i) == 'c'

B. *(q+i) == 0

C. q[i] == c

D. q[i] == '\0'

 

24、以下程序运行后的输出结果是()

#include
#include
#include
main()
{
char *p;
int i;
p = (char *)malloc(sizeof(char) * 20);
strcpy(p, "welcome");
for(i=6; i>=0; i--) putchar(*(p + i));
printf("\n");
free(p);
}

A. emoclew

B. cowelme

 

25、有下列程序段

int a[] = {0,1,2,3,4,5}, *p[3], i;
for(i=0; i<3;i++)
{
p[i]  &a[2*i+1];
printf("%d", *p[i]);
}

该程序段的功能是()

A. 输出数组中下标为偶数的元素值

B. 将数组中每个元素的值扩大两倍再加1

C. 输出数组中下标为奇数的元素值

D. 输出数组的前三个元素值

 

26、下列程序编译时会发生错误,请根据行号选择错误位置()

#include
using namespace std;
class B
{
int k;
public:
B(int n=0):k(n){}  //5
int show() const //6
{
return k;  //7
}
};
 
class D:public B //8
{
static int j;   //9
public:
D(int i):j(i){}   //10
int show1() const   //1
{
return k;  //12
}
static int show2()  //13
{
return j;  //14
}
};
int D::j=0;  //15
int main()
{
D d1(2);  //16
cout<

A. 15

B. 16

C. 10

D. 12

 

27、下列程序的运行结果是()

#include
main()
{
int x=1,y=2,a=3,b=4;
switch(x)
{
case 1:
switch(y)
{
case 1:b++;
case2:a++;
break;
}
case 2:++a;
b++;
break;
case 3:a++;
++b;
}
printf("a=%d,b=%d\n",a,b);
}

A. a=5,b=5

B. a=2,b=1

C. a=1,b=2

D. a=3,b=4

 

28、下列代码的运行结果是()

main()
{
int a=4,b=5,c=6,d=0;
if( a == 4 || ++b == 5)
if( b!=5&&c--!=6)
printf("%d,%d,%d\n",a,b,c);
else
printf("%d,%d,%d\n",a,b,c);
else
printf("%d,%d,%d\n",a,b,c);
}

A. 4,6,5

B. 4,6,6

C. 4,5,6

D. 4,5,5

 

29、下列程序的功能是将s中的字符串按长度由小到大排列,请为横线处选择合适的程序

#include
#include
void f(char *p[], int n)
{
char *t;
int i,j;
for(i=0;istrlen(*(p+j)))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
main()
{
char *s[]={"abc","abcdef","abbd"};
f(s,3);
for(int i=0;i<3;i++)
printf("%s\n",____);
}

A. s+i

B. &s[i]

C. s[i]

D. *s[i]

 

 

30、有下列函数定义

void f(char *p, char z)
{
*p=*p-32;
z=z+32;
printf("%c,%c",*p,z);
}

若执行语句char x='a', y='B',f(&x,y),则该程序段的功能是()

A. x转换成大写字母,将z转换成小写字母

B. x转换成大写字母,将y转换成小写字母

C. p转换成大写字母,将z转换成小写字母

D. *p转换成大写字母,将z转换成小写字母

 

31、设员工工资表Salary结构如下(员工编号,姓名,部门,工资),下面那条语句可以查询每个部门的平均工资()

A. Select AVG(工资)From Salary Group By员工编号

B. Select部门,AVG(工资)From Salary Group By部门

C. Select AVG(工资)From Salary

D. Select 部门,AVG(工资)From Salary

 

二、编程题

1.内存管理

时间限制:c/c++语言1000MS;其他语言3000MS

内存限制:c/c++语言65536KB;其他语言58982KB

题目描述:

物联网技术的蓬勃发展,各种传感器纷纷出现,小B所在的项目组正在开发一个物联网项目,他们在研究设计一种新的传感器。这种传感器有自己的基本处理单元,具有一定的自主性,能够进行简单的数据收集、处理、存储和传输,为降低系统功耗并保证系统可靠性和可控性,他们要对内存进行基本的管理。研究小组计划开发一个实验性内存管理器,实现对内存的分配、释放和整理。对应的接口为newdeldef,使用语法为:

new size:分配size字节大小的内存块,返回该内存块的句柄handlesize为正整数。

del handle:释放句柄handle指向的内存块;

def:整理内存碎片,将所有已分配内存块按地址从低到高的顺序迁移,使空闲内存碎片在高地址端拼接在一起;

初始内存为initSize字节大小的整片空闲内存,编号为1initSize

new size操作中,若存在不小于size的连续空闲内存,则按照小地址优先的原则从空闲内存区域中分配size大小的内存块,标记该内存块状态为已分配,并返回指向该内存块的句柄。若无法分配,则返回空(NULL)。

del handle操作释放由handle标记的内存块,标记被释放的内存状态为空闲。若handle为无效句柄,则返回ILLEGAL_OPERATION.

def完成内存整理工作,无返回值。

根据设计,每次成功内存分配返回的句柄为一个正整数,从1开始,依次计数。失败的存储分配操作不影响计数。

项目小组将此项任务分配给小B,小B向你求助,你能帮他吗?

 

输入:

输入中有多组测试数据。每组测试数据的第一行为两个正整数T和MaxMem(1<=T<=10000,1<=MaxMem<=10000),其中T为操作次数,MaxMem为初始内存大小,随后有T行操作指令。
输出:
对每组测试数据,按操作顺序输出操作结果,对每个new操作,在单独行中输出结果,成功时输出其返回句柄值,失败则输出NULL,若del操作失败,输出ILLEGAL_OPERATION。def不产生输出。

样例输入

6 10
new 5
new 3
del 1
new 6
def
new 6

样例输出

1
2
NULL
3



2、最强大脑

时间限制:c/c++语言1000MS;其他语言3000MS

内存限制:c/c++语言65536KB;其他语言589824KB

题目描述:

B乘火车和朋友们一起在N市到M市之间旅行。她在路途中时睡时醒。当她醒来观看窗外的风景时,注意到每个火车站都有一种特别颜色的旗帜,但是她看到的旗帜仅仅是经过的一小部分。小B在乘车过程中有两次清醒的时间,她到达旅程终点时处于睡梦中。出站时,她和朋友们谈论着一路的见闻,朋友们觉得很有意思,他们把N到和M之间经过车站的旗帜颜色依次列出来,然后告诉你小B记得的旗帜颜色序列,让你判断小B究竟是从NM之间哪些方向才能看到所说颜色的旗帜,还是根本就不可能看到?颜色用字母代表,相同的字母代表相同的颜色,不同的字母则表示不同的颜色。

 

输入

输入中有多组测试数据,每组测试数据包含三行,第一行为一个由小写拉丁字母构成的非空字符串,长度不超过10^5,表示N到M之间车站的颜色。火车从M向N运行时,经过的车站相同,只是方向相反。第二行为小B在第一次睡醒时看到的颜色序列,第三行为小B在第二次睡醒时看到的颜色序列。两个序列都是小写的拉丁字母构成的字符串,长度不超过100个字母。每个序列的颜色顺序排列按小B看到的时间顺序排列。
 
  

输出

对每组测试数据,在单独的行中输出小B的旅行方向。
forward - 由N到M方向;
backward -由M到N方向
both - 两种方向都有可能;
invalid - 不可能看到这样的颜色序列;

样例输入:

a to b
a
b
aaacaaa
aca
aa

样例输出:

forward
both

Hint

火车假定时刻处于运行状态,不会两次看到同一个旗帜。N市和M市的车站没有旗帜。


 

 

 

 

 

 

你可能感兴趣的:(校招笔试)