轉自:http://www.cnblogs.com/xiaoxuetu/archive/2013/04/20/3032811.html
下面是我在參加2013年騰訊實習生招聘的筆試題目,當然啦,我個人不可能是完全的記住所有題目,部分是摘自網絡的。同時,下面也有一些題目我不會的,希望大家一起商量解決給以答案,謝謝。


答案:C
考點:有符号數和無符号數之間的轉換
解析:
将0xe0轉換成二進制是1110 0000,因為0xe0的最高位是1,是以作為有符号數的時候就是負數,作為無符号數的時候就是正數,是以A選項是錯的,同時B也是錯誤的。
負數的高位用1補齊,正數的高位用0補齊,是以b(0xe0)的二進制表示形式是1111 1111 1111 1111 1111 1111 1110 0000,十六進制的表示形式是0xffffffe0。


答案:A
考點:C++的細節掌握。
A是肯定對的,因為他有一個預設值。
B選項是錯誤的。因為f() 傳回的是一個臨時量,然後傳給 g 函數,而 g 的參數不是const 引用,是不能引用臨時量的。
C選項是錯誤的。因為a 是一個位址常量,不可能再被指派。
D選項是錯誤的。因為"abc" 的類型可是 const char* 呢,是個常量指針(可以用來初始化 string)。(對這題我有點疑問,因為我不是學C++的,是以希望讀者看到可以幫我解答一下,謝謝)
考點:C++數組的指針表示形式的掌握
A. a+sizeof(int) 選項不正确,假設在32位機器上,sizeof(int)的值為4,而a+sizeof(int) 相當于指針運算 a + 4,也就是a[4]
B. &a[0]+1選項正确,因為 &a[0]的意思是取的數組首元素位址,而數組首元素位址加1(a + 1),根據指針運算就是a[1]的位址
C. (int*)&a+1選項正确,因為數組位址被強制類型轉換為int*,然後加1,這樣和B表示的一個意思
D.(int*)((char*)&a+sizeof(int))選項正确,因為資料位址先被轉換為char*,然後加4,根據指針運算公式,向前移動4 * sizeof(char),之後被轉換為int*,顯然是a[1]的位址


解析:其實,在做這一題的時候,我是當成Java來做的,呵呵
根據C語言中的特性和定義p是一個局部變量,而C語言中局部變量存在于棧中,"hello wrold"是一個字元串字面常量,是以存儲于程式的隻讀存儲區中,p在這裡其實隻是指向了"hello wrold"在隻讀存儲區中的位址而已
答案:B
A選項是錯誤的,因為數組可以直接通過下标得到存儲的值 是以支援随機;而通路連結清單是鍊式存儲結構時無法支援随機通路,要通路一個指定位置的元素必須從頭開始做指針移動
B選項是正确的,因為數組的插入如果位置在最後面的話可以為O(1),删除的時候,直接通過下标指定要删除哪個即可,是以也可以為O(1)
C選項是錯誤的,因為哈希表支援直接通過關鍵碼得到值 其實數組就是一種哈希表 下标就是關鍵碼 通過下标直接得到值 是以哈希表肯定需要做範圍檢查也有辦法做範圍檢查的
D選項是錯誤的,這個不用解釋啦,哈哈^_^
答案:C
解析:其實大家記住這個結論就好,在目前計算機科學界對于基于比較的排序最快隻是O(n*logn),例如快速排序,堆排序,歸并排序
答案:BCD
解析:大家要知道 C語言中的 ++ 和 += 并不是原子操作,而是通過多條微程式組成的,是以 ++ 和 += 在執行過程中可能被中斷的
第一種可能情況:現在假設兩個線程沒有并行順序執行的那麼結果顯然是 4。
第二種可能情況:再假設現在第一個n++ 已經執行完了 但是結果還沒有寫回記憶體 這個時候 n+=2 已經全部執行完 2 寫進了記憶體 結束 然後回到n++的寫回操作 這個時候記憶體就從2被改回1了,後面再來一次n++ 結果就為2。
第三種可能情況: 第n+=2 先讀取n的值到寄存器 即0入寄存器 這個時候被中斷 第一個n++開始執行 并直到結束 記憶體被改成了1 ,然後 n+=2 繼續執行 結束後記憶體變為2 第二個n++再執行 結果就是3了
我個人看了網上的這個解析後也覺得,肯定不可能為1了。
答案: AB
解析:
fopen是打開檔案的函數,檔案也可以看成是一個裝置,打開一個裝置将導緻給裝置所屬的驅動程式發送一個IRP,而與真實硬體相關的驅動程式都運作于核心
exit函數是結束程序的函數,結束程序需要通路PCB(程序控制塊)和TCB(線程控制塊)等等一些資料結構,而這些資料都存在于核心中
memcpy 和 strlen 我們可以直接不調用任意函數寫出來這種函數肯定不會實作在核心的
答案:ABCD
考點:作業系統,剛剛學,好興奮這題當時做的,一秒鐘都不用瞬間選擇了【偷笑】
解析:互斥條件,請求和保持,不可剝奪 ,循環等待,這些都可能導緻發生死鎖,是以以後大家在做多線程程式時一定要注意了。
答案:AD
考點:作業系統
解析:今天下午認真看了下課本,溫故了下知識,關于這題,得出以下幾個解釋,詳細的我就不說啦,大家自己看書,我大概說下基本的。
1.頁面調入:是給頁面調入記憶體中,給它配置設定實體記憶體
2.頁面置換,就是将記憶體中的頁面置換出來,放到虛拟記憶體中,讓實體記憶體空閑出來,讓給需要使用的頁面。
3.LRU:全稱是:Least Recently Used(最近最久未使用)置換算法,是以這個算法涉及到了虛拟記憶體的配置設定和實體記憶體的釋放。是以答案是AD。
答案:D
答案:adecbhgf
解析:根據先序周遊和中序周遊,我們可以建構一顆二叉樹:


