騰訊2012實習生筆試題2+答案解析

1、計算表達式x6+4x4+2x3+x+1最少需要做()次乘法

A、3                 B、4                  C、5                       D、6

 

2、給定3個int類型的正整數x,y,z,對如下4組表達式判斷正確的選項()

int a1=x+y-z; int b1=x*y/z;

int a2=x-z+y; int b2=x/z*y;

int c1=x<<y>>z; int d1=x&y|z;

int c2=x>>z<<y; int d2=x|z&y;

A、a1一定等於a2

B、b1一定定於b2

C、c1一定等於c2

D、d1一定等於d2

 

3、程序的完整編譯過程分爲是:預處理,編譯,彙編等,如下關於編譯階段的編譯優化的說法中不正確的是()

A、死代碼刪除指的是編譯過程直接拋棄掉被註釋的代碼;

B、函數內聯可以避免函數調用中壓棧和退棧的開銷

C、For循環的循環控制變量通常很適合調度到寄存器訪問

D、強度削弱是指執行時間較短的指令等價的替代執行時間較長的指令

 

4、如下關於進程的描述不正確的是()

A、進程在退出時會自動關閉自己打開的所有文件

B、進程在退出時會自動關閉自己打開的網絡鏈接

C、進程在退出時會自動銷燬自己創建的所有線程

D、進程在退出時會自動銷燬自己打開的共享內存

 

5、在如下8*6的矩陣中,請計算從A移動到B一共有多少種走法?要求每次只能向上揮着向右移動一格,並且不能經過P; 

A、492

B、494

C、496

D、498

 

6、SQL語言中刪除一個表的指令是()

A、DROP TABLE

B、DELETE TABLE

C、DESTROY TABLE

D、REMOVE TABLE

 

7、某產品團隊由美術組、產品組、client程序組和server程序組4個小組構成,每次構建一套完整的版本時,需要各個組發佈如下資源。美術組想客戶端提供圖像資源(需要10分鐘),產品組向client組合server提供文字內容資源(同時進行,10分鐘),server和client源代碼放置在不同工作站上,其完整編譯時間均爲10分鐘切編譯過程不依賴於任何資源,client程序(不包含任何資源)在編譯完畢後還需要完成對程序的統一加密過程(10分鐘)。可以請問,從要完成一次版本構建(client與server的版本代碼與資源齊備),至少需要多少時間()

A、60分鐘

B、40分鐘

C、30分鐘

D、20分鐘

 

8、如下關於編譯鏈接的說法錯誤的是()

A、編譯優化會使得編譯速度變慢

B、預編譯頭文件可以優化程序的性能

C、靜態鏈接會使得可執行文件偏大

D、動態鏈接庫會使進程啓動速度偏慢

 

9、如下關於鏈接的說法錯誤的是()

A、一個靜態庫中不能包含兩個同名全局函數的定義

B、一個動態庫中不能包含兩個同名全局函數的定義

C、如果兩個靜態庫都包含一個同名全局函數,他們不能同時被鏈接

D、如果兩個動態庫都包含一個同名全局函數,他們不能同時被鏈接

 

10、排序算法的穩定是指,關鍵碼相同的記錄排序前後相對位置不發生改變,下面哪種排序算法是不穩定的()

A、插入排序

B、冒泡排序

C、快速排序

D、歸併排序

 

11、下列說法中錯誤的是:()

A、插入排序某些情況下複雜度爲O(n)

B、排序二叉樹元素查找的複雜度可能爲O(n)

C、對於有序列表的排序最快的是快速排序

D、在有序列表中通過二分查找的複雜度一定是O(n log2n)

 

12、在程序設計中,要對兩個16K×16K的多精度浮點數二維數組進行矩陣求和時,行優先讀取和列優先讀取的區別是()

A、沒區別

B、行優先快

C、列優先快

D、2種讀取方式速度爲隨機值,無法判斷

 

13、字符串www.qq.com所有非空子串(兩個子串如果內容相同則只算一個)個數是()

A、1024

B、1018

C、55

D、50

 

14、TCP的關閉過程,說法正確的是()

A、TIME_WAIT狀態稱爲MSL(Maximum Segment Lifetime)等待狀態

B、對一個established狀態的TCP連接,在調用shutdown函數之前調用close接口,可以讓主動調用的一方進入半關閉狀態

C、主動發送FIN消息的連接端,收到對方迴應ack之前不能發只能收,在收到對方回覆ack之後不能發也不能收,進入CLOSING狀態

D、在已經成功建立連接的TCP連接上,如果一端收到RST消息可以讓TCP的連潔端繞過半關閉狀態並允許丟失數據。

 

15、操作系統的一些特別端口要爲特定的服務做預留,必須要root權限才能打開的端口描述正確的是()

A、端口號在64512-65535之間的端口

B、所有小於1024的每個端口

C、RFC標準文檔中已經聲明特定服務的相關端口,例如http服務的80端口,8080端口等

D、所有端口都可以不受權限限制打開

 

