海康2017校招C++开发岗位笔试题


一、 选择题
1.当一个类中某个函数被说明为virtual 时,该函数在该类的所有派生类中(C)、
A.只有被重新说明才是虚函数 B.只有被重新说明为virtual时才是虚函数
C.都是虚函数 D.都不是虚函数


2.从C++文件到可执行文件经过哪些步骤(C)
A.预处理、汇编、编译、链接 B.编译、预处理、汇编、链接
C.预处理、编译、汇编、链接 D.预处理、编译、链接、汇编


3.在设计一个离线的大数据处理系统,下面哪个指标不是系统追求的(C)
A.健壮性 B. 高吞吐
C.低延时 D.处理的数据规模


4.禁止修改p的值,但能够修改p所指向的数据,这样的指针应该定义为(B)
A.const char *p = new char[1024]; B. char *const p = new char [1024];
C.char const *p = new char [1024]; D.const char * const p = new char [1024];

5. int a [10] ={0},sizeof(a) ,在x86 32位系统和64位系统,分别返回(C)
A.40 40 B.10 10
C.40 80 D.4 8


6. 假定AB为一个类,则执行"AB a(2),b[3],*p[4] ;" 语句调用该类构造函数的次数为(B)
A.3 B.4
C.5 D.6


7.在 int a = 3,int *p = &a ;中,*p的值为(D)
A.变量a的地址值 B.未定义
C.变量p的地址值 D.3


8.已知f1和f2 是同一类两个成员函数,但是f1不能直接调用f2,这说明(C)
A.f1和f2都是静态函数 B.f1不是静态函数
C.f1是静态函数,f2不是静态函数 D.f1和f2 都不是静态函数


9.设下方模板,则对该函数模板的错误使用是()
A. Sum(10,2) B.Sum(5.0,6.7)
C.Sum(15.2f,16.0f) D.Sum("AB","CD")


10.下面的程序合法吗?如果合法,它将输出什么?
int i = 100, sum = 0;
for (int i = 0; i != 10; ++1){
sum += i;
}
std::cout << i << " " << sum << std::endl;
A.10 45 B.100 45
C.10 214747 D.不合法


11.下面程序输出结果是(C )
static int func(int j ){
static int i = j;
return ++i;
}


int main(int argc, chr * argv[]){
int i = 0;
int j = 5; 
for (;j != 0; --j){
i = fun(j);
}
std::cout << i << std::endl;
return 0;
}
A.2 B.6
C.10 D.11


12. 下面哪个函数返回的有效句柄使用完毕后不需要CloseHandle (B)
A.CreateThread B.GetCurrentProcess
C.OpenProcess D.CreateFile


***13.两个进程加载同一个动态的链接库时候(windwos的dll或者Linux的.so文件),动态链接库的哪个资源
是两个进程共享的 ()
A.文本区域 B.栈区
C.堆区 D.文件描述符


14.以下程序输出结果是(B)
class A {
public:
virtual int func (int i = 1){
std::cout <<"class A" << std::endl; 
return i + 1;
}


virtual ~A() {}
};


class B:public A{
public :
virtual int func (int i = 10){
std::cout <<"class B " << i << std::endl; 
return i;
}
};
int main(int argc, char * argv[]){



A *p = new B();
std::cout << p->func() << std::endl; 
delete p;


return 0;
}
A.10 B.1
C.2 D.11


15. 下列属于传输层协议的是:(B)
A.HTTP B.UDP
C.ICMP D.ARP


二、简答题 (20'=10 ' + 10')
1.简述 overload(重载),Override(重写) 以及Hide(隐藏)
重载:同一个类中不同的函数有相同的函数名,但是函数的参数和类型不同
重写:派生类对基类中的虚函数重新实现。即函数名和参数都一样,只是函数的实体不一样
隐藏:派生类把基类中相同名字的函数屏蔽掉了


2.假设有一个变量var,当它的类型为bool,int,float 指针变量时,分别写出它与0比较的if语句。
bool: if (!var){ ... }
int : if (var == 0){ ... }
float :if ( (var >= -0.00001) && (var <= 0.00001))
三、操作题
1.(15')
子网掩码是用来判断任意两台计算机IP地址是否属于同一网络,子网掩码与IP地址结构相同,
是32位二进制数,其中网络号部分全为1,主机号部分全为"0", 利用子网掩码可以判断两台主机是否
在同一个子网中,若两台主机的IP地址分别与它们子网掩码"与"后的结果相同,则说明两台主机在同
一个子网中。
完善下面的函数,判断两台计算机IP地址是处于同一子网络,要求:
输入参数:
char *mask_addr, 格式为 255.255.255.0
char *ip1_addr ,格式为 192.168.0.1
char *ip2_addr , 格式为 192.168.0.1
int checkNetSegment (char *mask_addr, char *ip1_addr, char *ip2_addr){
....
}


#include 
#include 
#include 


int getIntArray(char *addr,int *array_addr){
char *taken = NULL;

if (addr == NULL){
return 2;
} 
std::cout << "------start-------" << std::endl;
taken = strtok(addr,"."); 
//std::cout << taken << " " ; 
int i = 0; 
while(taken != NULL) 
{ 

array_addr[i] = atoi(taken); 
if(array_addr[i] > 255 || array_addr[i] < 0) 
{ 
return 2; 
} 

i++; 
taken = strtok(NULL,"."); 
// std::cout << taken << " " ; 
} 


return 0;
}




int checkNetSegment (char *mask_addr, char *ip1_addr, char *ip2_addr){
char *taken = NULL;
int aMask[4] = {0}; 
int aip1[4] = {0}; 
int aip2[4] = {0}; 
int ret = 0;

ret = getIntArray(mask_addr,aMask);
if (ret != 0){
std::cout << " invalid mask!" << std::endl;
return 2;
}
ret = getIntArray(ip1_addr,aip1);
if (ret != 0){
std::cout << " invalid ip1!" << std::endl;
return 2;
}
ret = getIntArray(ip2_addr,aip2);
if (ret != 0){
std::cout << " invalid ip2!" << std::endl;
return 2;
}


int i = 0; 
for (int i = 0; i < 4; i ++){
if ((aip1[i]&aMask[i]) == (aip2[i]&aMask[i])){
continue;
}
std::cout << " ips are not in the same netsegment" << std::endl; 
return 1;


}
std::cout << " ips are in the same netsegment" << std::endl; 
return 0;
}


int main(){

char mask[] = "255.255.255.0";
char ip1 [] = "192.168.1.120";
char ip2 [] = "192.168.1.128";
int ret = checkNetSegment (mask,ip1,ip2);
return 0;
}
...


你可能感兴趣的:(10_笔/面试题集锦分析)