網易TTT計劃(cc語音)2015年春季筆試題目(回顧版本)但願對準備網易校招的同窗有幫助

本文原文連接:http://www.shadowtrees.com/blog_detail/?id=28
如需轉載請到原文評論註明。

Mark-Down


筆試地點:廣州中山大學

題型:4個大題,考試時間2個小時


我去的時候一堆北大和中大的,倍感壓力,不過這份題出的真心有水平。。。我真心不是偷題的,我認認真真把會作的作了,纔有印象回來寫這個回顧的,也當是查缺補漏了。java

1、選擇題(順序不計)

1.sizeof計算字節是在何時?python

答:編譯時

2.請問下列哪本書最厚(這題我也是醉了)
A.c++ prime
B.Head First
C.Effective c++
D.windows內核編程linux

答:應該是c吧  = =其餘c++幾本都挺厚

3.Linux哪一個命令是。。。記不得題目了,反正是這幾個命令:c++

cat 顯示整個文件
more 以百分比形式查看文件(會分頁)
less 和more差很少
head 從文件頭開始查看
tail 尾開始查看文件

4.一個盒子裏有5個顏色的小球,小球視爲無限多,每一個人一次能夠從裏面拿出2個來,那麼問:能夠最多多少人來拿小球,能夠保證有兩我的拿出來的球中有相同顏色?git

答:應該是6吧,考慮前五我的拿出的每一對都是一樣顏色
(例:A:紅紅 B:黃黃 C:綠綠 D:白白  E:藍藍   那麼第六我的,
無論拿到什麼顏色都會和其中一我的有一樣顏色)

5.死鎖是如何產生的?github

答:是指兩個或兩個以上的進程在執行過程當中,
因爲競爭資源或者因爲彼此通訊而形成的一種阻塞的現象,
若無外力做用,它們都將沒法推動下去。此時稱系統處於死鎖狀態
或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。
(等待~關鍵詞)

6.我有20塊錢,若是一瓶可樂1塊(好便宜= =),兩個空瓶子能夠換1瓶新可樂,那麼請問你最多能夠喝到多少瓶?web

答:20——>10——>5——>2——>1(這些是兌換的過程)38瓶,
而後5——>2時手頭上有一個多的空瓶子,加上最後喝的一瓶能夠換多一瓶 +1,
因此是最多39瓶。

7.棧和隊列有什麼共同點?面試

答:只容許在端點處刪除或插入的順序表。
堆和隊列都是先進先出,棧是先進後出。

還有3題不太記得了。。不過能夠能看出,這些知識點考察的基本都是最基礎的知識點算法

2、填空題

1.冒泡排序法的時間複雜度數據庫

答:O(n^2)

2.如何用程序判斷一個float類型變量x是否是爲0

答:這題當時沒想到,好像直接用了個if去判斷= =,後來以爲本身好sb啊。

if(x>0.0000000 && x< -0.0000000) printf("x是0")

3.在執行main函數以前,編譯器會運行什麼代碼?

答:
(1)設置棧指針
(2)初始化static靜態和global全局變量,即data段的內容
(3)將未初始化部分的全局變量賦初值
(4)運行全局構造器,估計是C++中構造函數之類的吧
(5)將main函數的參數,argc,argv等傳遞給main函數,而後才真正運行main函數
(網上google下,有人說是start函數)

4.結構struct定義時默認其成員是_____,類class定義時默認成員爲_____.

默認的訪問權限不一樣。struct默認爲public ,class默認爲private;
默認的繼承權限不一樣。struct的繼承默認爲public繼承,class的繼承默認爲private繼承。

5.TCP在請求鏈接時進行__次握手,斷開時是__次揮手。

答:3 ,4

6.下列IP地址的書寫格式正確嗎?爲何?

(1)162.21.045.22   對
(2)142.23.274.13   錯,子網號不可能大於255
(3)168.51.233.25.55   錯,主機號以後沒東西了,ip是32 位的只有4段
(4)10001111.41.235.12  錯,ip地址要不純用2進制,要不純用十進制,
能夠用ping來檢測該ip無效