16、找工作的季節馬上就到了,很多同學去圖書館借閱《面試寶典》這本書,現在圖書館外有6名同學排隊,其中3名同學要將手中的《面試寶典》還至圖書館,有3名同學希望從圖書館中可以借到《面試寶典》,若當前圖書館內已無庫存《面試寶典》,要保證借書的3名同學可以借到書,請問這6位同學有多少種排隊方式()

A)60

B)120

C)180

D)360

二、填空題

1、除了10進制、2進制之外,16進制表達式在計算機領域中也經常使用(例如各種字符集的定義描述),下式:(2012)10+(AF1)16的結果是(     )(請用10進製表示)。

 

2、ack(3 , 3)的執行結果是多少?

  1. int ack(int m,int n) 
  2.     if(m == 0) 
  3.         return n + 1; 
  4.     else if(n == 0) 
  5.         return ack(m-1,1); 
  6.     else 
  7.         return ack(m - 1 , ack(m , n-1)); 

 

3、某互聯網產品(例如,一款網絡遊戲)同時在線曲線(Average Concurrency Users,ACU)24小時數據如下圖所示。現已知全天平均在線人數爲5000人,玩家每次登陸後平均在線時長爲2小時。請你估計一下,平均下來每分鐘約有(         )個玩家登錄。

 

 

4、如下SQL語句是需要列出一個論壇版面第一頁(每頁顯示20個)的帖子(post)標題(title),並按照發布(create_time)降序排列:

SELECT title FROM post( )create_time DESC( )0,20

 

5、爲了某項目需要,我們準備構造了一種面向對象的腳本語言,例如,對所有的整數,我們都通過Integer類型的對象來描述。在計算“1+2”時,這裏的“1”,“2”和結果“3”分別爲一個Integer對象。爲了降低設計複雜度,我們決定讓Integer對象都是隻讀對象,也即在計算a=a+b後,對象a引用的是一個新的對象,而非改a所指對象的值。考慮到性能問題,我們又引入兩種優化方案:(1)對於數值相等的Integer對象,我們不會重複創建。例如,計算“1+1”,這裏兩個“1”的引用的是同一個對象——這種設計模式叫做();(2)腳本語言解析器啓動時,默認創建數值範圍[1,32]的32個Integer對象。現在,假設我們要計算表達式“1+2+3+…+40”,在計算過程需要創建的Integer對象個數是()。

 

6、甲、乙兩個人在玩猜數字遊戲,甲隨機寫了一個數字,在[1,100]區間之內,將這個數字寫在了一張紙上,然後乙來猜。
如果乙猜的數字偏小的話,甲會提示:“數字偏小”
一旦乙猜的數字偏大的話,甲以後就再也不會提示了,只會回答“猜對 或 猜錯”
問: 乙至少猜       多少次  猜可以準確猜出這個數字,在這種策略下,  乙猜的第一個數字是     

 

7、仔細閱讀以下函數

Int fuc(int m,int n)

{

if(m%n)==0

{

return n;

}

else

{

       return fuc(n,m%n)

}

}

 

請問func(2012,2102)的結果是(              )。

 

加分題:

1、給定一個數組a[N],我們希望構造數組b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。在構造過程:
不允許使用除法;
要求O(1)空間複雜度和O(n)時間複雜度;
除遍歷計數器與a[N] b[N]外,不可使用新的變量(包括棧臨時變量、對空間和全局靜態變量等);
請用程序實現並簡單描述。

 

2、20世紀60年代,美國心理學家米爾格蘭姆設計了一個連鎖信件實驗。米爾格蘭姆把信隨即發送給住在美國各城市的一部分居民,信中寫有一個波士頓股票經紀人的名字,並要求每名收信人把這封信寄給自己認爲是比較接近這名股票經紀人的朋友。這位朋友收到信後再把信寄給他認爲更接近這名股票經紀人的朋友。最終,大部分信件都寄到了這名股票經紀人手中,每封信平均經受6.2詞到達。於是,米爾格蘭姆提出六度分割理論,認爲世界上任意兩個人之間建立聯繫最多只需要6個人。

假設QQ號大概有10億個註冊用戶,存儲在一千臺機器上的關係數據庫中,每臺機器存儲一百萬個用戶及其的好友信息,假設用戶的平均好友個數大約爲25人左右。

第一問:請你設計一個方案,儘可能快的計算存儲任意兩個QQ號之間是否六度(好友是1度)可達,並得出這兩位用戶六度可達的話,最短是幾度可達。

第二問:我們希望得到平均每個用戶的n度好友個數,以增加對用戶更多的瞭解,現在如果每臺機器一秒鐘可以返回一千條查詢結果,那麼在10天的時間內,利用給出的硬件條件,可以統計出用戶的最多幾度好友個數?如果希望得到更高的平均n度好友個數,可以怎樣改進方案?

 

3、段頁式虛擬存儲管理方案的特點。

 

 

參考答案(歡迎討論) 轉載請註明來源 http://www.cnblogs.com/jerry19880126/