解析:因為long long 是8個位元組的,%d是4個位元組的,溢出覆寫了後面,然後又是小端規則的。
【傳入參數,由右往左,棧空間記憶體從高往低,little endian, 棧空間如下:
記憶體高位->
00000000 00000011
00000000 [00000010](c)
[00000000](b) [00000001](a)
<-記憶體低位


答案:。。。不會,我當時蒙的,好像選的是E。。。
解析:不會,自然解析不了。。。
答案:網上說答案是C,我也不是很清楚。。
内聚就是一個子產品内各個元素彼此結合的緊密程度,高内聚就是一個子產品内各個元素彼此結合的緊密程度高。所謂高内聚是指一個軟體子產品是由相關性很強的代碼組成,隻負責一項任務,也就是常說的單一責任原則。
耦合:一個軟體結構内不同子產品之間互連程度的度量(耦合性也 叫塊間聯系。指軟體系統結構中各子產品間互相聯系緊密程度的一種度量。子產品之間聯系越緊密,其耦合性就越強,子產品的獨立性則越差,子產品間耦合的高低取決于模 塊間接口的複雜性,調用的方式以及傳遞的資訊。) 對于低耦合,粗淺的了解是:一個完整的系統,子產品與子產品之間,盡可能的使其獨立存在。也就是說,讓每個子產品,盡可能的獨立完成某個特定的子功能。子產品與模 塊之間的接口,盡量的少而簡單。如果某兩個子產品間的關系比較複雜的話,最好首先考慮進一步的子產品劃分。這樣有利于修改群組合.
答案:忘記選項了,網上也找不到,大家知道有考這個知識點就好啦。。。
解析:百度了一下,TCP協定棧的定時器有延時定時器,重傳定時器,堅持定時器,保活定時器
答案:依次是:實體層,鍊路層,傳輸層
答案:0
unsigned int是 4 個位元組,0x1234 的完整表示是 0x 00 00 12 34,因為是 big endian,是以,是以 &(取位址) 的話,如果當位元組看的話,取到了最左邊 00 位元組的位址,一定要轉換成 char 看的話,值就是 0。
答案:400
解析:畫圖舉例子很容易就可以推導出規律,通過這個公式即可計算得400


答案:return *(a+i*N+j);
解析:大家注意原型中的指針是int* a,是以必須用二維數組在記憶體中是一維排布這個知識點來做,直接 return *(a+i*N+j);而不是 return *(*(a+i)+j);


答案:第一個空: j>=0 && p[j>tmp 第二個空:p[j+1] = tmp;
解析:看看資料結構的課本就有啦,呵呵
考點:作業系統
解析:M=3時:一開始是空的,是以4,3,2都頁面失效。失效三次,然後4,4,3都有效,5失效一次,4先進來的是以先出去,變為 3,2,5,然後4又失效一次,3出去,變為2,5,4,以此類推。就是先進來的先出去。最後加起來一共9次。M=4的也一樣。隻是能多存一個頁。
答案:不會。。。
參考網站:
本文轉自夏雪冬日部落格園部落格,原文連結:http://www.cnblogs.com/heyonggang/archive/2013/05/14/3077672.html,如需轉載請自行聯系原作者