2023年阿里巴巴实习生笔试题含答案_第1页
2023年阿里巴巴实习生笔试题含答案_第2页
2023年阿里巴巴实习生笔试题含答案_第3页
2023年阿里巴巴实习生笔试题含答案_第4页
2023年阿里巴巴实习生笔试题含答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Q[单选题]

关于C++的inline关键字以下说法正确的是0

使用slse关键字的幽会被编淳器在调用处展开

头文件中可以包含inline函飘的声明

可以在同一个项目的不同源文件内定义函数名相同但实现不同的s15cM

定义在Sass声明内的成员函数默认是工nline酬

优先使用Class声明内定义的slin@数

优先使用Class实现的内inline圉数的实现

答案:D

内联函数:

Tip:只有当函数只有10行甚至更少时才将其定义为内联函数.

定义:当函数被声明为内联函数之后,编译器会将其内联展开,而不是按通常的函数调用机

制进行调用.

优点:当函数体比较小的时候,内联该函数可以令目的代码更加高效.对于存取函数以及其

它函数体比较短,性能关键的函数,鼓励使用内联.

缺陷:滥用内联揩导致程序变慢.内联也许使目的代码量或增或减,这取决于内联函数的大

小.内联非常短小的存取函数通常会减少代码大小,但内联一个相称大的函数将戏剧性的增

长代码大小.现代解决器由于更好的运用了指令缓存,小巧的代码往往执行更快。

结论:一个较为合理的经验准则是,不要内联超过10行的函数.谨慎对待析构函数,析构函

数往往比其表面看起来要更长,由于有隐含的成员和基类析构函数被调用!

另一个实用的经验准则:内联那些包含循环或switch语句的函数经常是得不偿失(除非在

大多数情况下,这些循环或switch语句从不被执行).

注意:有些函数即使声明为内联的也不一定会被编译器内联,这点很重要;比如虚国数和递

归函数就不会被正常内联.通常,递归函数不应当声明成内联函数.(递归调用堆栈的展开并

不像循环那么简朴,比如递归层数在编译时也许是未知的,大多数编译器都不支持内联递归

函数).虚函数内联的重要因素则是想把它的函数体放在类定义内,为了图个方便,抑或是当

作文档描述其行为,比如精短的存取函数.

-inl.h文献:

Tip:复杂的内联函数的定义,应放在后缀名为-inl.h的头文献中.

内联函数的定义必须放在头文献中,编译器才干在调用点内联展开定义.然而,实现代码理

论上应当放在.cc文献中,我们不希望.h文献中有太多实现代码,除非在可读性和性能上

有明显优势.

假如内联国数的定义比较短小,逻辑比较简朴,实现代码放在.h文献里没有任何问题.比如,

存取函数的实现理所当然都应当放在类定义内.出于编写者和调用者的方便,较复杂的内联

函数也可以放到.h文献中,假如你觉得这样会使头文献显得笨重,也可以把它萃取到单独

的-inl.h中.这样把实现和类定义分离开来,当需要时包含相应的-inl.h即可。

A项错误,由于使用inline关键字的函数只是用户希望它成为内联函数,但编译器有权忽略

这个请求,比如:若此函数体太大,则不会把它作为内联函数展开的。

B项错误,头文献中不仅要包含inline函数的声明,并且必须包含定义,且在定义时必须加

±inlineo【关键字inline必须与函数定义体放在一起才干使函数成为内联,仅

将inline放在函数声明前面不起任何作用】

C项错误,inline函数可以定义在源文献中,但多个源文献中的同名inline函数的实现必须

相同。一般把inline函数的定义放在头文献中更加合适。

D项对的,类内的成员函数,默认都是inline的。【定义在类声明之中的成员函数将自动地

成为内联函数】

EF项无意思,不管是class声明中定义的inline函|数,还是class实现中定义的inline函数,

不存在优先不优先的问题,由于class的成员函数都是inline的,加了关键字inline也没

什么特殊的

答案:D插入排序

改良的冒泡最优也是n

数组排序算法

算法时间复杂度空间复杂度

最佳平均最差最差

