阿里巴巴2017實(shí)習(xí)生筆試題(含答案)_第1頁(yè)
阿里巴巴2017實(shí)習(xí)生筆試題(含答案)_第2頁(yè)
阿里巴巴2017實(shí)習(xí)生筆試題(含答案)_第3頁(yè)
阿里巴巴2017實(shí)習(xí)生筆試題(含答案)_第4頁(yè)
阿里巴巴2017實(shí)習(xí)生筆試題(含答案)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.答案:D內(nèi)聯(lián)函數(shù):Tip: 只有當(dāng)函數(shù)只有 10 行甚至更少時(shí)才將其定義為內(nèi)聯(lián)函數(shù).定義: 當(dāng)函數(shù)被聲明為內(nèi)聯(lián)函數(shù)之后, 編譯器會(huì)將其內(nèi)聯(lián)展開, 而不是按通常的函數(shù)調(diào)用機(jī)制進(jìn)行調(diào)用.優(yōu)點(diǎn): 當(dāng)函數(shù)體比較小的時(shí)候, 內(nèi)聯(lián)該函數(shù)可以令目標(biāo)代碼更加高效. 對(duì)于存取函數(shù)以及其它函數(shù)體比較短, 性能關(guān)鍵的函數(shù), 鼓勵(lì)使用內(nèi)聯(lián).缺點(diǎn): 濫用內(nèi)聯(lián)將導(dǎo)致程序變慢. 內(nèi)聯(lián)可能使目標(biāo)代碼量或增或減, 這取決于內(nèi)聯(lián)函數(shù)的大小. 內(nèi)聯(lián)非常短小的存取函數(shù)通常會(huì)減少代碼大小, 但內(nèi)聯(lián)一個(gè)相當(dāng)大的函數(shù)將戲劇性的增加代碼大小. 現(xiàn)代處理器由于更好的利用了指令緩存, 小巧的代碼往往執(zhí)行更快。結(jié)論: 一個(gè)較為合理的經(jīng)驗(yàn)準(zhǔn)則是,

2、 不要內(nèi)聯(lián)超過 10 行的函數(shù). 謹(jǐn)慎對(duì)待析構(gòu)函數(shù), 析構(gòu)函數(shù)往往比其表面看起來要更長(zhǎng), 因?yàn)橛须[含的成員和基類析構(gòu)函數(shù)被調(diào)用!另一個(gè)實(shí)用的經(jīng)驗(yàn)準(zhǔn)則: 內(nèi)聯(lián)那些包含循環(huán)或 switch 語(yǔ)句的函數(shù)常常是得不償失 (除非在大多數(shù)情況下, 這些循環(huán)或 switch 語(yǔ)句從不被執(zhí)行).注意:有些函數(shù)即使聲明為內(nèi)聯(lián)的也不一定會(huì)被編譯器內(nèi)聯(lián), 這點(diǎn)很重要; 比如虛函數(shù)和遞歸函數(shù)就不會(huì)被正常內(nèi)聯(lián). 通常, 遞歸函數(shù)不應(yīng)該聲明成內(nèi)聯(lián)函數(shù).(遞歸調(diào)用堆棧的展開并不像循環(huán)那么簡(jiǎn)單, 比如遞歸層數(shù)在編譯時(shí)可能是未知的, 大多數(shù)編譯器都不支持內(nèi)聯(lián)遞歸函數(shù)). 虛函數(shù)內(nèi)聯(lián)的主要原因則是想把它的函數(shù)體放在類定義內(nèi), 為

3、了圖個(gè)方便, 抑或是當(dāng)作文檔描述其行為, 比如精短的存取函數(shù).-inl.h文件:Tip: 復(fù)雜的內(nèi)聯(lián)函數(shù)的定義, 應(yīng)放在后綴名為 -inl.h 的頭文件中.內(nèi)聯(lián)函數(shù)的定義必須放在頭文件中, 編譯器才能在調(diào)用點(diǎn)內(nèi)聯(lián)展開定義. 然而, 實(shí)現(xiàn)代碼理論上應(yīng)該放在 .cc 文件中, 我們不希望 .h 文件中有太多實(shí)現(xiàn)代碼, 除非在可讀性和性能上有明顯優(yōu)勢(shì).如果內(nèi)聯(lián)函數(shù)的定義比較短小, 邏輯比較簡(jiǎn)單, 實(shí)現(xiàn)代碼放在 .h 文件里沒有任何問題. 比如, 存取函數(shù)的實(shí)現(xiàn)理所當(dāng)然都應(yīng)該放在類定義內(nèi). 出于編寫者和調(diào)用者的方便, 較復(fù)雜的內(nèi)聯(lián)函數(shù)也可以放到 .h 文件中, 如果你覺得這樣會(huì)使頭文件顯得笨重, 也可

4、以把它萃取到單獨(dú)的 -inl.h 中. 這樣把實(shí)現(xiàn)和類定義分離開來, 當(dāng)需要時(shí)包含對(duì)應(yīng)的 -inl.h 即可。A項(xiàng)錯(cuò)誤,因?yàn)槭褂胕nline關(guān)鍵字的函數(shù)只是用戶希望它成為內(nèi)聯(lián)函數(shù),但編譯器有權(quán)忽略這個(gè)請(qǐng)求,比如:若此函數(shù)體太大,則不會(huì)把它作為內(nèi)聯(lián)函數(shù)展開的。B項(xiàng)錯(cuò)誤,頭文件中不僅要包含inline函數(shù)的聲明,而且必須包含定義,且在定義時(shí)必須加上inline?!娟P(guān)鍵字inline必須與函數(shù)定義體放在一起才能使函數(shù)成為內(nèi)聯(lián),僅將inline放在函數(shù)聲明前面不起任何作用】C項(xiàng)錯(cuò)誤,inline函數(shù)可以定義在源文件中,但多個(gè)源文件中的同名inline函數(shù)的實(shí)現(xiàn)必須相同。一般把inline函數(shù)的定義放在

