網易遊戲11年校招題

1 對於一個內存地址是32位、內存頁是8KB的系統。0x0005F123這個地址的頁號與頁內偏移分別是多少?

頁號爲:0x0005F123 >> 13位 = 0x2E 頁內偏移爲原地址的低13位:0x1123。

2 如果X大於0並小於65536,用移位法計算X乘以255的值? (x<<8)-x;  //移位運算符的優先級小於減號運算符,因此要加括號

3 一個包含n個節點的四叉樹,每個節點都有四個指向孩子節點的指針,這4n個指針中有多少個空指針? (3n+1)

4 以下兩個語句的區別是:

	int *p1 = new int[10];
	int *p2 = new int[10]();
第一個沒有初始化,第二個會調用構造函數初始化,即數組元素都爲0.

5 計算機在內存中存儲數據時使用了大、小端模式,請分別寫出A=0X123456在不同情況下的首字節是,大端模式:0x12; 小端模式:0x56.
PS:該題不夠嚴謹,大端模式爲0x00.

6 請聲明一個參數爲int *,返回值爲int的函數指針: int (*func)(int *);

7 下面程序運行後的結果爲:to test something //p1++時移動了4個字節

    char str[] = "glad to test something";  
    char *p = str;  
    p++;  
    int *p1 = static_cast<int *>(p);  
    p1++;  
    p = static_cast<char *>(p1);  
    printf("result is %s\n",p);  

8 你見到一個寶箱,身上有N把鑰匙,其中一把可以打開寶箱,假如沒有任何提示,隨機嘗試,問:數學題
(1)恰好第K次(1=<K<=N)打開寶箱的概率是多少? 1/n
(2)平均需要嘗試多少次? (n+1)/2
9 頭文件中ifndef / define / endif 是做什麼用的?

都是預編譯命令,作用是防止該頭文件被重複引用,避免變量、類型等被重新定義。

10 代碼裏有時可以看到extern “C”,這語句是做什麼用的?

本質作用是:實現C和C++的混合編程。原理是C++和C編譯全局變量和函數的實現方式不同。實際用法有兩個:

1)在C++中調用C語言寫的函數。 2)C程序調用C++編寫的函數。

11 在下列乘法算式中,每個字母代表0~9的一個數字,而且不同的字母代表不同的數字:寫出推導的過程。

 ABCDEFGH
*         AJ
------------------
EJAHFDGKC
BDFHAJEC
------------------
CCCCCCCCC

大致過程是:首先通過觀察可得K=0,然後通過AB * A = BD,AB * J = EJ,可推測A = 2,E=1, B=4,之後就簡單了。

答案是:A=2、B=4、C=6、D=9、E=1、F=3、G=5、H=8、J=7、K=0


參考來源: http://blog.csdn.net/hackbuteer1/article/details/6878570

http://www.cnblogs.com/xulei/archive/2006/11/12/558139.html





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