Quicksort0(nlog(n))0(nlog(n))O(nA2)O(log(n))

Merqesort0(nlog(n))0(nlog(n))0(nlog(n))0(n)

Timsort0(n)0(nlog(n))O(nlog(n))0(n)

Heapsort0(nlog(n))0(nlog(n))0(nlog(n))0(1)

BubbleSort0(n)0(nA2)0(nA2)0(1)

InsertionSort0(n)0(nA2)0(nA2)0(1)

SelectionSort0(nA2)0(nA2)0(nA2)0(1)

ShellSort0(n)O((nlog(n))A2)O((nlog(n))A2)0(1)

BucketSortO(n+k)O(n+k)0(nA2)0(n)

RadixSortO(nk)O(nk)O(nk)O(n+k)

❷[单选题]

甲乙两个一样大〃巡J杯子各自分另爆者小于一半容积的水和酒精现将甲杯子里的一部分水倒入乙杯子之后将乙怀子的混合液倒入一屋到甲杯子此时

甲杯子的液体恢复到最初的状态假定水和酒精混合之后的体积等于混合之前的体积之和.另以以下说法正确的是0

您甲杯子里的酒楮体积等于乙杯子里的水的体积

甲杯子里的酒精的体积等于乙杯子里的酒精的体积

甲杯子里的水的体积等于乙杯子里的酒精的体积

甲杯子里的水的体积等于乙杯子里的水的体积

甲杯子里的液体高于乙杯子里的液位

以上都不对