5、頭文件中更加合適。D項(xiàng)正確,類內(nèi)的成員函數(shù),默認(rèn)都是inline的。【定義在類聲明之中的成員函數(shù)將自動(dòng)地成為內(nèi)聯(lián)函數(shù)】EF項(xiàng)無意思,不管是class聲明中定義的inline函數(shù),還是class實(shí)現(xiàn)中定義的inline函數(shù),不存在優(yōu)先不優(yōu)先的問題,因?yàn)閏lass的成員函數(shù)都是inline的,加了關(guān)鍵字inline也沒什么特殊的答案:D 插入排序改良的冒泡最優(yōu)也是n答案:A答案:A答案:B答案:D先序遍歷中左右中序遍歷左中右后序遍歷左右中答案:DTCP建立連接時(shí)首先客戶端和服務(wù)器處于close狀態(tài)。然后客戶端發(fā)送SYN同步位,此時(shí)客戶端處于SYN-SEND狀態(tài),服務(wù)器處于lISTEN狀態(tài),當(dāng)服務(wù)器

6、收到SYN以后,向客戶端發(fā)送同步位SYN和確認(rèn)碼ACK,然后服務(wù)器變?yōu)镾YN-RCVD,客戶端收到服務(wù)器發(fā)來的SYN和ACK后,客戶端的狀態(tài)變成ESTABLISHED(已建立連接),客戶端再向服務(wù)器發(fā)送ACK確認(rèn)碼,服務(wù)器接收到以后也變成ESTABLISHED然后服務(wù)器客戶端開始數(shù)據(jù)傳輸答案:F假設(shè)為n進(jìn)值則 2*(n2)+4*(n1)+0 * 1*n+2=2*(n3)+8*(n2)+8*(n1)化簡(jiǎn)后居然為很等式 ,n為任意值答案:B用戶空間與系統(tǒng)空間所在的內(nèi)存區(qū)間不一樣,同樣,對(duì)于這兩種區(qū)間,CPU的運(yùn)行狀態(tài)也不一樣。在用戶空間中,CPU處于用戶態(tài);在系統(tǒng)空間中,CPU處于系統(tǒng)態(tài)。答案:C