3、簡答題

1.簡述事務的四個特性

事務是控制併發的單位,用戶定義操做的一個序列。
A:原子性(Atomicity)
事務是數據庫的邏輯工做單位,事務中包括的諸操做要麼全作,要麼全不作。
B:一致性(Consistency)
事務執行的結果必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。
一致性與原子性是密切相關的。
C:隔離性(Isolation)
一個事務的執行不能被其餘事務干擾。
D:持續性/永久性(Durability)
一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。

2.DDos是什麼?

分佈式拒絕服務(DDoS:Distributed Denial of Service)攻擊指藉助於
客戶/服務器技術,將多個計算機聯合起來做爲攻擊平臺,對一個或多個目標發動
DDoS攻擊,從而成倍地提升拒絕服務攻擊的威力。

3.用SQL語句編程,有A,B,C三個列,若是A比B大,那麼輸出A,若是B比C大輸出B(不太記得了,也不知道這個題目是什麼意思。。。)

4.請簡述淺拷貝與深拷貝,c++中的拷貝構造函數是什麼拷貝?

在有指針的狀況下,淺拷貝只是增長了一個指針指向已經存在的內存,而深拷貝就是
增長一個指針而且申請一個新的內存,使這個增長的指針指向這個新的內存,採用深
拷貝的狀況下,釋放內存的時候就不會出如今淺拷貝時重複釋放同一內存的錯誤!

固然是深拷貝。

5.當你在瀏覽器輸入cc.163.com ,瀏覽器會打開網易cc語音的主頁,請問這個過程計算機作了些什麼?

(這個就是web的工做原理,扯了一堆分層、TCP三次握手之類的東西)
具體能夠參考《按下google.com時實際發生了什麼》:

https://github.com/skyline75489/what-happens-when-zh_CN

6.Linux哪一個命令是查看當前進程

ps查看進程。
最經常使用的方法是ps aux,而後再經過管道使用grep命令過濾查找特定的進程,
而後再對特定的進程進行操做。
crond是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程。

7.如何編程判斷CPU是大端仍是小端?

答:明白大端和小端的區別,實現起來就很是簡單:

Big-endian是一種大值的一端(序列中更典型值)存在前面(在最小的存儲地址)
的順序。Little-endian是一種小值的一端(序列中較不典型的值)存儲在前的
順序。好比,在Big-endian的電腦中,須要兩個字節把十六位數4F52看成4F52
存在存儲器中(若是4F存在存儲地址1000中,好比說,52將存在1001中)。
在little-endian系統裏,將被存爲524F(52存在存儲地址1000中,好比說,
4F將存在1001中)。
#include <stdio.h>  
int main()  
{
    union ut{  
    short s;  
    char c[2];  
}u;
  
if(sizeof(short) == 2)  
{  
    u.s = 0x0102;  
    if(u.c[0] == 1 && u.c[1] == 2){  
        printf("big enidan/n");
    }
else if(u.c[0] == 2 && u.c[1] == 1){  
    printf("little endian./n");  
  }  
    return 0;  
 }  
}

4、編程題(重頭戲)

一、學校有個教務系統,裏面有三個表

Student(sno,sname,sex,grade,class)
Teacher(tno,tcourse,tname)
Course(cno,cname,ctime)

用SQL語句做答:
(1)找出選了「計算機編程」課程的同窗名字和學號。
(2)找出和「譚維維」同窗有關的全部課程
(3)(不太記得了)

二、編寫一個簡單函數add(a,b) ,目的爲了計算a和b的和。
條件:已知a和b都爲正整數,不考慮溢出,若a的百位數字爲0,那麼函數直接輸出0;反之則計算兩個數的和;例如(a=1001,b=31,那麼直接輸出0; a=123,b=2,輸出125)

答:我當時想的比較複雜。。。

正解:直接用a除以100,再%10:      即(a/100)%10==0

3.寫出堆排序的僞代碼(若是能夠寫代碼,能夠用本身喜歡的語言)
PS:這份卷子能夠用c++、java、c或者python寫