去(=□宰■.cA

O[单选题]

<nain()

2{

char-a[]-{''<ork","at","alibaba");

char**pa»a;

pa++;

printf("%s",*pa);

7)

下列程序的执行结果是()

@at

atalibaba

ork

orkatalibaba

编译错误

运行溢出

答案:A

O[单选购

一个黑盒子里有若干红球和黑球,随机取出一个球是红球的概率是p现在从黑盒子中拿出等量的红球和黑球后随矶取出一个球是红球的概率是q如果

p<q、那么以下说法正确的是0

最初红球的个数小于黑球的个数

最初红球的个数大于黑球的个数

最初红球的个数是黑球的的2倍

最初红球的个数是黑球的“2

⑥无法半蜥最初红球和黑球谁多谁少

答案:B

~7~~,百生C〒忙”CT6

P=~p+-70=匕一s>4^—n-

J、•>P•内jg号TY飞一一―M-S-

v|2_<LC_人_b-F>vJ2'—〈化T~61-

❷[单选题]

答案:D

先序遍历中左右

中序遍历左中右

后序遍历左右中

O[单选题]

在TCP/IP建立连接过程中客户端和服务器端的状毒转移说法错误的是。

经历SYN_RECV状态

经历S¥N_SEN漱态

经历ES2ABLISHED^f^

经历TIME_WAIT状态

服务器在收到,yn包8寸将加入半连接队列

服务器接受到客户如的ack包后将从半连接队列删除

答案:D

TCP建立连接时

一方面客户端和服务器处在close状态。

然后客户端发送SYN同步位,此时客户端处在SYN-SEND状态,服务器处在1ISTEN状态,

当服务器收到SYN以后,向客户端发送同步位SYN和确认码ACK,

然后服务器变为SYN-RCVD,

客户端收到服务器发来的SYN和ACK后,客户端的状态变成ESTABLISHED(已建立连接),

客户端再向服务器发送ACK确认码,

服务器接受到以后也变成ESTABLISHED

然后服务器客户端开始数据传输

❷[单选题]

假设在n进制下方面的等式成立n值是()240"12=2880

19

18

17

16

15

⑥以上都对

答案:F

假设为n进值则[2*(n八2)+4*(n八1)+0]*[l*n+2]=2*(23)+8*(n八2)+8*(n八1)

化简后居然为很等式,n为任意值

❷单螭

下面关于系统调用的描述中错误的是o

系统调用}日应用程序的请求偿系统内核执行

系统调用中被调用的过程运行在"用户态”中

利用系统调用能够得到操作系统提供的多种服务

是操作系统提供给编程人员的接口

系统调用给用户屏蔽了设备访问的细节

系统调用保护了一些只能在内核模式执行的操作指令

答案:B

用户空间与系统空间所在的内存区间不同样,同样,对于这两种区间,CPU的运营状态也

不同样。在用户空间中,CPU处在“用户态“;在系统空间中,CPU处在“系统态”。

❷[单选题]

关于linux的1,9复用按ClselectfiJepoH下列说法错误的是0

seles调用时会进行线性遍历,epoli采用回调函数机制,不需要线性遍历

selecc的最大连接数为FD_SETSIZE

select就适合于有大量并发连接,且活跃道接较多的场景

ep。口较适用于有大量并发连接,但活跃连接不多的场景

epoll缄率不随F谢目增加而线性下降

©poll通过共享存储实现内核和用户的数据交互

答案:C

select

select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的

缺陷,由于现在的服务器并发量远远不止1024。即使能重新编译内核改变FD_SETSIZE的值,

但这并不能提高select的性能。

每次调用select都会线性扫描所有描述符的状态,在select结束后,用户也要线性扫描fd_set

数组才知道哪些描述符准备就绪,等于说每次调用复杂度都是O(n)的,在并发量大的情况下,

每次扫描都是相称耗时的,很有也许有未解决的连接等待超时。

每次调用select都要在用户空间和内核空间里进行内存复制fd描述符等信息。

poll

poll使用pollfd结构来存储fd,突破了select中描述符数目的限制。

与select的后两点类似,poll仍然需要将pollfd数组拷贝到内核空间,之后依次扫描fd的状

态,整体复杂度仍然是O(n)的,在并发量大的情况下服务器性能会快速下降。

epoll

epoll维护的描述符数目不受到限制,并且性能不会随着描述符数目的增长而下降。

服务器的特点是经常维护着大量连接,但其中某一时刻读写的操作符数量却不多。epoll先

通过epolLctl注册一个描述符到内核中,并一直维护着而不像poll每次操作都将所有要监控的

描述符传递给内核;在描述符读写就绪时,通过回掉函数将自己加入就绪队列中,之后epolLwait

返回该就绪队列。也就是说,epoll基本不做无用的操作,时间复杂度仅与活跃的客户端数有关,

而不会随着描述符数目的增长而下降。

epoll在传递内核与用户空间的消息时使用了内存共享,而不是内存拷贝,这也使得epoll

的效率比poll和select更高。

Q[单选题)

答案:F

Q[单选题]

答案:4

❷[单选国

在100-99鳍900个目级中若将组成这个数的三个数字认为是三条线段的长度用垓是三条送段姐成一个零震三角形(包括等边)的共有(4

45

91

121

142

156

@165

答案:165

〃在100-999这900个自然数中.若将组成这个数的三个数字认为是三条线段的长度,那么是三条线

段组成一个等腰三角形(涉及等边)的共有()个.

#include<iostream>

usingnamespacestd;

intmain()

(

inta=0;

intb=0;

intc=0;

inttime=0;

for(inti=100;i<=999;i++)

(

c=i%10;

b=(i-c)/10%10;

a=i/100;

if(a==0||b==0||c==0)

continue;

if((a==b&&(a+b>c))||(b==c&&(c+b>a))||(c==a&&(a+c>b)))

time++;

)

)

cout«time«endl;

return0;

❷[单选题]

答案:关联数组

L循环链表是另一种形式的链式存贮结构。特点是表中最后一个结点的指针域指向头结

点,整个链表形成环。

(1)单循环链表一一在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结

点即可。

(2)多重链的循环链表一一将表中结点链在多个环上。

2队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表;

3.栈(stack)在计算机科学中是限定仅在栈顶进行插入或删除操作的线性表。

4.“关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使

用字符串或者其他类型的值(除了NULL)来索引它。关联数组和数组类似,由以名称作

为键的字段和方法组成。它包含标量数据,可用索引值来单独选择这些数据,和数组不同

的是,关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以

后用于检索数组中的数值。关联数组的元素没有特定的顺序,你可以把它们想象为一组卡

片。每张卡片上半部分是索引而下半部分是数值。

5.链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上

非连续、非顺序的存储结构。双向链表也叫双链表,是链表的一种,它的每个数据结点中

都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,

都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

❷[单选题]

下面的哪种排序尊法在算复杂度平均不是O(nlogn)的?

快速排序

桶排序

®合用非序

二叉树排序树排序

雄排序

答案:B

时间复杂度空间复杂度

类别排序方法稳定性

平均情况最好情况最坏情况辅助存储

插入直接插入o(tf)O(n)。(冰)0(1)稳定

排序

Shell排序O(n13)O(n)O(n2)0(1)不稳定

选择直接选择O(n2)0(小)。(吟0(1)不稳定

排序

堆摔序O(nlog2n)O(nlog2n)O(nlog2n)0(1)不稳定

交换冒泡排序OCn2)0(n)0(吟0(1)稳定

排序

快速排序OCnlo^n)O(nlog2n)。(吟O(nlog2n)不稔定

归并排序O(nlo&n)O(nlo&n)O(nlog2n)O(n)稳定

基数排序。@什n))O(d(n+rd))。(义什n))O(rd-*n)稳定

桶排序的平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)0假如相对于同样的N,

桶数量M越大,其效率越高,最佳的时间复杂度达成0(N)。当然桶排序的空间复杂度为

O(N+M),假如输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。此外,

桶排序是稳定的。

❷[单选题]

要创业团队的一N艮大的办公室(障碍和遮挡可以忽略)里有一个WIFI源.有1个工位由于距离WIFI源太远而接收不到信号为了提高该工位的联网质重,

次备在工位和W旧信岩源之间安装一个无线AP(相当于中继的可以中转该工位上的计算机和WIFI之间的信岩)只考虑从WIFI发出的信号,如果AP离

WIFI源太近,就起不到中继的作用如果AP离工位太远则可能连不上WIFI因此AP有T最佳的安装位置那么关于AP®佳安装位直的说法正确的是。

如果WIFI'源功率越大,抖及AP^佳安装位置越靠近内:FI源

@如果血光源功率越大,那么AF最佳球装位置越靠近工位

W1F工源功率和AP最佳安装团S无关.

A屋佳安装位置在工位和WIFI信号源连2坡外

A蹑佳安装位置在工位和WIF工信号源连线中点

以上说法者杯对

Q[单选题]

有100个金市,分给10个人第一个金市等限率地分给10个人之一之后的每一个金币分岗给第K个人的慨率正比于这个人已经持有的金币数+1.在这样

的分配机制下,关于每个人最终的金市个数的分布的说法^误的是0

每个人得到的金币的个数的期望是相等的

每个人的金币个数接近均匀分布

第一个金币给哪个人,哪个人的最终金币个数的期望就会更大

您在中间的某个阶段金币个数越多的人,未来获得金币的可能性越大

答案:B

O[单选题]

在自由交涣的情况下.只考虑偏好.小张用自己的小刀涣了小王的像皮关于这个交换以下说法错误的是

4、张觉得橡皮比小刀更好

小王觉得小刀比橡皮更好

@N长和小王总做播里没有发生变化

川长和小王的效用值增加了

如果把小王换成小吴,那么这个交换可能就不会发生

小刀和橡皮等值

答案:F

选项AB是对称的,所以肯定对的,由AB可以看出题目的意图是,这次互换靠的是物品的

相对价值相称(小张觉得橡皮比小刀更好,小王觉得小刀比橡皮更好),但明显最后一个

选项等值指的是他们的绝对价值

❷[单选题]

struct

int

int

char

intsizeofstruct

如下C程序在64位处理器上运行后S*]值是什么?