選擇題:

  1. A。原式=x^2 * (x^4 + 4 * x^2 + 2*x) + x + 1,x^2用一次乘法,x^4看成是(x^2)^2,這樣用掉第二次乘法,外面的x^2 * () 是第三次乘法,所有常係數乘法都展開成連加。
  2. A。一開始覺得A肯定不對,因爲會溢出,但不知道其實正如微機原理課上原的,溢出會有標識位,連加減的時候會考慮到這個標識位的作用,這樣A就對了。
  3. A。死代碼是指永遠不會執行到的代碼,不是註釋,比如if(0){…},大括號裏的就是死代碼。
  4. D。共享內存銷燬了,會對其他正在使用這段內存的進程造成破壞。
  5. A。A走到B共需要12步,其中7步必須向右,5步必須向上,但次序可以不同,因此是C(7,12),要求P不能走,那麼走到P的可能次數是C(3,6),從P走到B的可能次數是C(4,6),因此結果是C(7,12) – C(3,6)*C(4,6)=492。
  6. A。
  7. D。除了加密以外,剩下的事情在第一個10分鐘內可以併發完成。
  8. B
  9. C。
  10. C。快排選主元會打亂原次序。
  11. C。A當數據完全有序時就是O(n),B當數退化成線性表時(只有一叉時)出現,C快排只對無序、隨機序列有優勢。D是對的。
  12. B。
  13. D。長度1的子序列有10-2-1-1=6個,長度2子序列有9-1=8個,長度3有8個,長度4有7個…長度10有1個,加起來就是50。
  14. D。
  15. C。
  16. C。卡特蘭數,C(n,2n)/(n+1),n是入棧元素的個數,這裏n=3,C(3,6)/4=5,同學彼此是不同的,因此要全排列一下,結果爲5*3!*3!=180。

 

填空題:

  1. 4813。
  2. 61。這個有規律的,只要耐心一點就行了,ack(1,x)=2+x,ack(2,x)=3+x*2,ack(3,0)=5,ack(3,1)=ack(3,0)*2+3=13,ack(3,2)=ack(3,1)*2+3=29,ack(3,3)=ack(3,2)*3+2=61。
  3. 不會。
  4. ORDER BY; LIMIT
  5. 享元模式,40。1到7以及他們的和是不用創建的,從8開始,28(是1到7的和)+8=36,36需要創建,36+9=45,45需要創建…依次類推,在加數是32之前(含32)需要創建的對象是32-8+1=25,某數+32=某數之後33至40所表示的加數也要創建,這樣有8個加數 + 8個和,共有16個數需要創建,注意,加數中包含36,這個我們已經創建了,所以有25+8+8-1=40個數的對象需要創建。
  6. 14次,第一次猜測數字爲14。思想是:每次猜大後,嘗試猜測的總次數是相等的。第一次猜測時,在1到100之間選擇某個數N1後,有三種情況,一是直接選中了,這個概率比較小,對研究沒有意義,二是選擇偏大了,這時不再提示了,只能在1至N1-1之間一個一個地選了,三是選擇偏小了,這時還有提示,可以繼續在[N1+1,100]中選擇另外的數N2。可以知道,若第一次就猜錯了,那麼嘗試總次數是N1-1+1=N1次(因爲是在[1,N1-1]之間逐一取值,且N1本身用掉一次),若第一次猜得偏小,但第二次猜大了,嘗試總次數是[N1+1,N2-1]的元素個數加2(加2是N2和N1本身猜用掉一次),即爲N2-N1+1次,根據思想“每次猜錯後,嘗試猜測的總次數相等”,有N1=N2-N1+1,可知N2=2N1-1,增量爲N1-1。類似地,前兩次猜得偏小,但第三次猜大,嘗試總次數爲[N2+1,N3-1]的元素個數加3,即N3-N2+2,那麼有N3-N2+2=N1,N3=N2+N1-2,增量爲N1-2……依此類推,增量是隨着猜測次數的增加而逐1地減少。設最後一次猜測爲k,則Nk=N1+(N1-1)+(N1-2)+…1,Nk是等於或大於100的第一個數,根據等差數列求和公式可以算出N1=14,N2=27,N3=39…(14,27,39,50,60,69,77,84,90,95,99)。
  7. 2。遞歸。

 

加分題:

1、思想是將數組a[j]分成兩部分看,先算其前半部分a[0]…a[j-1],然後再乘以其後半部分a[j+1]…a[N-1]。具體代碼見CPP程序。

數組分割

 

2、不會。

3、不會。參考網友hackbuteer1的答案如下:

答:空間浪費小、存儲共享容易、存儲保護容易、能動態連接。
段頁式管理是段式管理和頁式管理結合而成,兼有段式和頁式管理的優點,每一段分成若干頁,再按頁式管理,頁間不要求連續(能動態連接);用分段方法分配管理作業,用分頁方法分配管理內存(空間浪費小)。

段頁式管理採用二維地址空間,如段號(S)、頁號(P)和頁內單元號(D);系統建兩張表格每一作業一張段表,每一段建立一張頁表,段表指出該段的頁表在內存中的位置;地址變換機構類似頁式機制,只是前面增加一項段號。所以存儲共享容易、存儲保護容易。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章