void HeapAdjust(int array[],int i,int nLength)
{
    int nChild;
    int nTemp;
    for(;2*i+1<nLength;i=nChild)
    {
        //子結點的位置=2*(父結點位置)+1
        nChild=2*i+1;
        //獲得子結點中較大的結點
        if(nChild<nLength-1&&array[nChild+1]>array[nChild])++nChild;
        //若是較大的子結點大於父結點那麼把較大的子結點往上移動,替換它的父結點
        if(array[i]<array[nChild])
        {
            nTemp=array[i];
            array[i]=array[nChild];
            array[nChild]=nTemp; 
        }
        else break; //不然退出循環
    }
}
//堆排序算法
void HeapSort(int array[],int length)
{
    int i;
    //調整序列的前半部分元素,調整完以後第一個元素是序列的最大的元素
    //length/2-1是最後一個非葉節點,此處"/"爲整除
    for(i=length/2-1;i>=0;--i)
    HeapAdjust(array,i,length);
    //從最後一個元素開始對序列進行調整,不斷的縮小調整的範圍直到第一個元素
    for(i=length-1;i>0;--i)
    {
        //把第一個元素和當前的最後一個元素交換,
        //保證當前的最後一個位置的元素都是在如今的這個序列之中最大的
        array[i]=array[0]^array[i];
        array[0]=array[0]^array[i];
        array[i]=array[0]^array[i];
        //不斷縮小調整heap的範圍,每一次調整完畢保證第一個元素是當前序列的最大值
        HeapAdjust(array,0,i);
    }
}
int main()
{
    int i;
    int num[]={9,8,7,6,5,4,3,2,1,0};
    HeapSort(num,sizeof(num)/sizeof(int));
    for(i=0;i<sizeof(num)/sizeof(int);i++)
    {
        printf("%d ",num[i]);
    }
    printf("\nok\n");
    return 0;
}

四、(壓軸)滑雪問題(動態規劃)
大概就是說,例如給你一個二維數組,aryR ,好比 R=5,C=5,裏面的元素是從1到R*C的,也就是1到25都有,並且只會出現一次。
eg:
INPUT: R=5,C=5 ,以及二維數組每個元素(任意導入的,多是亂序,可是最大數確定是R*C,最小是1),以下:

1    4    5    6    10
2    3    7    8    13
15   25   20   23   24
21   9    11   14   12
19   18   17   16   22

OUTPUT:(輸出該數組的最大滑雪落差)
25
編寫程序,輸入滑雪的「地圖」,給出該地圖的最大滑雪落差。

分析:
其實,你能夠把上面這個例子的數組這個樣子看做是從上到下的俯視圖(海拔圖),
每個數視爲一個點,數值便是這個點的高度,好比20這個點,上有7,
下有11,左是25,右邊是23
若是你要「從20這麼高滑雪衝下去」那麼確定要找個比20要低的點吧,
題目規定,你只能從一個點滑倒上下左右四個點的其中一個。例如20,
你只能選擇滑到7或者11,那麼,例如你滑到了7那麼「高」,那麼你能夠
繼續「往下滑」,就是滑倒3,3再到2,2再到1;那麼最大滑雪落差就是
20-1+1=19+1=20  (由於你在1後要回到地面,默認+1)
本例子的25就是這樣來的:25--->15--->2--->1

(注意:不必定是從最大數值那個高度滑下來能夠到達最大落差,由於你可能到了某一個點就沒有辦法繼續「往下」了)
例如:這是個8行 8列的二維數組,若是你選了最大值64,那麼你會發現,64滑倒鄰點的高度差明顯不是最大的。最大的高度差是63--->7--->1

45  52  3    4   22  8   51  13
64  48  56   1   12  9   41  19
4   3   59   63  7   11  15   2

答:考慮動態規劃

總結:這份試卷主要考察了操做系統,c++,SQl,Linux,計算機等基礎知識,不能說難。可是考察的很全面,就算不進面試。也算學到東西了,最後舍友進了面試,拿了offer後和我一塊兒去了鵝腸

相關文章
相關標籤/搜索