阿里巴巴2017年度实习生笔试题(含答案解析)_第1页
阿里巴巴2017年度实习生笔试题(含答案解析)_第2页
阿里巴巴2017年度实习生笔试题(含答案解析)_第3页
阿里巴巴2017年度实习生笔试题(含答案解析)_第4页
阿里巴巴2017年度实习生笔试题(含答案解析)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、因捌三二ri七卜in+2字旧云正耗击+1:改用他T ix k轮钿Rj胖之正墉;君仁用伸展开彳会伸率可J&M ni JikT僵,小自建司以m、1 -1r日的了 1,帔件卜定.近脚芭花miuaqT同四,二二店迎锁定戈也“ :二四期内的侦史由剥去M1工总江皿1侬*闰乜口 “一砌内眇:前1D1-:,-. .潮.陆使用匚3球一步ti皿口相以规答案:D内联函数:Tip :只有当函数只有 10行甚至更少时才将其定义为内联函数.定义:当函数被声明为内联函数之后 ,编译器会将其内联展开,而不是按通常的函数调用机 制进行调用.优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效.对于存取函数以及其它函数体

2、比较短,性能关键的函数,鼓励使用内联.缺点:滥用内联将导致程序变慢.内联可能使目标代码量或增或减,这取决于内联函数的大小.内联非常短小的存取函数通常会减少代码大小,但内联一个相当大的函数将戏剧性的增加代码大小.现代处理器由于更好的利用了指令缓存,小巧的代码往往执行更快。结论:一个较为合理的经验准则是,不要内联超过10行的函数.谨慎对待析构函数,析构函数往往比其表面看起来要更长,因为有隐含的成员和基类析构函数被调用!另一个实用的经验准则:内联那些包含循环或switch 语句的函数常常是得不偿失(除非在大多数情况下,这些循环或switch语句从不被执行).这点很重要;比如虚函数和递注意:有些函数即

3、使声明为内联的也不一定会被编译器内联归函数就不会被正常内联.通常,递归函数不应该声明成内联函数.(递归调用堆栈的展开并不像循环那么简单,比如递归层数在编译时可能是未知的 ,大多数编译器都不支持内联递归 函数).虚函数内联的主要原因则是想把它的函数体放在类定义内,为了图个方便,抑或是当作文档描述其行为,比如精短的存取函数.-inl.h 文件:Tip :复杂的内联函数的定义,应放在后缀名为-inl.h的头文件中.内联函数的定义必须放在头文件中,编译器才能在调用点内联展开定义.然而,实现代码理论上应该放在.cc文件中,我们不希望.h文件中有太多实现代码,除非在可读性和性能 上有明显优势.如果内联函数

4、的定义比较短小,逻辑比较简单,实现代码放在.h文件里没有任何问题.比如,存取函数的实现理所当然都应该放在类定义内.出于编写者和调用者的方便,较复杂的内联函数也可以放到.h文件中,如果你觉得这样会使头文件显得笨重,也可以把它萃取到 单独的-inl.h中.这样把实现和类定义分离开来,当需要时包含对应的-inl.h即可。A项错误,因为使用inline关键字的函数只是用户希望它成为内联函数,但编译器有权忽略这个请求,比如:若此函数体太大,则不会把它作为内联函数展开的。B项错误,头文件中不仅要包含inline函数的声明,而且必须包含定义,且在定义时必须加上inline 。【关键字inline必须与函数定

5、义体放在一起才能使函数成为内联,仅 将inline放在函数声明前面不起任何作用】C项错误,inline函数可以定义在源文件中,但多个源文件中的同名inline函数的实现必须相同。一般把inline函数的定义放在头文件中更加合适。D项正确,类内的成员函数,默认都是inline的。【定义在类声明之中的成员函数将自动地成为内联函数】EF项无意思,不管是 class声明中定义的inline函数,还是class实现中定义的inline函数,不存在优先不优先的问题,因为 class的成员函数都是inline的,加了关键字inline也没什么特殊的0 m善啊对HHfc进行输氧在苦自国优茶耳下因下尊袪复翩度母

