天天看點

筆試題目記錄

32位機器上,以下結構的sizeof(P)為

struct A {

 int a;

 char b;

 int c;

 char d;

}

struct P {

 struct A w[2];

 short b;

 struct A* p;

} 

           

/*考察結構體對齊和填充:

結構體每個成員相對于結構體首位址的偏移量都是成員大小的整數倍,如果不是,編譯器會自動在成員間填充。*/

- struct A { 
  int a;                            //4 bytes 
  char b;                        //1 bytes 
  //char pad[3]               //3 bytes 

int c;                           //4 bytes

  char d;                       //1 bytes 

  //char pad[3]              //3 bytes 

  }                            // total = 16 bytes 

  

           

/* P中有結構體A的成員,但是計算時按照A中資料類型确定的*/

struct P {

struct A w[2];    // 2 * 16 bytes

  short b;            //2 bytes 

  //char pad[2]    //2 bytes 

struct A* p;      //4 bytes

}  // total = 40 bytes

           

下列關于const和#define定義常量的差別,說法不正确的有?

  • define宏是在預處理階段展開。const常量是編譯運作階段使用
               
  • 宏沒有類型,不做任何類型檢查,僅僅是展開。const常量有具體的類型,在編譯階段會執行類型檢查
               
  • define宏僅僅是展開,有多少地方使用,就展開多少次,不會配置設定記憶體。const常量會在記憶體中配置設定(可以是堆中也可以是棧中)
               
  • const定義和#define定義的常量在程式運作過程中隻有一份拷貝
               

A,正确,#define定義的宏是在預處理階段進行替換的,const常量是在編譯、運作階段進行使用的。

注意是僅僅的字元串替換,并不會檢查其合法性。

預處理階段做了的任務:

1:将頭檔案中的内容(源檔案之外的檔案)插入到源檔案中

2:進行了宏替換的過程(簡單的字元串替換),定義和替換了由#define指令定義的符号

3:删除掉注釋的過程,注釋是不會帶入到編譯階段

4:條件編譯

B,正确,所有的宏替換隻是簡單的字元串替換,注意是字元串替換,是以并不會檢查其合法性,而const定義的常量依然是内置類型等,是以會對其進行類型安全檢查。

C,正确,宏定義在程式中使用了幾次在預處理階段就會被展開幾次,并不會增加記憶體占用,但是宏定義每展開一次,代碼的長度就要發生變化(是以有利必有弊啊!),而const常量也會為其配置設定記憶體(如果是動态申請空間肯定就是堆中了)。

D,錯誤,const定義的常量隻有一次拷貝沒毛病,而define定義的變量在記憶體中并沒有拷貝,因為所有的預處理指令都在預處理時進行了替換。

筆試題目記錄

02.png

解答:

筆試題目記錄

03.png

在TCP/IP中,ICMP屬于哪一層協定?**

答:ICMP協定是IP層的附屬協定,是介于IP層和TCP層之間的協定,一般認為屬于IP層協定。IP協定用它來與其他主機或路由器交換錯誤封包和其他的一些網絡情況。在ICMP包重攜帶了控制資訊和故障恢複資訊。

ICMP封包有兩種類型,即ICMP差錯報告封包和ICMP詢問封包。

設在一棵度數為3的樹中,度數為3的結點數有2個,度數為2的結點數有1個,度數為1的結點數有2個,那麼度數為0的結點數有( )個。

答:根據圖論中樹的公式:頂點數 - 1 = 邊數,設出度為0的結點有y個,列方程求解。其中頂點數為2+1+2+x,邊數為2 x 3+1 x 2+2 x 1。解出來得 y = 6

500張骨牌整齊地排成一行,按順序編号為1、2、3、……、499、500。第一次拿走所有奇數位置上的骨牌,第二次再從剩餘骨牌中拿走奇數位置上的骨牌,以此類推。請問最後剩下的一張骨牌的編号是?

答:

第一次後剩下250個偶數:2,4,6,8......498,500(2的倍數留下,2的一次方)

第二次後剩下125個偶數:4,8,12,16......496,500(4的倍數留下,2的二次方)

第三次後剩下62個偶數:8,16,24....488,496(8的倍數留下,2的三次方)

..........................................................................

第八次後留下的1個偶數:256(2的八次方倍數留下)

是以答案選C

Linux 檔案權限一共 10 位長度,從前數第 5-7 位表示的内容是

答:第一位表示是檔案或者目錄,2~4是使用者權限, 5~7是組權限 ,8~10是其他使用者權限

關于TCP可靠資料傳輸服務的論述,正确的是

A.錯誤。不一定需要逾時才重傳,出錯了也可以重傳;      

B.錯誤。錯在于這個時間間隔不是固定的。逾時時間間隔 RTO,如果太短可能導緻大量不必要的重傳,如果太長則會導緻性能下降;是以逾時時間間隔 RTO是通過往返時間RTT算出來的。TCP 采用了一個高度動态的算法,來不斷的調整時間間隔,總之逾時時間間隔不是固定的~      

C.錯誤。TCP是面向連接配接的,提供可靠服務的,是以需要對亂序到達的分組進行确認以及重排。      

D.正确。如果發送方收到連續3條的同一個序列号的ACK,那麼就會啟動快速重傳機制,不需要等到timeout,把這個ACK對應的發送包重新發送一次。
           

引入二叉線索樹的目的是()

答:加快查找結點的前驅或後繼的速度。

用鄰接表表示圖進行廣度優先周遊時,通常是采用()來實作算法的

答:記得廣度優先用隊列,深度優先用棧。

ava中用正規表達式截取字元串中第一個出現的英文左括号之前的字元串。比如:北京市(海澱區)(朝陽區)(西城區),截取結果為:北京市。正規表達式為()

(?=Expression)

順序肯定環視,表示所在位置右側能夠比對Expression

(?=()*就是比對正括号, 因為(需要轉義, 是以要再前面加斜線

前面的.*?是非貪婪比對的意思, 表示找到最小的這樣的比對即可。

否則, 因為後面也有括号, 會比對到 北京市(海澱區)(朝陽區)

程式設計:今年的第幾天?輸入年,月,日,計算該天是本年的第幾天。

tips:這裡的重點主要就是有關閏年的判斷?在二月的天數 + 1;

代碼截圖:

筆試題目記錄

04.png

問:計算機系統中判别是否有中斷事件發生應是在()

答:應該發生在執行完一條指令後。

問:某系統中有 3 個并發程序,都需要同類資源 4 個,試問該系統不會發生死鎖的最少資源數是:

答:注意極限情況問題,極限情況是每個并發程序都已經有了三個資源,此時一共有9個,那麼隻需要再有一個資源就可以使一個程序完成操作任務,釋放資源之後循環。是以需要的最少資源數是 10 個。

問:下面有關共享記憶體,說法不正确的是?

答:共享記憶體不提供同步 參考 JMM java記憶體模型

盡管每個程序都有自己的記憶體位址,不同的程序可以同時将同一個記憶體頁面映射到自己的位址空間中,進而達到共享記憶體的目的。(這句話是正确的)