24

20

16

14

13

12

答案:16

1.struct的对齐原则,注意不同的编译器有不同的效果。

2.不同的数据类型在32位和64位下所占字节的区别

32位编译器:

char:1个字节

char*(即指针变量):4个字节(32位的寻址空间是2八32,即32个bit,也就是4个

字节。同理64位编译器)

shortint:2个字节

int:4个字节

unsignedint:4个字节

float:4个字节

double:8个字节

long:4个字节

longlong:8个字节

unsignedlong:4个字节

64位编译器:

char:1个字节

char*(即指针变量):8个字节

shortint:2个字节

int:4个字节

unsignedint:4个字节

float:4个字节

double:8个字节

long:8个字节

longlong:8个字节

unsignedlong:8个字节

此处指针先占用8字节。int占用4字节,满足规定不用补齐,char占用一个字节,同时

总的字节数必须满足8的倍数即16

O[单选题]

#include<iostrean>

#include〈vector〉

usingnamespacestd;

intnain(void)

(

vector<int>array;

array.push_back(100);

array.push_back(300);

array.push_back(300);

array.push_back(300);

array.push_back(300);

array.push_back(500);

vector<int>::iteratoritor;

for(itor=array.begin();itor!=array.end();itor++)

(

if(*itor3300)

(

itor=arrdy.erase(itor);

}

)

for(itor=array.begin();itor!=array.end();itor++)

(

cout<<*itor<<"";

}

return0;

)

