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

下載本文檔

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

文檔簡介

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

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

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

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

5、起任何作用】C 項錯誤, inline 函數(shù)可以定義在源文件中,但多個源文件中的同名 inline 函數(shù)的實現(xiàn)必須相同。一般把 inline 函數(shù)的定義放在頭文件中更加合適。D 項正確,類內的成員函數(shù),默認都是 inline 的?!径x在類聲明之中的成員函數(shù)將自動地成為內聯(lián)函數(shù)】EF 項無意思,不管是 class 聲明中定義的 inline 函數(shù),還是 class 實現(xiàn)中定義的 inline 函數(shù),不存在優(yōu)

6、先不優(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),當服務器收到SYN以后,向客戶端發(fā)送同步位SYN和確認碼ACK,然后服務器變?yōu)镾YN-RCVD,客戶端收到服務器發(fā)來的SYN和ACK后,客戶端的狀態(tài)變成ESTABLI

7、SHED(已建立連接),客戶端再向服務器發(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)空間所在的內存區(qū)間不一樣,同樣,對于這兩種區(qū)間,CPU的運行狀態(tài)也不一樣。 在用戶空間中,CPU處于"用戶態(tài)";在系統(tǒng)空間中,CPU處于"系統(tǒng)態(tài)"。答案:Cselectselect能監(jiān)控的描述符個數(shù)由內核中的FD_SETSIZE限制,僅為10

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

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

10、符數(shù)目的增加而下降。epoll在傳遞內核與用戶空間的消息時使用了內存共享,而不是內存拷貝,這也使得epoll的效率比poll和select更高。答案:F答案:4答案:165/在100-999這900個自然數(shù)中,若將組成這個數(shù)的三個數(shù)字認為是三條線段的長度,那么是三條線段組成一個等腰三角形(包括等邊)的共有()個.#include <iostream>using namespace std;int main()    int a = 0;    int b = 0;   &#

11、160;int c = 0;    int time = 0;    for (int i = 100; i <= 999;i+)            c = i % 10;        b = (i - c) / 10 % 10;      

12、60; a = i / 100;        if (a=0|b=0|c=0)                    continue;              &#

13、160; if (a = b && (a + b>c) | (b = c && (c + b>a) | (c = a && (a + c>b)                    time+;           

14、;     cout << time << endl;    return 0;答案:關聯(lián)數(shù)組 1.循環(huán)鏈表是另一種形式的鏈式存貯結構。特點是表中最后一個結點的 指針 域指向 頭結點 ,整個鏈表形成環(huán)。         (1) 單循環(huán)鏈表在單鏈表中,將終端結點的指針域NULL改為指向表頭結點或開始結點即可。(2)多重鏈的循環(huán)鏈表將表中結點鏈在多個環(huán)上。2 

15、;隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表;3. 棧(stack)在計算機科學中是限定僅在棧頂進行插入或刪除操作的線性表。4. “關聯(lián)數(shù)組”是一種具有特殊索引方式的數(shù)組。不僅可以通過整數(shù)來索引它,還可以使用字符串或者其他類型的值(除了NULL)來索引它。 關聯(lián)數(shù)組和數(shù)組類似,由以名稱作為鍵的字段和方法組成。   它包含標量數(shù)據(jù),可用索引值來單獨選擇這些數(shù)據(jù),和數(shù)組不同的是, 關聯(lián)數(shù)組的索引值不是非負的整數(shù)而是任意的標量。這些標量稱為Keys,可以在以后用于檢索數(shù)組中的數(shù)值。 關聯(lián)數(shù)組的元素沒有特定

16、的順序,你可以把它們想象為一組卡片。每張卡片上半部分是索引而下半部分是數(shù)值。5.鏈表(Linked list)是一種常見的基礎數(shù)據(jù)結構,是一種線性表,是一種物理存儲單元上非連續(xù)、非順序的存儲結構。雙向鏈表也叫雙鏈表 ,是鏈表的一種,它的每個數(shù)據(jù)結點中都有兩個 指針 ,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。一般我們都構造雙向 循環(huán)鏈表 。答案:B桶排序的平均時間復雜度為線性的O(N+C),其中C=N*(logN-logM)。如果相對于同樣的N,桶數(shù)量M越大,其效率越高,最好的時

17、間復雜度達到O(N)。 當然桶排序的空間復雜度 為O(N+M),如果輸入數(shù)據(jù)非常龐大,而桶的數(shù)量也非常多,則空間代價無疑是昂貴的。此外,桶排序是穩(wěn)定的。答案:B答案:F選項AB是對稱的,所以肯定正確,由AB可以看出題目的意圖是,這次交換靠的是物品的相對價值相當(小張覺得橡皮比小刀更好, 小王覺得小刀比橡皮更好 ),但明顯最后一個選項等值指的是他們的絕對價值答案:161.struct的對齊原則,注意不同的編譯器有不同的效果。2.不同的數(shù)據(jù)類型在32位和64位下所占字節(jié)的區(qū)別32位編譯器:      char :1個字節(jié)

18、0;      char*(即指針變量): 4個字節(jié)(32位的尋址空間是232, 即32個bit,也就是4個字節(jié)。同理64位編譯器)      short int : 2個字節(jié)      int: 4個字節(jié)      unsigned int : 4個字節(jié)      float: 4個字節(jié)  

19、60;   double: 8個字節(jié)      long: 4個字節(jié)      long long: 8個字節(jié)      unsigned long: 4個字節(jié)  64位編譯器:      char :1個字節(jié)      char*(即指針變量): 8個字節(jié) 

20、     short int : 2個字節(jié)     int: 4個字節(jié)      unsigned int : 4個字節(jié)      float: 4個字節(jié)      double: 8個字節(jié)      long: 8個字節(jié)   &

21、#160;  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():從指定容器刪除指定位置的元素或某段范圍內的元素 vector:erase()方法有兩種重載形式 如下: iterator erase(   iterator _Where); iterator erase(   iterator _First,   iterat

溫馨提示

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

評論

0/150

提交評論