2022年迅雷网络技术公司面试题(C++工程师岗位)(应聘 求职 面试准备资料)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年迅雷网络技术公司面试题(C++工程
师岗位)
第1题:
一、单选题
下列for循环的循环体执行次数为
for(int i=10, j=1; i=j=0; i++, j--)
A 0
B 1
C 无限
D 以上都不对
答案:A
解析:这个问题可以这样理解,在for(string1;string2;string3)中,string1用于设定循环变量处置,string2用于循环推断,string3用于转变循环变量到调整,一般状况下,我们采纳规律推断表达式来打算循环是否执行,而假如在这里采纳赋值语句,其规律值始终为假,导致循环不执行
第2题:
下面程序的输出结果是
char *p1= “123”, *p2 = “ABC”, str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout str;
A xyz123ABC
B z123ABC
C xy123ABC
D 出错
答案:D
解析:strcat(p1,p2)出错,由于p1只被安排了4个字节的地址空间,将p2拼接在p1后面会引起内存溢出。
第3题:
下面函数的执行结果是输出
charstr[]=“xunlei”;
char*p=str;
intn=10;
printf(“%d,%d,%d/n”,sizeof(str),sizeof(p),sizeof(n));
A 4,4,4
B 7,4,4
C 6,4,4
D 6,6,4
答案:B
解析:指针和int、float类型均占4个字节,而sizeof(str)包括'\0'所以是7个字节
第4题:
char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf(“%s%s”,p,q);
printf(“%s%s/n”,p,q);
若从键盘输入:abcdef,则输出结果是
A defdef
B abcdef
C abcd
D dd
答案:A
解析:q=p;因此p,q指向的是同一段内存.scanf先是把abc写到p 指向的空间,再把def写到q指向的空间,也就是同一段空间,因此abc 被def掩盖了。
第5题:
现在有以下语句:
struct_THUNDER{
intiVersion;
charcTag;
charcAdv;
intiUser;
charcEnd;
}Thunder;
intsz=sizeof(Thunder);
则执行后,变量sz的值将得到
A 11
B 12
C 13
D 16
答案:D
解析:结构体默认对齐方式为8,则iVersion取4字节对齐,CTag、CAdv和cEnd取2字节对齐,结构体大小为14,14不为4的整数倍,补空字节,增至16时符合全部条件,则sizeof(Thunder)为16。
第6题:
有如下程序段:
voidGetMemeory(char*p)
{
p=(char*)malloc(100);
}
voidtest()
{
char*str=NULL;
GetMemory(str);
strcpy(str,”Thunder”);
strcat(str+2,“Downloader”);
printf(str);
}
请问运行Test函数结果是:
A ThunderDownloader
B underDownloader
C Thunderownloader
D 程序崩溃
答案:D
分析:在函数中给指针安排空间,实际上是给指针的临时变量安排空间,函数结束后,这个临时变量也消亡,而str仍旧为NULL,没有为其安排空间,此时strcpy()是确定会出错的。
第7题:
p是指向类X的成员m的指针,s是类X的一个对象。
现要给m 赋值,()是正确的。
A s.p=5
B s-p=5
C s.*p=5
D *s.p=5
答案:C
第8题:
函数
fun(char* p){
return p;
}
的返回值是
A 无准确值
B 行参p中存放的地址值
C 一个临时存储单元的地址
D 行参p自身的地址值
答案:B
分析:可参考找工作笔试面试那些事儿(3)---内存管理那些事,返回的是形参p中存放的地址值。
第9题:
a,b均为不等于0的整形变量,以下关系式恒成立的是:
A a*b/a*b==1
B a/b*b/a==1
C a/b*b+a%b==a
D a/b*b==a
答案:C
解析:a/b得到的是去除余数后的值,再加上a%b取摸的值就等于
a了,所以选C
第10题:
设有如下说明:
typedef struct ST{
long a; int b; char c[2];
} NEW;
则下面叙述中正确的是:
A 以上的说明形式非法
B ST是一个结构体类型
C NEW是一个结构体类型
D NEW是一个结构体变量
答案:C
解析:struct ST 等价于NEW,为同一个结构类型第11题:
二、不定项选择
下列表达式中,不合法的是()
已知:double d = 3.2; int n = 3;
A d2;
B d/n
C !d (n-3)
D (d-0.2)|n
答案:A D
解析如下:
(1)float、double、long double等类型不允许直接进行位与操作符啊,可用间接的方法变通,如float取地址(也是符号)转换为unsigned int类型,再用取值操作符(*),这样编译器会以为是unsigned int类型。
(2)使用int、short、long移位时最好加上unsigned,这样就是汇编中规律移位(即全部移位),假如不加unsigned状况就较为简单,正数全是规律移位,负数左移时保持符号位为1、右边补0,负数右移时保持符号位为1,左边补1,所以-1不管怎么右移都是-1。
(3)位与操作符就是将两个数进行与操作,0x01就相当于掩码取出最终一位,其他位置成0
(4)位与操作符的操作优先级小于移位操作符,但移位操作符小于取地址操作符(取值操作符*),所以上面代码不会出错
第12题:
下面描述正确的是()
A while循环语句的循环体至少执行1次
B do-while循环可以写成while循环的格式
C continue语句可以消失在各种循环体中
D break语句不行以消失在循环体内
答案:BC
解析:break语句可以消失在switch语句块中,while循环体可能不会执行
第13题:
关于内联函数正确的是()
A 类的私有成员函数不能作为内联函数
B 在全部类说明中内部定义的成员函数都是内联函数
C 类的爱护成员函数不能作为内联函数
D 使用内联函数的地方会在运行阶段用内联函数体替换掉
答案:B
解析如下:
A是可以的,私有成员函数可以内联
C也可以
D应当是在编译阶段替换
第14题:
下面模板声明中,哪些是非法的()
A templateclass Typeclass C1;
B templateclass T, U, class Vclass C2;
C templateclass C1, ypename C2class C3{};
D templatetypename myT, class myTclass C4{};
答案:B D
解释:B选项的U参数没有指定类型,D选项的2个形参名同名。
函数模板的格式:
templateclass形参名,class形参名,......返回类型函数名(参数
列表)
{
函数体
}
类模板的格式为:
templateclass 形参名,class形参名,…class类名{ ... };
第15题:
在使用扫瞄器打开一个网页的过程中,扫瞄器会使用的网络协议包括()
A DNS
B TCP
C HTTP
D Telnet
答案:ABC
思路:使用DNS去获得域名的主机ip,使用HTTP去获得报文交互,而HTTP是基于TCP协议的
第16题:
三、问答题
有n个文件的长度记载在一个无符号64位整数数组中unsigned__int64 file_length[n],把这n 个文件从规律上按序首尾拼接在一起形成一个规律上的大文件,然后以每块长度为unsigned block_length把这个规律上的大文件划分成大小相等的数据块(当然,最终一块有可能比block_length小),请定义和实现一个函数,把边界块的序号集合返回给函数的调用者(第一个数据块序号为0)。
注:边界块指的是跨多个文件的数据块。
vectorint findSeq(unsigned __int64* file_length,int n, unsigned block_length)
{
vectorint seqnums;
unsigned __int64 totalSize = 0;
int preSeq=-1;
for(int i=0; in;i++){
totalSize += file_length[i];
int seq = totalSize/block_length;
if(!(totalSize%block_length)){
seq--;
}
if(preSeq==seq){
if(seqnums.empty()||seqnums.back()!=seq){
seqnums.push_back(seq);
}
}
preSeq = seq;
}
return seqnums;
}
第17题:
请实现一个函数,把两个从大到小的有序链表合并成一个链表,新的链表是一个从小到大的有序链表。
struct list
{
int value;
list* next;
};
list * merge (list *list1_head, list*list2_head);
list *merge(list *list1_head,list *list2_head) {
list *newlist = NULL;
list *current = NULL;
while(NULL!=list1_head NULL!=list2_head) {
if(list1_head-value list2_head-value) {
current = list1_head-next;
list1_head-next = newlist;
newlist = list1_head;
list1_head = current;
}
else
{
current = list2_head-next;
list2_head-next = newlist;
newlist = list2_head;
list2_head = current;
}
while(NULL!=list1_head)
{
current = list1_head-next;
list1_head-next = newlist;
newlist = list1_head;
list1_head = current;
}
while(NULL!=list2_head)
{
current = list2_head-next;
list2_head-next = newlist;
newlist = list2_head;
list2_head = current;
}
return newlist;
}
第18题:
假如两个英文单词,组成它们的字符集合相同,而且相同字符消失的次数也相同,则称这两个词匹配:比如说:同”abbc”与词”babc”
是匹配的。
有一个词典,存储在字符串数组const char* dictionary[n]中,数组的每一个元素是一个词。
对于任意给出的句子。
句子中的单词使用空格分割。
请实现以下函数,推断句子中是否有词和词典中的词匹配。
bool is_matching( const char* dictionary[],int n, const char* sentence);
abbc 和babc 同的话,即词语单个字符的ascii码和相同即词语相同。
把字符串比较转换成int 型数字比较。
数组中全部词转换成int 放入int数组。
比较大小。