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定義的變量在內存中並沒有拷貝,因爲所有的預處理指令都在預處理時進行了替換。
解答:
在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;
代碼截圖:
問:計算機系統中判別是否有中斷事件發生應是在()
答:應該發生在執行完一條指令後。
問:某系統中有 3 個併發進程,都需要同類資源 4 個,試問該系統不會發生死鎖的最少資源數是:
答:注意極限情況問題,極限情況是每個併發進程都已經有了三個資源,此時一共有9個,那麼只需要再有一個資源就可以使一個進程完成操作任務,釋放資源之後循環。所以需要的最少資源數是 10 個。
問:下面有關共享內存,說法不正確的是?
答:共享內存不提供同步 參考 JMM java內存模型
儘管每個進程都有自己的內存地址,不同的進程可以同時將同一個內存頁面映射到自己的地址空間中,從而達到共享內存的目的。(這句話是正確的)