下面这个代码输出的是0

答案:100300300500

vector::erase():从指定容器删除指定位置的元素或某段范围内的元素

vector::erase()7j法有两种重载形式

如下:

iteratorerase(iterator_Where);

iteratorerase(iterator_First,iterator_Last);

假如是删除指定位置的元素时:

返回值是一个迭代器,指向删除元素下一个元素;

假如是删除某范围内的元素时:返回值也表达一个迭代器,指向最后一个删除元素的下

-?元素;

本题中,当*itor==300成立时,删除第一个值为300的元素,同时itor指向下一"/?元素

(即是第二个值为300的元素)

在for(;;itor++)执行itor,itor指向第三个值为300的元素,进入下一个循环

进入循环满足*itor==300,反复上面的过程,执行完循环,itor执行值为500的元素。

所有整个过程中,只删除了2个值为300的元素。

Q(单选题]

下面关计个类的静态成员描述中不正确的是()

静态成员变量可被该类的所有方法访问

该类的静态方法只能访问i友类摘态成员的数

该类携态数据成员变量的值不可修改

子类可以访问父类的静态成员

®静态成员无多杰特性

答案:C可以修改

类的静态成员属于整个类而不是某个对象,可以被类的所有方法访问,子类当然可以父类

静态成员;

静态方法属于整个类,在对象创建之前就已经分派空间,类的非静态成员要在对象创建后才

有内存,所有静态方法只能访问静态成员,不能访问非静态成员;静态成员可以被任一对象

修改,修改后的值可以被所有对象共享

Q[单选题]

给定的一个长度为N的字符串str苣找氏度为P(P<N)的字符串在sir中的出现次数.下面的说法正确的是0

不存在btM坏时间复杂度c(NP)好的簟去

不存在比最坏时间复杂度c(N-2)好的篁法

不存在比最坏时间复杂度。(Pb)好的算法

存在最坏时间复杂度为。(N+P)的算法

®存在最坏时间复杂度为。(log«K+p))的算法

以上都不对

答案:D

KMP算法:时间复杂度O(p+N)

❷[单选题]

某体校选择校服每会校^都包括短袖运动彩长袖运动衫厚外套运动长裤和运动短裤组成.每种运动服有个备选方案老师请了部分学生来^^自己喜

欢的校服结果发现任息3个学生都至少在T*运动服上选择亘不相同那名老师最多遒清了(小学生参加挑选

答案:8

每套校服都涉及短袖运动衫,长袖运动衫,厚外套,运动长裤和运动短裤组成.“每种运动服”有

个备选方案。说明校服一共有2人5=32种选择方案。

任意3个学生都至少在一种运动服上选择互不相同,假设有老师邀请了n个学生参与挑选,

说明Cn2<32<Cn3,得出n=8。

Q[单选题]

有4副相同的牌每副牌有4张不同的牌先从这16张牌中随机选4张出来然后.在这4张牌中随机选择一张牌.然后把抽出的TK放回3张中,再履巩选择一

张牌与上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论