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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、就是說,epoll基本不做無用的操作,時間復雜度僅與活躍的客戶端數(shù)有關,而不會隨著描述符數(shù)目的增加而下降。epoll在傳遞內(nèi)核與用戶空間的消息時使用了內(nèi)存共享,而不是內(nèi)存拷貝,這也使得epoll的效率比poll和select更高。答案:F答案:4答案:165/在100-999這900個自然數(shù)中,若將組成這個數(shù)的三個數(shù)字認為是三條線段的長度,那么是三條線段組成一個等腰三角形(包括等邊)的共有()個.#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;答案:關聯(lián)數(shù)組1.循環(huán)鏈表是另一種形式的鏈式存貯結(jié)構(gòu)。特點是表中最后一個結(jié)點的指針域指向頭結(jié)點,整個鏈表形成環(huán)。 (1) 單循環(huán)鏈表在單鏈表中,將終端結(jié)點的指針域NULL改為指向表頭結(jié)點或開始結(jié)點即可。(2)多重鏈的循環(huán)鏈表將表中結(jié)點鏈在多個環(huán)上。2隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表;3.棧(stack)在計算機科學中是限定僅在棧頂進行插入或刪除操作的線性表。4. “關聯(lián)數(shù)組”是一種具有特殊索引方式的數(shù)組

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

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

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

14、 int : 2個字節(jié)int:4個字節(jié) unsigned int : 4個字節(jié) float:4個字節(jié) double:8個字節(jié)long:8個字節(jié) long long:8個字節(jié)unsigned long:8個字節(jié)此處指針先占用8字節(jié)。int占用4字節(jié),滿足要求不用補齊,char占用一個字節(jié),同時總的字節(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);如果是刪除指定位置的元素時:返回值是一個迭代器,指向刪除元素下一個元素;如果是刪除某范圍內(nèi)的元素時:返回值也表示一個迭代器,指向最后一個刪除元素的下一個元素;本題中,當*itor=300成立時,刪除第一個值為300的元素,同時itor指向下一個元素(即是第二個值為300的元素)在for(;itor+)執(zhí)行itor,itor指向第三個值為300的元素,進入下一個循環(huán)進入循環(huán)滿足*itor=300,重復上面的過程,執(zhí)行完循環(huán),itor執(zhí)行值為500的元素。所有整個過程中,只刪除了2個值為300的元素。答案:C 可以修改類的靜態(tài)成員屬于整個類 而不是某個對象,可以被類的所有方法訪問,子類當然可以父類靜態(tài)成員;靜態(tài)方法屬于整個類,在對象創(chuàng)建之前就已經(jīng)分配空間,類的非靜態(tài)成員要在對象創(chuàng)建后才有內(nèi)存,所有靜態(tài)方法只能訪問靜態(tài)成員,不能訪問非靜態(tài)成員;靜態(tài)成員可以被任一對象修改,修改后的值可以被所有對象共享答案:DKMP算法

溫馨提示

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

評論

0/150

提交評論