7、selectselect能監(jiān)控的描述符個(gè)數(shù)由內(nèi)核中的FD_SETSIZE限制,僅為1024,這也是select最大的缺點(diǎn),因?yàn)楝F(xiàn)在的服務(wù)器并發(fā)量遠(yuǎn)遠(yuǎn)不止1024。即使能重新編譯內(nèi)核改變FD_SETSIZE的值,但這并不能提高select的性能。每次調(diào)用select都會(huì)線性掃描所有描述符的狀態(tài),在select結(jié)束后,用戶也要線性掃描fd_set數(shù)組才知道哪些描述符準(zhǔn)備就緒,等于說每次調(diào)用復(fù)雜度都是O(n)的,在并發(fā)量大的情況下,每次掃描都是相當(dāng)耗時(shí)的,很有可能有未處理的連接等待超時(shí)。每次調(diào)用select都要在用戶空間和內(nèi)核空間里進(jìn)行內(nèi)存復(fù)制fd描述符等信息。pollpoll使用pollfd結(jié)構(gòu)來

8、存儲(chǔ)fd,突破了select中描述符數(shù)目的限制。與select的后兩點(diǎn)類似,poll仍然需要將pollfd數(shù)組拷貝到內(nèi)核空間,之后依次掃描fd的狀態(tài),整體復(fù)雜度依然是O(n)的,在并發(fā)量大的情況下服務(wù)器性能會(huì)快速下降。epollepoll維護(hù)的描述符數(shù)目不受到限制,而且性能不會(huì)隨著描述符數(shù)目的增加而下降。服務(wù)器的特點(diǎn)是經(jīng)常維護(hù)著大量連接,但其中某一時(shí)刻讀寫的操作符數(shù)量卻不多。epoll先通過epoll_ctl注冊(cè)一個(gè)描述符到內(nèi)核中,并一直維護(hù)著而不像poll每次操作都將所有要監(jiān)控的描述符傳遞給內(nèi)核;在描述符讀寫就緒時(shí),通過回掉函數(shù)將自己加入就緒隊(duì)列中,之后epoll_wait返回該就緒隊(duì)列。也

9、就是說,epoll基本不做無用的操作,時(shí)間復(fù)雜度僅與活躍的客戶端數(shù)有關(guān),而不會(huì)隨著描述符數(shù)目的增加而下降。epoll在傳遞內(nèi)核與用戶空間的消息時(shí)使用了內(nèi)存共享,而不是內(nèi)存拷貝,這也使得epoll的效率比poll和select更高。答案:F答案:4答案:165/在100-999這900個(gè)自然數(shù)中,若將組成這個(gè)數(shù)的三個(gè)數(shù)字認(rèn)為是三條線段的長(zhǎng)度,那么是三條線段組成一個(gè)等腰三角形(包括等邊)的共有()個(gè).#include using namespace std;int main()int a = 0;int b = 0;int c = 0;int time = 0;for (int i = 100;

10、i c) | (b = c & (c + ba) | (c = a & (a + cb)time+;cout time endl;return 0;答案:關(guān)聯(lián)數(shù)組1.循環(huán)鏈表是另一種形式的鏈?zhǔn)酱尜A結(jié)構(gòu)。特點(diǎn)是表中最后一個(gè)結(jié)點(diǎn)的指針域指向頭結(jié)點(diǎn),整個(gè)鏈表形成環(huán)。 (1) 單循環(huán)鏈表在單鏈表中,將終端結(jié)點(diǎn)的指針域NULL改為指向表頭結(jié)點(diǎn)或開始結(jié)點(diǎn)即可。(2)多重鏈的循環(huán)鏈表將表中結(jié)點(diǎn)鏈在多個(gè)環(huán)上。2隊(duì)列(Queue)是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除的運(yùn)算受限的線性表;3.棧(stack)在計(jì)算機(jī)科學(xué)中是限定僅在棧頂進(jìn)行插入或刪除操作的線性表。4. “關(guān)聯(lián)數(shù)組”是一種具有特殊索引方式的數(shù)組

11、。不僅可以通過整數(shù)來索引它,還可以使用字符串或者其他類型的值(除了NULL)來索引它。關(guān)聯(lián)數(shù)組和數(shù)組類似,由以名稱作為鍵的字段和方法組成。它包含標(biāo)量數(shù)據(jù),可用索引值來單獨(dú)選擇這些數(shù)據(jù),和數(shù)組不同的是, 關(guān)聯(lián)數(shù)組的索引值不是非負(fù)的整數(shù)而是任意的標(biāo)量。這些標(biāo)量稱為Keys,可以在以后用于檢索數(shù)組中的數(shù)值。關(guān)聯(lián)數(shù)組的元素沒有特定的順序,你可以把它們想象為一組卡片。每張卡片上半部分是索引而下半部分是數(shù)值。5.鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu)。雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后