6、酗空0Fjtrlf.c?飒笄-答案:D插入排序 改良的冒泡最优也是n数组排序算法以法时间复杂度空间复奈度最f圭平均最差Qud0 rt0(n log(n)O(n log(n)0(M2Oflog 同)Meiqc5(Hl0(n log(n)0(n log(n)0(n log(n)0(n)TgMt0(n log(nj)0(n 心gfn)Q(用HgD2rtO(n log(n)O(n log(n)O(n login)Bubble Sort0(nA2OU)Invert ion Sortfnf0(n2)EeleHion oilO(nA2)O(nA2(M2)Shell SortOtnloqn)A2l0(nlog

7、(n)AZ)Bucket 301rlOU)O(nRadix lentO(nk)Ofn+k)Z畸1林的裤?名目勺罂打小半客锐垓和HS卷相用野子里的fit琅国A乙薛壬之后将乙产/假人一些到白杯子.阚 中诉手的液体恭宴皂程初的整古值定水温合之台之箭的丽之瓶.吟以下跪用王是口伶:四打亍甲前军植体沙工干一杆干手犷学归口田杆子不犷马槽下丫r不干乙杯子纪钮滑牌的区日曰杯子晅佗ftr”刊等于加了T血聃时上方曲林子TR T.f.1 i风手于己秆子塞的才的 槐:arrr里地河匾于二用子里不用工认I都乂对答案:A0 1mM卬“1由力i (丁 hn7 :-rWLl J#: W Wt: : harBBpia=-aipl

8、nt E % J稗);下列鞋=小14tas】 ifeahfl-sjkcrkatal.ibba遍;小也行,讪workat答案:AO 申济河一.HS看若干纽事理地.随机现在乩限子中三出与重王figtw*启.藤机国车呈q SDK尸q 3略反下记搂IE造的瞟口鼻;飞14的FT二小于零灯的1都flt tl4忖;粗大于胪邦下H+最rFtiftTThm回叶丁工|量厘I球好俏睡害HUM*,王上理唯阳二11加卜仃肉?:tJ答案:BI(DEBPZA1(FEDCBAJ(EDBPZA)答案:D先序遍历中左右中序遍历左中右后序遍历左右中中阿可片TCF二审立存谷寸暮中君尸不寺二:三小落力士志学说 仁武慰1* ,X1TJI

9、七b起野原1YH/EN谢志S:A5-iadE3丐氏口H_W -智吉原?器E. fill. M;町崎2 A遵耶限例是手嚼唐变科昌口:曲工晨包后书从4连嚏八列“仲答案:DTCP建立连接时首先客户端和服务器处于 close状态。然后客户端发送 SYN同步位,此时客户端处于 SYN-SEND 状态,服务器处于1ISTEN状态,当服务器收到SYN以后,向客户端发送同步位 SYN和确认码ACK,然后服务器变为SYN-RCVD ,客户端收到服务器发来的SYN和ACK后,客户端的状态变成 ESTABLISHED(已建立连接),客户端再向服务器发送 ACK确认码,服务器接收到以后也变成 ESTABLISHED然

10、后服务器客户端开始数据传输蹴在g!TF 下直根禺)2412=?8Si)加tM答案:F假设为 n 进值贝 U 2*(nA2)+4*(nA1)+0 * 1*n+2=2*(M3) +8*(M2)+8*(M1)化简后居然为很等式,n为任意值Q即网叮卜面关于案乐k三,奇才中岳能存!三网图融用迂府.修审&踊揍喇1行.二弟相前巾蚌灌用曲程运行衣用日呻亍1而季:小旦用液/,利dCT早穗比胡汨F林手生F片】却争附口二;耳人员御喻修用“:一用尸庠茄了总最iF问物?翼电回目保中了一些口被版桐式他行的?工归猎F答案:B用户空间与系统空间所在的内存区间不一样,同样,对于这两种区间,CPU的运行状态也不一样。 在用户空间

11、中,CPU处于“用户态;在系统空间中,CPU处于系统态。*于hnic的LU谷洋看ZIee旧匚闲二川 下利沪至方点为与口E1哂用时宜图亍靖世里用心1好用向11眄世机乱不会呵M历jelesE71昆大寻解的+IK_F-IT二子有*困力专式於且E品咕律圻多的插片:代商用于TL工登并支V,但落肚江总不了啊喷后, -苣上不用?嘲IE噌加币H性日式野1HT在陌观加 印即户的酊他;:4答案:Cselectselect能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024 ,这也是select最大的缺点,因为现在的服务器并发量远远不止1024。即使能重新编译内核改变FD_SETSIZE的值,但这并不

12、能提高select的性能。每次调用select都会线性扫描所有描述符的状态,在 select结束后,用户也要线性扫描 fd_set数组才知道哪些描述符准备就绪,等于说每次调用复杂度都是O (n)的,在并发量大的情况下,每次扫描都是相当耗时的,很有可能有未处理的连接等待超时。每次调用select都要在用户空间和内核空间里进行内存复制fd描述符等信息。pollpoll使用pollfd结构来存储fd ,突破了 select中描述符数目的限制。与select的后两点类似,poll仍然需要将pollfd数组拷贝到内核空间,之后依次扫描fd的状态,整体复杂度依然是O (n)的,在并发量大的情况下服务器性能

13、会快速下降。epollepoll维护的描述符数目不受到限制,而且性能不会随着描述符数目的增加而下降。服务器的特点是经常维护着大量连接,但其中某一时刻读写的操作符数量却不多。epoll先通过epoll_ctl注册一个描述符到内核中,并一直维护着而不像poll每次操作都将所有要监控的描述符传递给内核;在描述符读写就绪时,通过回掉函数将自己加入就绪队列中,之后epoll_wait返回该就绪队列。也就是说,epoll基本不做无用的操作,时间复杂度仅与活跃的客户端数有关,而不会随着描述符数目的增加而下降。epoll在传递内核与用户空间的消息时使用了内存共享,而不是内存拷贝,这也使得epoll的效率比po

14、ll和select更高。O因耍有砌的小号一个乘幅WJf 7历麓展餐工三可田宜两个程胆修有不=)际答案:F答案:4Q障旃I在00-999这9W+白回中.若再组成曾T班先牛EI室温为是三看聂士长度理监是三电永住tfgill例曲虱人45121142工犍165答案:165/在100-999这900个自然数中,若将组成这个数的三个数字认为是三条线段的长度,那么是三条线段组成一个等腰三角形(包括等边)的共有()个.#include using namespace std;int main()int a = 0;int b = 0;int c = 0;int time = 0;for (int i = 10

15、0; i c) | (b = c & (c + ba) | (c = a & (a + cb)( time +;cout time endl;return 0;Q降诜同F主国午不呈过性哉寸答案:关联数组1.循环链表是另一种形式的链式存贮结构。特点是表中最后一个结点的指针域指向头结点,整个链表形成环。(1 )单循环链表一一在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。(2 )多重链的循环链表一一将表中结点链在多个环上。2队列(Queue )是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表;.栈(stack )在计算机科学中是限定仅在栈顶进行插入或删除操作的线性

16、表。. “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL )来索引它。关联数组和数组类似,由以名称作为键的字段和方法组成。它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys ,可以在以后用于检索数组中的数值。关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。.链表(Linked list )是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。双向链表也叫双链表,是链表的

17、一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。0障诜明F %旺畔:三田 三加4 加支工苴工是口小弗-II的7母逋帮打tttff,*用H序到修喇技序副博答案:B类别排序方法时间复杂度空间复杂度稳定性平均情况破好情况最坏情况辅助存储插入直接插入0(吩800(吟0(1)稳定排序鼬阈排序0(口口)OW6球)3)乐稳强一选择3S选择右吟5崂0(1)不稳定排序堆摔序0(nlog2n)O(nlog.n)O(nlc&n)0(1)不松定交换冒泡排序0(方0(11)Ofn2)0(1)定

18、J排序快速排序CXnlogn)tXrJoggn)(Xtf)O(niog2n)不稔定归并排序OCnlogMQ(nlog:n)。(加脸n)O(n)稳定一基数排用a戋片小)lo(d(n+rd)O(d(rni)O(rdF)稳定桶排序的平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM) 。如果相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大, 而桶的数量也非常多,则空间代价无疑是昂贵的。此外,桶排序是稳定的。里田业HlllAffifa一0七剪茫* 可1忸能)里有配有1包也由于EWlRKE而0Si不到一为

19、了工位妁联网,,。在工但町MFK&告为比同更承f超孰巴用当于中国即可以中等百工世上的计利他WIFI之晅的信号1日号jfiMVWFI发后与fcLSlAP两 一IFCE毋左,抚珀同中也的祚雷S一志工匈砸睡不上1MFI国0 鼻去袭位疆里也去于AP哇其举位望船说EIE樱用最混鼬置缸由碓3卜一岳:官尼后1近1”I电哥,F*啜巾耳IIL晶工都不计内个全芒,gm千人策一个盒千4?柢当他守却:千人之一之每一 T定而分谢哈蓊K4人的三率ZElt于之小人已担拉与七金千里*1在这祥 m台剑 * -.矢=曰,一F 度会=力丽二台右知造三啬正生三。个个j.揖到刑以加十数确理府内.色人的刎时制恻世加i市箕一;币薄K J用

20、人的*! 士币挈的幅现之星大有中I的某彳防区工币中取:修臣茁我.走k:行士Ffi的司能I区乂答案:B&国迎在色之中月中上可F n工生后好出云用自己的 仃 净丁叶三丁标五二于定i 立包下问:辩:=不?:.才常同理曳比,口更好工货商,刃比愎啜更可球) .在in 1王爰江甘u里爰有生生焚化,一养出1,王前也用柳加1史理胆小壬拉位寸堤,.皿这卜立物司;.就不二常工小7H晓欣等他答案:F选项AB是对称的,所以肯定正确,由AB可以看出题目的意图是,这次交换靠的是物品的相对价值相当(小张觉得橡皮比小刀更好,小王觉得小刀比橡皮更好),但明显最后一个选项等值指的是他们的绝对价值Q降党剧I i-ti4Ktifit

21、int charIhIStETt工下犀左生E4位北哩司三岩吁三出比罡叶土r工I答案:16l.struct的对齐原则,注意不同的编译器有不同的效果。2.不同的数据类型在 32位和64位下所占字节的区别32位编译器:char : 1个字节char* (即指针变量):4个字节(32位的寻址空间是 2A32,即32个bit ,也就 是4个字节。同理64位编译器)short int : 2 个字节int : 4个字节unsigned int : 4 个字节float: 4个字节double: 8 个字节long: 4个字节long long: 8 个字节unsigned long: 4 个字节64位编译

22、器:char : 1个字节char*(即指针变量):8个字节short int : 2 个字节int : 4个字节unsigned int : 4 个字节float: 4个字节double: 8 个字节long: 8 个字节long long: 8 个字节unsigned long: 8 个字节此处指针先占用8字节。int占用4字节,满足要求不用补齐,char占用一个字节, 同时总的字节数必须满足 8的倍数即160用近胤dJus togliit nailn(.-old;i(j.“rty.pu-rh tact l 311 pai-1-ay pujJhtack 39S);a-ray .push_t

23、Bc.k;J0e ji”7了.即赧 JWJjir.puh (9M) |a r-r H pu i h_b:ck EiK)-vectcr: :i.te-rsiar iter j+g (ltor-i rr jy negln (: ;! -a ay, end ( ; itc t-t) ( tto-ar - ay. erase i;)% i: 1 ay .bifln 0 mmii卡i it)答案:100 300 300 500vector:erase():从指定容器删除指定位置的元素或某段范围内的元素vector:erase()方法有两种重载形式如下:iterator erase(iterator _Where);iterator erase(iterator _First,iterator _Last);如果是删除指定位置的元素时:返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;本题中,当*itor=300成立时,删除第一个值为300的元

温馨提示

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

评论

0/150

提交评论