12、繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表。答案:B桶排序的平均時(shí)間復(fù)雜度為線性的O(N+C),其中C=N*(logN-logM)。如果相對(duì)于同樣的N,桶數(shù)量M越大,其效率越高,最好的時(shí)間復(fù)雜度達(dá)到O(N)。 當(dāng)然桶排序的空間復(fù)雜度 為O(N+M),如果輸入數(shù)據(jù)非常龐大,而桶的數(shù)量也非常多,則空間代價(jià)無疑是昂貴的。此外,桶排序是穩(wěn)定的。答案:B答案:F選項(xiàng)AB是對(duì)稱的,所以肯定正確,由AB可以看出題目的意圖是,這次交換靠的是物品的相對(duì)價(jià)值相當(dāng)(小張覺得橡皮比小刀更好,小王覺得小刀比橡皮更好),但明顯最后一個(gè)選項(xiàng)等值指

13、的是他們的絕對(duì)價(jià)值答案:161.struct的對(duì)齊原則,注意不同的編譯器有不同的效果。2.不同的數(shù)據(jù)類型在32位和64位下所占字節(jié)的區(qū)別32位編譯器: char :1個(gè)字節(jié)char*(即指針變量): 4個(gè)字節(jié)(32位的尋址空間是232, 即32個(gè)bit,也就是4個(gè)字節(jié)。同理64位編譯器) short int : 2個(gè)字節(jié) int:4個(gè)字節(jié) unsigned int : 4個(gè)字節(jié) float:4個(gè)字節(jié) double:8個(gè)字節(jié) long:4個(gè)字節(jié) long long:8個(gè)字節(jié) unsigned long:4個(gè)字節(jié) 64位編譯器: char :1個(gè)字節(jié)char*(即指針變量): 8個(gè)字節(jié) short

14、 int : 2個(gè)字節(jié)int:4個(gè)字節(jié) unsigned int : 4個(gè)字節(jié) float:4個(gè)字節(jié) double:8個(gè)字節(jié)long:8個(gè)字節(jié) long long:8個(gè)字節(jié)unsigned long:8個(gè)字節(jié)此處指針先占用8字節(jié)。int占用4字節(jié),滿足要求不用補(bǔ)齊,char占用一個(gè)字節(jié),同時(shí)總的字節(jié)數(shù)必須滿足8的倍數(shù)即16答案:100 300 300 500vector:erase():從指定容器刪除指定位置的元素或某段范圍內(nèi)的元素vector:erase()方法有兩種重載形式如下:iterator erase( iterator _Where);iterator erase( iterato

15、r _First, iterator _Last);如果是刪除指定位置的元素時(shí):返回值是一個(gè)迭代器,指向刪除元素下一個(gè)元素;如果是刪除某范圍內(nèi)的元素時(shí):返回值也表示一個(gè)迭代器,指向最后一個(gè)刪除元素的下一個(gè)元素;本題中,當(dāng)*itor=300成立時(shí),刪除第一個(gè)值為300的元素,同時(shí)itor指向下一個(gè)元素(即是第二個(gè)值為300的元素)在for(;itor+)執(zhí)行itor,itor指向第三個(gè)值為300的元素,進(jìn)入下一個(gè)循環(huán)進(jìn)入循環(huán)滿足*itor=300,重復(fù)上面的過程,執(zhí)行完循環(huán),itor執(zhí)行值為500的元素。所有整個(gè)過程中,只刪除了2個(gè)值為300的元素。答案:C 可以修改類的靜態(tài)成員屬于整個(gè)類 而不是某個(gè)對(duì)象,可以被類的所有方法訪問,子類當(dāng)然可以父類靜態(tài)成員;靜態(tài)方法屬于整個(gè)類,在對(duì)象創(chuàng)建之前就已經(jīng)分配空間,類的非靜態(tài)成員要在對(duì)象創(chuàng)建后才有內(nèi)存,所有靜態(tài)方法只能訪問靜態(tài)成員,不能訪問非靜態(tài)成員;靜態(tài)成員可以被任一對(duì)象修改,修改后的值可以被所有對(duì)象共享答案:DKMP算法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論